[SignalingServer] Optimize dependent modules 27/256927/2 submit/tizen/20210415.095900 submit/tizen/20210415.160019
authorInsoon Kim <is46.kim@samsung.com>
Thu, 15 Apr 2021 01:02:37 +0000 (18:02 -0700)
committerInsoon Kim <is46.kim@samsung.com>
Thu, 15 Apr 2021 02:30:16 +0000 (19:30 -0700)
This reduces node_modules size from 13M to 9.8M

Change-Id: I7de6964204b659dfa6b1c71e4378622772d90b4c
Signed-off-by: Insoon Kim <is46.kim@samsung.com>
1271 files changed:
signaling_server/service/node_modules/.bin/mime [new symlink]
signaling_server/service/node_modules/.bin/qrcode [new symlink]
signaling_server/service/node_modules/accepts/HISTORY.md [moved from signaling_server/service/node_modules/socket.io/node_modules/accepts/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/accepts/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/mime-types/LICENSE with 100% similarity]
signaling_server/service/node_modules/accepts/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/accepts/README.md with 100% similarity]
signaling_server/service/node_modules/accepts/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/accepts/index.js with 100% similarity]
signaling_server/service/node_modules/accepts/package.json [new file with mode: 0644]
signaling_server/service/node_modules/after/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/after/.npmignore with 100% similarity]
signaling_server/service/node_modules/after/.travis.yml [moved from signaling_server/service/node_modules/socket.io/node_modules/after/.travis.yml with 100% similarity]
signaling_server/service/node_modules/after/LICENCE [moved from signaling_server/service/node_modules/socket.io/node_modules/after/LICENCE with 100% similarity]
signaling_server/service/node_modules/after/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/after/README.md with 100% similarity]
signaling_server/service/node_modules/after/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/after/index.js with 100% similarity]
signaling_server/service/node_modules/after/package.json [new file with mode: 0644]
signaling_server/service/node_modules/after/test/after-test.js [moved from signaling_server/service/node_modules/socket.io/node_modules/after/test/after-test.js with 100% similarity]
signaling_server/service/node_modules/ansi-regex/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/ansi-regex/index.js with 100% similarity]
signaling_server/service/node_modules/ansi-regex/license [moved from signaling_server/service/node_modules/qrcode/node_modules/wrap-ansi/license with 100% similarity]
signaling_server/service/node_modules/ansi-regex/package.json [new file with mode: 0644]
signaling_server/service/node_modules/ansi-regex/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/ansi-regex/readme.md with 100% similarity]
signaling_server/service/node_modules/ansi-styles/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/ansi-styles/index.js with 100% similarity]
signaling_server/service/node_modules/ansi-styles/license [moved from signaling_server/service/node_modules/qrcode/node_modules/strip-ansi/license with 100% similarity]
signaling_server/service/node_modules/ansi-styles/package.json [new file with mode: 0644]
signaling_server/service/node_modules/ansi-styles/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/ansi-styles/readme.md with 100% similarity]
signaling_server/service/node_modules/array-flatten/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/path-to-regexp/LICENSE with 100% similarity]
signaling_server/service/node_modules/array-flatten/README.md [moved from signaling_server/service/node_modules/express/node_modules/array-flatten/README.md with 100% similarity]
signaling_server/service/node_modules/array-flatten/array-flatten.js [moved from signaling_server/service/node_modules/express/node_modules/array-flatten/array-flatten.js with 100% similarity]
signaling_server/service/node_modules/array-flatten/package.json [new file with mode: 0644]
signaling_server/service/node_modules/arraybuffer.slice/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/arraybuffer.slice/.npmignore with 100% similarity]
signaling_server/service/node_modules/arraybuffer.slice/LICENCE [moved from signaling_server/service/node_modules/socket.io/node_modules/arraybuffer.slice/LICENCE with 100% similarity]
signaling_server/service/node_modules/arraybuffer.slice/Makefile [moved from signaling_server/service/node_modules/socket.io/node_modules/arraybuffer.slice/Makefile with 100% similarity]
signaling_server/service/node_modules/arraybuffer.slice/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/arraybuffer.slice/README.md with 100% similarity]
signaling_server/service/node_modules/arraybuffer.slice/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/arraybuffer.slice/index.js with 100% similarity]
signaling_server/service/node_modules/arraybuffer.slice/package.json [new file with mode: 0644]
signaling_server/service/node_modules/arraybuffer.slice/test/slice-buffer.js [moved from signaling_server/service/node_modules/socket.io/node_modules/arraybuffer.slice/test/slice-buffer.js with 100% similarity]
signaling_server/service/node_modules/backo2/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/backo2/.npmignore with 100% similarity]
signaling_server/service/node_modules/backo2/History.md [moved from signaling_server/service/node_modules/socket.io/node_modules/backo2/History.md with 100% similarity]
signaling_server/service/node_modules/backo2/Makefile [moved from signaling_server/service/node_modules/socket.io/node_modules/backo2/Makefile with 100% similarity]
signaling_server/service/node_modules/backo2/Readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/backo2/Readme.md with 100% similarity]
signaling_server/service/node_modules/backo2/component.json [moved from signaling_server/service/node_modules/socket.io/node_modules/backo2/component.json with 100% similarity]
signaling_server/service/node_modules/backo2/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/backo2/index.js with 100% similarity]
signaling_server/service/node_modules/backo2/package.json [new file with mode: 0644]
signaling_server/service/node_modules/backo2/test/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/backo2/test/index.js with 100% similarity]
signaling_server/service/node_modules/base64-arraybuffer/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/.npmignore with 100% similarity]
signaling_server/service/node_modules/base64-arraybuffer/.travis.yml [moved from signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/.travis.yml with 100% similarity]
signaling_server/service/node_modules/base64-arraybuffer/LICENSE-MIT [moved from signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/LICENSE-MIT with 100% similarity]
signaling_server/service/node_modules/base64-arraybuffer/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/README.md with 100% similarity]
signaling_server/service/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js [new file with mode: 0644]
signaling_server/service/node_modules/base64-arraybuffer/package.json [new file with mode: 0644]
signaling_server/service/node_modules/base64-js/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/base64-js/LICENSE with 100% similarity]
signaling_server/service/node_modules/base64-js/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/base64-js/README.md with 100% similarity]
signaling_server/service/node_modules/base64-js/base64js.min.js [moved from signaling_server/service/node_modules/qrcode/node_modules/base64-js/base64js.min.js with 100% similarity]
signaling_server/service/node_modules/base64-js/index.d.ts [moved from signaling_server/service/node_modules/qrcode/node_modules/base64-js/index.d.ts with 100% similarity]
signaling_server/service/node_modules/base64-js/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/base64-js/index.js with 100% similarity]
signaling_server/service/node_modules/base64-js/package.json [new file with mode: 0644]
signaling_server/service/node_modules/blob/.idea/blob.iml [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/.idea/blob.iml with 100% similarity]
signaling_server/service/node_modules/blob/.idea/inspectionProfiles/profiles_settings.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/.idea/inspectionProfiles/profiles_settings.xml with 100% similarity]
signaling_server/service/node_modules/blob/.idea/markdown-navigator.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/.idea/markdown-navigator.xml with 100% similarity]
signaling_server/service/node_modules/blob/.idea/markdown-navigator/profiles_settings.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/.idea/markdown-navigator/profiles_settings.xml with 100% similarity]
signaling_server/service/node_modules/blob/.idea/modules.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/.idea/modules.xml with 100% similarity]
signaling_server/service/node_modules/blob/.idea/vcs.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/.idea/vcs.xml with 100% similarity]
signaling_server/service/node_modules/blob/.idea/workspace.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/.idea/workspace.xml with 100% similarity]
signaling_server/service/node_modules/blob/.zuul.yml [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/.zuul.yml with 100% similarity]
signaling_server/service/node_modules/blob/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/LICENSE with 100% similarity]
signaling_server/service/node_modules/blob/Makefile [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/Makefile with 100% similarity]
signaling_server/service/node_modules/blob/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/README.md with 100% similarity]
signaling_server/service/node_modules/blob/component.json [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/component.json with 100% similarity]
signaling_server/service/node_modules/blob/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/index.js with 100% similarity]
signaling_server/service/node_modules/blob/package.json [new file with mode: 0644]
signaling_server/service/node_modules/blob/test/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/test/index.js with 100% similarity]
signaling_server/service/node_modules/body-parser/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/body-parser/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/body-parser/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/type-is/LICENSE with 100% similarity]
signaling_server/service/node_modules/body-parser/README.md [moved from signaling_server/service/node_modules/express/node_modules/body-parser/README.md with 100% similarity]
signaling_server/service/node_modules/body-parser/index.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/index.js with 100% similarity]
signaling_server/service/node_modules/body-parser/lib/read.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/lib/read.js with 100% similarity]
signaling_server/service/node_modules/body-parser/lib/types/json.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/lib/types/json.js with 100% similarity]
signaling_server/service/node_modules/body-parser/lib/types/raw.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/lib/types/raw.js with 100% similarity]
signaling_server/service/node_modules/body-parser/lib/types/text.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/lib/types/text.js with 100% similarity]
signaling_server/service/node_modules/body-parser/lib/types/urlencoded.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/lib/types/urlencoded.js with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/.coveralls.yml [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/.coveralls.yml with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/.eslintrc [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/.eslintrc with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/.npmignore with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/.travis.yml [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/.travis.yml with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/CHANGELOG.md [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/LICENSE with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/Makefile [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/Makefile with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/README.md [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/README.md with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/component.json [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/component.json with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/karma.conf.js [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/karma.conf.js with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/node.js [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/node.js with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/package.json [new file with mode: 0644]
signaling_server/service/node_modules/body-parser/node_modules/debug/src/browser.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/src/browser.js with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/src/debug.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/src/debug.js with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/src/index.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/src/index.js with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/src/inspector-log.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/src/inspector-log.js with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/debug/src/node.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/src/node.js with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/ms/index.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/node_modules/ms/index.js with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/ms/license.md [moved from signaling_server/service/node_modules/socket.io/node_modules/ms/license.md with 100% similarity]
signaling_server/service/node_modules/body-parser/node_modules/ms/package.json [new file with mode: 0644]
signaling_server/service/node_modules/body-parser/node_modules/ms/readme.md [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/node_modules/ms/readme.md with 100% similarity]
signaling_server/service/node_modules/body-parser/package.json [new file with mode: 0644]
signaling_server/service/node_modules/buffer-alloc-unsafe/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc-unsafe/index.js with 100% similarity]
signaling_server/service/node_modules/buffer-alloc-unsafe/package.json [new file with mode: 0644]
signaling_server/service/node_modules/buffer-alloc-unsafe/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc-unsafe/readme.md with 100% similarity]
signaling_server/service/node_modules/buffer-alloc/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc/index.js with 100% similarity]
signaling_server/service/node_modules/buffer-alloc/package.json [new file with mode: 0644]
signaling_server/service/node_modules/buffer-alloc/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc/readme.md with 100% similarity]
signaling_server/service/node_modules/buffer-fill/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer-fill/index.js with 100% similarity]
signaling_server/service/node_modules/buffer-fill/package.json [new file with mode: 0644]
signaling_server/service/node_modules/buffer-fill/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer-fill/readme.md with 100% similarity]
signaling_server/service/node_modules/buffer-from/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer-from/LICENSE with 100% similarity]
signaling_server/service/node_modules/buffer-from/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer-from/index.js with 100% similarity]
signaling_server/service/node_modules/buffer-from/package.json [new file with mode: 0644]
signaling_server/service/node_modules/buffer-from/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer-from/readme.md with 100% similarity]
signaling_server/service/node_modules/buffer/AUTHORS.md [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer/AUTHORS.md with 100% similarity]
signaling_server/service/node_modules/buffer/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer/LICENSE with 100% similarity]
signaling_server/service/node_modules/buffer/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer/README.md with 100% similarity]
signaling_server/service/node_modules/buffer/index.d.ts [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer/index.d.ts with 100% similarity]
signaling_server/service/node_modules/buffer/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/buffer/index.js with 100% similarity]
signaling_server/service/node_modules/buffer/package.json [new file with mode: 0644]
signaling_server/service/node_modules/bytes/History.md [moved from signaling_server/service/node_modules/express/node_modules/bytes/History.md with 100% similarity]
signaling_server/service/node_modules/bytes/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/bytes/LICENSE with 100% similarity]
signaling_server/service/node_modules/bytes/Readme.md [moved from signaling_server/service/node_modules/express/node_modules/bytes/Readme.md with 100% similarity]
signaling_server/service/node_modules/bytes/index.js [moved from signaling_server/service/node_modules/express/node_modules/bytes/index.js with 100% similarity]
signaling_server/service/node_modules/bytes/package.json [new file with mode: 0644]
signaling_server/service/node_modules/camelcase/index.d.ts [moved from signaling_server/service/node_modules/qrcode/node_modules/camelcase/index.d.ts with 100% similarity]
signaling_server/service/node_modules/camelcase/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/camelcase/index.js with 100% similarity]
signaling_server/service/node_modules/camelcase/license [moved from signaling_server/service/node_modules/qrcode/node_modules/string-width/license with 100% similarity]
signaling_server/service/node_modules/camelcase/package.json [new file with mode: 0644]
signaling_server/service/node_modules/camelcase/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/camelcase/readme.md with 100% similarity]
signaling_server/service/node_modules/cliui/CHANGELOG.md [moved from signaling_server/service/node_modules/qrcode/node_modules/cliui/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/cliui/LICENSE.txt [moved from signaling_server/service/node_modules/qrcode/node_modules/cliui/LICENSE.txt with 100% similarity]
signaling_server/service/node_modules/cliui/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/cliui/README.md with 100% similarity]
signaling_server/service/node_modules/cliui/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/cliui/index.js with 100% similarity]
signaling_server/service/node_modules/cliui/package.json [new file with mode: 0644]
signaling_server/service/node_modules/color-convert/CHANGELOG.md [moved from signaling_server/service/node_modules/qrcode/node_modules/color-convert/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/color-convert/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/color-convert/LICENSE with 100% similarity]
signaling_server/service/node_modules/color-convert/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/color-convert/README.md with 100% similarity]
signaling_server/service/node_modules/color-convert/conversions.js [moved from signaling_server/service/node_modules/qrcode/node_modules/color-convert/conversions.js with 100% similarity]
signaling_server/service/node_modules/color-convert/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/color-convert/index.js with 100% similarity]
signaling_server/service/node_modules/color-convert/package.json [new file with mode: 0644]
signaling_server/service/node_modules/color-convert/route.js [moved from signaling_server/service/node_modules/qrcode/node_modules/color-convert/route.js with 100% similarity]
signaling_server/service/node_modules/color-name/.eslintrc.json [moved from signaling_server/service/node_modules/qrcode/node_modules/color-name/.eslintrc.json with 100% similarity]
signaling_server/service/node_modules/color-name/.npmignore [moved from signaling_server/service/node_modules/qrcode/node_modules/color-name/.npmignore with 100% similarity]
signaling_server/service/node_modules/color-name/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/color-name/LICENSE with 100% similarity]
signaling_server/service/node_modules/color-name/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/color-name/README.md with 100% similarity]
signaling_server/service/node_modules/color-name/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/color-name/index.js with 100% similarity]
signaling_server/service/node_modules/color-name/package.json [new file with mode: 0644]
signaling_server/service/node_modules/color-name/test.js [moved from signaling_server/service/node_modules/qrcode/node_modules/color-name/test.js with 100% similarity]
signaling_server/service/node_modules/component-bind/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/component-bind/.npmignore with 100% similarity]
signaling_server/service/node_modules/component-bind/History.md [moved from signaling_server/service/node_modules/socket.io/node_modules/component-bind/History.md with 100% similarity]
signaling_server/service/node_modules/component-bind/Makefile [moved from signaling_server/service/node_modules/socket.io/node_modules/component-bind/Makefile with 100% similarity]
signaling_server/service/node_modules/component-bind/Readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/component-bind/Readme.md with 100% similarity]
signaling_server/service/node_modules/component-bind/component.json [moved from signaling_server/service/node_modules/socket.io/node_modules/component-bind/component.json with 100% similarity]
signaling_server/service/node_modules/component-bind/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/component-bind/index.js with 100% similarity]
signaling_server/service/node_modules/component-bind/package.json [new file with mode: 0644]
signaling_server/service/node_modules/component-emitter/History.md [new file with mode: 0644]
signaling_server/service/node_modules/component-emitter/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/component-emitter/LICENSE with 100% similarity]
signaling_server/service/node_modules/component-emitter/Readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/component-emitter/Readme.md with 100% similarity]
signaling_server/service/node_modules/component-emitter/index.js [new file with mode: 0644]
signaling_server/service/node_modules/component-emitter/package.json [new file with mode: 0644]
signaling_server/service/node_modules/component-inherit/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/object-component/.npmignore with 100% similarity]
signaling_server/service/node_modules/component-inherit/History.md [moved from signaling_server/service/node_modules/socket.io/node_modules/component-inherit/History.md with 100% similarity]
signaling_server/service/node_modules/component-inherit/Makefile [moved from signaling_server/service/node_modules/socket.io/node_modules/component-inherit/Makefile with 100% similarity]
signaling_server/service/node_modules/component-inherit/Readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/component-inherit/Readme.md with 100% similarity]
signaling_server/service/node_modules/component-inherit/component.json [moved from signaling_server/service/node_modules/socket.io/node_modules/component-inherit/component.json with 100% similarity]
signaling_server/service/node_modules/component-inherit/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/component-inherit/index.js with 100% similarity]
signaling_server/service/node_modules/component-inherit/package.json [new file with mode: 0644]
signaling_server/service/node_modules/component-inherit/test/inherit.js [moved from signaling_server/service/node_modules/socket.io/node_modules/component-inherit/test/inherit.js with 100% similarity]
signaling_server/service/node_modules/content-disposition/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/content-disposition/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/content-disposition/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/vary/LICENSE with 100% similarity]
signaling_server/service/node_modules/content-disposition/README.md [moved from signaling_server/service/node_modules/express/node_modules/content-disposition/README.md with 100% similarity]
signaling_server/service/node_modules/content-disposition/index.js [moved from signaling_server/service/node_modules/express/node_modules/content-disposition/index.js with 100% similarity]
signaling_server/service/node_modules/content-disposition/package.json [new file with mode: 0644]
signaling_server/service/node_modules/content-type/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/content-type/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/content-type/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/content-type/LICENSE with 100% similarity]
signaling_server/service/node_modules/content-type/README.md [moved from signaling_server/service/node_modules/express/node_modules/content-type/README.md with 100% similarity]
signaling_server/service/node_modules/content-type/index.js [moved from signaling_server/service/node_modules/express/node_modules/content-type/index.js with 100% similarity]
signaling_server/service/node_modules/content-type/package.json [new file with mode: 0644]
signaling_server/service/node_modules/cookie-signature/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/callsite/.npmignore with 100% similarity]
signaling_server/service/node_modules/cookie-signature/History.md [moved from signaling_server/service/node_modules/express/node_modules/cookie-signature/History.md with 100% similarity]
signaling_server/service/node_modules/cookie-signature/Readme.md [moved from signaling_server/service/node_modules/express/node_modules/cookie-signature/Readme.md with 100% similarity]
signaling_server/service/node_modules/cookie-signature/index.js [moved from signaling_server/service/node_modules/express/node_modules/cookie-signature/index.js with 100% similarity]
signaling_server/service/node_modules/cookie-signature/package.json [new file with mode: 0644]
signaling_server/service/node_modules/cookie/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/cookie/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/cookie/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/cookie/LICENSE with 100% similarity]
signaling_server/service/node_modules/cookie/README.md [moved from signaling_server/service/node_modules/express/node_modules/cookie/README.md with 100% similarity]
signaling_server/service/node_modules/cookie/index.js [moved from signaling_server/service/node_modules/express/node_modules/cookie/index.js with 100% similarity]
signaling_server/service/node_modules/cookie/package.json [new file with mode: 0644]
signaling_server/service/node_modules/decamelize/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/decamelize/index.js with 100% similarity]
signaling_server/service/node_modules/decamelize/license [moved from signaling_server/service/node_modules/qrcode/node_modules/path-exists/license with 100% similarity]
signaling_server/service/node_modules/decamelize/package.json [new file with mode: 0644]
signaling_server/service/node_modules/decamelize/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/decamelize/readme.md with 100% similarity]
signaling_server/service/node_modules/depd/History.md [moved from signaling_server/service/node_modules/express/node_modules/depd/History.md with 100% similarity]
signaling_server/service/node_modules/depd/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/forwarded/LICENSE with 100% similarity]
signaling_server/service/node_modules/depd/Readme.md [moved from signaling_server/service/node_modules/express/node_modules/depd/Readme.md with 100% similarity]
signaling_server/service/node_modules/depd/index.js [moved from signaling_server/service/node_modules/express/node_modules/depd/index.js with 100% similarity]
signaling_server/service/node_modules/depd/lib/browser/index.js [moved from signaling_server/service/node_modules/express/node_modules/depd/lib/browser/index.js with 100% similarity]
signaling_server/service/node_modules/depd/lib/compat/callsite-tostring.js [moved from signaling_server/service/node_modules/express/node_modules/depd/lib/compat/callsite-tostring.js with 100% similarity]
signaling_server/service/node_modules/depd/lib/compat/event-listener-count.js [moved from signaling_server/service/node_modules/express/node_modules/depd/lib/compat/event-listener-count.js with 100% similarity]
signaling_server/service/node_modules/depd/lib/compat/index.js [moved from signaling_server/service/node_modules/express/node_modules/depd/lib/compat/index.js with 100% similarity]
signaling_server/service/node_modules/depd/package.json [new file with mode: 0644]
signaling_server/service/node_modules/destroy/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/mime-db/LICENSE with 100% similarity]
signaling_server/service/node_modules/destroy/README.md [moved from signaling_server/service/node_modules/express/node_modules/destroy/README.md with 100% similarity]
signaling_server/service/node_modules/destroy/index.js [moved from signaling_server/service/node_modules/express/node_modules/destroy/index.js with 100% similarity]
signaling_server/service/node_modules/destroy/package.json [new file with mode: 0644]
signaling_server/service/node_modules/dijkstrajs/.npmignore [moved from signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/.npmignore with 100% similarity]
signaling_server/service/node_modules/dijkstrajs/.travis.yml [moved from signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/.travis.yml with 100% similarity]
signaling_server/service/node_modules/dijkstrajs/CONTRIBUTING.md [moved from signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/CONTRIBUTING.md with 100% similarity]
signaling_server/service/node_modules/dijkstrajs/LICENSE.md [moved from signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/LICENSE.md with 100% similarity]
signaling_server/service/node_modules/dijkstrajs/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/README.md with 100% similarity]
signaling_server/service/node_modules/dijkstrajs/dijkstra.js [moved from signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/dijkstra.js with 100% similarity]
signaling_server/service/node_modules/dijkstrajs/package.json [new file with mode: 0644]
signaling_server/service/node_modules/dijkstrajs/test/dijkstra.test.js [moved from signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/test/dijkstra.test.js with 100% similarity]
signaling_server/service/node_modules/ee-first/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/mime-db/LICENSE with 100% similarity]
signaling_server/service/node_modules/ee-first/README.md [moved from signaling_server/service/node_modules/express/node_modules/ee-first/README.md with 100% similarity]
signaling_server/service/node_modules/ee-first/index.js [moved from signaling_server/service/node_modules/express/node_modules/ee-first/index.js with 100% similarity]
signaling_server/service/node_modules/ee-first/package.json [new file with mode: 0644]
signaling_server/service/node_modules/emoji-regex/LICENSE-MIT.txt [moved from signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/LICENSE-MIT.txt with 100% similarity]
signaling_server/service/node_modules/emoji-regex/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/README.md with 100% similarity]
signaling_server/service/node_modules/emoji-regex/es2015/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/es2015/index.js with 100% similarity]
signaling_server/service/node_modules/emoji-regex/es2015/text.js [moved from signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/es2015/text.js with 100% similarity]
signaling_server/service/node_modules/emoji-regex/index.d.ts [moved from signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/index.d.ts with 100% similarity]
signaling_server/service/node_modules/emoji-regex/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/index.js with 100% similarity]
signaling_server/service/node_modules/emoji-regex/package.json [new file with mode: 0644]
signaling_server/service/node_modules/emoji-regex/text.js [moved from signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/text.js with 100% similarity]
signaling_server/service/node_modules/encodeurl/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/encodeurl/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/encodeurl/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/encodeurl/LICENSE with 100% similarity]
signaling_server/service/node_modules/encodeurl/README.md [moved from signaling_server/service/node_modules/express/node_modules/encodeurl/README.md with 100% similarity]
signaling_server/service/node_modules/encodeurl/index.js [moved from signaling_server/service/node_modules/express/node_modules/encodeurl/index.js with 100% similarity]
signaling_server/service/node_modules/encodeurl/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/LICENSE with 100% similarity]
signaling_server/service/node_modules/engine.io-client/README.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/engine.io.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/lib/globalThis.browser.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/globalThis.browser.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/lib/globalThis.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/globalThis.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/lib/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/index.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/lib/socket.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/lib/transport.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transport.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/lib/transports/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transports/index.js with 100% similarity, mode: 0755]
signaling_server/service/node_modules/engine.io-client/lib/transports/polling-jsonp.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transports/polling-jsonp.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/lib/transports/polling-xhr.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transports/polling-xhr.js with 100% similarity, mode: 0755]
signaling_server/service/node_modules/engine.io-client/lib/transports/polling.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/lib/transports/websocket.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/lib/xmlhttprequest.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/xmlhttprequest.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/.coveralls.yml [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/.coveralls.yml with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/.eslintrc [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/.eslintrc with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/.npmignore [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/.npmignore with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/.travis.yml [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/.travis.yml with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/CHANGELOG.md [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/LICENSE with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/Makefile [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/Makefile with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/README.md with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/karma.conf.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/karma.conf.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/node.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/node.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/src/browser.js [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/src/browser.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/src/debug.js [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/src/debug.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/src/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/src/index.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/debug/src/node.js [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/src/node.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/ms/index.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ms/license.md [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/ms/license.md with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/ms/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ms/readme.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/LICENSE [moved from signaling_server/service/node_modules/ws/LICENSE with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/README.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/browser.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/index.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/constants.js [moved from signaling_server/service/node_modules/ws/lib/constants.js with 100% similarity]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/event-target.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/extension.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/limiter.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/receiver.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/sender.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/stream.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/validation.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/websocket.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/node_modules/ws/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-client/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-parser/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io-parser/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-parser/LICENSE with 100% similarity]
signaling_server/service/node_modules/engine.io-parser/Readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-parser/Readme.md with 100% similarity]
signaling_server/service/node_modules/engine.io-parser/lib/browser.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-parser/lib/browser.js with 100% similarity]
signaling_server/service/node_modules/engine.io-parser/lib/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-parser/lib/index.js with 100% similarity]
signaling_server/service/node_modules/engine.io-parser/lib/keys.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-parser/lib/keys.js with 100% similarity]
signaling_server/service/node_modules/engine.io-parser/lib/utf8.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-parser/lib/utf8.js with 100% similarity]
signaling_server/service/node_modules/engine.io-parser/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io/LICENSE with 100% similarity]
signaling_server/service/node_modules/engine.io/README.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/lib/engine.io.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/engine.io.js with 100% similarity]
signaling_server/service/node_modules/engine.io/lib/server.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/lib/socket.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/socket.js with 100% similarity]
signaling_server/service/node_modules/engine.io/lib/transport.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/transport.js with 100% similarity]
signaling_server/service/node_modules/engine.io/lib/transports/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/transports/index.js with 100% similarity]
signaling_server/service/node_modules/engine.io/lib/transports/polling-jsonp.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/transports/polling-jsonp.js with 100% similarity]
signaling_server/service/node_modules/engine.io/lib/transports/polling-xhr.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/transports/polling-xhr.js with 100% similarity]
signaling_server/service/node_modules/engine.io/lib/transports/polling.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/transports/polling.js with 100% similarity]
signaling_server/service/node_modules/engine.io/lib/transports/websocket.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/transports/websocket.js with 100% similarity]
signaling_server/service/node_modules/engine.io/node_modules/base64id/CHANGELOG.md [moved from signaling_server/service/node_modules/socket.io/node_modules/base64id/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/engine.io/node_modules/base64id/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/base64id/LICENSE with 100% similarity]
signaling_server/service/node_modules/engine.io/node_modules/base64id/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/base64id/README.md with 100% similarity]
signaling_server/service/node_modules/engine.io/node_modules/base64id/lib/base64id.js [moved from signaling_server/service/node_modules/socket.io/node_modules/base64id/lib/base64id.js with 100% similarity]
signaling_server/service/node_modules/engine.io/node_modules/base64id/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/cookie/HISTORY.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/cookie/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/cookie/LICENSE with 100% similarity]
signaling_server/service/node_modules/engine.io/node_modules/cookie/README.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/cookie/index.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/cookie/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/debug/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/debug/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/LICENSE with 100% similarity]
signaling_server/service/node_modules/engine.io/node_modules/debug/README.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/debug/dist/debug.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/debug/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/debug/src/browser.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/debug/src/common.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/debug/src/index.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/debug/src/node.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/LICENSE with 100% similarity]
signaling_server/service/node_modules/engine.io/node_modules/ws/README.md [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/browser.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/index.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/buffer-util.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/constants.js [moved from signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/constants.js with 100% similarity]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/event-target.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/extension.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/limiter.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/permessage-deflate.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/receiver.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/sender.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/stream.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/validation.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/websocket-server.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/lib/websocket.js [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/node_modules/ws/package.json [new file with mode: 0644]
signaling_server/service/node_modules/engine.io/package.json [new file with mode: 0644]
signaling_server/service/node_modules/escape-html/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/escape-html/LICENSE with 100% similarity]
signaling_server/service/node_modules/escape-html/Readme.md [moved from signaling_server/service/node_modules/express/node_modules/escape-html/Readme.md with 100% similarity]
signaling_server/service/node_modules/escape-html/index.js [moved from signaling_server/service/node_modules/express/node_modules/escape-html/index.js with 100% similarity]
signaling_server/service/node_modules/escape-html/package.json [new file with mode: 0644]
signaling_server/service/node_modules/etag/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/etag/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/etag/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/proxy-addr/LICENSE with 100% similarity]
signaling_server/service/node_modules/etag/README.md [moved from signaling_server/service/node_modules/express/node_modules/etag/README.md with 100% similarity]
signaling_server/service/node_modules/etag/index.js [moved from signaling_server/service/node_modules/express/node_modules/etag/index.js with 100% similarity]
signaling_server/service/node_modules/etag/package.json [new file with mode: 0644]
signaling_server/service/node_modules/express/node_modules/accepts/HISTORY.md [deleted file]
signaling_server/service/node_modules/express/node_modules/accepts/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/accepts/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/accepts/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/accepts/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/array-flatten/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/asap/CHANGES.md [deleted file]
signaling_server/service/node_modules/express/node_modules/asap/LICENSE.md [deleted file]
signaling_server/service/node_modules/express/node_modules/asap/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/asap/asap.js [deleted file]
signaling_server/service/node_modules/express/node_modules/asap/browser-asap.js [deleted file]
signaling_server/service/node_modules/express/node_modules/asap/browser-raw.js [deleted file]
signaling_server/service/node_modules/express/node_modules/asap/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/asap/raw.js [deleted file]
signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/body-parser/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/bytes/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/content-disposition/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/content-type/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/cookie-signature/.npmignore [deleted file]
signaling_server/service/node_modules/express/node_modules/cookie-signature/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/cookie/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/debug/package.json
signaling_server/service/node_modules/express/node_modules/deep-is/.npmignore [deleted file]
signaling_server/service/node_modules/express/node_modules/deep-is/.travis.yml [deleted file]
signaling_server/service/node_modules/express/node_modules/deep-is/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/deep-is/README.markdown [deleted file]
signaling_server/service/node_modules/express/node_modules/deep-is/example/cmp.js [deleted file]
signaling_server/service/node_modules/express/node_modules/deep-is/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/deep-is/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/deep-is/test/NaN.js [deleted file]
signaling_server/service/node_modules/express/node_modules/deep-is/test/cmp.js [deleted file]
signaling_server/service/node_modules/express/node_modules/deep-is/test/neg-vs-pos-0.js [deleted file]
signaling_server/service/node_modules/express/node_modules/depd/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/destroy/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/destroy/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/ee-first/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/encodeurl/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/escape-html/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/etag/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/fast-levenshtein/LICENSE.md [deleted file]
signaling_server/service/node_modules/express/node_modules/fast-levenshtein/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/fast-levenshtein/levenshtein.js [deleted file]
signaling_server/service/node_modules/express/node_modules/fast-levenshtein/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/finalhandler/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/forwarded/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/fresh/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/http-errors/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/iconv-lite/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/inherits/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/ipaddr.js/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/ipaddr.js/lib/ipaddr.js.d.ts [deleted file]
signaling_server/service/node_modules/express/node_modules/ipaddr.js/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/levn/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/levn/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/levn/lib/cast.js [deleted file]
signaling_server/service/node_modules/express/node_modules/levn/lib/coerce.js [deleted file]
signaling_server/service/node_modules/express/node_modules/levn/lib/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/levn/lib/parse-string.js [deleted file]
signaling_server/service/node_modules/express/node_modules/levn/lib/parse.js [deleted file]
signaling_server/service/node_modules/express/node_modules/levn/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/media-typer/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/merge-descriptors/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/methods/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-db/HISTORY.md [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-db/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-db/db.json [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-db/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-db/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-types/HISTORY.md [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-types/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-types/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-types/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/mime-types/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/mime/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/mime/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/mime/mime.js [deleted file]
signaling_server/service/node_modules/express/node_modules/mime/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/mime/test.js [deleted file]
signaling_server/service/node_modules/express/node_modules/mime/types/mime.types [deleted file]
signaling_server/service/node_modules/express/node_modules/mime/types/node.types [deleted file]
signaling_server/service/node_modules/express/node_modules/ms/package.json
signaling_server/service/node_modules/express/node_modules/negotiator/HISTORY.md [deleted file]
signaling_server/service/node_modules/express/node_modules/negotiator/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/negotiator/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/negotiator/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/negotiator/lib/charset.js [deleted file]
signaling_server/service/node_modules/express/node_modules/negotiator/lib/encoding.js [deleted file]
signaling_server/service/node_modules/express/node_modules/negotiator/lib/language.js [deleted file]
signaling_server/service/node_modules/express/node_modules/negotiator/lib/mediaType.js [deleted file]
signaling_server/service/node_modules/express/node_modules/negotiator/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/on-finished/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/optionator/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/optionator/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/optionator/lib/coerce.js [deleted file]
signaling_server/service/node_modules/express/node_modules/optionator/lib/help.js [deleted file]
signaling_server/service/node_modules/express/node_modules/optionator/lib/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/optionator/lib/parse-type.js [deleted file]
signaling_server/service/node_modules/express/node_modules/optionator/lib/util.js [deleted file]
signaling_server/service/node_modules/express/node_modules/optionator/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/parseurl/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/path-to-regexp/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/CHANGELOG.md [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Func.js [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/List.js [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Num.js [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Obj.js [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Str.js [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/prelude-ls/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/.jshintrc [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/.npmignore [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/Readme.md [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/build.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/core.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/domains/core.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/domains/done.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/domains/es6-extensions.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/domains/finally.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/domains/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/domains/node-extensions.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/domains/rejection-tracking.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/domains/synchronous.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/index.d.ts [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/lib/core.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/lib/done.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/lib/es6-extensions.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/lib/finally.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/lib/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/lib/node-extensions.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/lib/rejection-tracking.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/lib/synchronous.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/polyfill-done.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/polyfill.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/setimmediate/core.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/setimmediate/done.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/setimmediate/es6-extensions.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/setimmediate/finally.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/setimmediate/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/setimmediate/node-extensions.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/setimmediate/rejection-tracking.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/setimmediate/synchronous.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/src/core.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/src/done.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/src/es6-extensions.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/src/finally.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/src/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/src/node-extensions.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/src/rejection-tracking.js [deleted file]
signaling_server/service/node_modules/express/node_modules/promise/src/synchronous.js [deleted file]
signaling_server/service/node_modules/express/node_modules/proxy-addr/HISTORY.md [deleted file]
signaling_server/service/node_modules/express/node_modules/proxy-addr/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/proxy-addr/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/qs/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/range-parser/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/raw-body/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/safe-buffer/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/safer-buffer/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/send/node_modules/.bin/mime [deleted file]
signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/node_modules/ms/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/send/node_modules/ms/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/send/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/serve-static/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/setprototypeof/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/statuses/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/toidentifier/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/type-check/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/type-check/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/type-check/lib/check.js [deleted file]
signaling_server/service/node_modules/express/node_modules/type-check/lib/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/type-check/lib/parse-type.js [deleted file]
signaling_server/service/node_modules/express/node_modules/type-check/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/type-is/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/unpipe/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/url/.npmignore [deleted file]
signaling_server/service/node_modules/express/node_modules/url/.travis.yml [deleted file]
signaling_server/service/node_modules/express/node_modules/url/.zuul.yml [deleted file]
signaling_server/service/node_modules/express/node_modules/url/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/url/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/LICENSE-MIT.txt [deleted file]
signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/README.md [deleted file]
signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/punycode.js [deleted file]
signaling_server/service/node_modules/express/node_modules/url/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/url/test.js [deleted file]
signaling_server/service/node_modules/express/node_modules/url/url.js [deleted file]
signaling_server/service/node_modules/express/node_modules/url/util.js [deleted file]
signaling_server/service/node_modules/express/node_modules/utils-merge/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/vary/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/wordwrap/LICENSE [deleted file]
signaling_server/service/node_modules/express/node_modules/wordwrap/README.markdown [deleted file]
signaling_server/service/node_modules/express/node_modules/wordwrap/example/center.js [deleted file]
signaling_server/service/node_modules/express/node_modules/wordwrap/example/meat.js [deleted file]
signaling_server/service/node_modules/express/node_modules/wordwrap/index.js [deleted file]
signaling_server/service/node_modules/express/node_modules/wordwrap/package.json [deleted file]
signaling_server/service/node_modules/express/node_modules/wordwrap/test/break.js [deleted file]
signaling_server/service/node_modules/express/node_modules/wordwrap/test/idleness.txt [deleted file]
signaling_server/service/node_modules/express/node_modules/wordwrap/test/wrap.js [deleted file]
signaling_server/service/node_modules/express/package.json
signaling_server/service/node_modules/finalhandler/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/finalhandler/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/LICENSE with 100% similarity]
signaling_server/service/node_modules/finalhandler/README.md [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/README.md with 100% similarity]
signaling_server/service/node_modules/finalhandler/index.js [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/index.js with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/.coveralls.yml [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/.coveralls.yml with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/.eslintrc [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/.eslintrc with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/.npmignore [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/.npmignore with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/.travis.yml [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/.travis.yml with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/CHANGELOG.md [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/LICENSE with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/Makefile [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/Makefile with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/README.md [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/README.md with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/component.json [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/component.json with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/karma.conf.js [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/karma.conf.js with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/node.js [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/node.js with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/package.json [new file with mode: 0644]
signaling_server/service/node_modules/finalhandler/node_modules/debug/src/browser.js [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/src/browser.js with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/src/debug.js [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/src/debug.js with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/src/index.js [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/src/index.js with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/src/inspector-log.js [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/src/inspector-log.js with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/debug/src/node.js [moved from signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/src/node.js with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/ms/index.js [new file with mode: 0644]
signaling_server/service/node_modules/finalhandler/node_modules/ms/license.md [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/node_modules/ms/license.md with 100% similarity]
signaling_server/service/node_modules/finalhandler/node_modules/ms/package.json [new file with mode: 0644]
signaling_server/service/node_modules/finalhandler/node_modules/ms/readme.md [new file with mode: 0644]
signaling_server/service/node_modules/finalhandler/package.json [new file with mode: 0644]
signaling_server/service/node_modules/find-up/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/find-up/index.js with 100% similarity]
signaling_server/service/node_modules/find-up/license [moved from signaling_server/service/node_modules/qrcode/node_modules/p-try/license with 100% similarity]
signaling_server/service/node_modules/find-up/package.json [new file with mode: 0644]
signaling_server/service/node_modules/find-up/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/find-up/readme.md with 100% similarity]
signaling_server/service/node_modules/forwarded/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/forwarded/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/forwarded/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/depd/LICENSE with 100% similarity]
signaling_server/service/node_modules/forwarded/README.md [moved from signaling_server/service/node_modules/express/node_modules/forwarded/README.md with 100% similarity]
signaling_server/service/node_modules/forwarded/index.js [moved from signaling_server/service/node_modules/express/node_modules/forwarded/index.js with 100% similarity]
signaling_server/service/node_modules/forwarded/package.json [new file with mode: 0644]
signaling_server/service/node_modules/fresh/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/fresh/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/fresh/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/fresh/LICENSE with 100% similarity]
signaling_server/service/node_modules/fresh/README.md [moved from signaling_server/service/node_modules/express/node_modules/fresh/README.md with 100% similarity]
signaling_server/service/node_modules/fresh/index.js [moved from signaling_server/service/node_modules/express/node_modules/fresh/index.js with 100% similarity]
signaling_server/service/node_modules/fresh/package.json [new file with mode: 0644]
signaling_server/service/node_modules/get-caller-file/LICENSE.md [moved from signaling_server/service/node_modules/qrcode/node_modules/get-caller-file/LICENSE.md with 100% similarity]
signaling_server/service/node_modules/get-caller-file/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/get-caller-file/README.md with 100% similarity]
signaling_server/service/node_modules/get-caller-file/index.d.ts [moved from signaling_server/service/node_modules/qrcode/node_modules/get-caller-file/index.d.ts with 100% similarity]
signaling_server/service/node_modules/get-caller-file/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/get-caller-file/index.js with 100% similarity]
signaling_server/service/node_modules/get-caller-file/index.js.map [moved from signaling_server/service/node_modules/qrcode/node_modules/get-caller-file/index.js.map with 100% similarity]
signaling_server/service/node_modules/get-caller-file/package.json [new file with mode: 0644]
signaling_server/service/node_modules/has-binary2/History.md [moved from signaling_server/service/node_modules/socket.io/node_modules/has-binary2/History.md with 100% similarity]
signaling_server/service/node_modules/has-binary2/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/has-binary2/LICENSE with 100% similarity]
signaling_server/service/node_modules/has-binary2/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/has-binary2/README.md with 100% similarity]
signaling_server/service/node_modules/has-binary2/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/has-binary2/index.js with 100% similarity]
signaling_server/service/node_modules/has-binary2/node_modules/isarray/README.md [new file with mode: 0644]
signaling_server/service/node_modules/has-binary2/node_modules/isarray/index.js [new file with mode: 0644]
signaling_server/service/node_modules/has-binary2/node_modules/isarray/package.json [new file with mode: 0644]
signaling_server/service/node_modules/has-binary2/package.json [new file with mode: 0644]
signaling_server/service/node_modules/has-cors/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/has-cors/.npmignore with 100% similarity]
signaling_server/service/node_modules/has-cors/History.md [moved from signaling_server/service/node_modules/socket.io/node_modules/has-cors/History.md with 100% similarity]
signaling_server/service/node_modules/has-cors/Makefile [moved from signaling_server/service/node_modules/socket.io/node_modules/has-cors/Makefile with 100% similarity]
signaling_server/service/node_modules/has-cors/Readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/has-cors/Readme.md with 100% similarity]
signaling_server/service/node_modules/has-cors/component.json [moved from signaling_server/service/node_modules/socket.io/node_modules/has-cors/component.json with 100% similarity]
signaling_server/service/node_modules/has-cors/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/has-cors/index.js with 100% similarity]
signaling_server/service/node_modules/has-cors/package.json [new file with mode: 0644]
signaling_server/service/node_modules/has-cors/test.js [moved from signaling_server/service/node_modules/socket.io/node_modules/has-cors/test.js with 100% similarity]
signaling_server/service/node_modules/http-errors/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/http-errors/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/http-errors/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/http-errors/LICENSE with 100% similarity]
signaling_server/service/node_modules/http-errors/README.md [moved from signaling_server/service/node_modules/express/node_modules/http-errors/README.md with 100% similarity]
signaling_server/service/node_modules/http-errors/index.js [moved from signaling_server/service/node_modules/express/node_modules/http-errors/index.js with 100% similarity]
signaling_server/service/node_modules/http-errors/package.json [new file with mode: 0644]
signaling_server/service/node_modules/iconv-lite/Changelog.md [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/Changelog.md with 100% similarity]
signaling_server/service/node_modules/iconv-lite/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/LICENSE with 100% similarity]
signaling_server/service/node_modules/iconv-lite/README.md [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/README.md with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/dbcs-codec.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/dbcs-codec.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/dbcs-data.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/dbcs-data.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/index.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/index.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/internal.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/internal.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/sbcs-codec.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/sbcs-codec.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/sbcs-data-generated.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/sbcs-data-generated.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/sbcs-data.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/sbcs-data.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/tables/big5-added.json [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/tables/big5-added.json with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/tables/cp936.json [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/tables/cp936.json with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/tables/cp949.json [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/tables/cp949.json with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/tables/cp950.json [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/tables/cp950.json with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/tables/eucjp.json [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/tables/eucjp.json with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/tables/gbk-added.json [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/tables/gbk-added.json with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/tables/shiftjis.json [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/tables/shiftjis.json with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/utf16.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/utf16.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/encodings/utf7.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/encodings/utf7.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/lib/bom-handling.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/lib/bom-handling.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/lib/extend-node.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/lib/extend-node.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/lib/index.d.ts [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/lib/index.d.ts with 100% similarity]
signaling_server/service/node_modules/iconv-lite/lib/index.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/lib/index.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/lib/streams.js [moved from signaling_server/service/node_modules/express/node_modules/iconv-lite/lib/streams.js with 100% similarity]
signaling_server/service/node_modules/iconv-lite/package.json [new file with mode: 0644]
signaling_server/service/node_modules/ieee754/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/ieee754/LICENSE with 100% similarity]
signaling_server/service/node_modules/ieee754/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/ieee754/README.md with 100% similarity]
signaling_server/service/node_modules/ieee754/index.d.ts [moved from signaling_server/service/node_modules/qrcode/node_modules/ieee754/index.d.ts with 100% similarity]
signaling_server/service/node_modules/ieee754/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/ieee754/index.js with 100% similarity]
signaling_server/service/node_modules/ieee754/package.json [new file with mode: 0644]
signaling_server/service/node_modules/indexof/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/indexof/.npmignore with 100% similarity]
signaling_server/service/node_modules/indexof/Makefile [moved from signaling_server/service/node_modules/socket.io/node_modules/indexof/Makefile with 100% similarity]
signaling_server/service/node_modules/indexof/Readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/indexof/Readme.md with 100% similarity]
signaling_server/service/node_modules/indexof/component.json [moved from signaling_server/service/node_modules/socket.io/node_modules/indexof/component.json with 100% similarity]
signaling_server/service/node_modules/indexof/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/indexof/index.js with 100% similarity]
signaling_server/service/node_modules/indexof/package.json [new file with mode: 0644]
signaling_server/service/node_modules/inherits/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/inherits/LICENSE with 100% similarity]
signaling_server/service/node_modules/inherits/README.md [moved from signaling_server/service/node_modules/express/node_modules/inherits/README.md with 100% similarity]
signaling_server/service/node_modules/inherits/inherits.js [moved from signaling_server/service/node_modules/express/node_modules/inherits/inherits.js with 100% similarity]
signaling_server/service/node_modules/inherits/inherits_browser.js [moved from signaling_server/service/node_modules/express/node_modules/inherits/inherits_browser.js with 100% similarity]
signaling_server/service/node_modules/inherits/package.json [new file with mode: 0644]
signaling_server/service/node_modules/ipaddr.js/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/ipaddr.js/LICENSE with 100% similarity]
signaling_server/service/node_modules/ipaddr.js/README.md [new file with mode: 0644]
signaling_server/service/node_modules/ipaddr.js/ipaddr.min.js [moved from signaling_server/service/node_modules/express/node_modules/ipaddr.js/ipaddr.min.js with 100% similarity]
signaling_server/service/node_modules/ipaddr.js/lib/ipaddr.js [moved from signaling_server/service/node_modules/express/node_modules/ipaddr.js/lib/ipaddr.js with 100% similarity]
signaling_server/service/node_modules/ipaddr.js/lib/ipaddr.js.d.ts [new file with mode: 0644]
signaling_server/service/node_modules/ipaddr.js/package.json [new file with mode: 0644]
signaling_server/service/node_modules/is-fullwidth-code-point/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/is-fullwidth-code-point/index.js with 100% similarity]
signaling_server/service/node_modules/is-fullwidth-code-point/license [moved from signaling_server/service/node_modules/qrcode/node_modules/is-fullwidth-code-point/license with 100% similarity]
signaling_server/service/node_modules/is-fullwidth-code-point/package.json [new file with mode: 0644]
signaling_server/service/node_modules/is-fullwidth-code-point/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/is-fullwidth-code-point/readme.md with 100% similarity]
signaling_server/service/node_modules/locate-path/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/locate-path/index.js with 100% similarity]
signaling_server/service/node_modules/locate-path/license [moved from signaling_server/service/node_modules/qrcode/node_modules/p-locate/license with 100% similarity]
signaling_server/service/node_modules/locate-path/package.json [new file with mode: 0644]
signaling_server/service/node_modules/locate-path/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/locate-path/readme.md with 100% similarity]
signaling_server/service/node_modules/media-typer/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/media-typer/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/media-typer/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/media-typer/LICENSE with 100% similarity]
signaling_server/service/node_modules/media-typer/README.md [moved from signaling_server/service/node_modules/express/node_modules/media-typer/README.md with 100% similarity]
signaling_server/service/node_modules/media-typer/index.js [moved from signaling_server/service/node_modules/express/node_modules/media-typer/index.js with 100% similarity]
signaling_server/service/node_modules/media-typer/package.json [new file with mode: 0644]
signaling_server/service/node_modules/merge-descriptors/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/merge-descriptors/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/merge-descriptors/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/merge-descriptors/LICENSE with 100% similarity]
signaling_server/service/node_modules/merge-descriptors/README.md [moved from signaling_server/service/node_modules/express/node_modules/merge-descriptors/README.md with 100% similarity]
signaling_server/service/node_modules/merge-descriptors/index.js [moved from signaling_server/service/node_modules/express/node_modules/merge-descriptors/index.js with 100% similarity]
signaling_server/service/node_modules/merge-descriptors/package.json [new file with mode: 0644]
signaling_server/service/node_modules/methods/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/methods/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/methods/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/methods/LICENSE with 100% similarity]
signaling_server/service/node_modules/methods/README.md [moved from signaling_server/service/node_modules/express/node_modules/methods/README.md with 100% similarity]
signaling_server/service/node_modules/methods/index.js [moved from signaling_server/service/node_modules/express/node_modules/methods/index.js with 100% similarity]
signaling_server/service/node_modules/methods/package.json [new file with mode: 0644]
signaling_server/service/node_modules/mime-db/HISTORY.md [new file with mode: 0644]
signaling_server/service/node_modules/mime-db/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/ee-first/LICENSE with 100% similarity]
signaling_server/service/node_modules/mime-db/README.md [new file with mode: 0644]
signaling_server/service/node_modules/mime-db/db.json [new file with mode: 0644]
signaling_server/service/node_modules/mime-db/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/mime-db/index.js with 100% similarity]
signaling_server/service/node_modules/mime-db/package.json [new file with mode: 0644]
signaling_server/service/node_modules/mime-types/HISTORY.md [new file with mode: 0644]
signaling_server/service/node_modules/mime-types/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/accepts/LICENSE with 100% similarity]
signaling_server/service/node_modules/mime-types/README.md [new file with mode: 0644]
signaling_server/service/node_modules/mime-types/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/mime-types/index.js with 100% similarity]
signaling_server/service/node_modules/mime-types/package.json [new file with mode: 0644]
signaling_server/service/node_modules/mime/.npmignore [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/.npmignore with 100% similarity]
signaling_server/service/node_modules/mime/CHANGELOG.md [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/mime/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/LICENSE with 100% similarity]
signaling_server/service/node_modules/mime/README.md [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/README.md with 100% similarity]
signaling_server/service/node_modules/mime/cli.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/cli.js with 100% similarity, mode: 0755]
signaling_server/service/node_modules/mime/mime.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/mime.js with 100% similarity]
signaling_server/service/node_modules/mime/package.json [new file with mode: 0644]
signaling_server/service/node_modules/mime/src/build.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/src/build.js with 100% similarity, mode: 0755]
signaling_server/service/node_modules/mime/src/test.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/src/test.js with 100% similarity]
signaling_server/service/node_modules/mime/types.json [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/types.json with 100% similarity]
signaling_server/service/node_modules/ms/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/ms/index.js with 100% similarity]
signaling_server/service/node_modules/ms/license.md [new file with mode: 0644]
signaling_server/service/node_modules/ms/package.json [new file with mode: 0644]
signaling_server/service/node_modules/ms/readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/ms/readme.md with 100% similarity]
signaling_server/service/node_modules/negotiator/HISTORY.md [moved from signaling_server/service/node_modules/socket.io/node_modules/negotiator/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/negotiator/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/negotiator/LICENSE with 100% similarity]
signaling_server/service/node_modules/negotiator/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/negotiator/README.md with 100% similarity]
signaling_server/service/node_modules/negotiator/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/negotiator/index.js with 100% similarity]
signaling_server/service/node_modules/negotiator/lib/charset.js [moved from signaling_server/service/node_modules/socket.io/node_modules/negotiator/lib/charset.js with 100% similarity]
signaling_server/service/node_modules/negotiator/lib/encoding.js [moved from signaling_server/service/node_modules/socket.io/node_modules/negotiator/lib/encoding.js with 100% similarity]
signaling_server/service/node_modules/negotiator/lib/language.js [moved from signaling_server/service/node_modules/socket.io/node_modules/negotiator/lib/language.js with 100% similarity]
signaling_server/service/node_modules/negotiator/lib/mediaType.js [moved from signaling_server/service/node_modules/socket.io/node_modules/negotiator/lib/mediaType.js with 100% similarity]
signaling_server/service/node_modules/negotiator/package.json [new file with mode: 0644]
signaling_server/service/node_modules/on-finished/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/on-finished/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/on-finished/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/on-finished/LICENSE with 100% similarity]
signaling_server/service/node_modules/on-finished/README.md [moved from signaling_server/service/node_modules/express/node_modules/on-finished/README.md with 100% similarity]
signaling_server/service/node_modules/on-finished/index.js [moved from signaling_server/service/node_modules/express/node_modules/on-finished/index.js with 100% similarity]
signaling_server/service/node_modules/on-finished/package.json [new file with mode: 0644]
signaling_server/service/node_modules/p-limit/index.d.ts [moved from signaling_server/service/node_modules/qrcode/node_modules/p-limit/index.d.ts with 100% similarity]
signaling_server/service/node_modules/p-limit/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/p-limit/index.js with 100% similarity]
signaling_server/service/node_modules/p-limit/license [moved from signaling_server/service/node_modules/qrcode/node_modules/p-limit/license with 100% similarity]
signaling_server/service/node_modules/p-limit/package.json [new file with mode: 0644]
signaling_server/service/node_modules/p-limit/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/p-limit/readme.md with 100% similarity]
signaling_server/service/node_modules/p-locate/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/p-locate/index.js with 100% similarity]
signaling_server/service/node_modules/p-locate/license [moved from signaling_server/service/node_modules/qrcode/node_modules/locate-path/license with 100% similarity]
signaling_server/service/node_modules/p-locate/package.json [new file with mode: 0644]
signaling_server/service/node_modules/p-locate/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/p-locate/readme.md with 100% similarity]
signaling_server/service/node_modules/p-try/index.d.ts [moved from signaling_server/service/node_modules/qrcode/node_modules/p-try/index.d.ts with 100% similarity]
signaling_server/service/node_modules/p-try/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/p-try/index.js with 100% similarity]
signaling_server/service/node_modules/p-try/license [moved from signaling_server/service/node_modules/qrcode/node_modules/find-up/license with 100% similarity]
signaling_server/service/node_modules/p-try/package.json [new file with mode: 0644]
signaling_server/service/node_modules/p-try/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/p-try/readme.md with 100% similarity]
signaling_server/service/node_modules/parseqs/LICENSE [new file with mode: 0644]
signaling_server/service/node_modules/parseqs/Makefile [new file with mode: 0644]
signaling_server/service/node_modules/parseqs/README.md [new file with mode: 0644]
signaling_server/service/node_modules/parseqs/index.js [new file with mode: 0644]
signaling_server/service/node_modules/parseqs/package.json [new file with mode: 0644]
signaling_server/service/node_modules/parseqs/test.js [new file with mode: 0644]
signaling_server/service/node_modules/parseuri/History.md [new file with mode: 0644]
signaling_server/service/node_modules/parseuri/LICENSE [new file with mode: 0644]
signaling_server/service/node_modules/parseuri/Makefile [new file with mode: 0644]
signaling_server/service/node_modules/parseuri/README.md [new file with mode: 0644]
signaling_server/service/node_modules/parseuri/index.js [new file with mode: 0644]
signaling_server/service/node_modules/parseuri/package.json [new file with mode: 0644]
signaling_server/service/node_modules/parseuri/test.js [new file with mode: 0644]
signaling_server/service/node_modules/parseurl/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/parseurl/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/parseurl/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/parseurl/LICENSE with 100% similarity]
signaling_server/service/node_modules/parseurl/README.md [moved from signaling_server/service/node_modules/express/node_modules/parseurl/README.md with 100% similarity]
signaling_server/service/node_modules/parseurl/index.js [moved from signaling_server/service/node_modules/express/node_modules/parseurl/index.js with 100% similarity]
signaling_server/service/node_modules/parseurl/package.json [new file with mode: 0644]
signaling_server/service/node_modules/path-exists/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/path-exists/index.js with 100% similarity]
signaling_server/service/node_modules/path-exists/license [moved from signaling_server/service/node_modules/qrcode/node_modules/decamelize/license with 100% similarity]
signaling_server/service/node_modules/path-exists/package.json [new file with mode: 0644]
signaling_server/service/node_modules/path-exists/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/path-exists/readme.md with 100% similarity]
signaling_server/service/node_modules/path-to-regexp/History.md [moved from signaling_server/service/node_modules/express/node_modules/path-to-regexp/History.md with 100% similarity]
signaling_server/service/node_modules/path-to-regexp/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/array-flatten/LICENSE with 100% similarity]
signaling_server/service/node_modules/path-to-regexp/Readme.md [moved from signaling_server/service/node_modules/express/node_modules/path-to-regexp/Readme.md with 100% similarity]
signaling_server/service/node_modules/path-to-regexp/index.js [moved from signaling_server/service/node_modules/express/node_modules/path-to-regexp/index.js with 100% similarity]
signaling_server/service/node_modules/path-to-regexp/package.json [new file with mode: 0644]
signaling_server/service/node_modules/pngjs/.eslintrc.json [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/.eslintrc.json with 100% similarity]
signaling_server/service/node_modules/pngjs/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/LICENSE with 100% similarity]
signaling_server/service/node_modules/pngjs/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/README.md with 100% similarity]
signaling_server/service/node_modules/pngjs/browser.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/browser.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/bitmapper.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/bitmapper.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/bitpacker.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/bitpacker.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/chunkstream.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/chunkstream.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/constants.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/constants.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/crc.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/crc.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/filter-pack.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/filter-pack.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/filter-parse-async.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/filter-parse-async.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/filter-parse-sync.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/filter-parse-sync.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/filter-parse.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/filter-parse.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/format-normaliser.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/format-normaliser.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/interlace.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/interlace.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/packer-async.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/packer-async.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/packer-sync.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/packer-sync.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/packer.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/packer.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/paeth-predictor.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/paeth-predictor.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/parser-async.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/parser-async.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/parser-sync.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/parser-sync.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/parser.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/parser.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/png-sync.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/png-sync.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/png.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/png.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/sync-inflate.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/sync-inflate.js with 100% similarity]
signaling_server/service/node_modules/pngjs/lib/sync-reader.js [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/lib/sync-reader.js with 100% similarity]
signaling_server/service/node_modules/pngjs/package.json [new file with mode: 0644]
signaling_server/service/node_modules/pngjs/yarn.lock [moved from signaling_server/service/node_modules/qrcode/node_modules/pngjs/yarn.lock with 100% similarity]
signaling_server/service/node_modules/proxy-addr/HISTORY.md [new file with mode: 0644]
signaling_server/service/node_modules/proxy-addr/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/etag/LICENSE with 100% similarity]
signaling_server/service/node_modules/proxy-addr/README.md [moved from signaling_server/service/node_modules/express/node_modules/proxy-addr/README.md with 100% similarity]
signaling_server/service/node_modules/proxy-addr/index.js [new file with mode: 0644]
signaling_server/service/node_modules/proxy-addr/package.json [new file with mode: 0644]
signaling_server/service/node_modules/qrcode/bin/qrcode [changed mode: 0644->0755]
signaling_server/service/node_modules/qrcode/lib/core/error-correction-code.js [changed mode: 0644->0755]
signaling_server/service/node_modules/qrcode/lib/core/version.js [changed mode: 0644->0755]
signaling_server/service/node_modules/qrcode/node_modules/ansi-regex/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/ansi-styles/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/base64-js/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc-unsafe/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/buffer-fill/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/buffer-from/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/buffer/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/camelcase/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/cliui/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/color-convert/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/color-name/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/decamelize/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/find-up/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/get-caller-file/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/ieee754/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/is-fullwidth-code-point/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/isarray/package.json
signaling_server/service/node_modules/qrcode/node_modules/locate-path/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/p-limit/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/p-locate/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/p-try/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/path-exists/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/pngjs/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/require-directory/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/require-main-filename/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/set-blocking/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/string-width/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/strip-ansi/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/which-module/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/wrap-ansi/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/y18n/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/yargs-parser/package.json [deleted file]
signaling_server/service/node_modules/qrcode/node_modules/yargs/package.json [deleted file]
signaling_server/service/node_modules/qrcode/package.json
signaling_server/service/node_modules/qs/.editorconfig [moved from signaling_server/service/node_modules/express/node_modules/qs/.editorconfig with 100% similarity]
signaling_server/service/node_modules/qs/.eslintignore [moved from signaling_server/service/node_modules/express/node_modules/qs/.eslintignore with 100% similarity]
signaling_server/service/node_modules/qs/.eslintrc [moved from signaling_server/service/node_modules/express/node_modules/qs/.eslintrc with 100% similarity]
signaling_server/service/node_modules/qs/CHANGELOG.md [moved from signaling_server/service/node_modules/express/node_modules/qs/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/qs/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/qs/LICENSE with 100% similarity]
signaling_server/service/node_modules/qs/README.md [moved from signaling_server/service/node_modules/express/node_modules/qs/README.md with 100% similarity]
signaling_server/service/node_modules/qs/dist/qs.js [moved from signaling_server/service/node_modules/express/node_modules/qs/dist/qs.js with 100% similarity]
signaling_server/service/node_modules/qs/lib/formats.js [moved from signaling_server/service/node_modules/express/node_modules/qs/lib/formats.js with 100% similarity]
signaling_server/service/node_modules/qs/lib/index.js [moved from signaling_server/service/node_modules/express/node_modules/qs/lib/index.js with 100% similarity]
signaling_server/service/node_modules/qs/lib/parse.js [moved from signaling_server/service/node_modules/express/node_modules/qs/lib/parse.js with 100% similarity]
signaling_server/service/node_modules/qs/lib/stringify.js [moved from signaling_server/service/node_modules/express/node_modules/qs/lib/stringify.js with 100% similarity]
signaling_server/service/node_modules/qs/lib/utils.js [moved from signaling_server/service/node_modules/express/node_modules/qs/lib/utils.js with 100% similarity]
signaling_server/service/node_modules/qs/package.json [new file with mode: 0644]
signaling_server/service/node_modules/qs/test/.eslintrc [moved from signaling_server/service/node_modules/express/node_modules/qs/test/.eslintrc with 100% similarity]
signaling_server/service/node_modules/qs/test/index.js [moved from signaling_server/service/node_modules/express/node_modules/qs/test/index.js with 100% similarity]
signaling_server/service/node_modules/qs/test/parse.js [moved from signaling_server/service/node_modules/express/node_modules/qs/test/parse.js with 100% similarity]
signaling_server/service/node_modules/qs/test/stringify.js [moved from signaling_server/service/node_modules/express/node_modules/qs/test/stringify.js with 100% similarity]
signaling_server/service/node_modules/qs/test/utils.js [moved from signaling_server/service/node_modules/express/node_modules/qs/test/utils.js with 100% similarity]
signaling_server/service/node_modules/range-parser/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/range-parser/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/range-parser/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/range-parser/LICENSE with 100% similarity]
signaling_server/service/node_modules/range-parser/README.md [moved from signaling_server/service/node_modules/express/node_modules/range-parser/README.md with 100% similarity]
signaling_server/service/node_modules/range-parser/index.js [moved from signaling_server/service/node_modules/express/node_modules/range-parser/index.js with 100% similarity]
signaling_server/service/node_modules/range-parser/package.json [new file with mode: 0644]
signaling_server/service/node_modules/raw-body/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/raw-body/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/raw-body/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/raw-body/LICENSE with 100% similarity]
signaling_server/service/node_modules/raw-body/README.md [moved from signaling_server/service/node_modules/express/node_modules/raw-body/README.md with 100% similarity]
signaling_server/service/node_modules/raw-body/index.d.ts [moved from signaling_server/service/node_modules/express/node_modules/raw-body/index.d.ts with 100% similarity]
signaling_server/service/node_modules/raw-body/index.js [moved from signaling_server/service/node_modules/express/node_modules/raw-body/index.js with 100% similarity]
signaling_server/service/node_modules/raw-body/package.json [new file with mode: 0644]
signaling_server/service/node_modules/require-directory/.jshintrc [moved from signaling_server/service/node_modules/qrcode/node_modules/require-directory/.jshintrc with 100% similarity]
signaling_server/service/node_modules/require-directory/.npmignore [moved from signaling_server/service/node_modules/qrcode/node_modules/require-directory/.npmignore with 100% similarity]
signaling_server/service/node_modules/require-directory/.travis.yml [moved from signaling_server/service/node_modules/qrcode/node_modules/require-directory/.travis.yml with 100% similarity]
signaling_server/service/node_modules/require-directory/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/require-directory/LICENSE with 100% similarity]
signaling_server/service/node_modules/require-directory/README.markdown [moved from signaling_server/service/node_modules/qrcode/node_modules/require-directory/README.markdown with 100% similarity]
signaling_server/service/node_modules/require-directory/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/require-directory/index.js with 100% similarity]
signaling_server/service/node_modules/require-directory/package.json [new file with mode: 0644]
signaling_server/service/node_modules/require-main-filename/CHANGELOG.md [moved from signaling_server/service/node_modules/qrcode/node_modules/require-main-filename/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/require-main-filename/LICENSE.txt [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs-parser/LICENSE.txt with 100% similarity]
signaling_server/service/node_modules/require-main-filename/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/require-main-filename/README.md with 100% similarity]
signaling_server/service/node_modules/require-main-filename/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/require-main-filename/index.js with 100% similarity]
signaling_server/service/node_modules/require-main-filename/package.json [new file with mode: 0644]
signaling_server/service/node_modules/safe-buffer/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/safe-buffer/LICENSE with 100% similarity]
signaling_server/service/node_modules/safe-buffer/README.md [moved from signaling_server/service/node_modules/express/node_modules/safe-buffer/README.md with 100% similarity]
signaling_server/service/node_modules/safe-buffer/index.d.ts [moved from signaling_server/service/node_modules/express/node_modules/safe-buffer/index.d.ts with 100% similarity]
signaling_server/service/node_modules/safe-buffer/index.js [moved from signaling_server/service/node_modules/express/node_modules/safe-buffer/index.js with 100% similarity]
signaling_server/service/node_modules/safe-buffer/package.json [new file with mode: 0644]
signaling_server/service/node_modules/safer-buffer/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/safer-buffer/LICENSE with 100% similarity]
signaling_server/service/node_modules/safer-buffer/Porting-Buffer.md [moved from signaling_server/service/node_modules/express/node_modules/safer-buffer/Porting-Buffer.md with 100% similarity]
signaling_server/service/node_modules/safer-buffer/Readme.md [moved from signaling_server/service/node_modules/express/node_modules/safer-buffer/Readme.md with 100% similarity]
signaling_server/service/node_modules/safer-buffer/dangerous.js [moved from signaling_server/service/node_modules/express/node_modules/safer-buffer/dangerous.js with 100% similarity]
signaling_server/service/node_modules/safer-buffer/package.json [new file with mode: 0644]
signaling_server/service/node_modules/safer-buffer/safer.js [moved from signaling_server/service/node_modules/express/node_modules/safer-buffer/safer.js with 100% similarity]
signaling_server/service/node_modules/safer-buffer/tests.js [moved from signaling_server/service/node_modules/express/node_modules/safer-buffer/tests.js with 100% similarity]
signaling_server/service/node_modules/send/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/send/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/send/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/send/LICENSE with 100% similarity]
signaling_server/service/node_modules/send/README.md [moved from signaling_server/service/node_modules/express/node_modules/send/README.md with 100% similarity]
signaling_server/service/node_modules/send/index.js [moved from signaling_server/service/node_modules/express/node_modules/send/index.js with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/.coveralls.yml [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/.coveralls.yml with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/.eslintrc [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/.eslintrc with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/.npmignore [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/.npmignore with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/.travis.yml [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/.travis.yml with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/CHANGELOG.md [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/LICENSE [new file with mode: 0644]
signaling_server/service/node_modules/send/node_modules/debug/Makefile [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/Makefile with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/README.md [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/README.md with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/component.json [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/component.json with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/karma.conf.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/karma.conf.js with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/node.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/node.js with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/index.js [new file with mode: 0644]
signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/license.md [new file with mode: 0644]
signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/package.json [new file with mode: 0644]
signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/readme.md [new file with mode: 0644]
signaling_server/service/node_modules/send/node_modules/debug/package.json [new file with mode: 0644]
signaling_server/service/node_modules/send/node_modules/debug/src/browser.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/src/browser.js with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/src/debug.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/src/debug.js with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/src/index.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/src/index.js with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/src/inspector-log.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/src/inspector-log.js with 100% similarity]
signaling_server/service/node_modules/send/node_modules/debug/src/node.js [moved from signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/src/node.js with 100% similarity]
signaling_server/service/node_modules/send/node_modules/ms/index.js [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/ms/index.js with 100% similarity]
signaling_server/service/node_modules/send/node_modules/ms/license.md [new file with mode: 0644]
signaling_server/service/node_modules/send/node_modules/ms/package.json [new file with mode: 0644]
signaling_server/service/node_modules/send/node_modules/ms/readme.md [moved from signaling_server/service/node_modules/express/node_modules/send/node_modules/ms/readme.md with 100% similarity]
signaling_server/service/node_modules/send/package.json [new file with mode: 0644]
signaling_server/service/node_modules/serve-static/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/serve-static/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/serve-static/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/serve-static/LICENSE with 100% similarity]
signaling_server/service/node_modules/serve-static/README.md [moved from signaling_server/service/node_modules/express/node_modules/serve-static/README.md with 100% similarity]
signaling_server/service/node_modules/serve-static/index.js [moved from signaling_server/service/node_modules/express/node_modules/serve-static/index.js with 100% similarity]
signaling_server/service/node_modules/serve-static/package.json [new file with mode: 0644]
signaling_server/service/node_modules/set-blocking/CHANGELOG.md [moved from signaling_server/service/node_modules/qrcode/node_modules/set-blocking/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/set-blocking/LICENSE.txt [moved from signaling_server/service/node_modules/qrcode/node_modules/set-blocking/LICENSE.txt with 100% similarity]
signaling_server/service/node_modules/set-blocking/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/set-blocking/README.md with 100% similarity]
signaling_server/service/node_modules/set-blocking/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/set-blocking/index.js with 100% similarity]
signaling_server/service/node_modules/set-blocking/package.json [new file with mode: 0644]
signaling_server/service/node_modules/setprototypeof/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/setprototypeof/LICENSE with 100% similarity]
signaling_server/service/node_modules/setprototypeof/README.md [moved from signaling_server/service/node_modules/express/node_modules/setprototypeof/README.md with 100% similarity]
signaling_server/service/node_modules/setprototypeof/index.d.ts [moved from signaling_server/service/node_modules/express/node_modules/setprototypeof/index.d.ts with 100% similarity]
signaling_server/service/node_modules/setprototypeof/index.js [moved from signaling_server/service/node_modules/express/node_modules/setprototypeof/index.js with 100% similarity]
signaling_server/service/node_modules/setprototypeof/package.json [new file with mode: 0644]
signaling_server/service/node_modules/setprototypeof/test/index.js [moved from signaling_server/service/node_modules/express/node_modules/setprototypeof/test/index.js with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/.idea/$CACHE_FILE$ [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/.idea/$CACHE_FILE$ with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/.idea/inspectionProfiles/profiles_settings.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/blob/.idea/inspectionProfiles/profiles_settings.xml with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/.idea/misc.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/.idea/misc.xml with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/.idea/modules.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/.idea/modules.xml with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/.idea/socket.io-adapter.iml [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/.idea/socket.io-adapter.iml with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/.idea/vcs.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/.idea/vcs.xml with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/.idea/workspace.xml [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/.idea/workspace.xml with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/LICENSE with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/Readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/Readme.md with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/index.js with 100% similarity]
signaling_server/service/node_modules/socket.io-adapter/package.json [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-client/dist/socket.io.dev.js [deleted file]
signaling_server/service/node_modules/socket.io-client/dist/socket.io.dev.js.map [deleted file]
signaling_server/service/node_modules/socket.io-client/dist/socket.io.js [deleted file]
signaling_server/service/node_modules/socket.io-client/dist/socket.io.js.map [deleted file]
signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.dev.js [deleted file]
signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.dev.js.map [deleted file]
signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.js [deleted file]
signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.js.map [deleted file]
signaling_server/service/node_modules/socket.io-parser/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/LICENSE with 100% similarity]
signaling_server/service/node_modules/socket.io-parser/Readme.md [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/Readme.md with 100% similarity]
signaling_server/service/node_modules/socket.io-parser/binary.js [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/binary.js with 100% similarity]
signaling_server/service/node_modules/socket.io-parser/index.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/is-buffer.js [moved from signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/is-buffer.js with 100% similarity]
signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/History.md [moved from signaling_server/service/node_modules/socket.io/node_modules/component-emitter/History.md with 100% similarity]
signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/LICENSE [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/Readme.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/component-emitter/index.js with 100% similarity]
signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/package.json [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/debug/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/debug/LICENSE [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/debug/README.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/debug/dist/debug.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/debug/package.json [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/browser.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/common.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/index.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/node.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/isarray/README.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/isarray/index.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/node_modules/isarray/package.json [new file with mode: 0644]
signaling_server/service/node_modules/socket.io-parser/package.json [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/Readme.md
signaling_server/service/node_modules/socket.io/lib/socket.js
signaling_server/service/node_modules/socket.io/node_modules/accepts/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/after/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/arraybuffer.slice/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/async-limiter/.eslintignore [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/async-limiter/.nycrc [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/async-limiter/.travis.yml [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/async-limiter/LICENSE [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/async-limiter/index.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/async-limiter/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/async-limiter/readme.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/backo2/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/base64id/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/better-assert/.npmignore [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/better-assert/History.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/better-assert/Makefile [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/better-assert/Readme.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/better-assert/example.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/better-assert/index.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/better-assert/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/blob/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/callsite/History.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/callsite/Makefile [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/callsite/Readme.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/callsite/index.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/callsite/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/component-bind/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/component-emitter/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/component-inherit/.npmignore [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/component-inherit/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/cookie/HISTORY.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/cookie/README.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/cookie/index.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/cookie/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/debug/package.json
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/CHANGELOG.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/README.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/engine.io.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/socket.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transports/polling.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transports/websocket.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/README.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/browser.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/index.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/event-target.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/extension.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/receiver.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/sender.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/validation.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/websocket.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io-parser/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io/CHANGELOG.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io/README.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/server.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/engine.io/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/has-binary2/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/has-cors/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/indexof/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/isarray/package.json
signaling_server/service/node_modules/socket.io/node_modules/mime-db/HISTORY.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/mime-db/README.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/mime-db/db.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/mime-db/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/mime-types/HISTORY.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/mime-types/README.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/mime-types/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/ms/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/negotiator/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/object-component/History.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/object-component/Makefile [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/object-component/Readme.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/object-component/component.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/object-component/index.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/object-component/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/object-component/test/object.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseqs/.npmignore [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseqs/LICENSE [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseqs/Makefile [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseqs/README.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseqs/index.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseqs/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseqs/test.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseuri/.npmignore [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseuri/History.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseuri/LICENSE [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseuri/Makefile [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseuri/README.md [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseuri/index.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseuri/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/parseuri/test.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/README.md
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.dev.js
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.dev.js.map
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js.map
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.dev.js
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.dev.js.map
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.js
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.slim.js.map
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/lib/manager.js
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/lib/socket.js
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.coveralls.yml [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.eslintrc [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.npmignore [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.travis.yml [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/LICENSE [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/Makefile [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/README.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/karma.conf.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/node.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/package.json [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/browser.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/debug.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/index.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/node.js [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/ms/package.json
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/CHANGELOG.md [new file with mode: 0644]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/index.js
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/package.json
signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/package.json
signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/index.js [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/to-array/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/package.json [deleted file]
signaling_server/service/node_modules/socket.io/node_modules/yeast/package.json [deleted file]
signaling_server/service/node_modules/socket.io/package.json
signaling_server/service/node_modules/statuses/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/statuses/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/statuses/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/statuses/LICENSE with 100% similarity]
signaling_server/service/node_modules/statuses/README.md [moved from signaling_server/service/node_modules/express/node_modules/statuses/README.md with 100% similarity]
signaling_server/service/node_modules/statuses/codes.json [moved from signaling_server/service/node_modules/express/node_modules/statuses/codes.json with 100% similarity]
signaling_server/service/node_modules/statuses/index.js [moved from signaling_server/service/node_modules/express/node_modules/statuses/index.js with 100% similarity]
signaling_server/service/node_modules/statuses/package.json [new file with mode: 0644]
signaling_server/service/node_modules/string-width/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/string-width/index.js with 100% similarity]
signaling_server/service/node_modules/string-width/license [moved from signaling_server/service/node_modules/qrcode/node_modules/camelcase/license with 100% similarity]
signaling_server/service/node_modules/string-width/package.json [new file with mode: 0644]
signaling_server/service/node_modules/string-width/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/string-width/readme.md with 100% similarity]
signaling_server/service/node_modules/strip-ansi/index.d.ts [moved from signaling_server/service/node_modules/qrcode/node_modules/strip-ansi/index.d.ts with 100% similarity]
signaling_server/service/node_modules/strip-ansi/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/strip-ansi/index.js with 100% similarity]
signaling_server/service/node_modules/strip-ansi/license [moved from signaling_server/service/node_modules/qrcode/node_modules/ansi-styles/license with 100% similarity]
signaling_server/service/node_modules/strip-ansi/package.json [new file with mode: 0644]
signaling_server/service/node_modules/strip-ansi/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/strip-ansi/readme.md with 100% similarity]
signaling_server/service/node_modules/to-array/.npmignore [moved from signaling_server/service/node_modules/socket.io/node_modules/to-array/.npmignore with 100% similarity]
signaling_server/service/node_modules/to-array/LICENCE [moved from signaling_server/service/node_modules/socket.io/node_modules/to-array/LICENCE with 100% similarity]
signaling_server/service/node_modules/to-array/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/to-array/README.md with 100% similarity]
signaling_server/service/node_modules/to-array/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/to-array/index.js with 100% similarity]
signaling_server/service/node_modules/to-array/package.json [new file with mode: 0644]
signaling_server/service/node_modules/toidentifier/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/toidentifier/LICENSE with 100% similarity]
signaling_server/service/node_modules/toidentifier/README.md [moved from signaling_server/service/node_modules/express/node_modules/toidentifier/README.md with 100% similarity]
signaling_server/service/node_modules/toidentifier/index.js [moved from signaling_server/service/node_modules/express/node_modules/toidentifier/index.js with 100% similarity]
signaling_server/service/node_modules/toidentifier/package.json [new file with mode: 0644]
signaling_server/service/node_modules/type-is/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/type-is/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/type-is/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/body-parser/LICENSE with 100% similarity]
signaling_server/service/node_modules/type-is/README.md [moved from signaling_server/service/node_modules/express/node_modules/type-is/README.md with 100% similarity]
signaling_server/service/node_modules/type-is/index.js [moved from signaling_server/service/node_modules/express/node_modules/type-is/index.js with 100% similarity]
signaling_server/service/node_modules/type-is/package.json [new file with mode: 0644]
signaling_server/service/node_modules/unpipe/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/unpipe/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/unpipe/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/unpipe/LICENSE with 100% similarity]
signaling_server/service/node_modules/unpipe/README.md [moved from signaling_server/service/node_modules/express/node_modules/unpipe/README.md with 100% similarity]
signaling_server/service/node_modules/unpipe/index.js [moved from signaling_server/service/node_modules/express/node_modules/unpipe/index.js with 100% similarity]
signaling_server/service/node_modules/unpipe/package.json [new file with mode: 0644]
signaling_server/service/node_modules/utils-merge/.npmignore [moved from signaling_server/service/node_modules/express/node_modules/utils-merge/.npmignore with 100% similarity]
signaling_server/service/node_modules/utils-merge/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/utils-merge/LICENSE with 100% similarity]
signaling_server/service/node_modules/utils-merge/README.md [moved from signaling_server/service/node_modules/express/node_modules/utils-merge/README.md with 100% similarity]
signaling_server/service/node_modules/utils-merge/index.js [moved from signaling_server/service/node_modules/express/node_modules/utils-merge/index.js with 100% similarity]
signaling_server/service/node_modules/utils-merge/package.json [new file with mode: 0644]
signaling_server/service/node_modules/vary/HISTORY.md [moved from signaling_server/service/node_modules/express/node_modules/vary/HISTORY.md with 100% similarity]
signaling_server/service/node_modules/vary/LICENSE [moved from signaling_server/service/node_modules/express/node_modules/content-disposition/LICENSE with 100% similarity]
signaling_server/service/node_modules/vary/README.md [moved from signaling_server/service/node_modules/express/node_modules/vary/README.md with 100% similarity]
signaling_server/service/node_modules/vary/index.js [moved from signaling_server/service/node_modules/express/node_modules/vary/index.js with 100% similarity]
signaling_server/service/node_modules/vary/package.json [new file with mode: 0644]
signaling_server/service/node_modules/which-module/CHANGELOG.md [moved from signaling_server/service/node_modules/qrcode/node_modules/which-module/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/which-module/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/which-module/LICENSE with 100% similarity]
signaling_server/service/node_modules/which-module/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/which-module/README.md with 100% similarity]
signaling_server/service/node_modules/which-module/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/which-module/index.js with 100% similarity]
signaling_server/service/node_modules/which-module/package.json [new file with mode: 0644]
signaling_server/service/node_modules/wrap-ansi/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/wrap-ansi/index.js with 100% similarity, mode: 0755]
signaling_server/service/node_modules/wrap-ansi/license [moved from signaling_server/service/node_modules/qrcode/node_modules/ansi-regex/license with 100% similarity]
signaling_server/service/node_modules/wrap-ansi/package.json [new file with mode: 0644]
signaling_server/service/node_modules/wrap-ansi/readme.md [moved from signaling_server/service/node_modules/qrcode/node_modules/wrap-ansi/readme.md with 100% similarity]
signaling_server/service/node_modules/ws/README.md [deleted file]
signaling_server/service/node_modules/ws/index.js [deleted file]
signaling_server/service/node_modules/ws/lib/buffer-util.js [deleted file]
signaling_server/service/node_modules/ws/lib/event-target.js [deleted file]
signaling_server/service/node_modules/ws/lib/extension.js [deleted file]
signaling_server/service/node_modules/ws/lib/permessage-deflate.js [deleted file]
signaling_server/service/node_modules/ws/lib/receiver.js [deleted file]
signaling_server/service/node_modules/ws/lib/sender.js [deleted file]
signaling_server/service/node_modules/ws/lib/validation.js [deleted file]
signaling_server/service/node_modules/ws/lib/websocket-server.js [deleted file]
signaling_server/service/node_modules/ws/lib/websocket.js [deleted file]
signaling_server/service/node_modules/ws/node_modules/async-limiter/.eslintignore [deleted file]
signaling_server/service/node_modules/ws/node_modules/async-limiter/.nycrc [deleted file]
signaling_server/service/node_modules/ws/node_modules/async-limiter/.travis.yml [deleted file]
signaling_server/service/node_modules/ws/node_modules/async-limiter/LICENSE [deleted file]
signaling_server/service/node_modules/ws/node_modules/async-limiter/index.js [deleted file]
signaling_server/service/node_modules/ws/node_modules/async-limiter/package.json [deleted file]
signaling_server/service/node_modules/ws/node_modules/async-limiter/readme.md [deleted file]
signaling_server/service/node_modules/ws/package.json [deleted file]
signaling_server/service/node_modules/xmlhttprequest-ssl/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/LICENSE with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/README.md with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/autotest.watchr [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/autotest.watchr with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/example/demo.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/example/demo.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/package.json [new file with mode: 0644]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/test-constants.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/test-constants.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/test-events.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/test-events.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/test-exceptions.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/test-exceptions.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/test-headers.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/test-headers.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/test-redirect-302.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/test-redirect-302.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/test-redirect-303.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/test-redirect-303.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/test-redirect-307.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/test-redirect-307.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/test-request-methods.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/test-request-methods.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/test-request-protocols.js [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/test-request-protocols.js with 100% similarity]
signaling_server/service/node_modules/xmlhttprequest-ssl/tests/testdata.txt [moved from signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/tests/testdata.txt with 100% similarity]
signaling_server/service/node_modules/y18n/CHANGELOG.md [moved from signaling_server/service/node_modules/qrcode/node_modules/y18n/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/y18n/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/y18n/LICENSE with 100% similarity]
signaling_server/service/node_modules/y18n/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/y18n/README.md with 100% similarity]
signaling_server/service/node_modules/y18n/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/y18n/index.js with 100% similarity]
signaling_server/service/node_modules/y18n/package.json [new file with mode: 0644]
signaling_server/service/node_modules/yargs-parser/CHANGELOG.md [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs-parser/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/yargs-parser/LICENSE.txt [moved from signaling_server/service/node_modules/qrcode/node_modules/require-main-filename/LICENSE.txt with 100% similarity]
signaling_server/service/node_modules/yargs-parser/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs-parser/README.md with 100% similarity]
signaling_server/service/node_modules/yargs-parser/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs-parser/index.js with 100% similarity]
signaling_server/service/node_modules/yargs-parser/lib/tokenize-arg-string.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs-parser/lib/tokenize-arg-string.js with 100% similarity]
signaling_server/service/node_modules/yargs-parser/package.json [new file with mode: 0644]
signaling_server/service/node_modules/yargs/CHANGELOG.md [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/CHANGELOG.md with 100% similarity]
signaling_server/service/node_modules/yargs/LICENSE [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/LICENSE with 100% similarity]
signaling_server/service/node_modules/yargs/README.md [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/README.md with 100% similarity]
signaling_server/service/node_modules/yargs/index.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/index.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/apply-extends.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/apply-extends.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/argsert.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/argsert.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/command.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/command.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/completion-templates.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/completion-templates.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/completion.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/completion.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/decamelize.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/decamelize.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/is-promise.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/is-promise.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/levenshtein.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/levenshtein.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/middleware.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/middleware.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/obj-filter.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/obj-filter.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/usage.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/usage.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/validation.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/validation.js with 100% similarity]
signaling_server/service/node_modules/yargs/lib/yerror.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/lib/yerror.js with 100% similarity]
signaling_server/service/node_modules/yargs/locales/be.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/be.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/de.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/de.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/en.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/en.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/es.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/es.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/fr.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/fr.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/hi.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/hi.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/hu.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/hu.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/id.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/id.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/it.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/it.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/ja.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/ja.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/ko.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/ko.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/nb.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/nb.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/nl.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/nl.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/nn.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/nn.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/pirate.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/pirate.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/pl.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/pl.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/pt.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/pt.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/pt_BR.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/pt_BR.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/ru.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/ru.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/th.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/th.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/tr.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/tr.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/zh_CN.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/zh_CN.json with 100% similarity]
signaling_server/service/node_modules/yargs/locales/zh_TW.json [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/locales/zh_TW.json with 100% similarity]
signaling_server/service/node_modules/yargs/package.json [new file with mode: 0644]
signaling_server/service/node_modules/yargs/yargs.js [moved from signaling_server/service/node_modules/qrcode/node_modules/yargs/yargs.js with 100% similarity]
signaling_server/service/node_modules/yeast/LICENSE [moved from signaling_server/service/node_modules/socket.io/node_modules/yeast/LICENSE with 100% similarity]
signaling_server/service/node_modules/yeast/README.md [moved from signaling_server/service/node_modules/socket.io/node_modules/yeast/README.md with 100% similarity]
signaling_server/service/node_modules/yeast/index.js [moved from signaling_server/service/node_modules/socket.io/node_modules/yeast/index.js with 100% similarity]
signaling_server/service/node_modules/yeast/package.json [new file with mode: 0644]

diff --git a/signaling_server/service/node_modules/.bin/mime b/signaling_server/service/node_modules/.bin/mime
new file mode 120000 (symlink)
index 0000000..fbb7ee0
--- /dev/null
@@ -0,0 +1 @@
+../mime/cli.js
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/.bin/qrcode b/signaling_server/service/node_modules/.bin/qrcode
new file mode 120000 (symlink)
index 0000000..aae83f0
--- /dev/null
@@ -0,0 +1 @@
+../qrcode/bin/qrcode
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/accepts/package.json b/signaling_server/service/node_modules/accepts/package.json
new file mode 100644 (file)
index 0000000..0773589
--- /dev/null
@@ -0,0 +1,90 @@
+{
+  "_args": [
+    [
+      "accepts@1.3.7",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "accepts@1.3.7",
+  "_id": "accepts@1.3.7",
+  "_inBundle": false,
+  "_integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+  "_location": "/accepts",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "accepts@1.3.7",
+    "name": "accepts",
+    "escapedName": "accepts",
+    "rawSpec": "1.3.7",
+    "saveSpec": null,
+    "fetchSpec": "1.3.7"
+  },
+  "_requiredBy": [
+    "/engine.io",
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+  "_spec": "1.3.7",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/jshttp/accepts/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    }
+  ],
+  "dependencies": {
+    "mime-types": "~2.1.24",
+    "negotiator": "0.6.2"
+  },
+  "description": "Higher-level content negotiation",
+  "devDependencies": {
+    "deep-equal": "1.0.1",
+    "eslint": "5.16.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.17.2",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "8.0.1",
+    "eslint-plugin-promise": "4.1.1",
+    "eslint-plugin-standard": "4.0.0",
+    "mocha": "6.1.4",
+    "nyc": "14.0.0"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/accepts#readme",
+  "keywords": [
+    "content",
+    "negotiation",
+    "accept",
+    "accepts"
+  ],
+  "license": "MIT",
+  "name": "accepts",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/accepts.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --check-leaks --bail test/",
+    "test-cov": "nyc --reporter=html --reporter=text npm test",
+    "test-travis": "nyc --reporter=text npm test"
+  },
+  "version": "1.3.7"
+}
diff --git a/signaling_server/service/node_modules/after/package.json b/signaling_server/service/node_modules/after/package.json
new file mode 100644 (file)
index 0000000..5927d6a
--- /dev/null
@@ -0,0 +1,66 @@
+{
+  "_args": [
+    [
+      "after@0.8.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "after@0.8.2",
+  "_id": "after@0.8.2",
+  "_inBundle": false,
+  "_integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+  "_location": "/after",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "after@0.8.2",
+    "name": "after",
+    "escapedName": "after",
+    "rawSpec": "0.8.2",
+    "saveSpec": null,
+    "fetchSpec": "0.8.2"
+  },
+  "_requiredBy": [
+    "/engine.io-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+  "_spec": "0.8.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Raynos",
+    "email": "raynos2@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/Raynos/after/issues"
+  },
+  "contributors": [
+    {
+      "name": "Raynos",
+      "email": "raynos2@gmail.com",
+      "url": "http://raynos.org"
+    }
+  ],
+  "description": "after - tiny flow control",
+  "devDependencies": {
+    "mocha": "~1.8.1"
+  },
+  "homepage": "https://github.com/Raynos/after#readme",
+  "keywords": [
+    "flowcontrol",
+    "after",
+    "flow",
+    "control",
+    "arch"
+  ],
+  "license": "MIT",
+  "name": "after",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/Raynos/after.git"
+  },
+  "scripts": {
+    "test": "mocha --ui tdd --reporter spec test/*.js"
+  },
+  "version": "0.8.2"
+}
diff --git a/signaling_server/service/node_modules/ansi-regex/package.json b/signaling_server/service/node_modules/ansi-regex/package.json
new file mode 100644 (file)
index 0000000..61f7446
--- /dev/null
@@ -0,0 +1,88 @@
+{
+  "_args": [
+    [
+      "ansi-regex@4.1.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ansi-regex@4.1.0",
+  "_id": "ansi-regex@4.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+  "_location": "/ansi-regex",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ansi-regex@4.1.0",
+    "name": "ansi-regex",
+    "escapedName": "ansi-regex",
+    "rawSpec": "4.1.0",
+    "saveSpec": null,
+    "fetchSpec": "4.1.0"
+  },
+  "_requiredBy": [
+    "/strip-ansi"
+  ],
+  "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+  "_spec": "4.1.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/chalk/ansi-regex/issues"
+  },
+  "description": "Regular expression for matching ANSI escape codes",
+  "devDependencies": {
+    "ava": "^0.25.0",
+    "xo": "^0.23.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/chalk/ansi-regex#readme",
+  "keywords": [
+    "ansi",
+    "styles",
+    "color",
+    "colour",
+    "colors",
+    "terminal",
+    "console",
+    "cli",
+    "string",
+    "tty",
+    "escape",
+    "formatting",
+    "rgb",
+    "256",
+    "shell",
+    "xterm",
+    "command-line",
+    "text",
+    "regex",
+    "regexp",
+    "re",
+    "match",
+    "test",
+    "find",
+    "pattern"
+  ],
+  "license": "MIT",
+  "name": "ansi-regex",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/chalk/ansi-regex.git"
+  },
+  "scripts": {
+    "test": "xo && ava",
+    "view-supported": "node fixtures/view-codes.js"
+  },
+  "version": "4.1.0"
+}
diff --git a/signaling_server/service/node_modules/ansi-styles/package.json b/signaling_server/service/node_modules/ansi-styles/package.json
new file mode 100644 (file)
index 0000000..eb42601
--- /dev/null
@@ -0,0 +1,91 @@
+{
+  "_args": [
+    [
+      "ansi-styles@3.2.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ansi-styles@3.2.1",
+  "_id": "ansi-styles@3.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+  "_location": "/ansi-styles",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ansi-styles@3.2.1",
+    "name": "ansi-styles",
+    "escapedName": "ansi-styles",
+    "rawSpec": "3.2.1",
+    "saveSpec": null,
+    "fetchSpec": "3.2.1"
+  },
+  "_requiredBy": [
+    "/wrap-ansi"
+  ],
+  "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+  "_spec": "3.2.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "ava": {
+    "require": "babel-polyfill"
+  },
+  "bugs": {
+    "url": "https://github.com/chalk/ansi-styles/issues"
+  },
+  "dependencies": {
+    "color-convert": "^1.9.0"
+  },
+  "description": "ANSI escape codes for styling strings in the terminal",
+  "devDependencies": {
+    "ava": "*",
+    "babel-polyfill": "^6.23.0",
+    "svg-term-cli": "^2.1.1",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/chalk/ansi-styles#readme",
+  "keywords": [
+    "ansi",
+    "styles",
+    "color",
+    "colour",
+    "colors",
+    "terminal",
+    "console",
+    "cli",
+    "string",
+    "tty",
+    "escape",
+    "formatting",
+    "rgb",
+    "256",
+    "shell",
+    "xterm",
+    "log",
+    "logging",
+    "command-line",
+    "text"
+  ],
+  "license": "MIT",
+  "name": "ansi-styles",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/chalk/ansi-styles.git"
+  },
+  "scripts": {
+    "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor",
+    "test": "xo && ava"
+  },
+  "version": "3.2.1"
+}
diff --git a/signaling_server/service/node_modules/array-flatten/package.json b/signaling_server/service/node_modules/array-flatten/package.json
new file mode 100644 (file)
index 0000000..21d6c92
--- /dev/null
@@ -0,0 +1,67 @@
+{
+  "_args": [
+    [
+      "array-flatten@1.1.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "array-flatten@1.1.1",
+  "_id": "array-flatten@1.1.1",
+  "_inBundle": false,
+  "_integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+  "_location": "/array-flatten",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "array-flatten@1.1.1",
+    "name": "array-flatten",
+    "escapedName": "array-flatten",
+    "rawSpec": "1.1.1",
+    "saveSpec": null,
+    "fetchSpec": "1.1.1"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+  "_spec": "1.1.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Blake Embrey",
+    "email": "hello@blakeembrey.com",
+    "url": "http://blakeembrey.me"
+  },
+  "bugs": {
+    "url": "https://github.com/blakeembrey/array-flatten/issues"
+  },
+  "description": "Flatten an array of nested arrays into a single flat array",
+  "devDependencies": {
+    "istanbul": "^0.3.13",
+    "mocha": "^2.2.4",
+    "pre-commit": "^1.0.7",
+    "standard": "^3.7.3"
+  },
+  "files": [
+    "array-flatten.js",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/blakeembrey/array-flatten",
+  "keywords": [
+    "array",
+    "flatten",
+    "arguments",
+    "depth"
+  ],
+  "license": "MIT",
+  "main": "array-flatten.js",
+  "name": "array-flatten",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/blakeembrey/array-flatten.git"
+  },
+  "scripts": {
+    "test": "istanbul cover _mocha -- -R spec"
+  },
+  "version": "1.1.1"
+}
diff --git a/signaling_server/service/node_modules/arraybuffer.slice/package.json b/signaling_server/service/node_modules/arraybuffer.slice/package.json
new file mode 100644 (file)
index 0000000..f4c0d04
--- /dev/null
@@ -0,0 +1,47 @@
+{
+  "_args": [
+    [
+      "arraybuffer.slice@0.0.7",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "arraybuffer.slice@0.0.7",
+  "_id": "arraybuffer.slice@0.0.7",
+  "_inBundle": false,
+  "_integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+  "_location": "/arraybuffer.slice",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "arraybuffer.slice@0.0.7",
+    "name": "arraybuffer.slice",
+    "escapedName": "arraybuffer.slice",
+    "rawSpec": "0.0.7",
+    "saveSpec": null,
+    "fetchSpec": "0.0.7"
+  },
+  "_requiredBy": [
+    "/engine.io-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+  "_spec": "0.0.7",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/rase-/arraybuffer.slice/issues"
+  },
+  "dependencies": {},
+  "description": "Exports a function for slicing ArrayBuffers (no polyfilling)",
+  "devDependencies": {
+    "expect.js": "0.2.0",
+    "mocha": "1.17.1"
+  },
+  "homepage": "https://github.com/rase-/arraybuffer.slice",
+  "license": "MIT",
+  "name": "arraybuffer.slice",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/rase-/arraybuffer.slice.git"
+  },
+  "version": "0.0.7"
+}
diff --git a/signaling_server/service/node_modules/backo2/package.json b/signaling_server/service/node_modules/backo2/package.json
new file mode 100644 (file)
index 0000000..a661272
--- /dev/null
@@ -0,0 +1,50 @@
+{
+  "_args": [
+    [
+      "backo2@1.0.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "backo2@1.0.2",
+  "_id": "backo2@1.0.2",
+  "_inBundle": false,
+  "_integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+  "_location": "/backo2",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "backo2@1.0.2",
+    "name": "backo2",
+    "escapedName": "backo2",
+    "rawSpec": "1.0.2",
+    "saveSpec": null,
+    "fetchSpec": "1.0.2"
+  },
+  "_requiredBy": [
+    "/socket.io/socket.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+  "_spec": "1.0.2",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/mokesmokes/backo/issues"
+  },
+  "dependencies": {},
+  "description": "simple backoff based on segmentio/backo",
+  "devDependencies": {
+    "mocha": "*",
+    "should": "*"
+  },
+  "homepage": "https://github.com/mokesmokes/backo#readme",
+  "keywords": [
+    "backoff"
+  ],
+  "license": "MIT",
+  "name": "backo2",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mokesmokes/backo.git"
+  },
+  "version": "1.0.2"
+}
diff --git a/signaling_server/service/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js b/signaling_server/service/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js
new file mode 100644 (file)
index 0000000..362fbfa
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * base64-arraybuffer
+ * https://github.com/niklasvh/base64-arraybuffer
+ *
+ * Copyright (c) 2012 Niklas von Hertzen
+ * Licensed under the MIT license.
+ */
+(function(chars){
+  "use strict";
+
+  exports.encode = function(arraybuffer) {
+    var bytes = new Uint8Array(arraybuffer),
+    i, len = bytes.length, base64 = "";
+
+    for (i = 0; i < len; i+=3) {
+      base64 += chars[bytes[i] >> 2];
+      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
+      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
+      base64 += chars[bytes[i + 2] & 63];
+    }
+
+    if ((len % 3) === 2) {
+      base64 = base64.substring(0, base64.length - 1) + "=";
+    } else if (len % 3 === 1) {
+      base64 = base64.substring(0, base64.length - 2) + "==";
+    }
+
+    return base64;
+  };
+
+  exports.decode =  function(base64) {
+    var bufferLength = base64.length * 0.75,
+    len = base64.length, i, p = 0,
+    encoded1, encoded2, encoded3, encoded4;
+
+    if (base64[base64.length - 1] === "=") {
+      bufferLength--;
+      if (base64[base64.length - 2] === "=") {
+        bufferLength--;
+      }
+    }
+
+    var arraybuffer = new ArrayBuffer(bufferLength),
+    bytes = new Uint8Array(arraybuffer);
+
+    for (i = 0; i < len; i+=4) {
+      encoded1 = chars.indexOf(base64[i]);
+      encoded2 = chars.indexOf(base64[i+1]);
+      encoded3 = chars.indexOf(base64[i+2]);
+      encoded4 = chars.indexOf(base64[i+3]);
+
+      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
+      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
+      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
+    }
+
+    return arraybuffer;
+  };
+})("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
diff --git a/signaling_server/service/node_modules/base64-arraybuffer/package.json b/signaling_server/service/node_modules/base64-arraybuffer/package.json
new file mode 100644 (file)
index 0000000..8c429d8
--- /dev/null
@@ -0,0 +1,67 @@
+{
+  "_args": [
+    [
+      "base64-arraybuffer@0.1.4",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "base64-arraybuffer@0.1.4",
+  "_id": "base64-arraybuffer@0.1.4",
+  "_inBundle": false,
+  "_integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=",
+  "_location": "/base64-arraybuffer",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "base64-arraybuffer@0.1.4",
+    "name": "base64-arraybuffer",
+    "escapedName": "base64-arraybuffer",
+    "rawSpec": "0.1.4",
+    "saveSpec": null,
+    "fetchSpec": "0.1.4"
+  },
+  "_requiredBy": [
+    "/engine.io-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
+  "_spec": "0.1.4",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Niklas von Hertzen",
+    "email": "niklasvh@gmail.com",
+    "url": "http://hertzen.com"
+  },
+  "bugs": {
+    "url": "https://github.com/niklasvh/base64-arraybuffer/issues"
+  },
+  "description": "Encode/decode base64 data into ArrayBuffers",
+  "devDependencies": {
+    "grunt": "^0.4.5",
+    "grunt-cli": "^0.1.13",
+    "grunt-contrib-jshint": "^0.11.2",
+    "grunt-contrib-nodeunit": "^0.4.1",
+    "grunt-contrib-watch": "^0.6.1"
+  },
+  "engines": {
+    "node": ">= 0.6.0"
+  },
+  "homepage": "https://github.com/niklasvh/base64-arraybuffer",
+  "keywords": [],
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "https://github.com/niklasvh/base64-arraybuffer/blob/master/LICENSE-MIT"
+    }
+  ],
+  "main": "lib/base64-arraybuffer",
+  "name": "base64-arraybuffer",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/niklasvh/base64-arraybuffer.git"
+  },
+  "scripts": {
+    "test": "grunt nodeunit"
+  },
+  "version": "0.1.4"
+}
diff --git a/signaling_server/service/node_modules/base64-js/package.json b/signaling_server/service/node_modules/base64-js/package.json
new file mode 100644 (file)
index 0000000..174bc35
--- /dev/null
@@ -0,0 +1,78 @@
+{
+  "_args": [
+    [
+      "base64-js@1.5.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "base64-js@1.5.1",
+  "_id": "base64-js@1.5.1",
+  "_inBundle": false,
+  "_integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+  "_location": "/base64-js",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "base64-js@1.5.1",
+    "name": "base64-js",
+    "escapedName": "base64-js",
+    "rawSpec": "1.5.1",
+    "saveSpec": null,
+    "fetchSpec": "1.5.1"
+  },
+  "_requiredBy": [
+    "/buffer"
+  ],
+  "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+  "_spec": "1.5.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "T. Jameson Little",
+    "email": "t.jameson.little@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/beatgammit/base64-js/issues"
+  },
+  "description": "Base64 encoding/decoding in pure JS",
+  "devDependencies": {
+    "babel-minify": "^0.5.1",
+    "benchmark": "^2.1.4",
+    "browserify": "^16.3.0",
+    "standard": "*",
+    "tape": "4.x"
+  },
+  "funding": [
+    {
+      "type": "github",
+      "url": "https://github.com/sponsors/feross"
+    },
+    {
+      "type": "patreon",
+      "url": "https://www.patreon.com/feross"
+    },
+    {
+      "type": "consulting",
+      "url": "https://feross.org/support"
+    }
+  ],
+  "homepage": "https://github.com/beatgammit/base64-js",
+  "keywords": [
+    "base64"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "base64-js",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/beatgammit/base64-js.git"
+  },
+  "scripts": {
+    "build": "browserify -s base64js -r ./ | minify > base64js.min.js",
+    "lint": "standard",
+    "test": "npm run lint && npm run unit",
+    "unit": "tape test/*.js"
+  },
+  "typings": "index.d.ts",
+  "version": "1.5.1"
+}
diff --git a/signaling_server/service/node_modules/blob/package.json b/signaling_server/service/node_modules/blob/package.json
new file mode 100644 (file)
index 0000000..8ae935d
--- /dev/null
@@ -0,0 +1,52 @@
+{
+  "_args": [
+    [
+      "blob@0.0.5",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "blob@0.0.5",
+  "_id": "blob@0.0.5",
+  "_inBundle": false,
+  "_integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
+  "_location": "/blob",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "blob@0.0.5",
+    "name": "blob",
+    "escapedName": "blob",
+    "rawSpec": "0.0.5",
+    "saveSpec": null,
+    "fetchSpec": "0.0.5"
+  },
+  "_requiredBy": [
+    "/engine.io-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+  "_spec": "0.0.5",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/webmodules/blob/issues"
+  },
+  "dependencies": {},
+  "description": "Abstracts out Blob and uses BlobBulder in cases where it is supported with any vendor prefix.",
+  "devDependencies": {
+    "browserify": "4.2.3",
+    "expect.js": "0.2.0",
+    "mocha": "1.17.1",
+    "zuul": "1.10.2"
+  },
+  "homepage": "https://github.com/webmodules/blob",
+  "license": "MIT",
+  "name": "blob",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/webmodules/blob.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "version": "0.0.5"
+}
diff --git a/signaling_server/service/node_modules/body-parser/node_modules/debug/package.json b/signaling_server/service/node_modules/body-parser/node_modules/debug/package.json
new file mode 100644 (file)
index 0000000..1262f12
--- /dev/null
@@ -0,0 +1,91 @@
+{
+  "_args": [
+    [
+      "debug@2.6.9",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "debug@2.6.9",
+  "_id": "debug@2.6.9",
+  "_inBundle": false,
+  "_integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+  "_location": "/body-parser/debug",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "debug@2.6.9",
+    "name": "debug",
+    "escapedName": "debug",
+    "rawSpec": "2.6.9",
+    "saveSpec": null,
+    "fetchSpec": "2.6.9"
+  },
+  "_requiredBy": [
+    "/body-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+  "_spec": "2.6.9",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca"
+  },
+  "browser": "./src/browser.js",
+  "bugs": {
+    "url": "https://github.com/visionmedia/debug/issues"
+  },
+  "component": {
+    "scripts": {
+      "debug/index.js": "browser.js",
+      "debug/debug.js": "debug.js"
+    }
+  },
+  "contributors": [
+    {
+      "name": "Nathan Rajlich",
+      "email": "nathan@tootallnate.net",
+      "url": "http://n8.io"
+    },
+    {
+      "name": "Andrew Rhyne",
+      "email": "rhyneandrew@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "ms": "2.0.0"
+  },
+  "description": "small debugging utility",
+  "devDependencies": {
+    "browserify": "9.0.3",
+    "chai": "^3.5.0",
+    "concurrently": "^3.1.0",
+    "coveralls": "^2.11.15",
+    "eslint": "^3.12.1",
+    "istanbul": "^0.4.5",
+    "karma": "^1.3.0",
+    "karma-chai": "^0.1.0",
+    "karma-mocha": "^1.3.0",
+    "karma-phantomjs-launcher": "^1.0.2",
+    "karma-sinon": "^1.0.5",
+    "mocha": "^3.2.0",
+    "mocha-lcov-reporter": "^1.2.0",
+    "rimraf": "^2.5.4",
+    "sinon": "^1.17.6",
+    "sinon-chai": "^2.8.0"
+  },
+  "homepage": "https://github.com/visionmedia/debug#readme",
+  "keywords": [
+    "debug",
+    "log",
+    "debugger"
+  ],
+  "license": "MIT",
+  "main": "./src/index.js",
+  "name": "debug",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/visionmedia/debug.git"
+  },
+  "version": "2.6.9"
+}
diff --git a/signaling_server/service/node_modules/body-parser/node_modules/ms/package.json b/signaling_server/service/node_modules/body-parser/node_modules/ms/package.json
new file mode 100644 (file)
index 0000000..664190d
--- /dev/null
@@ -0,0 +1,72 @@
+{
+  "_args": [
+    [
+      "ms@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ms@2.0.0",
+  "_id": "ms@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+  "_location": "/body-parser/ms",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ms@2.0.0",
+    "name": "ms",
+    "escapedName": "ms",
+    "rawSpec": "2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "2.0.0"
+  },
+  "_requiredBy": [
+    "/body-parser/debug"
+  ],
+  "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/zeit/ms/issues"
+  },
+  "description": "Tiny milisecond conversion utility",
+  "devDependencies": {
+    "eslint": "3.19.0",
+    "expect.js": "0.3.1",
+    "husky": "0.13.3",
+    "lint-staged": "3.4.1",
+    "mocha": "3.4.1"
+  },
+  "eslintConfig": {
+    "extends": "eslint:recommended",
+    "env": {
+      "node": true,
+      "es6": true
+    }
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/zeit/ms#readme",
+  "license": "MIT",
+  "lint-staged": {
+    "*.js": [
+      "npm run lint",
+      "prettier --single-quote --write",
+      "git add"
+    ]
+  },
+  "main": "./index",
+  "name": "ms",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/zeit/ms.git"
+  },
+  "scripts": {
+    "lint": "eslint lib/* bin/*",
+    "precommit": "lint-staged",
+    "test": "mocha tests.js"
+  },
+  "version": "2.0.0"
+}
diff --git a/signaling_server/service/node_modules/body-parser/package.json b/signaling_server/service/node_modules/body-parser/package.json
new file mode 100644 (file)
index 0000000..91caa5f
--- /dev/null
@@ -0,0 +1,94 @@
+{
+  "_args": [
+    [
+      "body-parser@1.19.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "body-parser@1.19.0",
+  "_id": "body-parser@1.19.0",
+  "_inBundle": false,
+  "_integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+  "_location": "/body-parser",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "body-parser@1.19.0",
+    "name": "body-parser",
+    "escapedName": "body-parser",
+    "rawSpec": "1.19.0",
+    "saveSpec": null,
+    "fetchSpec": "1.19.0"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+  "_spec": "1.19.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/expressjs/body-parser/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    }
+  ],
+  "dependencies": {
+    "bytes": "3.1.0",
+    "content-type": "~1.0.4",
+    "debug": "2.6.9",
+    "depd": "~1.1.2",
+    "http-errors": "1.7.2",
+    "iconv-lite": "0.4.24",
+    "on-finished": "~2.3.0",
+    "qs": "6.7.0",
+    "raw-body": "2.4.0",
+    "type-is": "~1.6.17"
+  },
+  "description": "Node.js body parsing middleware",
+  "devDependencies": {
+    "eslint": "5.16.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.17.2",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "8.0.1",
+    "eslint-plugin-promise": "4.1.1",
+    "eslint-plugin-standard": "4.0.0",
+    "istanbul": "0.4.5",
+    "methods": "1.1.2",
+    "mocha": "6.1.4",
+    "safe-buffer": "5.1.2",
+    "supertest": "4.0.2"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "lib/",
+    "LICENSE",
+    "HISTORY.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/expressjs/body-parser#readme",
+  "license": "MIT",
+  "name": "body-parser",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/expressjs/body-parser.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/"
+  },
+  "version": "1.19.0"
+}
diff --git a/signaling_server/service/node_modules/buffer-alloc-unsafe/package.json b/signaling_server/service/node_modules/buffer-alloc-unsafe/package.json
new file mode 100644 (file)
index 0000000..c99f1a6
--- /dev/null
@@ -0,0 +1,60 @@
+{
+  "_args": [
+    [
+      "buffer-alloc-unsafe@1.1.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "buffer-alloc-unsafe@1.1.0",
+  "_id": "buffer-alloc-unsafe@1.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+  "_location": "/buffer-alloc-unsafe",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "buffer-alloc-unsafe@1.1.0",
+    "name": "buffer-alloc-unsafe",
+    "escapedName": "buffer-alloc-unsafe",
+    "rawSpec": "1.1.0",
+    "saveSpec": null,
+    "fetchSpec": "1.1.0"
+  },
+  "_requiredBy": [
+    "/buffer-alloc"
+  ],
+  "_resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+  "_spec": "1.1.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/LinusU/buffer-alloc-unsafe/issues"
+  },
+  "description": "A [ponyfill](https://ponyfill.com) for `Buffer.allocUnsafe`.",
+  "devDependencies": {
+    "standard": "^7.1.2"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/LinusU/buffer-alloc-unsafe#readme",
+  "keywords": [
+    "allocUnsafe",
+    "allocate",
+    "buffer allocUnsafe",
+    "buffer unsafe allocate",
+    "buffer",
+    "ponyfill",
+    "unsafe allocate"
+  ],
+  "license": "MIT",
+  "name": "buffer-alloc-unsafe",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/LinusU/buffer-alloc-unsafe.git"
+  },
+  "scripts": {
+    "test": "standard && node test"
+  },
+  "version": "1.1.0"
+}
diff --git a/signaling_server/service/node_modules/buffer-alloc/package.json b/signaling_server/service/node_modules/buffer-alloc/package.json
new file mode 100644 (file)
index 0000000..5ed9fd7
--- /dev/null
@@ -0,0 +1,62 @@
+{
+  "_args": [
+    [
+      "buffer-alloc@1.2.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "buffer-alloc@1.2.0",
+  "_id": "buffer-alloc@1.2.0",
+  "_inBundle": false,
+  "_integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+  "_location": "/buffer-alloc",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "buffer-alloc@1.2.0",
+    "name": "buffer-alloc",
+    "escapedName": "buffer-alloc",
+    "rawSpec": "1.2.0",
+    "saveSpec": null,
+    "fetchSpec": "1.2.0"
+  },
+  "_requiredBy": [
+    "/qrcode"
+  ],
+  "_resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+  "_spec": "1.2.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/LinusU/buffer-alloc/issues"
+  },
+  "dependencies": {
+    "buffer-alloc-unsafe": "^1.1.0",
+    "buffer-fill": "^1.0.0"
+  },
+  "description": "A [ponyfill](https://ponyfill.com) for `Buffer.alloc`.",
+  "devDependencies": {
+    "standard": "^7.1.2"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/LinusU/buffer-alloc#readme",
+  "keywords": [
+    "alloc",
+    "allocate",
+    "buffer alloc",
+    "buffer allocate",
+    "buffer"
+  ],
+  "license": "MIT",
+  "name": "buffer-alloc",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/LinusU/buffer-alloc.git"
+  },
+  "scripts": {
+    "test": "standard && node test"
+  },
+  "version": "1.2.0"
+}
diff --git a/signaling_server/service/node_modules/buffer-fill/package.json b/signaling_server/service/node_modules/buffer-fill/package.json
new file mode 100644 (file)
index 0000000..585b5ab
--- /dev/null
@@ -0,0 +1,52 @@
+{
+  "_args": [
+    [
+      "buffer-fill@1.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "buffer-fill@1.0.0",
+  "_id": "buffer-fill@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+  "_location": "/buffer-fill",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "buffer-fill@1.0.0",
+    "name": "buffer-fill",
+    "escapedName": "buffer-fill",
+    "rawSpec": "1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "1.0.0"
+  },
+  "_requiredBy": [
+    "/buffer-alloc"
+  ],
+  "_resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+  "_spec": "1.0.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/LinusU/buffer-fill/issues"
+  },
+  "description": "A [ponyfill](https://ponyfill.com) for `Buffer.fill`.",
+  "devDependencies": {
+    "buffer-alloc-unsafe": "^1.1.0",
+    "standard": "^7.1.2"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/LinusU/buffer-fill#readme",
+  "license": "MIT",
+  "name": "buffer-fill",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/LinusU/buffer-fill.git"
+  },
+  "scripts": {
+    "test": "standard && node test"
+  },
+  "version": "1.0.0"
+}
diff --git a/signaling_server/service/node_modules/buffer-from/package.json b/signaling_server/service/node_modules/buffer-from/package.json
new file mode 100644 (file)
index 0000000..5bbcc4d
--- /dev/null
@@ -0,0 +1,57 @@
+{
+  "_args": [
+    [
+      "buffer-from@1.1.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "buffer-from@1.1.1",
+  "_id": "buffer-from@1.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+  "_location": "/buffer-from",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "buffer-from@1.1.1",
+    "name": "buffer-from",
+    "escapedName": "buffer-from",
+    "rawSpec": "1.1.1",
+    "saveSpec": null,
+    "fetchSpec": "1.1.1"
+  },
+  "_requiredBy": [
+    "/concat-stream",
+    "/qrcode",
+    "/source-map-support"
+  ],
+  "_resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+  "_spec": "1.1.1",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/LinusU/buffer-from/issues"
+  },
+  "description": "A [ponyfill](https://ponyfill.com) for `Buffer.from`, uses native implementation if available.",
+  "devDependencies": {
+    "standard": "^7.1.2"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/LinusU/buffer-from#readme",
+  "keywords": [
+    "buffer",
+    "buffer from"
+  ],
+  "license": "MIT",
+  "name": "buffer-from",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/LinusU/buffer-from.git"
+  },
+  "scripts": {
+    "test": "standard && node test"
+  },
+  "version": "1.1.1"
+}
diff --git a/signaling_server/service/node_modules/buffer/package.json b/signaling_server/service/node_modules/buffer/package.json
new file mode 100644 (file)
index 0000000..ac889a0
--- /dev/null
@@ -0,0 +1,130 @@
+{
+  "_args": [
+    [
+      "buffer@5.7.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "buffer@5.7.1",
+  "_id": "buffer@5.7.1",
+  "_inBundle": false,
+  "_integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+  "_location": "/buffer",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "buffer@5.7.1",
+    "name": "buffer",
+    "escapedName": "buffer",
+    "rawSpec": "5.7.1",
+    "saveSpec": null,
+    "fetchSpec": "5.7.1"
+  },
+  "_requiredBy": [
+    "/qrcode"
+  ],
+  "_resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+  "_spec": "5.7.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Feross Aboukhadijeh",
+    "email": "feross@feross.org",
+    "url": "https://feross.org"
+  },
+  "bugs": {
+    "url": "https://github.com/feross/buffer/issues"
+  },
+  "contributors": [
+    {
+      "name": "Romain Beauxis",
+      "email": "toots@rastageeks.org"
+    },
+    {
+      "name": "James Halliday",
+      "email": "mail@substack.net"
+    }
+  ],
+  "dependencies": {
+    "base64-js": "^1.3.1",
+    "ieee754": "^1.1.13"
+  },
+  "description": "Node.js Buffer API, for the browser",
+  "devDependencies": {
+    "airtap": "^3.0.0",
+    "benchmark": "^2.1.4",
+    "browserify": "^17.0.0",
+    "concat-stream": "^2.0.0",
+    "hyperquest": "^2.1.3",
+    "is-buffer": "^2.0.4",
+    "is-nan": "^1.3.0",
+    "split": "^1.0.1",
+    "standard": "*",
+    "tape": "^5.0.1",
+    "through2": "^4.0.2",
+    "uglify-js": "^3.11.3"
+  },
+  "funding": [
+    {
+      "type": "github",
+      "url": "https://github.com/sponsors/feross"
+    },
+    {
+      "type": "patreon",
+      "url": "https://www.patreon.com/feross"
+    },
+    {
+      "type": "consulting",
+      "url": "https://feross.org/support"
+    }
+  ],
+  "homepage": "https://github.com/feross/buffer",
+  "jspm": {
+    "map": {
+      "./index.js": {
+        "node": "@node/buffer"
+      }
+    }
+  },
+  "keywords": [
+    "arraybuffer",
+    "browser",
+    "browserify",
+    "buffer",
+    "compatible",
+    "dataview",
+    "uint8array"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "buffer",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/feross/buffer.git"
+  },
+  "scripts": {
+    "perf": "browserify --debug perf/bracket-notation.js > perf/bundle.js && open perf/index.html",
+    "perf-node": "node perf/bracket-notation.js && node perf/concat.js && node perf/copy-big.js && node perf/copy.js && node perf/new-big.js && node perf/new.js && node perf/readDoubleBE.js && node perf/readFloatBE.js && node perf/readUInt32LE.js && node perf/slice.js && node perf/writeFloatBE.js",
+    "size": "browserify -r ./ | uglifyjs -c -m | gzip | wc -c",
+    "test": "standard && node ./bin/test.js",
+    "test-browser-es5": "airtap -- test/*.js",
+    "test-browser-es5-local": "airtap --local -- test/*.js",
+    "test-browser-es6": "airtap -- test/*.js test/node/*.js",
+    "test-browser-es6-local": "airtap --local -- test/*.js test/node/*.js",
+    "test-node": "tape test/*.js test/node/*.js",
+    "update-authors": "./bin/update-authors.sh"
+  },
+  "standard": {
+    "ignore": [
+      "test/node/**/*.js",
+      "test/common.js",
+      "test/_polyfill.js",
+      "perf/**/*.js"
+    ],
+    "globals": [
+      "SharedArrayBuffer"
+    ]
+  },
+  "types": "index.d.ts",
+  "version": "5.7.1"
+}
diff --git a/signaling_server/service/node_modules/bytes/package.json b/signaling_server/service/node_modules/bytes/package.json
new file mode 100644 (file)
index 0000000..e72c482
--- /dev/null
@@ -0,0 +1,87 @@
+{
+  "_args": [
+    [
+      "bytes@3.1.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "bytes@3.1.0",
+  "_id": "bytes@3.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+  "_location": "/bytes",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "bytes@3.1.0",
+    "name": "bytes",
+    "escapedName": "bytes",
+    "rawSpec": "3.1.0",
+    "saveSpec": null,
+    "fetchSpec": "3.1.0"
+  },
+  "_requiredBy": [
+    "/body-parser",
+    "/raw-body"
+  ],
+  "_resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+  "_spec": "3.1.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca",
+    "url": "http://tjholowaychuk.com"
+  },
+  "bugs": {
+    "url": "https://github.com/visionmedia/bytes.js/issues"
+  },
+  "contributors": [
+    {
+      "name": "Jed Watson",
+      "email": "jed.watson@me.com"
+    },
+    {
+      "name": "Théo FIDRY",
+      "email": "theo.fidry@gmail.com"
+    }
+  ],
+  "description": "Utility to parse a string bytes to bytes and vice-versa",
+  "devDependencies": {
+    "eslint": "5.12.1",
+    "mocha": "5.2.0",
+    "nyc": "13.1.0"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "History.md",
+    "LICENSE",
+    "Readme.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/visionmedia/bytes.js#readme",
+  "keywords": [
+    "byte",
+    "bytes",
+    "utility",
+    "parse",
+    "parser",
+    "convert",
+    "converter"
+  ],
+  "license": "MIT",
+  "name": "bytes",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/visionmedia/bytes.js.git"
+  },
+  "scripts": {
+    "lint": "eslint .",
+    "test": "mocha --check-leaks --reporter spec",
+    "test-ci": "nyc --reporter=text npm test",
+    "test-cov": "nyc --reporter=html --reporter=text npm test"
+  },
+  "version": "3.1.0"
+}
diff --git a/signaling_server/service/node_modules/camelcase/package.json b/signaling_server/service/node_modules/camelcase/package.json
new file mode 100644 (file)
index 0000000..9ea1183
--- /dev/null
@@ -0,0 +1,78 @@
+{
+  "_args": [
+    [
+      "camelcase@5.3.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "camelcase@5.3.1",
+  "_id": "camelcase@5.3.1",
+  "_inBundle": false,
+  "_integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+  "_location": "/camelcase",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "camelcase@5.3.1",
+    "name": "camelcase",
+    "escapedName": "camelcase",
+    "rawSpec": "5.3.1",
+    "saveSpec": null,
+    "fetchSpec": "5.3.1"
+  },
+  "_requiredBy": [
+    "/yargs-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+  "_spec": "5.3.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/camelcase/issues"
+  },
+  "description": "Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar`",
+  "devDependencies": {
+    "ava": "^1.4.1",
+    "tsd": "^0.7.1",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/camelcase#readme",
+  "keywords": [
+    "camelcase",
+    "camel-case",
+    "camel",
+    "case",
+    "dash",
+    "hyphen",
+    "dot",
+    "underscore",
+    "separator",
+    "string",
+    "text",
+    "convert",
+    "pascalcase",
+    "pascal-case"
+  ],
+  "license": "MIT",
+  "name": "camelcase",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/camelcase.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "5.3.1"
+}
diff --git a/signaling_server/service/node_modules/cliui/package.json b/signaling_server/service/node_modules/cliui/package.json
new file mode 100644 (file)
index 0000000..b3d5081
--- /dev/null
@@ -0,0 +1,102 @@
+{
+  "_args": [
+    [
+      "cliui@5.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "cliui@5.0.0",
+  "_id": "cliui@5.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+  "_location": "/cliui",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "cliui@5.0.0",
+    "name": "cliui",
+    "escapedName": "cliui",
+    "rawSpec": "5.0.0",
+    "saveSpec": null,
+    "fetchSpec": "5.0.0"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+  "_spec": "5.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Ben Coe",
+    "email": "ben@npmjs.com"
+  },
+  "bugs": {
+    "url": "https://github.com/yargs/cliui/issues"
+  },
+  "config": {
+    "blanket": {
+      "pattern": [
+        "index.js"
+      ],
+      "data-cover-never": [
+        "node_modules",
+        "test"
+      ],
+      "output-reporter": "spec"
+    }
+  },
+  "dependencies": {
+    "string-width": "^3.1.0",
+    "strip-ansi": "^5.2.0",
+    "wrap-ansi": "^5.1.0"
+  },
+  "description": "easily create complex multi-column command-line-interfaces",
+  "devDependencies": {
+    "chai": "^4.2.0",
+    "chalk": "^2.4.2",
+    "coveralls": "^3.0.3",
+    "mocha": "^6.0.2",
+    "nyc": "^13.3.0",
+    "standard": "^12.0.1",
+    "standard-version": "^5.0.2"
+  },
+  "engine": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/yargs/cliui#readme",
+  "keywords": [
+    "cli",
+    "command-line",
+    "layout",
+    "design",
+    "console",
+    "wrap",
+    "table"
+  ],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "cliui",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/yargs/cliui.git"
+  },
+  "scripts": {
+    "coverage": "nyc --reporter=text-lcov mocha | coveralls",
+    "pretest": "standard",
+    "release": "standard-version",
+    "test": "nyc mocha"
+  },
+  "standard": {
+    "ignore": [
+      "**/example/**"
+    ],
+    "globals": [
+      "it"
+    ]
+  },
+  "version": "5.0.0"
+}
diff --git a/signaling_server/service/node_modules/color-convert/package.json b/signaling_server/service/node_modules/color-convert/package.json
new file mode 100644 (file)
index 0000000..9afc096
--- /dev/null
@@ -0,0 +1,84 @@
+{
+  "_args": [
+    [
+      "color-convert@1.9.3",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "color-convert@1.9.3",
+  "_id": "color-convert@1.9.3",
+  "_inBundle": false,
+  "_integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+  "_location": "/color-convert",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "color-convert@1.9.3",
+    "name": "color-convert",
+    "escapedName": "color-convert",
+    "rawSpec": "1.9.3",
+    "saveSpec": null,
+    "fetchSpec": "1.9.3"
+  },
+  "_requiredBy": [
+    "/ansi-styles"
+  ],
+  "_resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+  "_spec": "1.9.3",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Heather Arthur",
+    "email": "fayearthur@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/Qix-/color-convert/issues"
+  },
+  "dependencies": {
+    "color-name": "1.1.3"
+  },
+  "description": "Plain color conversion functions",
+  "devDependencies": {
+    "chalk": "1.1.1",
+    "xo": "0.11.2"
+  },
+  "files": [
+    "index.js",
+    "conversions.js",
+    "css-keywords.js",
+    "route.js"
+  ],
+  "homepage": "https://github.com/Qix-/color-convert#readme",
+  "keywords": [
+    "color",
+    "colour",
+    "convert",
+    "converter",
+    "conversion",
+    "rgb",
+    "hsl",
+    "hsv",
+    "hwb",
+    "cmyk",
+    "ansi",
+    "ansi16"
+  ],
+  "license": "MIT",
+  "name": "color-convert",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/Qix-/color-convert.git"
+  },
+  "scripts": {
+    "pretest": "xo",
+    "test": "node test/basic.js"
+  },
+  "version": "1.9.3",
+  "xo": {
+    "rules": {
+      "default-case": 0,
+      "no-inline-comments": 0,
+      "operator-linebreak": 0
+    }
+  }
+}
diff --git a/signaling_server/service/node_modules/color-name/package.json b/signaling_server/service/node_modules/color-name/package.json
new file mode 100644 (file)
index 0000000..74085ca
--- /dev/null
@@ -0,0 +1,56 @@
+{
+  "_args": [
+    [
+      "color-name@1.1.3",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "color-name@1.1.3",
+  "_id": "color-name@1.1.3",
+  "_inBundle": false,
+  "_integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+  "_location": "/color-name",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "color-name@1.1.3",
+    "name": "color-name",
+    "escapedName": "color-name",
+    "rawSpec": "1.1.3",
+    "saveSpec": null,
+    "fetchSpec": "1.1.3"
+  },
+  "_requiredBy": [
+    "/color-convert"
+  ],
+  "_resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+  "_spec": "1.1.3",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "DY",
+    "email": "dfcreative@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/dfcreative/color-name/issues"
+  },
+  "description": "A list of color names and its values",
+  "homepage": "https://github.com/dfcreative/color-name",
+  "keywords": [
+    "color-name",
+    "color",
+    "color-keyword",
+    "keyword"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "color-name",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/dfcreative/color-name.git"
+  },
+  "scripts": {
+    "test": "node test.js"
+  },
+  "version": "1.1.3"
+}
diff --git a/signaling_server/service/node_modules/component-bind/package.json b/signaling_server/service/node_modules/component-bind/package.json
new file mode 100644 (file)
index 0000000..a33ef8e
--- /dev/null
@@ -0,0 +1,54 @@
+{
+  "_args": [
+    [
+      "component-bind@1.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "component-bind@1.0.0",
+  "_id": "component-bind@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+  "_location": "/component-bind",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "component-bind@1.0.0",
+    "name": "component-bind",
+    "escapedName": "component-bind",
+    "rawSpec": "1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "1.0.0"
+  },
+  "_requiredBy": [
+    "/socket.io/socket.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+  "_spec": "1.0.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/component/bind/issues"
+  },
+  "component": {
+    "scripts": {
+      "bind/index.js": "index.js"
+    }
+  },
+  "description": "function binding utility",
+  "devDependencies": {
+    "mocha": "*",
+    "should": "*"
+  },
+  "homepage": "https://github.com/component/bind#readme",
+  "keywords": [
+    "bind",
+    "utility"
+  ],
+  "name": "component-bind",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/component/bind.git"
+  },
+  "version": "1.0.0"
+}
diff --git a/signaling_server/service/node_modules/component-emitter/History.md b/signaling_server/service/node_modules/component-emitter/History.md
new file mode 100644 (file)
index 0000000..30d07d6
--- /dev/null
@@ -0,0 +1,75 @@
+\r
+1.3.0 / 2018-04-15\r
+==================\r
+\r
+ * removed bower support\r
+ * expose emitter on `exports`\r
+ * prevent de-optimization from using `arguments`\r
+\r
+1.2.1 / 2016-04-18\r
+==================\r
+\r
+ * enable client side use\r
+\r
+1.2.0 / 2014-02-12\r
+==================\r
+\r
+ * prefix events with `$` to support object prototype method names\r
+\r
+1.1.3 / 2014-06-20\r
+==================\r
+\r
+ * republish for npm\r
+ * add LICENSE file\r
+\r
+1.1.2 / 2014-02-10\r
+==================\r
+\r
+  * package: rename to "component-emitter"\r
+  * package: update "main" and "component" fields\r
+  * Add license to Readme (same format as the other components)\r
+  * created .npmignore\r
+  * travis stuff\r
+\r
+1.1.1 / 2013-12-01\r
+==================\r
+\r
+  * fix .once adding .on to the listener\r
+  * docs: Emitter#off()\r
+  * component: add `.repo` prop\r
+\r
+1.1.0 / 2013-10-20\r
+==================\r
+\r
+ * add `.addEventListener()` and `.removeEventListener()` aliases\r
+\r
+1.0.1 / 2013-06-27\r
+==================\r
+\r
+ * add support for legacy ie\r
+\r
+1.0.0 / 2013-02-26\r
+==================\r
+\r
+  * add `.off()` support for removing all listeners\r
+\r
+0.0.6 / 2012-10-08\r
+==================\r
+\r
+  * add `this._callbacks` initialization to prevent funky gotcha\r
+\r
+0.0.5 / 2012-09-07\r
+==================\r
+\r
+  * fix `Emitter.call(this)` usage\r
+\r
+0.0.3 / 2012-07-11\r
+==================\r
+\r
+  * add `.listeners()`\r
+  * rename `.has()` to `.hasListeners()`\r
+\r
+0.0.2 / 2012-06-28\r
+==================\r
+\r
+  * fix `.off()` with `.once()`-registered callbacks\r
diff --git a/signaling_server/service/node_modules/component-emitter/index.js b/signaling_server/service/node_modules/component-emitter/index.js
new file mode 100644 (file)
index 0000000..7e375c2
--- /dev/null
@@ -0,0 +1,175 @@
+\r
+/**\r
+ * Expose `Emitter`.\r
+ */\r
+\r
+if (typeof module !== 'undefined') {\r
+  module.exports = Emitter;\r
+}\r
+\r
+/**\r
+ * Initialize a new `Emitter`.\r
+ *\r
+ * @api public\r
+ */\r
+\r
+function Emitter(obj) {\r
+  if (obj) return mixin(obj);\r
+};\r
+\r
+/**\r
+ * Mixin the emitter properties.\r
+ *\r
+ * @param {Object} obj\r
+ * @return {Object}\r
+ * @api private\r
+ */\r
+\r
+function mixin(obj) {\r
+  for (var key in Emitter.prototype) {\r
+    obj[key] = Emitter.prototype[key];\r
+  }\r
+  return obj;\r
+}\r
+\r
+/**\r
+ * Listen on the given `event` with `fn`.\r
+ *\r
+ * @param {String} event\r
+ * @param {Function} fn\r
+ * @return {Emitter}\r
+ * @api public\r
+ */\r
+\r
+Emitter.prototype.on =\r
+Emitter.prototype.addEventListener = function(event, fn){\r
+  this._callbacks = this._callbacks || {};\r
+  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r
+    .push(fn);\r
+  return this;\r
+};\r
+\r
+/**\r
+ * Adds an `event` listener that will be invoked a single\r
+ * time then automatically removed.\r
+ *\r
+ * @param {String} event\r
+ * @param {Function} fn\r
+ * @return {Emitter}\r
+ * @api public\r
+ */\r
+\r
+Emitter.prototype.once = function(event, fn){\r
+  function on() {\r
+    this.off(event, on);\r
+    fn.apply(this, arguments);\r
+  }\r
+\r
+  on.fn = fn;\r
+  this.on(event, on);\r
+  return this;\r
+};\r
+\r
+/**\r
+ * Remove the given callback for `event` or all\r
+ * registered callbacks.\r
+ *\r
+ * @param {String} event\r
+ * @param {Function} fn\r
+ * @return {Emitter}\r
+ * @api public\r
+ */\r
+\r
+Emitter.prototype.off =\r
+Emitter.prototype.removeListener =\r
+Emitter.prototype.removeAllListeners =\r
+Emitter.prototype.removeEventListener = function(event, fn){\r
+  this._callbacks = this._callbacks || {};\r
+\r
+  // all\r
+  if (0 == arguments.length) {\r
+    this._callbacks = {};\r
+    return this;\r
+  }\r
+\r
+  // specific event\r
+  var callbacks = this._callbacks['$' + event];\r
+  if (!callbacks) return this;\r
+\r
+  // remove all handlers\r
+  if (1 == arguments.length) {\r
+    delete this._callbacks['$' + event];\r
+    return this;\r
+  }\r
+\r
+  // remove specific handler\r
+  var cb;\r
+  for (var i = 0; i < callbacks.length; i++) {\r
+    cb = callbacks[i];\r
+    if (cb === fn || cb.fn === fn) {\r
+      callbacks.splice(i, 1);\r
+      break;\r
+    }\r
+  }\r
+\r
+  // Remove event specific arrays for event types that no\r
+  // one is subscribed for to avoid memory leak.\r
+  if (callbacks.length === 0) {\r
+    delete this._callbacks['$' + event];\r
+  }\r
+\r
+  return this;\r
+};\r
+\r
+/**\r
+ * Emit `event` with the given args.\r
+ *\r
+ * @param {String} event\r
+ * @param {Mixed} ...\r
+ * @return {Emitter}\r
+ */\r
+\r
+Emitter.prototype.emit = function(event){\r
+  this._callbacks = this._callbacks || {};\r
+\r
+  var args = new Array(arguments.length - 1)\r
+    , callbacks = this._callbacks['$' + event];\r
+\r
+  for (var i = 1; i < arguments.length; i++) {\r
+    args[i - 1] = arguments[i];\r
+  }\r
+\r
+  if (callbacks) {\r
+    callbacks = callbacks.slice(0);\r
+    for (var i = 0, len = callbacks.length; i < len; ++i) {\r
+      callbacks[i].apply(this, args);\r
+    }\r
+  }\r
+\r
+  return this;\r
+};\r
+\r
+/**\r
+ * Return array of callbacks for `event`.\r
+ *\r
+ * @param {String} event\r
+ * @return {Array}\r
+ * @api public\r
+ */\r
+\r
+Emitter.prototype.listeners = function(event){\r
+  this._callbacks = this._callbacks || {};\r
+  return this._callbacks['$' + event] || [];\r
+};\r
+\r
+/**\r
+ * Check if this emitter has `event` handlers.\r
+ *\r
+ * @param {String} event\r
+ * @return {Boolean}\r
+ * @api public\r
+ */\r
+\r
+Emitter.prototype.hasListeners = function(event){\r
+  return !! this.listeners(event).length;\r
+};\r
diff --git a/signaling_server/service/node_modules/component-emitter/package.json b/signaling_server/service/node_modules/component-emitter/package.json
new file mode 100644 (file)
index 0000000..eda0481
--- /dev/null
@@ -0,0 +1,61 @@
+{
+  "_args": [
+    [
+      "component-emitter@1.3.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "component-emitter@1.3.0",
+  "_id": "component-emitter@1.3.0",
+  "_inBundle": false,
+  "_integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+  "_location": "/component-emitter",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "component-emitter@1.3.0",
+    "name": "component-emitter",
+    "escapedName": "component-emitter",
+    "rawSpec": "1.3.0",
+    "saveSpec": null,
+    "fetchSpec": "1.3.0"
+  },
+  "_requiredBy": [
+    "/engine.io-client",
+    "/socket.io/socket.io-client",
+    "/socket.io/socket.io-client/socket.io-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+  "_spec": "1.3.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/component/emitter/issues"
+  },
+  "component": {
+    "scripts": {
+      "emitter/index.js": "index.js"
+    }
+  },
+  "description": "Event emitter",
+  "devDependencies": {
+    "mocha": "*",
+    "should": "*"
+  },
+  "files": [
+    "index.js",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/component/emitter#readme",
+  "license": "MIT",
+  "main": "index.js",
+  "name": "component-emitter",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/component/emitter.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "version": "1.3.0"
+}
diff --git a/signaling_server/service/node_modules/component-inherit/package.json b/signaling_server/service/node_modules/component-inherit/package.json
new file mode 100644 (file)
index 0000000..325d836
--- /dev/null
@@ -0,0 +1,51 @@
+{
+  "_args": [
+    [
+      "component-inherit@0.0.3",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "component-inherit@0.0.3",
+  "_id": "component-inherit@0.0.3",
+  "_inBundle": false,
+  "_integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+  "_location": "/component-inherit",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "component-inherit@0.0.3",
+    "name": "component-inherit",
+    "escapedName": "component-inherit",
+    "rawSpec": "0.0.3",
+    "saveSpec": null,
+    "fetchSpec": "0.0.3"
+  },
+  "_requiredBy": [
+    "/engine.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+  "_spec": "0.0.3",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/component/inherit/issues"
+  },
+  "component": {
+    "scripts": {
+      "inherit/index.js": "index.js"
+    }
+  },
+  "dependencies": {},
+  "description": "Prototype inheritance utility",
+  "homepage": "https://github.com/component/inherit#readme",
+  "keywords": [
+    "inherit",
+    "utility"
+  ],
+  "name": "component-inherit",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/component/inherit.git"
+  },
+  "version": "0.0.3"
+}
diff --git a/signaling_server/service/node_modules/content-disposition/package.json b/signaling_server/service/node_modules/content-disposition/package.json
new file mode 100644 (file)
index 0000000..4151805
--- /dev/null
@@ -0,0 +1,82 @@
+{
+  "_args": [
+    [
+      "content-disposition@0.5.3",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "content-disposition@0.5.3",
+  "_id": "content-disposition@0.5.3",
+  "_inBundle": false,
+  "_integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+  "_location": "/content-disposition",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "content-disposition@0.5.3",
+    "name": "content-disposition",
+    "escapedName": "content-disposition",
+    "rawSpec": "0.5.3",
+    "saveSpec": null,
+    "fetchSpec": "0.5.3"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+  "_spec": "0.5.3",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/content-disposition/issues"
+  },
+  "dependencies": {
+    "safe-buffer": "5.1.2"
+  },
+  "description": "Create and parse Content-Disposition header",
+  "devDependencies": {
+    "deep-equal": "1.0.1",
+    "eslint": "5.10.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.14.0",
+    "eslint-plugin-markdown": "1.0.0-rc.1",
+    "eslint-plugin-node": "7.0.1",
+    "eslint-plugin-promise": "4.0.1",
+    "eslint-plugin-standard": "4.0.0",
+    "istanbul": "0.4.5",
+    "mocha": "5.2.0"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/content-disposition#readme",
+  "keywords": [
+    "content-disposition",
+    "http",
+    "rfc6266",
+    "res"
+  ],
+  "license": "MIT",
+  "name": "content-disposition",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/content-disposition.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "0.5.3"
+}
diff --git a/signaling_server/service/node_modules/content-type/package.json b/signaling_server/service/node_modules/content-type/package.json
new file mode 100644 (file)
index 0000000..3bb9a12
--- /dev/null
@@ -0,0 +1,79 @@
+{
+  "_args": [
+    [
+      "content-type@1.0.4",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "content-type@1.0.4",
+  "_id": "content-type@1.0.4",
+  "_inBundle": false,
+  "_integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+  "_location": "/content-type",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "content-type@1.0.4",
+    "name": "content-type",
+    "escapedName": "content-type",
+    "rawSpec": "1.0.4",
+    "saveSpec": null,
+    "fetchSpec": "1.0.4"
+  },
+  "_requiredBy": [
+    "/body-parser",
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+  "_spec": "1.0.4",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/content-type/issues"
+  },
+  "description": "Create and parse HTTP Content-Type header",
+  "devDependencies": {
+    "eslint": "3.19.0",
+    "eslint-config-standard": "10.2.1",
+    "eslint-plugin-import": "2.7.0",
+    "eslint-plugin-node": "5.1.1",
+    "eslint-plugin-promise": "3.5.0",
+    "eslint-plugin-standard": "3.0.1",
+    "istanbul": "0.4.5",
+    "mocha": "~1.21.5"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/content-type#readme",
+  "keywords": [
+    "content-type",
+    "http",
+    "req",
+    "res",
+    "rfc7231"
+  ],
+  "license": "MIT",
+  "name": "content-type",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/content-type.git"
+  },
+  "scripts": {
+    "lint": "eslint .",
+    "test": "mocha --reporter spec --check-leaks --bail test/",
+    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
+  },
+  "version": "1.0.4"
+}
diff --git a/signaling_server/service/node_modules/cookie-signature/package.json b/signaling_server/service/node_modules/cookie-signature/package.json
new file mode 100644 (file)
index 0000000..ac3a57a
--- /dev/null
@@ -0,0 +1,60 @@
+{
+  "_args": [
+    [
+      "cookie-signature@1.0.6",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "cookie-signature@1.0.6",
+  "_id": "cookie-signature@1.0.6",
+  "_inBundle": false,
+  "_integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+  "_location": "/cookie-signature",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "cookie-signature@1.0.6",
+    "name": "cookie-signature",
+    "escapedName": "cookie-signature",
+    "rawSpec": "1.0.6",
+    "saveSpec": null,
+    "fetchSpec": "1.0.6"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+  "_spec": "1.0.6",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@learnboost.com"
+  },
+  "bugs": {
+    "url": "https://github.com/visionmedia/node-cookie-signature/issues"
+  },
+  "dependencies": {},
+  "description": "Sign and unsign cookies",
+  "devDependencies": {
+    "mocha": "*",
+    "should": "*"
+  },
+  "homepage": "https://github.com/visionmedia/node-cookie-signature#readme",
+  "keywords": [
+    "cookie",
+    "sign",
+    "unsign"
+  ],
+  "license": "MIT",
+  "main": "index",
+  "name": "cookie-signature",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/visionmedia/node-cookie-signature.git"
+  },
+  "scripts": {
+    "test": "mocha --require should --reporter spec"
+  },
+  "version": "1.0.6"
+}
diff --git a/signaling_server/service/node_modules/cookie/package.json b/signaling_server/service/node_modules/cookie/package.json
new file mode 100644 (file)
index 0000000..724c17d
--- /dev/null
@@ -0,0 +1,81 @@
+{
+  "_args": [
+    [
+      "cookie@0.4.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "cookie@0.4.0",
+  "_id": "cookie@0.4.0",
+  "_inBundle": false,
+  "_integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+  "_location": "/cookie",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "cookie@0.4.0",
+    "name": "cookie",
+    "escapedName": "cookie",
+    "rawSpec": "0.4.0",
+    "saveSpec": null,
+    "fetchSpec": "0.4.0"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+  "_spec": "0.4.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Roman Shtylman",
+    "email": "shtylman@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/cookie/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "description": "HTTP server cookie parsing and serialization",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "2.1.4",
+    "eslint": "5.16.0",
+    "eslint-plugin-markdown": "1.0.0",
+    "istanbul": "0.4.5",
+    "mocha": "6.1.4"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/cookie#readme",
+  "keywords": [
+    "cookie",
+    "cookies"
+  ],
+  "license": "MIT",
+  "name": "cookie",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/cookie.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js",
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "version": "node scripts/version-history.js && git add HISTORY.md"
+  },
+  "version": "0.4.0"
+}
diff --git a/signaling_server/service/node_modules/decamelize/package.json b/signaling_server/service/node_modules/decamelize/package.json
new file mode 100644 (file)
index 0000000..7c85cc6
--- /dev/null
@@ -0,0 +1,73 @@
+{
+  "_args": [
+    [
+      "decamelize@1.2.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "decamelize@1.2.0",
+  "_id": "decamelize@1.2.0",
+  "_inBundle": false,
+  "_integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+  "_location": "/decamelize",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "decamelize@1.2.0",
+    "name": "decamelize",
+    "escapedName": "decamelize",
+    "rawSpec": "1.2.0",
+    "saveSpec": null,
+    "fetchSpec": "1.2.0"
+  },
+  "_requiredBy": [
+    "/yargs-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+  "_spec": "1.2.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/decamelize/issues"
+  },
+  "description": "Convert a camelized string into a lowercased one with a custom separator: unicornRainbow → unicorn_rainbow",
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/decamelize#readme",
+  "keywords": [
+    "decamelize",
+    "decamelcase",
+    "camelcase",
+    "lowercase",
+    "case",
+    "dash",
+    "hyphen",
+    "string",
+    "str",
+    "text",
+    "convert"
+  ],
+  "license": "MIT",
+  "name": "decamelize",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/decamelize.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "1.2.0"
+}
diff --git a/signaling_server/service/node_modules/depd/package.json b/signaling_server/service/node_modules/depd/package.json
new file mode 100644 (file)
index 0000000..96dd6bc
--- /dev/null
@@ -0,0 +1,82 @@
+{
+  "_args": [
+    [
+      "depd@1.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "depd@1.1.2",
+  "_id": "depd@1.1.2",
+  "_inBundle": false,
+  "_integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+  "_location": "/depd",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "depd@1.1.2",
+    "name": "depd",
+    "escapedName": "depd",
+    "rawSpec": "1.1.2",
+    "saveSpec": null,
+    "fetchSpec": "1.1.2"
+  },
+  "_requiredBy": [
+    "/body-parser",
+    "/express",
+    "/http-errors",
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+  "_spec": "1.1.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "browser": "lib/browser/index.js",
+  "bugs": {
+    "url": "https://github.com/dougwilson/nodejs-depd/issues"
+  },
+  "description": "Deprecate all the things",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "2.1.4",
+    "eslint": "3.19.0",
+    "eslint-config-standard": "7.1.0",
+    "eslint-plugin-markdown": "1.0.0-beta.7",
+    "eslint-plugin-promise": "3.6.0",
+    "eslint-plugin-standard": "3.0.1",
+    "istanbul": "0.4.5",
+    "mocha": "~1.21.5"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "lib/",
+    "History.md",
+    "LICENSE",
+    "index.js",
+    "Readme.md"
+  ],
+  "homepage": "https://github.com/dougwilson/nodejs-depd#readme",
+  "keywords": [
+    "deprecate",
+    "deprecated"
+  ],
+  "license": "MIT",
+  "name": "depd",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/dougwilson/nodejs-depd.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js",
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail test/",
+    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --no-exit test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/"
+  },
+  "version": "1.1.2"
+}
diff --git a/signaling_server/service/node_modules/destroy/package.json b/signaling_server/service/node_modules/destroy/package.json
new file mode 100644 (file)
index 0000000..2285573
--- /dev/null
@@ -0,0 +1,74 @@
+{
+  "_args": [
+    [
+      "destroy@1.0.4",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "destroy@1.0.4",
+  "_id": "destroy@1.0.4",
+  "_inBundle": false,
+  "_integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+  "_location": "/destroy",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "destroy@1.0.4",
+    "name": "destroy",
+    "escapedName": "destroy",
+    "rawSpec": "1.0.4",
+    "saveSpec": null,
+    "fetchSpec": "1.0.4"
+  },
+  "_requiredBy": [
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+  "_spec": "1.0.4",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Jonathan Ong",
+    "email": "me@jongleberry.com",
+    "url": "http://jongleberry.com"
+  },
+  "bugs": {
+    "url": "https://github.com/stream-utils/destroy/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "description": "destroy a stream if possible",
+  "devDependencies": {
+    "istanbul": "0.4.2",
+    "mocha": "2.3.4"
+  },
+  "files": [
+    "index.js",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/stream-utils/destroy#readme",
+  "keywords": [
+    "stream",
+    "streams",
+    "destroy",
+    "cleanup",
+    "leak",
+    "fd"
+  ],
+  "license": "MIT",
+  "name": "destroy",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/stream-utils/destroy.git"
+  },
+  "scripts": {
+    "test": "mocha --reporter spec",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot"
+  },
+  "version": "1.0.4"
+}
diff --git a/signaling_server/service/node_modules/dijkstrajs/package.json b/signaling_server/service/node_modules/dijkstrajs/package.json
new file mode 100644 (file)
index 0000000..b450f61
--- /dev/null
@@ -0,0 +1,88 @@
+{
+  "_args": [
+    [
+      "dijkstrajs@1.0.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "dijkstrajs@1.0.1",
+  "_id": "dijkstrajs@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=",
+  "_location": "/dijkstrajs",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "dijkstrajs@1.0.1",
+    "name": "dijkstrajs",
+    "escapedName": "dijkstrajs",
+    "rawSpec": "1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "1.0.1"
+  },
+  "_requiredBy": [
+    "/qrcode"
+  ],
+  "_resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz",
+  "_spec": "1.0.1",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/tcort/dijkstrajs/issues"
+  },
+  "description": "A simple JavaScript implementation of Dijkstra's single-source shortest-paths algorithm.",
+  "devDependencies": {
+    "expect.js": "^0.3.1",
+    "jshint": "^2.8.0",
+    "mocha": "^2.3.3"
+  },
+  "homepage": "https://github.com/tcort/dijkstrajs",
+  "jshintConfig": {
+    "bitwise": true,
+    "curly": true,
+    "eqeqeq": true,
+    "forin": true,
+    "freeze": true,
+    "globalstrict": true,
+    "immed": true,
+    "indent": 4,
+    "moz": true,
+    "newcap": true,
+    "noarg": true,
+    "node": true,
+    "noempty": true,
+    "nonew": true,
+    "trailing": true,
+    "undef": true,
+    "smarttabs": true,
+    "strict": true,
+    "validthis": true,
+    "globals": {
+      "describe": false,
+      "it": false,
+      "before": false,
+      "beforeEach": false,
+      "after": false,
+      "afterEach": false
+    }
+  },
+  "keywords": [
+    "dijkstra",
+    "shortest",
+    "path",
+    "search",
+    "graph"
+  ],
+  "license": "MIT",
+  "main": "dijkstra.js",
+  "name": "dijkstrajs",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/tcort/dijkstrajs.git"
+  },
+  "scripts": {
+    "pretest": "jshint dijkstra.js",
+    "test": "mocha -R spec"
+  },
+  "version": "1.0.1"
+}
diff --git a/signaling_server/service/node_modules/ee-first/package.json b/signaling_server/service/node_modules/ee-first/package.json
new file mode 100644 (file)
index 0000000..83ff54b
--- /dev/null
@@ -0,0 +1,66 @@
+{
+  "_args": [
+    [
+      "ee-first@1.1.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ee-first@1.1.1",
+  "_id": "ee-first@1.1.1",
+  "_inBundle": false,
+  "_integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+  "_location": "/ee-first",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ee-first@1.1.1",
+    "name": "ee-first",
+    "escapedName": "ee-first",
+    "rawSpec": "1.1.1",
+    "saveSpec": null,
+    "fetchSpec": "1.1.1"
+  },
+  "_requiredBy": [
+    "/on-finished"
+  ],
+  "_resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+  "_spec": "1.1.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Jonathan Ong",
+    "email": "me@jongleberry.com",
+    "url": "http://jongleberry.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jonathanong/ee-first/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "description": "return the first event in a set of ee/event pairs",
+  "devDependencies": {
+    "istanbul": "0.3.9",
+    "mocha": "2.2.5"
+  },
+  "files": [
+    "index.js",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/jonathanong/ee-first#readme",
+  "license": "MIT",
+  "name": "ee-first",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonathanong/ee-first.git"
+  },
+  "scripts": {
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "1.1.1"
+}
diff --git a/signaling_server/service/node_modules/emoji-regex/package.json b/signaling_server/service/node_modules/emoji-regex/package.json
new file mode 100644 (file)
index 0000000..12ec892
--- /dev/null
@@ -0,0 +1,81 @@
+{
+  "_args": [
+    [
+      "emoji-regex@7.0.3",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "emoji-regex@7.0.3",
+  "_id": "emoji-regex@7.0.3",
+  "_inBundle": false,
+  "_integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+  "_location": "/emoji-regex",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "emoji-regex@7.0.3",
+    "name": "emoji-regex",
+    "escapedName": "emoji-regex",
+    "rawSpec": "7.0.3",
+    "saveSpec": null,
+    "fetchSpec": "7.0.3"
+  },
+  "_requiredBy": [
+    "/string-width"
+  ],
+  "_resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+  "_spec": "7.0.3",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Mathias Bynens",
+    "url": "https://mathiasbynens.be/"
+  },
+  "bugs": {
+    "url": "https://github.com/mathiasbynens/emoji-regex/issues"
+  },
+  "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.",
+  "devDependencies": {
+    "@babel/cli": "^7.0.0",
+    "@babel/core": "^7.0.0",
+    "@babel/plugin-proposal-unicode-property-regex": "^7.0.0",
+    "@babel/preset-env": "^7.0.0",
+    "mocha": "^5.2.0",
+    "regexgen": "^1.3.0",
+    "unicode-11.0.0": "^0.7.7",
+    "unicode-tr51": "^9.0.1"
+  },
+  "files": [
+    "LICENSE-MIT.txt",
+    "index.js",
+    "index.d.ts",
+    "text.js",
+    "es2015/index.js",
+    "es2015/text.js"
+  ],
+  "homepage": "https://mths.be/emoji-regex",
+  "keywords": [
+    "unicode",
+    "regex",
+    "regexp",
+    "regular expressions",
+    "code points",
+    "symbols",
+    "characters",
+    "emoji"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "emoji-regex",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mathiasbynens/emoji-regex.git"
+  },
+  "scripts": {
+    "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js",
+    "test": "mocha",
+    "test:watch": "npm run test -- --watch"
+  },
+  "types": "index.d.ts",
+  "version": "7.0.3"
+}
diff --git a/signaling_server/service/node_modules/encodeurl/package.json b/signaling_server/service/node_modules/encodeurl/package.json
new file mode 100644 (file)
index 0000000..06c3cff
--- /dev/null
@@ -0,0 +1,81 @@
+{
+  "_args": [
+    [
+      "encodeurl@1.0.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "encodeurl@1.0.2",
+  "_id": "encodeurl@1.0.2",
+  "_inBundle": false,
+  "_integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+  "_location": "/encodeurl",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "encodeurl@1.0.2",
+    "name": "encodeurl",
+    "escapedName": "encodeurl",
+    "rawSpec": "1.0.2",
+    "saveSpec": null,
+    "fetchSpec": "1.0.2"
+  },
+  "_requiredBy": [
+    "/express",
+    "/finalhandler",
+    "/send",
+    "/serve-static"
+  ],
+  "_resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+  "_spec": "1.0.2",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/pillarjs/encodeurl/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences",
+  "devDependencies": {
+    "eslint": "3.19.0",
+    "eslint-config-standard": "10.2.1",
+    "eslint-plugin-import": "2.8.0",
+    "eslint-plugin-node": "5.2.1",
+    "eslint-plugin-promise": "3.6.0",
+    "eslint-plugin-standard": "3.0.1",
+    "istanbul": "0.4.5",
+    "mocha": "2.5.3"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/pillarjs/encodeurl#readme",
+  "keywords": [
+    "encode",
+    "encodeurl",
+    "url"
+  ],
+  "license": "MIT",
+  "name": "encodeurl",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/pillarjs/encodeurl.git"
+  },
+  "scripts": {
+    "lint": "eslint .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "1.0.2"
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/CHANGELOG.md b/signaling_server/service/node_modules/engine.io-client/CHANGELOG.md
new file mode 100644 (file)
index 0000000..747e1bb
--- /dev/null
@@ -0,0 +1,43 @@
+## [3.5.1](https://github.com/socketio/engine.io-client/compare/3.5.0...3.5.1) (2021-03-02)
+
+
+### Bug Fixes
+
+* replace default nulls in SSL options with undefineds ([d0c551c](https://github.com/socketio/engine.io-client/commit/d0c551cca1e37301e8b28843c8f6e7ad5cf561d3))
+
+
+# [3.5.0](https://github.com/socketio/engine.io-client/compare/3.4.4...3.5.0) (2020-12-30)
+
+
+### Bug Fixes
+
+* check the type of the initial packet ([8750356](https://github.com/socketio/engine.io-client/commit/8750356dba5409ba0e1d3a27da6d214118702b3e))
+
+
+
+## [3.4.4](https://github.com/socketio/engine.io-client/compare/3.4.3...3.4.4) (2020-09-30)
+
+
+
+## [3.4.3](https://github.com/socketio/engine.io-client/compare/3.4.2...3.4.3) (2020-06-04)
+
+
+### Bug Fixes
+
+* **react-native:** restrict the list of options for the WebSocket object ([e5bc106](https://github.com/socketio/engine.io-client/commit/e5bc1063cc90a7b6262146c7b5338ffff1ff9e5b))
+
+
+
+## [3.4.2](https://github.com/socketio/engine.io-client/compare/3.4.1...3.4.2) (2020-05-13)
+
+
+
+## [3.4.1](https://github.com/socketio/engine.io-client/compare/3.4.0...3.4.1) (2020-04-17)
+
+
+### Bug Fixes
+
+* use globalThis polyfill instead of self/global ([357f01d](https://github.com/socketio/engine.io-client/commit/357f01d90448d8565b650377bc7cabb351d991bd))
+
+
+
diff --git a/signaling_server/service/node_modules/engine.io-client/README.md b/signaling_server/service/node_modules/engine.io-client/README.md
new file mode 100644 (file)
index 0000000..436f317
--- /dev/null
@@ -0,0 +1,300 @@
+
+# Engine.IO client
+
+[![Build Status](https://github.com/socketio/engine.io-client/workflows/CI/badge.svg)](https://github.com/socketio/engine.io-client/actions)
+[![NPM version](https://badge.fury.io/js/engine.io-client.svg)](http://badge.fury.io/js/engine.io-client)
+
+This is the client for [Engine.IO](http://github.com/socketio/engine.io),
+the implementation of transport-based cross-browser/cross-device
+bi-directional communication layer for [Socket.IO](http://github.com/socketio/socket.io).
+
+## How to use
+
+### Standalone
+
+You can find an `engine.io.js` file in this repository, which is a
+standalone build you can use as follows:
+
+```html
+<script src="/path/to/engine.io.js"></script>
+<script>
+  // eio = Socket
+  var socket = eio('ws://localhost');
+  socket.on('open', function(){
+    socket.on('message', function(data){});
+    socket.on('close', function(){});
+  });
+</script>
+```
+
+### With browserify
+
+Engine.IO is a commonjs module, which means you can include it by using
+`require` on the browser and package using [browserify](http://browserify.org/):
+
+1. install the client package
+
+    ```bash
+    $ npm install engine.io-client
+    ```
+
+1. write your app code
+
+    ```js
+    var socket = require('engine.io-client')('ws://localhost');
+    socket.on('open', function(){
+      socket.on('message', function(data){});
+      socket.on('close', function(){});
+    });
+    ```
+
+1. build your app bundle
+
+    ```bash
+    $ browserify app.js > bundle.js
+    ```
+
+1. include on your page
+
+    ```html
+    <script src="/path/to/bundle.js"></script>
+    ```
+
+### Sending and receiving binary
+
+```html
+<script src="/path/to/engine.io.js"></script>
+<script>
+  var socket = new eio.Socket('ws://localhost/');
+  socket.binaryType = 'blob';
+  socket.on('open', function () {
+    socket.send(new Int8Array(5));
+    socket.on('message', function(blob){});
+    socket.on('close', function(){ });
+  });
+</script>
+```
+
+### Node.JS
+
+Add `engine.io-client` to your `package.json` and then:
+
+```js
+var socket = require('engine.io-client')('ws://localhost');
+socket.on('open', function(){
+  socket.on('message', function(data){});
+  socket.on('close', function(){});
+});
+```
+
+### Node.js with certificates
+```js
+var opts = {
+  key: fs.readFileSync('test/fixtures/client.key'),
+  cert: fs.readFileSync('test/fixtures/client.crt'),
+  ca: fs.readFileSync('test/fixtures/ca.crt')
+};
+
+var socket = require('engine.io-client')('ws://localhost', opts);
+socket.on('open', function(){
+  socket.on('message', function(data){});
+  socket.on('close', function(){});
+});
+```
+
+### Node.js with extraHeaders
+```js
+var opts = {
+  extraHeaders: {
+    'X-Custom-Header-For-My-Project': 'my-secret-access-token',
+    'Cookie': 'user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly'
+  }
+};
+
+var socket = require('engine.io-client')('ws://localhost', opts);
+socket.on('open', function(){
+  socket.on('message', function(data){});
+  socket.on('close', function(){});
+});
+```
+
+## Features
+
+- Lightweight
+- Runs on browser and node.js seamlessly
+- Transports are independent of `Engine`
+  - Easy to debug
+  - Easy to unit test
+- Runs inside HTML5 WebWorker
+- Can send and receive binary data
+  - Receives as ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer
+    in Node
+  - When XHR2 or WebSockets are used, binary is emitted directly. Otherwise
+    binary is encoded into base64 strings, and decoded when binary types are
+    supported.
+  - With browsers that don't support ArrayBuffer, an object { base64: true,
+    data: dataAsBase64String } is emitted on the `message` event.
+
+## API
+
+### Socket
+
+The client class. Mixes in [Emitter](http://github.com/component/emitter).
+Exposed as `eio` in the browser standalone build.
+
+#### Properties
+
+- `protocol` _(Number)_: protocol revision number
+- `binaryType` _(String)_ : can be set to 'arraybuffer' or 'blob' in browsers,
+  and `buffer` or `arraybuffer` in Node. Blob is only used in browser if it's
+  supported.
+
+#### Events
+
+- `open`
+  - Fired upon successful connection.
+- `message`
+  - Fired when data is received from the server.
+  - **Arguments**
+    - `String` | `ArrayBuffer`: utf-8 encoded data or ArrayBuffer containing
+      binary data
+- `close`
+  - Fired upon disconnection. In compliance with the WebSocket API spec, this event may be
+    fired even if the `open` event does not occur (i.e. due to connection error or `close()`).
+- `error`
+  - Fired when an error occurs.
+- `flush`
+  - Fired upon completing a buffer flush
+- `drain`
+  - Fired after `drain` event of transport if writeBuffer is empty
+- `upgradeError`
+  - Fired if an error occurs with a transport we're trying to upgrade to.
+- `upgrade`
+  - Fired upon upgrade success, after the new transport is set
+- `ping`
+  - Fired upon _flushing_ a ping packet (ie: actual packet write out)
+- `pong`
+  - Fired upon receiving a pong packet.
+
+#### Methods
+
+- **constructor**
+    - Initializes the client
+    - **Parameters**
+      - `String` uri
+      - `Object`: optional, options object
+    - **Options**
+      - `agent` (`http.Agent`): `http.Agent` to use, defaults to `false` (NodeJS only)
+      - `upgrade` (`Boolean`): defaults to true, whether the client should try
+      to upgrade the transport from long-polling to something better.
+      - `forceJSONP` (`Boolean`): forces JSONP for polling transport.
+      - `jsonp` (`Boolean`): determines whether to use JSONP when
+        necessary for polling. If disabled (by settings to false) an error will
+        be emitted (saying "No transports available") if no other transports
+        are available. If another transport is available for opening a
+        connection (e.g. WebSocket) that transport
+        will be used instead.
+      - `forceBase64` (`Boolean`): forces base 64 encoding for polling transport even when XHR2 responseType is available and WebSocket even if the used standard supports binary.
+      - `enablesXDR` (`Boolean`): enables XDomainRequest for IE8 to avoid loading bar flashing with click sound. default to `false` because XDomainRequest has a flaw of not sending cookie.
+      - `withCredentials` (`Boolean`): defaults to `true`, whether to include credentials (cookies, authorization headers, TLS client certificates, etc.) with cross-origin XHR polling requests.
+      - `timestampRequests` (`Boolean`): whether to add the timestamp with each
+        transport request. Note: polling requests are always stamped unless this
+        option is explicitly set to `false` (`false`)
+      - `timestampParam` (`String`): timestamp parameter (`t`)
+      - `policyPort` (`Number`): port the policy server listens on (`843`)
+      - `path` (`String`): path to connect to, default is `/engine.io`
+      - `transports` (`Array`): a list of transports to try (in order).
+      Defaults to `['polling', 'websocket']`. `Engine`
+      always attempts to connect directly with the first one, provided the
+      feature detection test for it passes.
+      - `transportOptions` (`Object`): hash of options, indexed by transport name, overriding the common options for the given transport
+      - `rememberUpgrade` (`Boolean`): defaults to false.
+        If true and if the previous websocket connection to the server succeeded,
+        the connection attempt will bypass the normal upgrade process and will initially
+        try websocket. A connection attempt following a transport error will use the
+        normal upgrade process. It is recommended you turn this on only when using
+        SSL/TLS connections, or if you know that your network does not block websockets.
+      - `pfx` (`String`|`Buffer`): Certificate, Private key and CA certificates to use for SSL. Can be used in Node.js client environment to manually specify certificate information.
+      - `key` (`String`): Private key to use for SSL. Can be used in Node.js client environment to manually specify certificate information.
+      - `passphrase` (`String`): A string of passphrase for the private key or pfx. Can be used in Node.js client environment to manually specify certificate information.
+      - `cert` (`String`): Public x509 certificate to use. Can be used in Node.js client environment to manually specify certificate information.
+      - `ca` (`String`|`Array`): An authority certificate or array of authority certificates to check the remote host against.. Can be used in Node.js client environment to manually specify certificate information.
+      - `ciphers` (`String`): A string describing the ciphers to use or exclude. Consult the [cipher format list](http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT) for details on the format. Can be used in Node.js client environment to manually specify certificate information.
+      - `rejectUnauthorized` (`Boolean`): If true, the server certificate is verified against the list of supplied CAs. An 'error' event is emitted if verification fails. Verification happens at the connection level, before the HTTP request is sent. Can be used in Node.js client environment to manually specify certificate information.
+      - `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension
+        (see [ws module](https://github.com/einaros/ws) api docs). Set to `false` to disable. (`true`)
+        - `threshold` (`Number`): data is compressed only if the byte size is above this value. This option is ignored on the browser. (`1024`)
+      - `extraHeaders` (`Object`): Headers that will be passed for each request to the server (via xhr-polling and via websockets). These values then can be used during handshake or for special proxies. Can only be used in Node.js client environment.
+      - `onlyBinaryUpgrades` (`Boolean`): whether transport upgrades should be restricted to transports supporting binary data (`false`)
+      - `forceNode` (`Boolean`): Uses NodeJS implementation for websockets - even if there is a native Browser-Websocket available, which is preferred by default over the NodeJS implementation. (This is useful when using hybrid platforms like nw.js or electron) (`false`, NodeJS only)
+      - `localAddress` (`String`): the local IP address to connect to
+    - **Polling-only options**
+      - `requestTimeout` (`Number`): Timeout for xhr-polling requests in milliseconds (`0`)
+    - **Websocket-only options**
+      - `protocols` (`Array`): a list of subprotocols (see [MDN reference](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#Subprotocols))
+- `send`
+    - Sends a message to the server
+    - **Parameters**
+      - `String` | `ArrayBuffer` | `ArrayBufferView` | `Blob`: data to send
+      - `Object`: optional, options object
+      - `Function`: optional, callback upon `drain`
+    - **Options**
+      - `compress` (`Boolean`): whether to compress sending data. This option is ignored and forced to be `true` on the browser. (`true`)
+- `close`
+    - Disconnects the client.
+
+### Transport
+
+The transport class. Private. _Inherits from EventEmitter_.
+
+#### Events
+
+- `poll`: emitted by polling transports upon starting a new request
+- `pollComplete`: emitted by polling transports upon completing a request
+- `drain`: emitted by polling transports upon a buffer drain
+
+## Tests
+
+`engine.io-client` is used to test
+[engine](http://github.com/socketio/engine.io). Running the `engine.io`
+test suite ensures the client works and vice-versa.
+
+Browser tests are run using [zuul](https://github.com/defunctzombie/zuul). You can
+run the tests locally using the following command.
+
+```
+./node_modules/.bin/zuul --local 8080 -- test/index.js
+```
+
+Additionally, `engine.io-client` has a standalone test suite you can run
+with `make test` which will run node.js and browser tests. You must have zuul setup with
+a saucelabs account.
+
+## Support
+
+The support channels for `engine.io-client` are the same as `socket.io`:
+  - irc.freenode.net **#socket.io**
+  - [Google Groups](http://groups.google.com/group/socket_io)
+  - [Website](http://socket.io)
+
+## Development
+
+To contribute patches, run tests or benchmarks, make sure to clone the
+repository:
+
+```bash
+git clone git://github.com/socketio/engine.io-client.git
+```
+
+Then:
+
+```bash
+cd engine.io-client
+npm install
+```
+
+See the `Tests` section above for how to run tests before submitting any patches.
+
+## License
+
+MIT - Copyright (c) 2014 Automattic, Inc.
diff --git a/signaling_server/service/node_modules/engine.io-client/engine.io.js b/signaling_server/service/node_modules/engine.io-client/engine.io.js
new file mode 100644 (file)
index 0000000..1a3e81d
--- /dev/null
@@ -0,0 +1,4698 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+       if(typeof exports === 'object' && typeof module === 'object')
+               module.exports = factory();
+       else if(typeof define === 'function' && define.amd)
+               define([], factory);
+       else if(typeof exports === 'object')
+               exports["eio"] = factory();
+       else
+               root["eio"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/       // The module cache
+/******/       var installedModules = {};
+
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+
+/******/               // Check if module is in cache
+/******/               if(installedModules[moduleId])
+/******/                       return installedModules[moduleId].exports;
+
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = installedModules[moduleId] = {
+/******/                       exports: {},
+/******/                       id: moduleId,
+/******/                       loaded: false
+/******/               };
+
+/******/               // Execute the module function
+/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/               // Flag the module as loaded
+/******/               module.loaded = true;
+
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+
+
+/******/       // expose the modules object (__webpack_modules__)
+/******/       __webpack_require__.m = modules;
+
+/******/       // expose the module cache
+/******/       __webpack_require__.c = installedModules;
+
+/******/       // __webpack_public_path__
+/******/       __webpack_require__.p = "";
+
+/******/       // Load entry module and return exports
+/******/       return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+       
+       module.exports = __webpack_require__(1);
+
+       /**
+        * Exports parser
+        *
+        * @api public
+        *
+        */
+       module.exports.parser = __webpack_require__(9);
+
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Module dependencies.
+        */
+
+       var transports = __webpack_require__(2);
+       var Emitter = __webpack_require__(18);
+       var debug = __webpack_require__(22)('engine.io-client:socket');
+       var index = __webpack_require__(29);
+       var parser = __webpack_require__(9);
+       var parseuri = __webpack_require__(30);
+       var parseqs = __webpack_require__(19);
+
+       /**
+        * Module exports.
+        */
+
+       module.exports = Socket;
+
+       /**
+        * Socket constructor.
+        *
+        * @param {String|Object} uri or options
+        * @param {Object} options
+        * @api public
+        */
+
+       function Socket (uri, opts) {
+         if (!(this instanceof Socket)) return new Socket(uri, opts);
+
+         opts = opts || {};
+
+         if (uri && 'object' === typeof uri) {
+           opts = uri;
+           uri = null;
+         }
+
+         if (uri) {
+           uri = parseuri(uri);
+           opts.hostname = uri.host;
+           opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';
+           opts.port = uri.port;
+           if (uri.query) opts.query = uri.query;
+         } else if (opts.host) {
+           opts.hostname = parseuri(opts.host).host;
+         }
+
+         this.secure = null != opts.secure ? opts.secure
+           : (typeof location !== 'undefined' && 'https:' === location.protocol);
+
+         if (opts.hostname && !opts.port) {
+           // if no port is specified manually, use the protocol default
+           opts.port = this.secure ? '443' : '80';
+         }
+
+         this.agent = opts.agent || false;
+         this.hostname = opts.hostname ||
+           (typeof location !== 'undefined' ? location.hostname : 'localhost');
+         this.port = opts.port || (typeof location !== 'undefined' && location.port
+             ? location.port
+             : (this.secure ? 443 : 80));
+         this.query = opts.query || {};
+         if ('string' === typeof this.query) this.query = parseqs.decode(this.query);
+         this.upgrade = false !== opts.upgrade;
+         this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
+         this.forceJSONP = !!opts.forceJSONP;
+         this.jsonp = false !== opts.jsonp;
+         this.forceBase64 = !!opts.forceBase64;
+         this.enablesXDR = !!opts.enablesXDR;
+         this.withCredentials = false !== opts.withCredentials;
+         this.timestampParam = opts.timestampParam || 't';
+         this.timestampRequests = opts.timestampRequests;
+         this.transports = opts.transports || ['polling', 'websocket'];
+         this.transportOptions = opts.transportOptions || {};
+         this.readyState = '';
+         this.writeBuffer = [];
+         this.prevBufferLen = 0;
+         this.policyPort = opts.policyPort || 843;
+         this.rememberUpgrade = opts.rememberUpgrade || false;
+         this.binaryType = null;
+         this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
+         this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;
+
+         if (true === this.perMessageDeflate) this.perMessageDeflate = {};
+         if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {
+           this.perMessageDeflate.threshold = 1024;
+         }
+
+         // SSL options for Node.js client
+         this.pfx = opts.pfx || undefined;
+         this.key = opts.key || undefined;
+         this.passphrase = opts.passphrase || undefined;
+         this.cert = opts.cert || undefined;
+         this.ca = opts.ca || undefined;
+         this.ciphers = opts.ciphers || undefined;
+         this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;
+         this.forceNode = !!opts.forceNode;
+
+         // detect ReactNative environment
+         this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');
+
+         // other options for Node.js or ReactNative client
+         if (typeof self === 'undefined' || this.isReactNative) {
+           if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {
+             this.extraHeaders = opts.extraHeaders;
+           }
+
+           if (opts.localAddress) {
+             this.localAddress = opts.localAddress;
+           }
+         }
+
+         // set on handshake
+         this.id = null;
+         this.upgrades = null;
+         this.pingInterval = null;
+         this.pingTimeout = null;
+
+         // set on heartbeat
+         this.pingIntervalTimer = null;
+         this.pingTimeoutTimer = null;
+
+         this.open();
+       }
+
+       Socket.priorWebsocketSuccess = false;
+
+       /**
+        * Mix in `Emitter`.
+        */
+
+       Emitter(Socket.prototype);
+
+       /**
+        * Protocol version.
+        *
+        * @api public
+        */
+
+       Socket.protocol = parser.protocol; // this is an int
+
+       /**
+        * Expose deps for legacy compatibility
+        * and standalone browser access.
+        */
+
+       Socket.Socket = Socket;
+       Socket.Transport = __webpack_require__(8);
+       Socket.transports = __webpack_require__(2);
+       Socket.parser = __webpack_require__(9);
+
+       /**
+        * Creates transport of the given type.
+        *
+        * @param {String} transport name
+        * @return {Transport}
+        * @api private
+        */
+
+       Socket.prototype.createTransport = function (name) {
+         debug('creating transport "%s"', name);
+         var query = clone(this.query);
+
+         // append engine.io protocol identifier
+         query.EIO = parser.protocol;
+
+         // transport name
+         query.transport = name;
+
+         // per-transport options
+         var options = this.transportOptions[name] || {};
+
+         // session id if we already have one
+         if (this.id) query.sid = this.id;
+
+         var transport = new transports[name]({
+           query: query,
+           socket: this,
+           agent: options.agent || this.agent,
+           hostname: options.hostname || this.hostname,
+           port: options.port || this.port,
+           secure: options.secure || this.secure,
+           path: options.path || this.path,
+           forceJSONP: options.forceJSONP || this.forceJSONP,
+           jsonp: options.jsonp || this.jsonp,
+           forceBase64: options.forceBase64 || this.forceBase64,
+           enablesXDR: options.enablesXDR || this.enablesXDR,
+           withCredentials: options.withCredentials || this.withCredentials,
+           timestampRequests: options.timestampRequests || this.timestampRequests,
+           timestampParam: options.timestampParam || this.timestampParam,
+           policyPort: options.policyPort || this.policyPort,
+           pfx: options.pfx || this.pfx,
+           key: options.key || this.key,
+           passphrase: options.passphrase || this.passphrase,
+           cert: options.cert || this.cert,
+           ca: options.ca || this.ca,
+           ciphers: options.ciphers || this.ciphers,
+           rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,
+           perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,
+           extraHeaders: options.extraHeaders || this.extraHeaders,
+           forceNode: options.forceNode || this.forceNode,
+           localAddress: options.localAddress || this.localAddress,
+           requestTimeout: options.requestTimeout || this.requestTimeout,
+           protocols: options.protocols || void (0),
+           isReactNative: this.isReactNative
+         });
+
+         return transport;
+       };
+
+       function clone (obj) {
+         var o = {};
+         for (var i in obj) {
+           if (obj.hasOwnProperty(i)) {
+             o[i] = obj[i];
+           }
+         }
+         return o;
+       }
+
+       /**
+        * Initializes transport to use and starts probe.
+        *
+        * @api private
+        */
+       Socket.prototype.open = function () {
+         var transport;
+         if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {
+           transport = 'websocket';
+         } else if (0 === this.transports.length) {
+           // Emit error on next tick so it can be listened to
+           var self = this;
+           setTimeout(function () {
+             self.emit('error', 'No transports available');
+           }, 0);
+           return;
+         } else {
+           transport = this.transports[0];
+         }
+         this.readyState = 'opening';
+
+         // Retry with the next transport if the transport is disabled (jsonp: false)
+         try {
+           transport = this.createTransport(transport);
+         } catch (e) {
+           this.transports.shift();
+           this.open();
+           return;
+         }
+
+         transport.open();
+         this.setTransport(transport);
+       };
+
+       /**
+        * Sets the current transport. Disables the existing one (if any).
+        *
+        * @api private
+        */
+
+       Socket.prototype.setTransport = function (transport) {
+         debug('setting transport %s', transport.name);
+         var self = this;
+
+         if (this.transport) {
+           debug('clearing existing transport %s', this.transport.name);
+           this.transport.removeAllListeners();
+         }
+
+         // set up transport
+         this.transport = transport;
+
+         // set up transport listeners
+         transport
+         .on('drain', function () {
+           self.onDrain();
+         })
+         .on('packet', function (packet) {
+           self.onPacket(packet);
+         })
+         .on('error', function (e) {
+           self.onError(e);
+         })
+         .on('close', function () {
+           self.onClose('transport close');
+         });
+       };
+
+       /**
+        * Probes a transport.
+        *
+        * @param {String} transport name
+        * @api private
+        */
+
+       Socket.prototype.probe = function (name) {
+         debug('probing transport "%s"', name);
+         var transport = this.createTransport(name, { probe: 1 });
+         var failed = false;
+         var self = this;
+
+         Socket.priorWebsocketSuccess = false;
+
+         function onTransportOpen () {
+           if (self.onlyBinaryUpgrades) {
+             var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
+             failed = failed || upgradeLosesBinary;
+           }
+           if (failed) return;
+
+           debug('probe transport "%s" opened', name);
+           transport.send([{ type: 'ping', data: 'probe' }]);
+           transport.once('packet', function (msg) {
+             if (failed) return;
+             if ('pong' === msg.type && 'probe' === msg.data) {
+               debug('probe transport "%s" pong', name);
+               self.upgrading = true;
+               self.emit('upgrading', transport);
+               if (!transport) return;
+               Socket.priorWebsocketSuccess = 'websocket' === transport.name;
+
+               debug('pausing current transport "%s"', self.transport.name);
+               self.transport.pause(function () {
+                 if (failed) return;
+                 if ('closed' === self.readyState) return;
+                 debug('changing transport and sending upgrade packet');
+
+                 cleanup();
+
+                 self.setTransport(transport);
+                 transport.send([{ type: 'upgrade' }]);
+                 self.emit('upgrade', transport);
+                 transport = null;
+                 self.upgrading = false;
+                 self.flush();
+               });
+             } else {
+               debug('probe transport "%s" failed', name);
+               var err = new Error('probe error');
+               err.transport = transport.name;
+               self.emit('upgradeError', err);
+             }
+           });
+         }
+
+         function freezeTransport () {
+           if (failed) return;
+
+           // Any callback called by transport should be ignored since now
+           failed = true;
+
+           cleanup();
+
+           transport.close();
+           transport = null;
+         }
+
+         // Handle any error that happens while probing
+         function onerror (err) {
+           var error = new Error('probe error: ' + err);
+           error.transport = transport.name;
+
+           freezeTransport();
+
+           debug('probe transport "%s" failed because of error: %s', name, err);
+
+           self.emit('upgradeError', error);
+         }
+
+         function onTransportClose () {
+           onerror('transport closed');
+         }
+
+         // When the socket is closed while we're probing
+         function onclose () {
+           onerror('socket closed');
+         }
+
+         // When the socket is upgraded while we're probing
+         function onupgrade (to) {
+           if (transport && to.name !== transport.name) {
+             debug('"%s" works - aborting "%s"', to.name, transport.name);
+             freezeTransport();
+           }
+         }
+
+         // Remove all listeners on the transport and on self
+         function cleanup () {
+           transport.removeListener('open', onTransportOpen);
+           transport.removeListener('error', onerror);
+           transport.removeListener('close', onTransportClose);
+           self.removeListener('close', onclose);
+           self.removeListener('upgrading', onupgrade);
+         }
+
+         transport.once('open', onTransportOpen);
+         transport.once('error', onerror);
+         transport.once('close', onTransportClose);
+
+         this.once('close', onclose);
+         this.once('upgrading', onupgrade);
+
+         transport.open();
+       };
+
+       /**
+        * Called when connection is deemed open.
+        *
+        * @api public
+        */
+
+       Socket.prototype.onOpen = function () {
+         debug('socket open');
+         this.readyState = 'open';
+         Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;
+         this.emit('open');
+         this.flush();
+
+         // we check for `readyState` in case an `open`
+         // listener already closed the socket
+         if ('open' === this.readyState && this.upgrade && this.transport.pause) {
+           debug('starting upgrade probes');
+           for (var i = 0, l = this.upgrades.length; i < l; i++) {
+             this.probe(this.upgrades[i]);
+           }
+         }
+       };
+
+       /**
+        * Handles a packet.
+        *
+        * @api private
+        */
+
+       Socket.prototype.onPacket = function (packet) {
+         if ('opening' === this.readyState || 'open' === this.readyState ||
+             'closing' === this.readyState) {
+           debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
+
+           this.emit('packet', packet);
+
+           // Socket is live - any packet counts
+           this.emit('heartbeat');
+
+           switch (packet.type) {
+             case 'open':
+               this.onHandshake(JSON.parse(packet.data));
+               break;
+
+             case 'pong':
+               this.setPing();
+               this.emit('pong');
+               break;
+
+             case 'error':
+               var err = new Error('server error');
+               err.code = packet.data;
+               this.onError(err);
+               break;
+
+             case 'message':
+               this.emit('data', packet.data);
+               this.emit('message', packet.data);
+               break;
+           }
+         } else {
+           debug('packet received with socket readyState "%s"', this.readyState);
+         }
+       };
+
+       /**
+        * Called upon handshake completion.
+        *
+        * @param {Object} handshake obj
+        * @api private
+        */
+
+       Socket.prototype.onHandshake = function (data) {
+         this.emit('handshake', data);
+         this.id = data.sid;
+         this.transport.query.sid = data.sid;
+         this.upgrades = this.filterUpgrades(data.upgrades);
+         this.pingInterval = data.pingInterval;
+         this.pingTimeout = data.pingTimeout;
+         this.onOpen();
+         // In case open handler closes socket
+         if ('closed' === this.readyState) return;
+         this.setPing();
+
+         // Prolong liveness of socket on heartbeat
+         this.removeListener('heartbeat', this.onHeartbeat);
+         this.on('heartbeat', this.onHeartbeat);
+       };
+
+       /**
+        * Resets ping timeout.
+        *
+        * @api private
+        */
+
+       Socket.prototype.onHeartbeat = function (timeout) {
+         clearTimeout(this.pingTimeoutTimer);
+         var self = this;
+         self.pingTimeoutTimer = setTimeout(function () {
+           if ('closed' === self.readyState) return;
+           self.onClose('ping timeout');
+         }, timeout || (self.pingInterval + self.pingTimeout));
+       };
+
+       /**
+        * Pings server every `this.pingInterval` and expects response
+        * within `this.pingTimeout` or closes connection.
+        *
+        * @api private
+        */
+
+       Socket.prototype.setPing = function () {
+         var self = this;
+         clearTimeout(self.pingIntervalTimer);
+         self.pingIntervalTimer = setTimeout(function () {
+           debug('writing ping packet - expecting pong within %sms', self.pingTimeout);
+           self.ping();
+           self.onHeartbeat(self.pingTimeout);
+         }, self.pingInterval);
+       };
+
+       /**
+       * Sends a ping packet.
+       *
+       * @api private
+       */
+
+       Socket.prototype.ping = function () {
+         var self = this;
+         this.sendPacket('ping', function () {
+           self.emit('ping');
+         });
+       };
+
+       /**
+        * Called on `drain` event
+        *
+        * @api private
+        */
+
+       Socket.prototype.onDrain = function () {
+         this.writeBuffer.splice(0, this.prevBufferLen);
+
+         // setting prevBufferLen = 0 is very important
+         // for example, when upgrading, upgrade packet is sent over,
+         // and a nonzero prevBufferLen could cause problems on `drain`
+         this.prevBufferLen = 0;
+
+         if (0 === this.writeBuffer.length) {
+           this.emit('drain');
+         } else {
+           this.flush();
+         }
+       };
+
+       /**
+        * Flush write buffers.
+        *
+        * @api private
+        */
+
+       Socket.prototype.flush = function () {
+         if ('closed' !== this.readyState && this.transport.writable &&
+           !this.upgrading && this.writeBuffer.length) {
+           debug('flushing %d packets in socket', this.writeBuffer.length);
+           this.transport.send(this.writeBuffer);
+           // keep track of current length of writeBuffer
+           // splice writeBuffer and callbackBuffer on `drain`
+           this.prevBufferLen = this.writeBuffer.length;
+           this.emit('flush');
+         }
+       };
+
+       /**
+        * Sends a message.
+        *
+        * @param {String} message.
+        * @param {Function} callback function.
+        * @param {Object} options.
+        * @return {Socket} for chaining.
+        * @api public
+        */
+
+       Socket.prototype.write =
+       Socket.prototype.send = function (msg, options, fn) {
+         this.sendPacket('message', msg, options, fn);
+         return this;
+       };
+
+       /**
+        * Sends a packet.
+        *
+        * @param {String} packet type.
+        * @param {String} data.
+        * @param {Object} options.
+        * @param {Function} callback function.
+        * @api private
+        */
+
+       Socket.prototype.sendPacket = function (type, data, options, fn) {
+         if ('function' === typeof data) {
+           fn = data;
+           data = undefined;
+         }
+
+         if ('function' === typeof options) {
+           fn = options;
+           options = null;
+         }
+
+         if ('closing' === this.readyState || 'closed' === this.readyState) {
+           return;
+         }
+
+         options = options || {};
+         options.compress = false !== options.compress;
+
+         var packet = {
+           type: type,
+           data: data,
+           options: options
+         };
+         this.emit('packetCreate', packet);
+         this.writeBuffer.push(packet);
+         if (fn) this.once('flush', fn);
+         this.flush();
+       };
+
+       /**
+        * Closes the connection.
+        *
+        * @api private
+        */
+
+       Socket.prototype.close = function () {
+         if ('opening' === this.readyState || 'open' === this.readyState) {
+           this.readyState = 'closing';
+
+           var self = this;
+
+           if (this.writeBuffer.length) {
+             this.once('drain', function () {
+               if (this.upgrading) {
+                 waitForUpgrade();
+               } else {
+                 close();
+               }
+             });
+           } else if (this.upgrading) {
+             waitForUpgrade();
+           } else {
+             close();
+           }
+         }
+
+         function close () {
+           self.onClose('forced close');
+           debug('socket closing - telling transport to close');
+           self.transport.close();
+         }
+
+         function cleanupAndClose () {
+           self.removeListener('upgrade', cleanupAndClose);
+           self.removeListener('upgradeError', cleanupAndClose);
+           close();
+         }
+
+         function waitForUpgrade () {
+           // wait for upgrade to finish since we can't send packets while pausing a transport
+           self.once('upgrade', cleanupAndClose);
+           self.once('upgradeError', cleanupAndClose);
+         }
+
+         return this;
+       };
+
+       /**
+        * Called upon transport error
+        *
+        * @api private
+        */
+
+       Socket.prototype.onError = function (err) {
+         debug('socket error %j', err);
+         Socket.priorWebsocketSuccess = false;
+         this.emit('error', err);
+         this.onClose('transport error', err);
+       };
+
+       /**
+        * Called upon transport close.
+        *
+        * @api private
+        */
+
+       Socket.prototype.onClose = function (reason, desc) {
+         if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {
+           debug('socket close with reason: "%s"', reason);
+           var self = this;
+
+           // clear timers
+           clearTimeout(this.pingIntervalTimer);
+           clearTimeout(this.pingTimeoutTimer);
+
+           // stop event from firing again for transport
+           this.transport.removeAllListeners('close');
+
+           // ensure transport won't stay open
+           this.transport.close();
+
+           // ignore further transport communication
+           this.transport.removeAllListeners();
+
+           // set ready state
+           this.readyState = 'closed';
+
+           // clear session id
+           this.id = null;
+
+           // emit close event
+           this.emit('close', reason, desc);
+
+           // clean buffers after, so users can still
+           // grab the buffers on `close` event
+           self.writeBuffer = [];
+           self.prevBufferLen = 0;
+         }
+       };
+
+       /**
+        * Filters upgrades, returning only those matching client transports.
+        *
+        * @param {Array} server upgrades
+        * @api private
+        *
+        */
+
+       Socket.prototype.filterUpgrades = function (upgrades) {
+         var filteredUpgrades = [];
+         for (var i = 0, j = upgrades.length; i < j; i++) {
+           if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
+         }
+         return filteredUpgrades;
+       };
+
+
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Module dependencies
+        */
+
+       var XMLHttpRequest = __webpack_require__(3);
+       var XHR = __webpack_require__(6);
+       var JSONP = __webpack_require__(26);
+       var websocket = __webpack_require__(27);
+
+       /**
+        * Export transports.
+        */
+
+       exports.polling = polling;
+       exports.websocket = websocket;
+
+       /**
+        * Polling transport polymorphic constructor.
+        * Decides on xhr vs jsonp based on feature detection.
+        *
+        * @api private
+        */
+
+       function polling (opts) {
+         var xhr;
+         var xd = false;
+         var xs = false;
+         var jsonp = false !== opts.jsonp;
+
+         if (typeof location !== 'undefined') {
+           var isSSL = 'https:' === location.protocol;
+           var port = location.port;
+
+           // some user agents have empty `location.port`
+           if (!port) {
+             port = isSSL ? 443 : 80;
+           }
+
+           xd = opts.hostname !== location.hostname || port !== opts.port;
+           xs = opts.secure !== isSSL;
+         }
+
+         opts.xdomain = xd;
+         opts.xscheme = xs;
+         xhr = new XMLHttpRequest(opts);
+
+         if ('open' in xhr && !opts.forceJSONP) {
+           return new XHR(opts);
+         } else {
+           if (!jsonp) throw new Error('JSONP disabled');
+           return new JSONP(opts);
+         }
+       }
+
+
+/***/ },
+/* 3 */
+/***/ function(module, exports, __webpack_require__) {
+
+       // browser shim for xmlhttprequest module
+
+       var hasCORS = __webpack_require__(4);
+       var globalThis = __webpack_require__(5);
+
+       module.exports = function (opts) {
+         var xdomain = opts.xdomain;
+
+         // scheme must be same when usign XDomainRequest
+         // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
+         var xscheme = opts.xscheme;
+
+         // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.
+         // https://github.com/Automattic/engine.io-client/pull/217
+         var enablesXDR = opts.enablesXDR;
+
+         // XMLHttpRequest can be disabled on IE
+         try {
+           if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {
+             return new XMLHttpRequest();
+           }
+         } catch (e) { }
+
+         // Use XDomainRequest for IE8 if enablesXDR is true
+         // because loading bar keeps flashing when using jsonp-polling
+         // https://github.com/yujiosaka/socke.io-ie8-loading-example
+         try {
+           if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {
+             return new XDomainRequest();
+           }
+         } catch (e) { }
+
+         if (!xdomain) {
+           try {
+             return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
+           } catch (e) { }
+         }
+       };
+
+
+/***/ },
+/* 4 */
+/***/ function(module, exports) {
+
+       
+       /**
+        * Module exports.
+        *
+        * Logic borrowed from Modernizr:
+        *
+        *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js
+        */
+
+       try {
+         module.exports = typeof XMLHttpRequest !== 'undefined' &&
+           'withCredentials' in new XMLHttpRequest();
+       } catch (err) {
+         // if XMLHttp support is disabled in IE then it will throw
+         // when trying to create
+         module.exports = false;
+       }
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports) {
+
+       module.exports = (function () {
+         if (typeof self !== 'undefined') {
+           return self;
+         } else if (typeof window !== 'undefined') {
+           return window;
+         } else {
+           return Function('return this')(); // eslint-disable-line no-new-func
+         }
+       })();
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* global attachEvent */
+
+       /**
+        * Module requirements.
+        */
+
+       var XMLHttpRequest = __webpack_require__(3);
+       var Polling = __webpack_require__(7);
+       var Emitter = __webpack_require__(18);
+       var inherit = __webpack_require__(20);
+       var debug = __webpack_require__(22)('engine.io-client:polling-xhr');
+       var globalThis = __webpack_require__(5);
+
+       /**
+        * Module exports.
+        */
+
+       module.exports = XHR;
+       module.exports.Request = Request;
+
+       /**
+        * Empty function
+        */
+
+       function empty () {}
+
+       /**
+        * XHR Polling constructor.
+        *
+        * @param {Object} opts
+        * @api public
+        */
+
+       function XHR (opts) {
+         Polling.call(this, opts);
+         this.requestTimeout = opts.requestTimeout;
+         this.extraHeaders = opts.extraHeaders;
+
+         if (typeof location !== 'undefined') {
+           var isSSL = 'https:' === location.protocol;
+           var port = location.port;
+
+           // some user agents have empty `location.port`
+           if (!port) {
+             port = isSSL ? 443 : 80;
+           }
+
+           this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||
+             port !== opts.port;
+           this.xs = opts.secure !== isSSL;
+         }
+       }
+
+       /**
+        * Inherits from Polling.
+        */
+
+       inherit(XHR, Polling);
+
+       /**
+        * XHR supports binary
+        */
+
+       XHR.prototype.supportsBinary = true;
+
+       /**
+        * Creates a request.
+        *
+        * @param {String} method
+        * @api private
+        */
+
+       XHR.prototype.request = function (opts) {
+         opts = opts || {};
+         opts.uri = this.uri();
+         opts.xd = this.xd;
+         opts.xs = this.xs;
+         opts.agent = this.agent || false;
+         opts.supportsBinary = this.supportsBinary;
+         opts.enablesXDR = this.enablesXDR;
+         opts.withCredentials = this.withCredentials;
+
+         // SSL options for Node.js client
+         opts.pfx = this.pfx;
+         opts.key = this.key;
+         opts.passphrase = this.passphrase;
+         opts.cert = this.cert;
+         opts.ca = this.ca;
+         opts.ciphers = this.ciphers;
+         opts.rejectUnauthorized = this.rejectUnauthorized;
+         opts.requestTimeout = this.requestTimeout;
+
+         // other options for Node.js client
+         opts.extraHeaders = this.extraHeaders;
+
+         return new Request(opts);
+       };
+
+       /**
+        * Sends data.
+        *
+        * @param {String} data to send.
+        * @param {Function} called upon flush.
+        * @api private
+        */
+
+       XHR.prototype.doWrite = function (data, fn) {
+         var isBinary = typeof data !== 'string' && data !== undefined;
+         var req = this.request({ method: 'POST', data: data, isBinary: isBinary });
+         var self = this;
+         req.on('success', fn);
+         req.on('error', function (err) {
+           self.onError('xhr post error', err);
+         });
+         this.sendXhr = req;
+       };
+
+       /**
+        * Starts a poll cycle.
+        *
+        * @api private
+        */
+
+       XHR.prototype.doPoll = function () {
+         debug('xhr poll');
+         var req = this.request();
+         var self = this;
+         req.on('data', function (data) {
+           self.onData(data);
+         });
+         req.on('error', function (err) {
+           self.onError('xhr poll error', err);
+         });
+         this.pollXhr = req;
+       };
+
+       /**
+        * Request constructor
+        *
+        * @param {Object} options
+        * @api public
+        */
+
+       function Request (opts) {
+         this.method = opts.method || 'GET';
+         this.uri = opts.uri;
+         this.xd = !!opts.xd;
+         this.xs = !!opts.xs;
+         this.async = false !== opts.async;
+         this.data = undefined !== opts.data ? opts.data : null;
+         this.agent = opts.agent;
+         this.isBinary = opts.isBinary;
+         this.supportsBinary = opts.supportsBinary;
+         this.enablesXDR = opts.enablesXDR;
+         this.withCredentials = opts.withCredentials;
+         this.requestTimeout = opts.requestTimeout;
+
+         // SSL options for Node.js client
+         this.pfx = opts.pfx;
+         this.key = opts.key;
+         this.passphrase = opts.passphrase;
+         this.cert = opts.cert;
+         this.ca = opts.ca;
+         this.ciphers = opts.ciphers;
+         this.rejectUnauthorized = opts.rejectUnauthorized;
+
+         // other options for Node.js client
+         this.extraHeaders = opts.extraHeaders;
+
+         this.create();
+       }
+
+       /**
+        * Mix in `Emitter`.
+        */
+
+       Emitter(Request.prototype);
+
+       /**
+        * Creates the XHR object and sends the request.
+        *
+        * @api private
+        */
+
+       Request.prototype.create = function () {
+         var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };
+
+         // SSL options for Node.js client
+         opts.pfx = this.pfx;
+         opts.key = this.key;
+         opts.passphrase = this.passphrase;
+         opts.cert = this.cert;
+         opts.ca = this.ca;
+         opts.ciphers = this.ciphers;
+         opts.rejectUnauthorized = this.rejectUnauthorized;
+
+         var xhr = this.xhr = new XMLHttpRequest(opts);
+         var self = this;
+
+         try {
+           debug('xhr open %s: %s', this.method, this.uri);
+           xhr.open(this.method, this.uri, this.async);
+           try {
+             if (this.extraHeaders) {
+               xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);
+               for (var i in this.extraHeaders) {
+                 if (this.extraHeaders.hasOwnProperty(i)) {
+                   xhr.setRequestHeader(i, this.extraHeaders[i]);
+                 }
+               }
+             }
+           } catch (e) {}
+
+           if ('POST' === this.method) {
+             try {
+               if (this.isBinary) {
+                 xhr.setRequestHeader('Content-type', 'application/octet-stream');
+               } else {
+                 xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
+               }
+             } catch (e) {}
+           }
+
+           try {
+             xhr.setRequestHeader('Accept', '*/*');
+           } catch (e) {}
+
+           // ie6 check
+           if ('withCredentials' in xhr) {
+             xhr.withCredentials = this.withCredentials;
+           }
+
+           if (this.requestTimeout) {
+             xhr.timeout = this.requestTimeout;
+           }
+
+           if (this.hasXDR()) {
+             xhr.onload = function () {
+               self.onLoad();
+             };
+             xhr.onerror = function () {
+               self.onError(xhr.responseText);
+             };
+           } else {
+             xhr.onreadystatechange = function () {
+               if (xhr.readyState === 2) {
+                 try {
+                   var contentType = xhr.getResponseHeader('Content-Type');
+                   if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {
+                     xhr.responseType = 'arraybuffer';
+                   }
+                 } catch (e) {}
+               }
+               if (4 !== xhr.readyState) return;
+               if (200 === xhr.status || 1223 === xhr.status) {
+                 self.onLoad();
+               } else {
+                 // make sure the `error` event handler that's user-set
+                 // does not throw in the same tick and gets caught here
+                 setTimeout(function () {
+                   self.onError(typeof xhr.status === 'number' ? xhr.status : 0);
+                 }, 0);
+               }
+             };
+           }
+
+           debug('xhr data %s', this.data);
+           xhr.send(this.data);
+         } catch (e) {
+           // Need to defer since .create() is called directly fhrom the constructor
+           // and thus the 'error' event can only be only bound *after* this exception
+           // occurs.  Therefore, also, we cannot throw here at all.
+           setTimeout(function () {
+             self.onError(e);
+           }, 0);
+           return;
+         }
+
+         if (typeof document !== 'undefined') {
+           this.index = Request.requestsCount++;
+           Request.requests[this.index] = this;
+         }
+       };
+
+       /**
+        * Called upon successful response.
+        *
+        * @api private
+        */
+
+       Request.prototype.onSuccess = function () {
+         this.emit('success');
+         this.cleanup();
+       };
+
+       /**
+        * Called if we have data.
+        *
+        * @api private
+        */
+
+       Request.prototype.onData = function (data) {
+         this.emit('data', data);
+         this.onSuccess();
+       };
+
+       /**
+        * Called upon error.
+        *
+        * @api private
+        */
+
+       Request.prototype.onError = function (err) {
+         this.emit('error', err);
+         this.cleanup(true);
+       };
+
+       /**
+        * Cleans up house.
+        *
+        * @api private
+        */
+
+       Request.prototype.cleanup = function (fromError) {
+         if ('undefined' === typeof this.xhr || null === this.xhr) {
+           return;
+         }
+         // xmlhttprequest
+         if (this.hasXDR()) {
+           this.xhr.onload = this.xhr.onerror = empty;
+         } else {
+           this.xhr.onreadystatechange = empty;
+         }
+
+         if (fromError) {
+           try {
+             this.xhr.abort();
+           } catch (e) {}
+         }
+
+         if (typeof document !== 'undefined') {
+           delete Request.requests[this.index];
+         }
+
+         this.xhr = null;
+       };
+
+       /**
+        * Called upon load.
+        *
+        * @api private
+        */
+
+       Request.prototype.onLoad = function () {
+         var data;
+         try {
+           var contentType;
+           try {
+             contentType = this.xhr.getResponseHeader('Content-Type');
+           } catch (e) {}
+           if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {
+             data = this.xhr.response || this.xhr.responseText;
+           } else {
+             data = this.xhr.responseText;
+           }
+         } catch (e) {
+           this.onError(e);
+         }
+         if (null != data) {
+           this.onData(data);
+         }
+       };
+
+       /**
+        * Check if it has XDomainRequest.
+        *
+        * @api private
+        */
+
+       Request.prototype.hasXDR = function () {
+         return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;
+       };
+
+       /**
+        * Aborts the request.
+        *
+        * @api public
+        */
+
+       Request.prototype.abort = function () {
+         this.cleanup();
+       };
+
+       /**
+        * Aborts pending requests when unloading the window. This is needed to prevent
+        * memory leaks (e.g. when using IE) and to ensure that no spurious error is
+        * emitted.
+        */
+
+       Request.requestsCount = 0;
+       Request.requests = {};
+
+       if (typeof document !== 'undefined') {
+         if (typeof attachEvent === 'function') {
+           attachEvent('onunload', unloadHandler);
+         } else if (typeof addEventListener === 'function') {
+           var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';
+           addEventListener(terminationEvent, unloadHandler, false);
+         }
+       }
+
+       function unloadHandler () {
+         for (var i in Request.requests) {
+           if (Request.requests.hasOwnProperty(i)) {
+             Request.requests[i].abort();
+           }
+         }
+       }
+
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Module dependencies.
+        */
+
+       var Transport = __webpack_require__(8);
+       var parseqs = __webpack_require__(19);
+       var parser = __webpack_require__(9);
+       var inherit = __webpack_require__(20);
+       var yeast = __webpack_require__(21);
+       var debug = __webpack_require__(22)('engine.io-client:polling');
+
+       /**
+        * Module exports.
+        */
+
+       module.exports = Polling;
+
+       /**
+        * Is XHR2 supported?
+        */
+
+       var hasXHR2 = (function () {
+         var XMLHttpRequest = __webpack_require__(3);
+         var xhr = new XMLHttpRequest({ xdomain: false });
+         return null != xhr.responseType;
+       })();
+
+       /**
+        * Polling interface.
+        *
+        * @param {Object} opts
+        * @api private
+        */
+
+       function Polling (opts) {
+         var forceBase64 = (opts && opts.forceBase64);
+         if (!hasXHR2 || forceBase64) {
+           this.supportsBinary = false;
+         }
+         Transport.call(this, opts);
+       }
+
+       /**
+        * Inherits from Transport.
+        */
+
+       inherit(Polling, Transport);
+
+       /**
+        * Transport name.
+        */
+
+       Polling.prototype.name = 'polling';
+
+       /**
+        * Opens the socket (triggers polling). We write a PING message to determine
+        * when the transport is open.
+        *
+        * @api private
+        */
+
+       Polling.prototype.doOpen = function () {
+         this.poll();
+       };
+
+       /**
+        * Pauses polling.
+        *
+        * @param {Function} callback upon buffers are flushed and transport is paused
+        * @api private
+        */
+
+       Polling.prototype.pause = function (onPause) {
+         var self = this;
+
+         this.readyState = 'pausing';
+
+         function pause () {
+           debug('paused');
+           self.readyState = 'paused';
+           onPause();
+         }
+
+         if (this.polling || !this.writable) {
+           var total = 0;
+
+           if (this.polling) {
+             debug('we are currently polling - waiting to pause');
+             total++;
+             this.once('pollComplete', function () {
+               debug('pre-pause polling complete');
+               --total || pause();
+             });
+           }
+
+           if (!this.writable) {
+             debug('we are currently writing - waiting to pause');
+             total++;
+             this.once('drain', function () {
+               debug('pre-pause writing complete');
+               --total || pause();
+             });
+           }
+         } else {
+           pause();
+         }
+       };
+
+       /**
+        * Starts polling cycle.
+        *
+        * @api public
+        */
+
+       Polling.prototype.poll = function () {
+         debug('polling');
+         this.polling = true;
+         this.doPoll();
+         this.emit('poll');
+       };
+
+       /**
+        * Overloads onData to detect payloads.
+        *
+        * @api private
+        */
+
+       Polling.prototype.onData = function (data) {
+         var self = this;
+         debug('polling got data %s', data);
+         var callback = function (packet, index, total) {
+           // if its the first message we consider the transport open
+           if ('opening' === self.readyState && packet.type === 'open') {
+             self.onOpen();
+           }
+
+           // if its a close packet, we close the ongoing requests
+           if ('close' === packet.type) {
+             self.onClose();
+             return false;
+           }
+
+           // otherwise bypass onData and handle the message
+           self.onPacket(packet);
+         };
+
+         // decode payload
+         parser.decodePayload(data, this.socket.binaryType, callback);
+
+         // if an event did not trigger closing
+         if ('closed' !== this.readyState) {
+           // if we got data we're not polling
+           this.polling = false;
+           this.emit('pollComplete');
+
+           if ('open' === this.readyState) {
+             this.poll();
+           } else {
+             debug('ignoring poll - transport state "%s"', this.readyState);
+           }
+         }
+       };
+
+       /**
+        * For polling, send a close packet.
+        *
+        * @api private
+        */
+
+       Polling.prototype.doClose = function () {
+         var self = this;
+
+         function close () {
+           debug('writing close packet');
+           self.write([{ type: 'close' }]);
+         }
+
+         if ('open' === this.readyState) {
+           debug('transport open - closing');
+           close();
+         } else {
+           // in case we're trying to close while
+           // handshaking is in progress (GH-164)
+           debug('transport not open - deferring close');
+           this.once('open', close);
+         }
+       };
+
+       /**
+        * Writes a packets payload.
+        *
+        * @param {Array} data packets
+        * @param {Function} drain callback
+        * @api private
+        */
+
+       Polling.prototype.write = function (packets) {
+         var self = this;
+         this.writable = false;
+         var callbackfn = function () {
+           self.writable = true;
+           self.emit('drain');
+         };
+
+         parser.encodePayload(packets, this.supportsBinary, function (data) {
+           self.doWrite(data, callbackfn);
+         });
+       };
+
+       /**
+        * Generates uri for connection.
+        *
+        * @api private
+        */
+
+       Polling.prototype.uri = function () {
+         var query = this.query || {};
+         var schema = this.secure ? 'https' : 'http';
+         var port = '';
+
+         // cache busting is forced
+         if (false !== this.timestampRequests) {
+           query[this.timestampParam] = yeast();
+         }
+
+         if (!this.supportsBinary && !query.sid) {
+           query.b64 = 1;
+         }
+
+         query = parseqs.encode(query);
+
+         // avoid port if default for schema
+         if (this.port && (('https' === schema && Number(this.port) !== 443) ||
+            ('http' === schema && Number(this.port) !== 80))) {
+           port = ':' + this.port;
+         }
+
+         // prepend ? to query
+         if (query.length) {
+           query = '?' + query;
+         }
+
+         var ipv6 = this.hostname.indexOf(':') !== -1;
+         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
+       };
+
+
+/***/ },
+/* 8 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Module dependencies.
+        */
+
+       var parser = __webpack_require__(9);
+       var Emitter = __webpack_require__(18);
+
+       /**
+        * Module exports.
+        */
+
+       module.exports = Transport;
+
+       /**
+        * Transport abstract constructor.
+        *
+        * @param {Object} options.
+        * @api private
+        */
+
+       function Transport (opts) {
+         this.path = opts.path;
+         this.hostname = opts.hostname;
+         this.port = opts.port;
+         this.secure = opts.secure;
+         this.query = opts.query;
+         this.timestampParam = opts.timestampParam;
+         this.timestampRequests = opts.timestampRequests;
+         this.readyState = '';
+         this.agent = opts.agent || false;
+         this.socket = opts.socket;
+         this.enablesXDR = opts.enablesXDR;
+         this.withCredentials = opts.withCredentials;
+
+         // SSL options for Node.js client
+         this.pfx = opts.pfx;
+         this.key = opts.key;
+         this.passphrase = opts.passphrase;
+         this.cert = opts.cert;
+         this.ca = opts.ca;
+         this.ciphers = opts.ciphers;
+         this.rejectUnauthorized = opts.rejectUnauthorized;
+         this.forceNode = opts.forceNode;
+
+         // results of ReactNative environment detection
+         this.isReactNative = opts.isReactNative;
+
+         // other options for Node.js client
+         this.extraHeaders = opts.extraHeaders;
+         this.localAddress = opts.localAddress;
+       }
+
+       /**
+        * Mix in `Emitter`.
+        */
+
+       Emitter(Transport.prototype);
+
+       /**
+        * Emits an error.
+        *
+        * @param {String} str
+        * @return {Transport} for chaining
+        * @api public
+        */
+
+       Transport.prototype.onError = function (msg, desc) {
+         var err = new Error(msg);
+         err.type = 'TransportError';
+         err.description = desc;
+         this.emit('error', err);
+         return this;
+       };
+
+       /**
+        * Opens the transport.
+        *
+        * @api public
+        */
+
+       Transport.prototype.open = function () {
+         if ('closed' === this.readyState || '' === this.readyState) {
+           this.readyState = 'opening';
+           this.doOpen();
+         }
+
+         return this;
+       };
+
+       /**
+        * Closes the transport.
+        *
+        * @api private
+        */
+
+       Transport.prototype.close = function () {
+         if ('opening' === this.readyState || 'open' === this.readyState) {
+           this.doClose();
+           this.onClose();
+         }
+
+         return this;
+       };
+
+       /**
+        * Sends multiple packets.
+        *
+        * @param {Array} packets
+        * @api private
+        */
+
+       Transport.prototype.send = function (packets) {
+         if ('open' === this.readyState) {
+           this.write(packets);
+         } else {
+           throw new Error('Transport not open');
+         }
+       };
+
+       /**
+        * Called upon open
+        *
+        * @api private
+        */
+
+       Transport.prototype.onOpen = function () {
+         this.readyState = 'open';
+         this.writable = true;
+         this.emit('open');
+       };
+
+       /**
+        * Called with data.
+        *
+        * @param {String} data
+        * @api private
+        */
+
+       Transport.prototype.onData = function (data) {
+         var packet = parser.decodePacket(data, this.socket.binaryType);
+         this.onPacket(packet);
+       };
+
+       /**
+        * Called with a decoded packet.
+        */
+
+       Transport.prototype.onPacket = function (packet) {
+         this.emit('packet', packet);
+       };
+
+       /**
+        * Called upon close.
+        *
+        * @api private
+        */
+
+       Transport.prototype.onClose = function () {
+         this.readyState = 'closed';
+         this.emit('close');
+       };
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Module dependencies.
+        */
+
+       var keys = __webpack_require__(10);
+       var hasBinary = __webpack_require__(11);
+       var sliceBuffer = __webpack_require__(13);
+       var after = __webpack_require__(14);
+       var utf8 = __webpack_require__(15);
+
+       var base64encoder;
+       if (typeof ArrayBuffer !== 'undefined') {
+         base64encoder = __webpack_require__(16);
+       }
+
+       /**
+        * Check if we are running an android browser. That requires us to use
+        * ArrayBuffer with polling transports...
+        *
+        * http://ghinda.net/jpeg-blob-ajax-android/
+        */
+
+       var isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);
+
+       /**
+        * Check if we are running in PhantomJS.
+        * Uploading a Blob with PhantomJS does not work correctly, as reported here:
+        * https://github.com/ariya/phantomjs/issues/11395
+        * @type boolean
+        */
+       var isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);
+
+       /**
+        * When true, avoids using Blobs to encode payloads.
+        * @type boolean
+        */
+       var dontSendBlobs = isAndroid || isPhantomJS;
+
+       /**
+        * Current protocol version.
+        */
+
+       exports.protocol = 3;
+
+       /**
+        * Packet types.
+        */
+
+       var packets = exports.packets = {
+           open:     0    // non-ws
+         , close:    1    // non-ws
+         , ping:     2
+         , pong:     3
+         , message:  4
+         , upgrade:  5
+         , noop:     6
+       };
+
+       var packetslist = keys(packets);
+
+       /**
+        * Premade error packet.
+        */
+
+       var err = { type: 'error', data: 'parser error' };
+
+       /**
+        * Create a blob api even for blob builder when vendor prefixes exist
+        */
+
+       var Blob = __webpack_require__(17);
+
+       /**
+        * Encodes a packet.
+        *
+        *     <packet type id> [ <data> ]
+        *
+        * Example:
+        *
+        *     5hello world
+        *     3
+        *     4
+        *
+        * Binary is encoded in an identical principle
+        *
+        * @api private
+        */
+
+       exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
+         if (typeof supportsBinary === 'function') {
+           callback = supportsBinary;
+           supportsBinary = false;
+         }
+
+         if (typeof utf8encode === 'function') {
+           callback = utf8encode;
+           utf8encode = null;
+         }
+
+         var data = (packet.data === undefined)
+           ? undefined
+           : packet.data.buffer || packet.data;
+
+         if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {
+           return encodeArrayBuffer(packet, supportsBinary, callback);
+         } else if (typeof Blob !== 'undefined' && data instanceof Blob) {
+           return encodeBlob(packet, supportsBinary, callback);
+         }
+
+         // might be an object with { base64: true, data: dataAsBase64String }
+         if (data && data.base64) {
+           return encodeBase64Object(packet, callback);
+         }
+
+         // Sending data as a utf-8 string
+         var encoded = packets[packet.type];
+
+         // data fragment is optional
+         if (undefined !== packet.data) {
+           encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);
+         }
+
+         return callback('' + encoded);
+
+       };
+
+       function encodeBase64Object(packet, callback) {
+         // packet data is an object { base64: true, data: dataAsBase64String }
+         var message = 'b' + exports.packets[packet.type] + packet.data.data;
+         return callback(message);
+       }
+
+       /**
+        * Encode packet helpers for binary types
+        */
+
+       function encodeArrayBuffer(packet, supportsBinary, callback) {
+         if (!supportsBinary) {
+           return exports.encodeBase64Packet(packet, callback);
+         }
+
+         var data = packet.data;
+         var contentArray = new Uint8Array(data);
+         var resultBuffer = new Uint8Array(1 + data.byteLength);
+
+         resultBuffer[0] = packets[packet.type];
+         for (var i = 0; i < contentArray.length; i++) {
+           resultBuffer[i+1] = contentArray[i];
+         }
+
+         return callback(resultBuffer.buffer);
+       }
+
+       function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {
+         if (!supportsBinary) {
+           return exports.encodeBase64Packet(packet, callback);
+         }
+
+         var fr = new FileReader();
+         fr.onload = function() {
+           exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);
+         };
+         return fr.readAsArrayBuffer(packet.data);
+       }
+
+       function encodeBlob(packet, supportsBinary, callback) {
+         if (!supportsBinary) {
+           return exports.encodeBase64Packet(packet, callback);
+         }
+
+         if (dontSendBlobs) {
+           return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);
+         }
+
+         var length = new Uint8Array(1);
+         length[0] = packets[packet.type];
+         var blob = new Blob([length.buffer, packet.data]);
+
+         return callback(blob);
+       }
+
+       /**
+        * Encodes a packet with binary data in a base64 string
+        *
+        * @param {Object} packet, has `type` and `data`
+        * @return {String} base64 encoded message
+        */
+
+       exports.encodeBase64Packet = function(packet, callback) {
+         var message = 'b' + exports.packets[packet.type];
+         if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {
+           var fr = new FileReader();
+           fr.onload = function() {
+             var b64 = fr.result.split(',')[1];
+             callback(message + b64);
+           };
+           return fr.readAsDataURL(packet.data);
+         }
+
+         var b64data;
+         try {
+           b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));
+         } catch (e) {
+           // iPhone Safari doesn't let you apply with typed arrays
+           var typed = new Uint8Array(packet.data);
+           var basic = new Array(typed.length);
+           for (var i = 0; i < typed.length; i++) {
+             basic[i] = typed[i];
+           }
+           b64data = String.fromCharCode.apply(null, basic);
+         }
+         message += btoa(b64data);
+         return callback(message);
+       };
+
+       /**
+        * Decodes a packet. Changes format to Blob if requested.
+        *
+        * @return {Object} with `type` and `data` (if any)
+        * @api private
+        */
+
+       exports.decodePacket = function (data, binaryType, utf8decode) {
+         if (data === undefined) {
+           return err;
+         }
+         // String data
+         if (typeof data === 'string') {
+           if (data.charAt(0) === 'b') {
+             return exports.decodeBase64Packet(data.substr(1), binaryType);
+           }
+
+           if (utf8decode) {
+             data = tryDecode(data);
+             if (data === false) {
+               return err;
+             }
+           }
+           var type = data.charAt(0);
+
+           if (Number(type) != type || !packetslist[type]) {
+             return err;
+           }
+
+           if (data.length > 1) {
+             return { type: packetslist[type], data: data.substring(1) };
+           } else {
+             return { type: packetslist[type] };
+           }
+         }
+
+         var asArray = new Uint8Array(data);
+         var type = asArray[0];
+         var rest = sliceBuffer(data, 1);
+         if (Blob && binaryType === 'blob') {
+           rest = new Blob([rest]);
+         }
+         return { type: packetslist[type], data: rest };
+       };
+
+       function tryDecode(data) {
+         try {
+           data = utf8.decode(data, { strict: false });
+         } catch (e) {
+           return false;
+         }
+         return data;
+       }
+
+       /**
+        * Decodes a packet encoded in a base64 string
+        *
+        * @param {String} base64 encoded message
+        * @return {Object} with `type` and `data` (if any)
+        */
+
+       exports.decodeBase64Packet = function(msg, binaryType) {
+         var type = packetslist[msg.charAt(0)];
+         if (!base64encoder) {
+           return { type: type, data: { base64: true, data: msg.substr(1) } };
+         }
+
+         var data = base64encoder.decode(msg.substr(1));
+
+         if (binaryType === 'blob' && Blob) {
+           data = new Blob([data]);
+         }
+
+         return { type: type, data: data };
+       };
+
+       /**
+        * Encodes multiple messages (payload).
+        *
+        *     <length>:data
+        *
+        * Example:
+        *
+        *     11:hello world2:hi
+        *
+        * If any contents are binary, they will be encoded as base64 strings. Base64
+        * encoded strings are marked with a b before the length specifier
+        *
+        * @param {Array} packets
+        * @api private
+        */
+
+       exports.encodePayload = function (packets, supportsBinary, callback) {
+         if (typeof supportsBinary === 'function') {
+           callback = supportsBinary;
+           supportsBinary = null;
+         }
+
+         var isBinary = hasBinary(packets);
+
+         if (supportsBinary && isBinary) {
+           if (Blob && !dontSendBlobs) {
+             return exports.encodePayloadAsBlob(packets, callback);
+           }
+
+           return exports.encodePayloadAsArrayBuffer(packets, callback);
+         }
+
+         if (!packets.length) {
+           return callback('0:');
+         }
+
+         function setLengthHeader(message) {
+           return message.length + ':' + message;
+         }
+
+         function encodeOne(packet, doneCallback) {
+           exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {
+             doneCallback(null, setLengthHeader(message));
+           });
+         }
+
+         map(packets, encodeOne, function(err, results) {
+           return callback(results.join(''));
+         });
+       };
+
+       /**
+        * Async array map using after
+        */
+
+       function map(ary, each, done) {
+         var result = new Array(ary.length);
+         var next = after(ary.length, done);
+
+         var eachWithIndex = function(i, el, cb) {
+           each(el, function(error, msg) {
+             result[i] = msg;
+             cb(error, result);
+           });
+         };
+
+         for (var i = 0; i < ary.length; i++) {
+           eachWithIndex(i, ary[i], next);
+         }
+       }
+
+       /*
+        * Decodes data when a payload is maybe expected. Possible binary contents are
+        * decoded from their base64 representation
+        *
+        * @param {String} data, callback method
+        * @api public
+        */
+
+       exports.decodePayload = function (data, binaryType, callback) {
+         if (typeof data !== 'string') {
+           return exports.decodePayloadAsBinary(data, binaryType, callback);
+         }
+
+         if (typeof binaryType === 'function') {
+           callback = binaryType;
+           binaryType = null;
+         }
+
+         var packet;
+         if (data === '') {
+           // parser error - ignoring payload
+           return callback(err, 0, 1);
+         }
+
+         var length = '', n, msg;
+
+         for (var i = 0, l = data.length; i < l; i++) {
+           var chr = data.charAt(i);
+
+           if (chr !== ':') {
+             length += chr;
+             continue;
+           }
+
+           if (length === '' || (length != (n = Number(length)))) {
+             // parser error - ignoring payload
+             return callback(err, 0, 1);
+           }
+
+           msg = data.substr(i + 1, n);
+
+           if (length != msg.length) {
+             // parser error - ignoring payload
+             return callback(err, 0, 1);
+           }
+
+           if (msg.length) {
+             packet = exports.decodePacket(msg, binaryType, false);
+
+             if (err.type === packet.type && err.data === packet.data) {
+               // parser error in individual packet - ignoring payload
+               return callback(err, 0, 1);
+             }
+
+             var ret = callback(packet, i + n, l);
+             if (false === ret) return;
+           }
+
+           // advance cursor
+           i += n;
+           length = '';
+         }
+
+         if (length !== '') {
+           // parser error - ignoring payload
+           return callback(err, 0, 1);
+         }
+
+       };
+
+       /**
+        * Encodes multiple messages (payload) as binary.
+        *
+        * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number
+        * 255><data>
+        *
+        * Example:
+        * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers
+        *
+        * @param {Array} packets
+        * @return {ArrayBuffer} encoded payload
+        * @api private
+        */
+
+       exports.encodePayloadAsArrayBuffer = function(packets, callback) {
+         if (!packets.length) {
+           return callback(new ArrayBuffer(0));
+         }
+
+         function encodeOne(packet, doneCallback) {
+           exports.encodePacket(packet, true, true, function(data) {
+             return doneCallback(null, data);
+           });
+         }
+
+         map(packets, encodeOne, function(err, encodedPackets) {
+           var totalLength = encodedPackets.reduce(function(acc, p) {
+             var len;
+             if (typeof p === 'string'){
+               len = p.length;
+             } else {
+               len = p.byteLength;
+             }
+             return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2
+           }, 0);
+
+           var resultArray = new Uint8Array(totalLength);
+
+           var bufferIndex = 0;
+           encodedPackets.forEach(function(p) {
+             var isString = typeof p === 'string';
+             var ab = p;
+             if (isString) {
+               var view = new Uint8Array(p.length);
+               for (var i = 0; i < p.length; i++) {
+                 view[i] = p.charCodeAt(i);
+               }
+               ab = view.buffer;
+             }
+
+             if (isString) { // not true binary
+               resultArray[bufferIndex++] = 0;
+             } else { // true binary
+               resultArray[bufferIndex++] = 1;
+             }
+
+             var lenStr = ab.byteLength.toString();
+             for (var i = 0; i < lenStr.length; i++) {
+               resultArray[bufferIndex++] = parseInt(lenStr[i]);
+             }
+             resultArray[bufferIndex++] = 255;
+
+             var view = new Uint8Array(ab);
+             for (var i = 0; i < view.length; i++) {
+               resultArray[bufferIndex++] = view[i];
+             }
+           });
+
+           return callback(resultArray.buffer);
+         });
+       };
+
+       /**
+        * Encode as Blob
+        */
+
+       exports.encodePayloadAsBlob = function(packets, callback) {
+         function encodeOne(packet, doneCallback) {
+           exports.encodePacket(packet, true, true, function(encoded) {
+             var binaryIdentifier = new Uint8Array(1);
+             binaryIdentifier[0] = 1;
+             if (typeof encoded === 'string') {
+               var view = new Uint8Array(encoded.length);
+               for (var i = 0; i < encoded.length; i++) {
+                 view[i] = encoded.charCodeAt(i);
+               }
+               encoded = view.buffer;
+               binaryIdentifier[0] = 0;
+             }
+
+             var len = (encoded instanceof ArrayBuffer)
+               ? encoded.byteLength
+               : encoded.size;
+
+             var lenStr = len.toString();
+             var lengthAry = new Uint8Array(lenStr.length + 1);
+             for (var i = 0; i < lenStr.length; i++) {
+               lengthAry[i] = parseInt(lenStr[i]);
+             }
+             lengthAry[lenStr.length] = 255;
+
+             if (Blob) {
+               var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);
+               doneCallback(null, blob);
+             }
+           });
+         }
+
+         map(packets, encodeOne, function(err, results) {
+           return callback(new Blob(results));
+         });
+       };
+
+       /*
+        * Decodes data when a payload is maybe expected. Strings are decoded by
+        * interpreting each byte as a key code for entries marked to start with 0. See
+        * description of encodePayloadAsBinary
+        *
+        * @param {ArrayBuffer} data, callback method
+        * @api public
+        */
+
+       exports.decodePayloadAsBinary = function (data, binaryType, callback) {
+         if (typeof binaryType === 'function') {
+           callback = binaryType;
+           binaryType = null;
+         }
+
+         var bufferTail = data;
+         var buffers = [];
+
+         while (bufferTail.byteLength > 0) {
+           var tailArray = new Uint8Array(bufferTail);
+           var isString = tailArray[0] === 0;
+           var msgLength = '';
+
+           for (var i = 1; ; i++) {
+             if (tailArray[i] === 255) break;
+
+             // 310 = char length of Number.MAX_VALUE
+             if (msgLength.length > 310) {
+               return callback(err, 0, 1);
+             }
+
+             msgLength += tailArray[i];
+           }
+
+           bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);
+           msgLength = parseInt(msgLength);
+
+           var msg = sliceBuffer(bufferTail, 0, msgLength);
+           if (isString) {
+             try {
+               msg = String.fromCharCode.apply(null, new Uint8Array(msg));
+             } catch (e) {
+               // iPhone Safari doesn't let you apply to typed arrays
+               var typed = new Uint8Array(msg);
+               msg = '';
+               for (var i = 0; i < typed.length; i++) {
+                 msg += String.fromCharCode(typed[i]);
+               }
+             }
+           }
+
+           buffers.push(msg);
+           bufferTail = sliceBuffer(bufferTail, msgLength);
+         }
+
+         var total = buffers.length;
+         buffers.forEach(function(buffer, i) {
+           callback(exports.decodePacket(buffer, binaryType, true), i, total);
+         });
+       };
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports) {
+
+       
+       /**
+        * Gets the keys for an object.
+        *
+        * @return {Array} keys
+        * @api private
+        */
+
+       module.exports = Object.keys || function keys (obj){
+         var arr = [];
+         var has = Object.prototype.hasOwnProperty;
+
+         for (var i in obj) {
+           if (has.call(obj, i)) {
+             arr.push(i);
+           }
+         }
+         return arr;
+       };
+
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* global Blob File */
+
+       /*
+        * Module requirements.
+        */
+
+       var isArray = __webpack_require__(12);
+
+       var toString = Object.prototype.toString;
+       var withNativeBlob = typeof Blob === 'function' ||
+                               typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';
+       var withNativeFile = typeof File === 'function' ||
+                               typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';
+
+       /**
+        * Module exports.
+        */
+
+       module.exports = hasBinary;
+
+       /**
+        * Checks for binary data.
+        *
+        * Supports Buffer, ArrayBuffer, Blob and File.
+        *
+        * @param {Object} anything
+        * @api public
+        */
+
+       function hasBinary (obj) {
+         if (!obj || typeof obj !== 'object') {
+           return false;
+         }
+
+         if (isArray(obj)) {
+           for (var i = 0, l = obj.length; i < l; i++) {
+             if (hasBinary(obj[i])) {
+               return true;
+             }
+           }
+           return false;
+         }
+
+         if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||
+           (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||
+           (withNativeBlob && obj instanceof Blob) ||
+           (withNativeFile && obj instanceof File)
+         ) {
+           return true;
+         }
+
+         // see: https://github.com/Automattic/has-binary/pull/4
+         if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {
+           return hasBinary(obj.toJSON(), true);
+         }
+
+         for (var key in obj) {
+           if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {
+             return true;
+           }
+         }
+
+         return false;
+       }
+
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
+       var toString = {}.toString;
+
+       module.exports = Array.isArray || function (arr) {
+         return toString.call(arr) == '[object Array]';
+       };
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports) {
+
+       /**
+        * An abstraction for slicing an arraybuffer even when
+        * ArrayBuffer.prototype.slice is not supported
+        *
+        * @api public
+        */
+
+       module.exports = function(arraybuffer, start, end) {
+         var bytes = arraybuffer.byteLength;
+         start = start || 0;
+         end = end || bytes;
+
+         if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
+
+         if (start < 0) { start += bytes; }
+         if (end < 0) { end += bytes; }
+         if (end > bytes) { end = bytes; }
+
+         if (start >= bytes || start >= end || bytes === 0) {
+           return new ArrayBuffer(0);
+         }
+
+         var abv = new Uint8Array(arraybuffer);
+         var result = new Uint8Array(end - start);
+         for (var i = start, ii = 0; i < end; i++, ii++) {
+           result[ii] = abv[i];
+         }
+         return result.buffer;
+       };
+
+
+/***/ },
+/* 14 */
+/***/ function(module, exports) {
+
+       module.exports = after
+
+       function after(count, callback, err_cb) {
+           var bail = false
+           err_cb = err_cb || noop
+           proxy.count = count
+
+           return (count === 0) ? callback() : proxy
+
+           function proxy(err, result) {
+               if (proxy.count <= 0) {
+                   throw new Error('after called too many times')
+               }
+               --proxy.count
+
+               // after first error, rest are passed to err_cb
+               if (err) {
+                   bail = true
+                   callback(err)
+                   // future error callbacks will go to error handler
+                   callback = err_cb
+               } else if (proxy.count === 0 && !bail) {
+                   callback(null, result)
+               }
+           }
+       }
+
+       function noop() {}
+
+
+/***/ },
+/* 15 */
+/***/ function(module, exports) {
+
+       /*! https://mths.be/utf8js v2.1.2 by @mathias */
+
+       var stringFromCharCode = String.fromCharCode;
+
+       // Taken from https://mths.be/punycode
+       function ucs2decode(string) {
+               var output = [];
+               var counter = 0;
+               var length = string.length;
+               var value;
+               var extra;
+               while (counter < length) {
+                       value = string.charCodeAt(counter++);
+                       if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
+                               // high surrogate, and there is a next character
+                               extra = string.charCodeAt(counter++);
+                               if ((extra & 0xFC00) == 0xDC00) { // low surrogate
+                                       output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
+                               } else {
+                                       // unmatched surrogate; only append this code unit, in case the next
+                                       // code unit is the high surrogate of a surrogate pair
+                                       output.push(value);
+                                       counter--;
+                               }
+                       } else {
+                               output.push(value);
+                       }
+               }
+               return output;
+       }
+
+       // Taken from https://mths.be/punycode
+       function ucs2encode(array) {
+               var length = array.length;
+               var index = -1;
+               var value;
+               var output = '';
+               while (++index < length) {
+                       value = array[index];
+                       if (value > 0xFFFF) {
+                               value -= 0x10000;
+                               output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
+                               value = 0xDC00 | value & 0x3FF;
+                       }
+                       output += stringFromCharCode(value);
+               }
+               return output;
+       }
+
+       function checkScalarValue(codePoint, strict) {
+               if (codePoint >= 0xD800 && codePoint <= 0xDFFF) {
+                       if (strict) {
+                               throw Error(
+                                       'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +
+                                       ' is not a scalar value'
+                               );
+                       }
+                       return false;
+               }
+               return true;
+       }
+       /*--------------------------------------------------------------------------*/
+
+       function createByte(codePoint, shift) {
+               return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
+       }
+
+       function encodeCodePoint(codePoint, strict) {
+               if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
+                       return stringFromCharCode(codePoint);
+               }
+               var symbol = '';
+               if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
+                       symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
+               }
+               else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
+                       if (!checkScalarValue(codePoint, strict)) {
+                               codePoint = 0xFFFD;
+                       }
+                       symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
+                       symbol += createByte(codePoint, 6);
+               }
+               else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
+                       symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
+                       symbol += createByte(codePoint, 12);
+                       symbol += createByte(codePoint, 6);
+               }
+               symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
+               return symbol;
+       }
+
+       function utf8encode(string, opts) {
+               opts = opts || {};
+               var strict = false !== opts.strict;
+
+               var codePoints = ucs2decode(string);
+               var length = codePoints.length;
+               var index = -1;
+               var codePoint;
+               var byteString = '';
+               while (++index < length) {
+                       codePoint = codePoints[index];
+                       byteString += encodeCodePoint(codePoint, strict);
+               }
+               return byteString;
+       }
+
+       /*--------------------------------------------------------------------------*/
+
+       function readContinuationByte() {
+               if (byteIndex >= byteCount) {
+                       throw Error('Invalid byte index');
+               }
+
+               var continuationByte = byteArray[byteIndex] & 0xFF;
+               byteIndex++;
+
+               if ((continuationByte & 0xC0) == 0x80) {
+                       return continuationByte & 0x3F;
+               }
+
+               // If we end up here, it’s not a continuation byte
+               throw Error('Invalid continuation byte');
+       }
+
+       function decodeSymbol(strict) {
+               var byte1;
+               var byte2;
+               var byte3;
+               var byte4;
+               var codePoint;
+
+               if (byteIndex > byteCount) {
+                       throw Error('Invalid byte index');
+               }
+
+               if (byteIndex == byteCount) {
+                       return false;
+               }
+
+               // Read first byte
+               byte1 = byteArray[byteIndex] & 0xFF;
+               byteIndex++;
+
+               // 1-byte sequence (no continuation bytes)
+               if ((byte1 & 0x80) == 0) {
+                       return byte1;
+               }
+
+               // 2-byte sequence
+               if ((byte1 & 0xE0) == 0xC0) {
+                       byte2 = readContinuationByte();
+                       codePoint = ((byte1 & 0x1F) << 6) | byte2;
+                       if (codePoint >= 0x80) {
+                               return codePoint;
+                       } else {
+                               throw Error('Invalid continuation byte');
+                       }
+               }
+
+               // 3-byte sequence (may include unpaired surrogates)
+               if ((byte1 & 0xF0) == 0xE0) {
+                       byte2 = readContinuationByte();
+                       byte3 = readContinuationByte();
+                       codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
+                       if (codePoint >= 0x0800) {
+                               return checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;
+                       } else {
+                               throw Error('Invalid continuation byte');
+                       }
+               }
+
+               // 4-byte sequence
+               if ((byte1 & 0xF8) == 0xF0) {
+                       byte2 = readContinuationByte();
+                       byte3 = readContinuationByte();
+                       byte4 = readContinuationByte();
+                       codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |
+                               (byte3 << 0x06) | byte4;
+                       if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
+                               return codePoint;
+                       }
+               }
+
+               throw Error('Invalid UTF-8 detected');
+       }
+
+       var byteArray;
+       var byteCount;
+       var byteIndex;
+       function utf8decode(byteString, opts) {
+               opts = opts || {};
+               var strict = false !== opts.strict;
+
+               byteArray = ucs2decode(byteString);
+               byteCount = byteArray.length;
+               byteIndex = 0;
+               var codePoints = [];
+               var tmp;
+               while ((tmp = decodeSymbol(strict)) !== false) {
+                       codePoints.push(tmp);
+               }
+               return ucs2encode(codePoints);
+       }
+
+       module.exports = {
+               version: '2.1.2',
+               encode: utf8encode,
+               decode: utf8decode
+       };
+
+
+/***/ },
+/* 16 */
+/***/ function(module, exports) {
+
+       /*
+        * base64-arraybuffer
+        * https://github.com/niklasvh/base64-arraybuffer
+        *
+        * Copyright (c) 2012 Niklas von Hertzen
+        * Licensed under the MIT license.
+        */
+       (function(){
+         "use strict";
+
+         var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+         // Use a lookup table to find the index.
+         var lookup = new Uint8Array(256);
+         for (var i = 0; i < chars.length; i++) {
+           lookup[chars.charCodeAt(i)] = i;
+         }
+
+         exports.encode = function(arraybuffer) {
+           var bytes = new Uint8Array(arraybuffer),
+           i, len = bytes.length, base64 = "";
+
+           for (i = 0; i < len; i+=3) {
+             base64 += chars[bytes[i] >> 2];
+             base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
+             base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
+             base64 += chars[bytes[i + 2] & 63];
+           }
+
+           if ((len % 3) === 2) {
+             base64 = base64.substring(0, base64.length - 1) + "=";
+           } else if (len % 3 === 1) {
+             base64 = base64.substring(0, base64.length - 2) + "==";
+           }
+
+           return base64;
+         };
+
+         exports.decode =  function(base64) {
+           var bufferLength = base64.length * 0.75,
+           len = base64.length, i, p = 0,
+           encoded1, encoded2, encoded3, encoded4;
+
+           if (base64[base64.length - 1] === "=") {
+             bufferLength--;
+             if (base64[base64.length - 2] === "=") {
+               bufferLength--;
+             }
+           }
+
+           var arraybuffer = new ArrayBuffer(bufferLength),
+           bytes = new Uint8Array(arraybuffer);
+
+           for (i = 0; i < len; i+=4) {
+             encoded1 = lookup[base64.charCodeAt(i)];
+             encoded2 = lookup[base64.charCodeAt(i+1)];
+             encoded3 = lookup[base64.charCodeAt(i+2)];
+             encoded4 = lookup[base64.charCodeAt(i+3)];
+
+             bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
+             bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
+             bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
+           }
+
+           return arraybuffer;
+         };
+       })();
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports) {
+
+       /**\r
+        * Create a blob builder even when vendor prefixes exist\r
+        */\r
+\r
+       var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r
+         typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r
+         typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r
+         typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r
+         false;\r
+\r
+       /**\r
+        * Check if Blob constructor is supported\r
+        */\r
+\r
+       var blobSupported = (function() {\r
+         try {\r
+           var a = new Blob(['hi']);\r
+           return a.size === 2;\r
+         } catch(e) {\r
+           return false;\r
+         }\r
+       })();\r
+\r
+       /**\r
+        * Check if Blob constructor supports ArrayBufferViews\r
+        * Fails in Safari 6, so we need to map to ArrayBuffers there.\r
+        */\r
+\r
+       var blobSupportsArrayBufferView = blobSupported && (function() {\r
+         try {\r
+           var b = new Blob([new Uint8Array([1,2])]);\r
+           return b.size === 2;\r
+         } catch(e) {\r
+           return false;\r
+         }\r
+       })();\r
+\r
+       /**\r
+        * Check if BlobBuilder is supported\r
+        */\r
+\r
+       var blobBuilderSupported = BlobBuilder\r
+         && BlobBuilder.prototype.append\r
+         && BlobBuilder.prototype.getBlob;\r
+\r
+       /**\r
+        * Helper function that maps ArrayBufferViews to ArrayBuffers\r
+        * Used by BlobBuilder constructor and old browsers that didn't\r
+        * support it in the Blob constructor.\r
+        */\r
+\r
+       function mapArrayBufferViews(ary) {\r
+         return ary.map(function(chunk) {\r
+           if (chunk.buffer instanceof ArrayBuffer) {\r
+             var buf = chunk.buffer;\r
+\r
+             // if this is a subarray, make a copy so we only\r
+             // include the subarray region from the underlying buffer\r
+             if (chunk.byteLength !== buf.byteLength) {\r
+               var copy = new Uint8Array(chunk.byteLength);\r
+               copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r
+               buf = copy.buffer;\r
+             }\r
+\r
+             return buf;\r
+           }\r
+\r
+           return chunk;\r
+         });\r
+       }\r
+\r
+       function BlobBuilderConstructor(ary, options) {\r
+         options = options || {};\r
+\r
+         var bb = new BlobBuilder();\r
+         mapArrayBufferViews(ary).forEach(function(part) {\r
+           bb.append(part);\r
+         });\r
+\r
+         return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r
+       };\r
+\r
+       function BlobConstructor(ary, options) {\r
+         return new Blob(mapArrayBufferViews(ary), options || {});\r
+       };\r
+\r
+       if (typeof Blob !== 'undefined') {\r
+         BlobBuilderConstructor.prototype = Blob.prototype;\r
+         BlobConstructor.prototype = Blob.prototype;\r
+       }\r
+\r
+       module.exports = (function() {\r
+         if (blobSupported) {\r
+           return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r
+         } else if (blobBuilderSupported) {\r
+           return BlobBuilderConstructor;\r
+         } else {\r
+           return undefined;\r
+         }\r
+       })();\r
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports, __webpack_require__) {
+
+       \r
+       /**\r
+        * Expose `Emitter`.\r
+        */\r
+\r
+       if (true) {\r
+         module.exports = Emitter;\r
+       }\r
+\r
+       /**\r
+        * Initialize a new `Emitter`.\r
+        *\r
+        * @api public\r
+        */\r
+\r
+       function Emitter(obj) {\r
+         if (obj) return mixin(obj);\r
+       };\r
+\r
+       /**\r
+        * Mixin the emitter properties.\r
+        *\r
+        * @param {Object} obj\r
+        * @return {Object}\r
+        * @api private\r
+        */\r
+\r
+       function mixin(obj) {\r
+         for (var key in Emitter.prototype) {\r
+           obj[key] = Emitter.prototype[key];\r
+         }\r
+         return obj;\r
+       }\r
+\r
+       /**\r
+        * Listen on the given `event` with `fn`.\r
+        *\r
+        * @param {String} event\r
+        * @param {Function} fn\r
+        * @return {Emitter}\r
+        * @api public\r
+        */\r
+\r
+       Emitter.prototype.on =\r
+       Emitter.prototype.addEventListener = function(event, fn){\r
+         this._callbacks = this._callbacks || {};\r
+         (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r
+           .push(fn);\r
+         return this;\r
+       };\r
+\r
+       /**\r
+        * Adds an `event` listener that will be invoked a single\r
+        * time then automatically removed.\r
+        *\r
+        * @param {String} event\r
+        * @param {Function} fn\r
+        * @return {Emitter}\r
+        * @api public\r
+        */\r
+\r
+       Emitter.prototype.once = function(event, fn){\r
+         function on() {\r
+           this.off(event, on);\r
+           fn.apply(this, arguments);\r
+         }\r
+\r
+         on.fn = fn;\r
+         this.on(event, on);\r
+         return this;\r
+       };\r
+\r
+       /**\r
+        * Remove the given callback for `event` or all\r
+        * registered callbacks.\r
+        *\r
+        * @param {String} event\r
+        * @param {Function} fn\r
+        * @return {Emitter}\r
+        * @api public\r
+        */\r
+\r
+       Emitter.prototype.off =\r
+       Emitter.prototype.removeListener =\r
+       Emitter.prototype.removeAllListeners =\r
+       Emitter.prototype.removeEventListener = function(event, fn){\r
+         this._callbacks = this._callbacks || {};\r
+\r
+         // all\r
+         if (0 == arguments.length) {\r
+           this._callbacks = {};\r
+           return this;\r
+         }\r
+\r
+         // specific event\r
+         var callbacks = this._callbacks['$' + event];\r
+         if (!callbacks) return this;\r
+\r
+         // remove all handlers\r
+         if (1 == arguments.length) {\r
+           delete this._callbacks['$' + event];\r
+           return this;\r
+         }\r
+\r
+         // remove specific handler\r
+         var cb;\r
+         for (var i = 0; i < callbacks.length; i++) {\r
+           cb = callbacks[i];\r
+           if (cb === fn || cb.fn === fn) {\r
+             callbacks.splice(i, 1);\r
+             break;\r
+           }\r
+         }\r
+\r
+         // Remove event specific arrays for event types that no\r
+         // one is subscribed for to avoid memory leak.\r
+         if (callbacks.length === 0) {\r
+           delete this._callbacks['$' + event];\r
+         }\r
+\r
+         return this;\r
+       };\r
+\r
+       /**\r
+        * Emit `event` with the given args.\r
+        *\r
+        * @param {String} event\r
+        * @param {Mixed} ...\r
+        * @return {Emitter}\r
+        */\r
+\r
+       Emitter.prototype.emit = function(event){\r
+         this._callbacks = this._callbacks || {};\r
+\r
+         var args = new Array(arguments.length - 1)\r
+           , callbacks = this._callbacks['$' + event];\r
+\r
+         for (var i = 1; i < arguments.length; i++) {\r
+           args[i - 1] = arguments[i];\r
+         }\r
+\r
+         if (callbacks) {\r
+           callbacks = callbacks.slice(0);\r
+           for (var i = 0, len = callbacks.length; i < len; ++i) {\r
+             callbacks[i].apply(this, args);\r
+           }\r
+         }\r
+\r
+         return this;\r
+       };\r
+\r
+       /**\r
+        * Return array of callbacks for `event`.\r
+        *\r
+        * @param {String} event\r
+        * @return {Array}\r
+        * @api public\r
+        */\r
+\r
+       Emitter.prototype.listeners = function(event){\r
+         this._callbacks = this._callbacks || {};\r
+         return this._callbacks['$' + event] || [];\r
+       };\r
+\r
+       /**\r
+        * Check if this emitter has `event` handlers.\r
+        *\r
+        * @param {String} event\r
+        * @return {Boolean}\r
+        * @api public\r
+        */\r
+\r
+       Emitter.prototype.hasListeners = function(event){\r
+         return !! this.listeners(event).length;\r
+       };\r
+
+
+/***/ },
+/* 19 */
+/***/ function(module, exports) {
+
+       /**
+        * Compiles a querystring
+        * Returns string representation of the object
+        *
+        * @param {Object}
+        * @api private
+        */
+
+       exports.encode = function (obj) {
+         var str = '';
+
+         for (var i in obj) {
+           if (obj.hasOwnProperty(i)) {
+             if (str.length) str += '&';
+             str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
+           }
+         }
+
+         return str;
+       };
+
+       /**
+        * Parses a simple querystring into an object
+        *
+        * @param {String} qs
+        * @api private
+        */
+
+       exports.decode = function(qs){
+         var qry = {};
+         var pairs = qs.split('&');
+         for (var i = 0, l = pairs.length; i < l; i++) {
+           var pair = pairs[i].split('=');
+           qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
+         }
+         return qry;
+       };
+
+
+/***/ },
+/* 20 */
+/***/ function(module, exports) {
+
+       
+       module.exports = function(a, b){
+         var fn = function(){};
+         fn.prototype = b.prototype;
+         a.prototype = new fn;
+         a.prototype.constructor = a;
+       };
+
+/***/ },
+/* 21 */
+/***/ function(module, exports) {
+
+       'use strict';
+
+       var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')
+         , length = 64
+         , map = {}
+         , seed = 0
+         , i = 0
+         , prev;
+
+       /**
+        * Return a string representing the specified number.
+        *
+        * @param {Number} num The number to convert.
+        * @returns {String} The string representation of the number.
+        * @api public
+        */
+       function encode(num) {
+         var encoded = '';
+
+         do {
+           encoded = alphabet[num % length] + encoded;
+           num = Math.floor(num / length);
+         } while (num > 0);
+
+         return encoded;
+       }
+
+       /**
+        * Return the integer value specified by the given string.
+        *
+        * @param {String} str The string to convert.
+        * @returns {Number} The integer value represented by the string.
+        * @api public
+        */
+       function decode(str) {
+         var decoded = 0;
+
+         for (i = 0; i < str.length; i++) {
+           decoded = decoded * length + map[str.charAt(i)];
+         }
+
+         return decoded;
+       }
+
+       /**
+        * Yeast: A tiny growing id generator.
+        *
+        * @returns {String} A unique id.
+        * @api public
+        */
+       function yeast() {
+         var now = encode(+new Date());
+
+         if (now !== prev) return seed = 0, prev = now;
+         return now +'.'+ encode(seed++);
+       }
+
+       //
+       // Map each character to its index.
+       //
+       for (; i < length; i++) map[alphabet[i]] = i;
+
+       //
+       // Expose the `yeast`, `encode` and `decode` functions.
+       //
+       yeast.encode = encode;
+       yeast.decode = decode;
+       module.exports = yeast;
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /* WEBPACK VAR INJECTION */(function(process) {'use strict';
+
+       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+       /**
+        * This is the web browser implementation of `debug()`.
+        *
+        * Expose `debug()` as the module.
+        */
+
+       exports = module.exports = __webpack_require__(24);
+       exports.log = log;
+       exports.formatArgs = formatArgs;
+       exports.save = save;
+       exports.load = load;
+       exports.useColors = useColors;
+       exports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();
+
+       /**
+        * Colors.
+        */
+
+       exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];
+
+       /**
+        * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+        * and the Firebug extension (any Firefox version) are known
+        * to support "%c" CSS customizations.
+        *
+        * TODO: add a `localStorage` variable to explicitly enable/disable colors
+        */
+
+       function useColors() {
+         // NB: In an Electron preload script, document will be defined but not fully
+         // initialized. Since we know we're in Chrome, we'll just detect this case
+         // explicitly
+         if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
+           return true;
+         }
+
+         // Internet Explorer and Edge do not support colors.
+         if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+           return false;
+         }
+
+         // is webkit? http://stackoverflow.com/a/16459606/376773
+         // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+         return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||
+         // is firebug? http://stackoverflow.com/a/398120/376773
+         typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||
+         // is firefox >= v31?
+         // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+         typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||
+         // double check webkit in userAgent just in case we are in a worker
+         typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
+       }
+
+       /**
+        * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+        */
+
+       exports.formatters.j = function (v) {
+         try {
+           return JSON.stringify(v);
+         } catch (err) {
+           return '[UnexpectedJSONParseError]: ' + err.message;
+         }
+       };
+
+       /**
+        * Colorize log arguments if enabled.
+        *
+        * @api public
+        */
+
+       function formatArgs(args) {
+         var useColors = this.useColors;
+
+         args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);
+
+         if (!useColors) return;
+
+         var c = 'color: ' + this.color;
+         args.splice(1, 0, c, 'color: inherit');
+
+         // the final "%c" is somewhat tricky, because there could be other
+         // arguments passed either before or after the %c, so we need to
+         // figure out the correct index to insert the CSS into
+         var index = 0;
+         var lastC = 0;
+         args[0].replace(/%[a-zA-Z%]/g, function (match) {
+           if ('%%' === match) return;
+           index++;
+           if ('%c' === match) {
+             // we only are interested in the *last* %c
+             // (the user may have provided their own)
+             lastC = index;
+           }
+         });
+
+         args.splice(lastC, 0, c);
+       }
+
+       /**
+        * Invokes `console.log()` when available.
+        * No-op when `console.log` is not a "function".
+        *
+        * @api public
+        */
+
+       function log() {
+         // this hackery is required for IE8/9, where
+         // the `console.log` function doesn't have 'apply'
+         return 'object' === (typeof console === 'undefined' ? 'undefined' : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments);
+       }
+
+       /**
+        * Save `namespaces`.
+        *
+        * @param {String} namespaces
+        * @api private
+        */
+
+       function save(namespaces) {
+         try {
+           if (null == namespaces) {
+             exports.storage.removeItem('debug');
+           } else {
+             exports.storage.debug = namespaces;
+           }
+         } catch (e) {}
+       }
+
+       /**
+        * Load `namespaces`.
+        *
+        * @return {String} returns the previously persisted debug modes
+        * @api private
+        */
+
+       function load() {
+         var r;
+         try {
+           r = exports.storage.debug;
+         } catch (e) {}
+
+         // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+         if (!r && typeof process !== 'undefined' && 'env' in process) {
+           r = process.env.DEBUG;
+         }
+
+         return r;
+       }
+
+       /**
+        * Enable namespaces listed in `localStorage.debug` initially.
+        */
+
+       exports.enable(load());
+
+       /**
+        * Localstorage attempts to return the localstorage.
+        *
+        * This is necessary because safari throws
+        * when a user disables cookies/localstorage
+        * and you attempt to access it.
+        *
+        * @return {LocalStorage}
+        * @api private
+        */
+
+       function localstorage() {
+         try {
+           return window.localStorage;
+         } catch (e) {}
+       }
+       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(23)))
+
+/***/ },
+/* 23 */
+/***/ function(module, exports) {
+
+       // shim for using process in browser
+       var process = module.exports = {};
+
+       // cached from whatever global is present so that test runners that stub it
+       // don't break things.  But we need to wrap it in a try catch in case it is
+       // wrapped in strict mode code which doesn't define any globals.  It's inside a
+       // function because try/catches deoptimize in certain engines.
+
+       var cachedSetTimeout;
+       var cachedClearTimeout;
+
+       function defaultSetTimout() {
+           throw new Error('setTimeout has not been defined');
+       }
+       function defaultClearTimeout () {
+           throw new Error('clearTimeout has not been defined');
+       }
+       (function () {
+           try {
+               if (typeof setTimeout === 'function') {
+                   cachedSetTimeout = setTimeout;
+               } else {
+                   cachedSetTimeout = defaultSetTimout;
+               }
+           } catch (e) {
+               cachedSetTimeout = defaultSetTimout;
+           }
+           try {
+               if (typeof clearTimeout === 'function') {
+                   cachedClearTimeout = clearTimeout;
+               } else {
+                   cachedClearTimeout = defaultClearTimeout;
+               }
+           } catch (e) {
+               cachedClearTimeout = defaultClearTimeout;
+           }
+       } ())
+       function runTimeout(fun) {
+           if (cachedSetTimeout === setTimeout) {
+               //normal enviroments in sane situations
+               return setTimeout(fun, 0);
+           }
+           // if setTimeout wasn't available but was latter defined
+           if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
+               cachedSetTimeout = setTimeout;
+               return setTimeout(fun, 0);
+           }
+           try {
+               // when when somebody has screwed with setTimeout but no I.E. maddness
+               return cachedSetTimeout(fun, 0);
+           } catch(e){
+               try {
+                   // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+                   return cachedSetTimeout.call(null, fun, 0);
+               } catch(e){
+                   // 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
+                   return cachedSetTimeout.call(this, fun, 0);
+               }
+           }
+
+
+       }
+       function runClearTimeout(marker) {
+           if (cachedClearTimeout === clearTimeout) {
+               //normal enviroments in sane situations
+               return clearTimeout(marker);
+           }
+           // if clearTimeout wasn't available but was latter defined
+           if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
+               cachedClearTimeout = clearTimeout;
+               return clearTimeout(marker);
+           }
+           try {
+               // when when somebody has screwed with setTimeout but no I.E. maddness
+               return cachedClearTimeout(marker);
+           } catch (e){
+               try {
+                   // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+                   return cachedClearTimeout.call(null, marker);
+               } catch (e){
+                   // 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.
+                   // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+                   return cachedClearTimeout.call(this, marker);
+               }
+           }
+
+
+
+       }
+       var queue = [];
+       var draining = false;
+       var currentQueue;
+       var queueIndex = -1;
+
+       function cleanUpNextTick() {
+           if (!draining || !currentQueue) {
+               return;
+           }
+           draining = false;
+           if (currentQueue.length) {
+               queue = currentQueue.concat(queue);
+           } else {
+               queueIndex = -1;
+           }
+           if (queue.length) {
+               drainQueue();
+           }
+       }
+
+       function drainQueue() {
+           if (draining) {
+               return;
+           }
+           var timeout = runTimeout(cleanUpNextTick);
+           draining = true;
+
+           var len = queue.length;
+           while(len) {
+               currentQueue = queue;
+               queue = [];
+               while (++queueIndex < len) {
+                   if (currentQueue) {
+                       currentQueue[queueIndex].run();
+                   }
+               }
+               queueIndex = -1;
+               len = queue.length;
+           }
+           currentQueue = null;
+           draining = false;
+           runClearTimeout(timeout);
+       }
+
+       process.nextTick = function (fun) {
+           var args = new Array(arguments.length - 1);
+           if (arguments.length > 1) {
+               for (var i = 1; i < arguments.length; i++) {
+                   args[i - 1] = arguments[i];
+               }
+           }
+           queue.push(new Item(fun, args));
+           if (queue.length === 1 && !draining) {
+               runTimeout(drainQueue);
+           }
+       };
+
+       // v8 likes predictible objects
+       function Item(fun, array) {
+           this.fun = fun;
+           this.array = array;
+       }
+       Item.prototype.run = function () {
+           this.fun.apply(null, this.array);
+       };
+       process.title = 'browser';
+       process.browser = true;
+       process.env = {};
+       process.argv = [];
+       process.version = ''; // empty string to avoid regexp issues
+       process.versions = {};
+
+       function noop() {}
+
+       process.on = noop;
+       process.addListener = noop;
+       process.once = noop;
+       process.off = noop;
+       process.removeListener = noop;
+       process.removeAllListeners = noop;
+       process.emit = noop;
+       process.prependListener = noop;
+       process.prependOnceListener = noop;
+
+       process.listeners = function (name) { return [] }
+
+       process.binding = function (name) {
+           throw new Error('process.binding is not supported');
+       };
+
+       process.cwd = function () { return '/' };
+       process.chdir = function (dir) {
+           throw new Error('process.chdir is not supported');
+       };
+       process.umask = function() { return 0; };
+
+
+/***/ },
+/* 24 */
+/***/ function(module, exports, __webpack_require__) {
+
+       'use strict';
+
+       /**
+        * This is the common logic for both the Node.js and web browser
+        * implementations of `debug()`.
+        *
+        * Expose `debug()` as the module.
+        */
+
+       exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
+       exports.coerce = coerce;
+       exports.disable = disable;
+       exports.enable = enable;
+       exports.enabled = enabled;
+       exports.humanize = __webpack_require__(25);
+
+       /**
+        * Active `debug` instances.
+        */
+       exports.instances = [];
+
+       /**
+        * The currently active debug mode names, and names to skip.
+        */
+
+       exports.names = [];
+       exports.skips = [];
+
+       /**
+        * Map of special "%n" handling functions, for the debug "format" argument.
+        *
+        * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+        */
+
+       exports.formatters = {};
+
+       /**
+        * Select a color.
+        * @param {String} namespace
+        * @return {Number}
+        * @api private
+        */
+
+       function selectColor(namespace) {
+         var hash = 0,
+             i;
+
+         for (i in namespace) {
+           hash = (hash << 5) - hash + namespace.charCodeAt(i);
+           hash |= 0; // Convert to 32bit integer
+         }
+
+         return exports.colors[Math.abs(hash) % exports.colors.length];
+       }
+
+       /**
+        * Create a debugger with the given `namespace`.
+        *
+        * @param {String} namespace
+        * @return {Function}
+        * @api public
+        */
+
+       function createDebug(namespace) {
+
+         var prevTime;
+
+         function debug() {
+           // disabled?
+           if (!debug.enabled) return;
+
+           var self = debug;
+
+           // set `diff` timestamp
+           var curr = +new Date();
+           var ms = curr - (prevTime || curr);
+           self.diff = ms;
+           self.prev = prevTime;
+           self.curr = curr;
+           prevTime = curr;
+
+           // turn the `arguments` into a proper Array
+           var args = new Array(arguments.length);
+           for (var i = 0; i < args.length; i++) {
+             args[i] = arguments[i];
+           }
+
+           args[0] = exports.coerce(args[0]);
+
+           if ('string' !== typeof args[0]) {
+             // anything else let's inspect with %O
+             args.unshift('%O');
+           }
+
+           // apply any `formatters` transformations
+           var index = 0;
+           args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
+             // if we encounter an escaped % then don't increase the array index
+             if (match === '%%') return match;
+             index++;
+             var formatter = exports.formatters[format];
+             if ('function' === typeof formatter) {
+               var val = args[index];
+               match = formatter.call(self, val);
+
+               // now we need to remove `args[index]` since it's inlined in the `format`
+               args.splice(index, 1);
+               index--;
+             }
+             return match;
+           });
+
+           // apply env-specific formatting (colors, etc.)
+           exports.formatArgs.call(self, args);
+
+           var logFn = debug.log || exports.log || console.log.bind(console);
+           logFn.apply(self, args);
+         }
+
+         debug.namespace = namespace;
+         debug.enabled = exports.enabled(namespace);
+         debug.useColors = exports.useColors();
+         debug.color = selectColor(namespace);
+         debug.destroy = destroy;
+
+         // env-specific initialization logic for debug instances
+         if ('function' === typeof exports.init) {
+           exports.init(debug);
+         }
+
+         exports.instances.push(debug);
+
+         return debug;
+       }
+
+       function destroy() {
+         var index = exports.instances.indexOf(this);
+         if (index !== -1) {
+           exports.instances.splice(index, 1);
+           return true;
+         } else {
+           return false;
+         }
+       }
+
+       /**
+        * Enables a debug mode by namespaces. This can include modes
+        * separated by a colon and wildcards.
+        *
+        * @param {String} namespaces
+        * @api public
+        */
+
+       function enable(namespaces) {
+         exports.save(namespaces);
+
+         exports.names = [];
+         exports.skips = [];
+
+         var i;
+         var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+         var len = split.length;
+
+         for (i = 0; i < len; i++) {
+           if (!split[i]) continue; // ignore empty strings
+           namespaces = split[i].replace(/\*/g, '.*?');
+           if (namespaces[0] === '-') {
+             exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+           } else {
+             exports.names.push(new RegExp('^' + namespaces + '$'));
+           }
+         }
+
+         for (i = 0; i < exports.instances.length; i++) {
+           var instance = exports.instances[i];
+           instance.enabled = exports.enabled(instance.namespace);
+         }
+       }
+
+       /**
+        * Disable debug output.
+        *
+        * @api public
+        */
+
+       function disable() {
+         exports.enable('');
+       }
+
+       /**
+        * Returns true if the given mode name is enabled, false otherwise.
+        *
+        * @param {String} name
+        * @return {Boolean}
+        * @api public
+        */
+
+       function enabled(name) {
+         if (name[name.length - 1] === '*') {
+           return true;
+         }
+         var i, len;
+         for (i = 0, len = exports.skips.length; i < len; i++) {
+           if (exports.skips[i].test(name)) {
+             return false;
+           }
+         }
+         for (i = 0, len = exports.names.length; i < len; i++) {
+           if (exports.names[i].test(name)) {
+             return true;
+           }
+         }
+         return false;
+       }
+
+       /**
+        * Coerce `val`.
+        *
+        * @param {Mixed} val
+        * @return {Mixed}
+        * @api private
+        */
+
+       function coerce(val) {
+         if (val instanceof Error) return val.stack || val.message;
+         return val;
+       }
+
+/***/ },
+/* 25 */
+/***/ function(module, exports) {
+
+       /**
+        * Helpers.
+        */
+
+       var s = 1000;
+       var m = s * 60;
+       var h = m * 60;
+       var d = h * 24;
+       var y = d * 365.25;
+
+       /**
+        * Parse or format the given `val`.
+        *
+        * Options:
+        *
+        *  - `long` verbose formatting [false]
+        *
+        * @param {String|Number} val
+        * @param {Object} [options]
+        * @throws {Error} throw an error if val is not a non-empty string or a number
+        * @return {String|Number}
+        * @api public
+        */
+
+       module.exports = function(val, options) {
+         options = options || {};
+         var type = typeof val;
+         if (type === 'string' && val.length > 0) {
+           return parse(val);
+         } else if (type === 'number' && isNaN(val) === false) {
+           return options.long ? fmtLong(val) : fmtShort(val);
+         }
+         throw new Error(
+           'val is not a non-empty string or a valid number. val=' +
+             JSON.stringify(val)
+         );
+       };
+
+       /**
+        * Parse the given `str` and return milliseconds.
+        *
+        * @param {String} str
+        * @return {Number}
+        * @api private
+        */
+
+       function parse(str) {
+         str = String(str);
+         if (str.length > 100) {
+           return;
+         }
+         var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
+           str
+         );
+         if (!match) {
+           return;
+         }
+         var n = parseFloat(match[1]);
+         var type = (match[2] || 'ms').toLowerCase();
+         switch (type) {
+           case 'years':
+           case 'year':
+           case 'yrs':
+           case 'yr':
+           case 'y':
+             return n * y;
+           case 'days':
+           case 'day':
+           case 'd':
+             return n * d;
+           case 'hours':
+           case 'hour':
+           case 'hrs':
+           case 'hr':
+           case 'h':
+             return n * h;
+           case 'minutes':
+           case 'minute':
+           case 'mins':
+           case 'min':
+           case 'm':
+             return n * m;
+           case 'seconds':
+           case 'second':
+           case 'secs':
+           case 'sec':
+           case 's':
+             return n * s;
+           case 'milliseconds':
+           case 'millisecond':
+           case 'msecs':
+           case 'msec':
+           case 'ms':
+             return n;
+           default:
+             return undefined;
+         }
+       }
+
+       /**
+        * Short format for `ms`.
+        *
+        * @param {Number} ms
+        * @return {String}
+        * @api private
+        */
+
+       function fmtShort(ms) {
+         if (ms >= d) {
+           return Math.round(ms / d) + 'd';
+         }
+         if (ms >= h) {
+           return Math.round(ms / h) + 'h';
+         }
+         if (ms >= m) {
+           return Math.round(ms / m) + 'm';
+         }
+         if (ms >= s) {
+           return Math.round(ms / s) + 's';
+         }
+         return ms + 'ms';
+       }
+
+       /**
+        * Long format for `ms`.
+        *
+        * @param {Number} ms
+        * @return {String}
+        * @api private
+        */
+
+       function fmtLong(ms) {
+         return plural(ms, d, 'day') ||
+           plural(ms, h, 'hour') ||
+           plural(ms, m, 'minute') ||
+           plural(ms, s, 'second') ||
+           ms + ' ms';
+       }
+
+       /**
+        * Pluralization helper.
+        */
+
+       function plural(ms, n, name) {
+         if (ms < n) {
+           return;
+         }
+         if (ms < n * 1.5) {
+           return Math.floor(ms / n) + ' ' + name;
+         }
+         return Math.ceil(ms / n) + ' ' + name + 's';
+       }
+
+
+/***/ },
+/* 26 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Module requirements.
+        */
+
+       var Polling = __webpack_require__(7);
+       var inherit = __webpack_require__(20);
+       var globalThis = __webpack_require__(5);
+
+       /**
+        * Module exports.
+        */
+
+       module.exports = JSONPPolling;
+
+       /**
+        * Cached regular expressions.
+        */
+
+       var rNewline = /\n/g;
+       var rEscapedNewline = /\\n/g;
+
+       /**
+        * Global JSONP callbacks.
+        */
+
+       var callbacks;
+
+       /**
+        * Noop.
+        */
+
+       function empty () { }
+
+       /**
+        * JSONP Polling constructor.
+        *
+        * @param {Object} opts.
+        * @api public
+        */
+
+       function JSONPPolling (opts) {
+         Polling.call(this, opts);
+
+         this.query = this.query || {};
+
+         // define global callbacks array if not present
+         // we do this here (lazily) to avoid unneeded global pollution
+         if (!callbacks) {
+           // we need to consider multiple engines in the same page
+           callbacks = globalThis.___eio = (globalThis.___eio || []);
+         }
+
+         // callback identifier
+         this.index = callbacks.length;
+
+         // add callback to jsonp global
+         var self = this;
+         callbacks.push(function (msg) {
+           self.onData(msg);
+         });
+
+         // append to query string
+         this.query.j = this.index;
+
+         // prevent spurious errors from being emitted when the window is unloaded
+         if (typeof addEventListener === 'function') {
+           addEventListener('beforeunload', function () {
+             if (self.script) self.script.onerror = empty;
+           }, false);
+         }
+       }
+
+       /**
+        * Inherits from Polling.
+        */
+
+       inherit(JSONPPolling, Polling);
+
+       /*
+        * JSONP only supports binary as base64 encoded strings
+        */
+
+       JSONPPolling.prototype.supportsBinary = false;
+
+       /**
+        * Closes the socket.
+        *
+        * @api private
+        */
+
+       JSONPPolling.prototype.doClose = function () {
+         if (this.script) {
+           this.script.parentNode.removeChild(this.script);
+           this.script = null;
+         }
+
+         if (this.form) {
+           this.form.parentNode.removeChild(this.form);
+           this.form = null;
+           this.iframe = null;
+         }
+
+         Polling.prototype.doClose.call(this);
+       };
+
+       /**
+        * Starts a poll cycle.
+        *
+        * @api private
+        */
+
+       JSONPPolling.prototype.doPoll = function () {
+         var self = this;
+         var script = document.createElement('script');
+
+         if (this.script) {
+           this.script.parentNode.removeChild(this.script);
+           this.script = null;
+         }
+
+         script.async = true;
+         script.src = this.uri();
+         script.onerror = function (e) {
+           self.onError('jsonp poll error', e);
+         };
+
+         var insertAt = document.getElementsByTagName('script')[0];
+         if (insertAt) {
+           insertAt.parentNode.insertBefore(script, insertAt);
+         } else {
+           (document.head || document.body).appendChild(script);
+         }
+         this.script = script;
+
+         var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);
+
+         if (isUAgecko) {
+           setTimeout(function () {
+             var iframe = document.createElement('iframe');
+             document.body.appendChild(iframe);
+             document.body.removeChild(iframe);
+           }, 100);
+         }
+       };
+
+       /**
+        * Writes with a hidden iframe.
+        *
+        * @param {String} data to send
+        * @param {Function} called upon flush.
+        * @api private
+        */
+
+       JSONPPolling.prototype.doWrite = function (data, fn) {
+         var self = this;
+
+         if (!this.form) {
+           var form = document.createElement('form');
+           var area = document.createElement('textarea');
+           var id = this.iframeId = 'eio_iframe_' + this.index;
+           var iframe;
+
+           form.className = 'socketio';
+           form.style.position = 'absolute';
+           form.style.top = '-1000px';
+           form.style.left = '-1000px';
+           form.target = id;
+           form.method = 'POST';
+           form.setAttribute('accept-charset', 'utf-8');
+           area.name = 'd';
+           form.appendChild(area);
+           document.body.appendChild(form);
+
+           this.form = form;
+           this.area = area;
+         }
+
+         this.form.action = this.uri();
+
+         function complete () {
+           initIframe();
+           fn();
+         }
+
+         function initIframe () {
+           if (self.iframe) {
+             try {
+               self.form.removeChild(self.iframe);
+             } catch (e) {
+               self.onError('jsonp polling iframe removal error', e);
+             }
+           }
+
+           try {
+             // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
+             var html = '<iframe src="javascript:0" name="' + self.iframeId + '">';
+             iframe = document.createElement(html);
+           } catch (e) {
+             iframe = document.createElement('iframe');
+             iframe.name = self.iframeId;
+             iframe.src = 'javascript:0';
+           }
+
+           iframe.id = self.iframeId;
+
+           self.form.appendChild(iframe);
+           self.iframe = iframe;
+         }
+
+         initIframe();
+
+         // escape \n to prevent it from being converted into \r\n by some UAs
+         // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side
+         data = data.replace(rEscapedNewline, '\\\n');
+         this.area.value = data.replace(rNewline, '\\n');
+
+         try {
+           this.form.submit();
+         } catch (e) {}
+
+         if (this.iframe.attachEvent) {
+           this.iframe.onreadystatechange = function () {
+             if (self.iframe.readyState === 'complete') {
+               complete();
+             }
+           };
+         } else {
+           this.iframe.onload = complete;
+         }
+       };
+
+
+/***/ },
+/* 27 */
+/***/ function(module, exports, __webpack_require__) {
+
+       /**
+        * Module dependencies.
+        */
+
+       var Transport = __webpack_require__(8);
+       var parser = __webpack_require__(9);
+       var parseqs = __webpack_require__(19);
+       var inherit = __webpack_require__(20);
+       var yeast = __webpack_require__(21);
+       var debug = __webpack_require__(22)('engine.io-client:websocket');
+
+       var BrowserWebSocket, NodeWebSocket;
+
+       if (typeof WebSocket !== 'undefined') {
+         BrowserWebSocket = WebSocket;
+       } else if (typeof self !== 'undefined') {
+         BrowserWebSocket = self.WebSocket || self.MozWebSocket;
+       }
+
+       if (typeof window === 'undefined') {
+         try {
+           NodeWebSocket = __webpack_require__(28);
+         } catch (e) { }
+       }
+
+       /**
+        * Get either the `WebSocket` or `MozWebSocket` globals
+        * in the browser or try to resolve WebSocket-compatible
+        * interface exposed by `ws` for Node-like environment.
+        */
+
+       var WebSocketImpl = BrowserWebSocket || NodeWebSocket;
+
+       /**
+        * Module exports.
+        */
+
+       module.exports = WS;
+
+       /**
+        * WebSocket transport constructor.
+        *
+        * @api {Object} connection options
+        * @api public
+        */
+
+       function WS (opts) {
+         var forceBase64 = (opts && opts.forceBase64);
+         if (forceBase64) {
+           this.supportsBinary = false;
+         }
+         this.perMessageDeflate = opts.perMessageDeflate;
+         this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;
+         this.protocols = opts.protocols;
+         if (!this.usingBrowserWebSocket) {
+           WebSocketImpl = NodeWebSocket;
+         }
+         Transport.call(this, opts);
+       }
+
+       /**
+        * Inherits from Transport.
+        */
+
+       inherit(WS, Transport);
+
+       /**
+        * Transport name.
+        *
+        * @api public
+        */
+
+       WS.prototype.name = 'websocket';
+
+       /*
+        * WebSockets support binary
+        */
+
+       WS.prototype.supportsBinary = true;
+
+       /**
+        * Opens socket.
+        *
+        * @api private
+        */
+
+       WS.prototype.doOpen = function () {
+         if (!this.check()) {
+           // let probe timeout
+           return;
+         }
+
+         var uri = this.uri();
+         var protocols = this.protocols;
+
+         var opts = {};
+
+         if (!this.isReactNative) {
+           opts.agent = this.agent;
+           opts.perMessageDeflate = this.perMessageDeflate;
+
+           // SSL options for Node.js client
+           opts.pfx = this.pfx;
+           opts.key = this.key;
+           opts.passphrase = this.passphrase;
+           opts.cert = this.cert;
+           opts.ca = this.ca;
+           opts.ciphers = this.ciphers;
+           opts.rejectUnauthorized = this.rejectUnauthorized;
+         }
+
+         if (this.extraHeaders) {
+           opts.headers = this.extraHeaders;
+         }
+         if (this.localAddress) {
+           opts.localAddress = this.localAddress;
+         }
+
+         try {
+           this.ws =
+             this.usingBrowserWebSocket && !this.isReactNative
+               ? protocols
+                 ? new WebSocketImpl(uri, protocols)
+                 : new WebSocketImpl(uri)
+               : new WebSocketImpl(uri, protocols, opts);
+         } catch (err) {
+           return this.emit('error', err);
+         }
+
+         if (this.ws.binaryType === undefined) {
+           this.supportsBinary = false;
+         }
+
+         if (this.ws.supports && this.ws.supports.binary) {
+           this.supportsBinary = true;
+           this.ws.binaryType = 'nodebuffer';
+         } else {
+           this.ws.binaryType = 'arraybuffer';
+         }
+
+         this.addEventListeners();
+       };
+
+       /**
+        * Adds event listeners to the socket
+        *
+        * @api private
+        */
+
+       WS.prototype.addEventListeners = function () {
+         var self = this;
+
+         this.ws.onopen = function () {
+           self.onOpen();
+         };
+         this.ws.onclose = function () {
+           self.onClose();
+         };
+         this.ws.onmessage = function (ev) {
+           self.onData(ev.data);
+         };
+         this.ws.onerror = function (e) {
+           self.onError('websocket error', e);
+         };
+       };
+
+       /**
+        * Writes data to socket.
+        *
+        * @param {Array} array of packets.
+        * @api private
+        */
+
+       WS.prototype.write = function (packets) {
+         var self = this;
+         this.writable = false;
+
+         // encodePacket efficient as it uses WS framing
+         // no need for encodePayload
+         var total = packets.length;
+         for (var i = 0, l = total; i < l; i++) {
+           (function (packet) {
+             parser.encodePacket(packet, self.supportsBinary, function (data) {
+               if (!self.usingBrowserWebSocket) {
+                 // always create a new object (GH-437)
+                 var opts = {};
+                 if (packet.options) {
+                   opts.compress = packet.options.compress;
+                 }
+
+                 if (self.perMessageDeflate) {
+                   var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;
+                   if (len < self.perMessageDeflate.threshold) {
+                     opts.compress = false;
+                   }
+                 }
+               }
+
+               // Sometimes the websocket has already been closed but the browser didn't
+               // have a chance of informing us about it yet, in that case send will
+               // throw an error
+               try {
+                 if (self.usingBrowserWebSocket) {
+                   // TypeError is thrown when passing the second argument on Safari
+                   self.ws.send(data);
+                 } else {
+                   self.ws.send(data, opts);
+                 }
+               } catch (e) {
+                 debug('websocket closed before onclose event');
+               }
+
+               --total || done();
+             });
+           })(packets[i]);
+         }
+
+         function done () {
+           self.emit('flush');
+
+           // fake drain
+           // defer to next tick to allow Socket to clear writeBuffer
+           setTimeout(function () {
+             self.writable = true;
+             self.emit('drain');
+           }, 0);
+         }
+       };
+
+       /**
+        * Called upon close
+        *
+        * @api private
+        */
+
+       WS.prototype.onClose = function () {
+         Transport.prototype.onClose.call(this);
+       };
+
+       /**
+        * Closes socket.
+        *
+        * @api private
+        */
+
+       WS.prototype.doClose = function () {
+         if (typeof this.ws !== 'undefined') {
+           this.ws.close();
+         }
+       };
+
+       /**
+        * Generates uri for connection.
+        *
+        * @api private
+        */
+
+       WS.prototype.uri = function () {
+         var query = this.query || {};
+         var schema = this.secure ? 'wss' : 'ws';
+         var port = '';
+
+         // avoid port if default for schema
+         if (this.port && (('wss' === schema && Number(this.port) !== 443) ||
+           ('ws' === schema && Number(this.port) !== 80))) {
+           port = ':' + this.port;
+         }
+
+         // append timestamp to URI
+         if (this.timestampRequests) {
+           query[this.timestampParam] = yeast();
+         }
+
+         // communicate binary support capabilities
+         if (!this.supportsBinary) {
+           query.b64 = 1;
+         }
+
+         query = parseqs.encode(query);
+
+         // prepend ? to query
+         if (query.length) {
+           query = '?' + query;
+         }
+
+         var ipv6 = this.hostname.indexOf(':') !== -1;
+         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
+       };
+
+       /**
+        * Feature detection for WebSocket.
+        *
+        * @return {Boolean} whether this transport is available.
+        * @api public
+        */
+
+       WS.prototype.check = function () {
+         return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);
+       };
+
+
+/***/ },
+/* 28 */
+/***/ function(module, exports) {
+
+       /* (ignored) */
+
+/***/ },
+/* 29 */
+/***/ function(module, exports) {
+
+       
+       var indexOf = [].indexOf;
+
+       module.exports = function(arr, obj){
+         if (indexOf) return arr.indexOf(obj);
+         for (var i = 0; i < arr.length; ++i) {
+           if (arr[i] === obj) return i;
+         }
+         return -1;
+       };
+
+/***/ },
+/* 30 */
+/***/ function(module, exports) {
+
+       /**
+        * Parses an URI
+        *
+        * @author Steven Levithan <stevenlevithan.com> (MIT license)
+        * @api private
+        */
+
+       var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
+
+       var parts = [
+           'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'
+       ];
+
+       module.exports = function parseuri(str) {
+           var src = str,
+               b = str.indexOf('['),
+               e = str.indexOf(']');
+
+           if (b != -1 && e != -1) {
+               str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);
+           }
+
+           var m = re.exec(str || ''),
+               uri = {},
+               i = 14;
+
+           while (i--) {
+               uri[parts[i]] = m[i] || '';
+           }
+
+           if (b != -1 && e != -1) {
+               uri.source = src;
+               uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');
+               uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');
+               uri.ipv6uri = true;
+           }
+
+           uri.pathNames = pathNames(uri, uri['path']);
+           uri.queryKey = queryKey(uri, uri['query']);
+
+           return uri;
+       };
+
+       function pathNames(obj, path) {
+           var regx = /\/{2,9}/g,
+               names = path.replace(regx, "/").split("/");
+
+           if (path.substr(0, 1) == '/' || path.length === 0) {
+               names.splice(0, 1);
+           }
+           if (path.substr(path.length - 1, 1) == '/') {
+               names.splice(names.length - 1, 1);
+           }
+
+           return names;
+       }
+
+       function queryKey(uri, query) {
+           var data = {};
+
+           query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {
+               if ($1) {
+                   data[$1] = $2;
+               }
+           });
+
+           return data;
+       }
+
+
+/***/ }
+/******/ ])
+});
+;
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/engine.io-client/lib/socket.js b/signaling_server/service/node_modules/engine.io-client/lib/socket.js
new file mode 100644 (file)
index 0000000..5e52d9b
--- /dev/null
@@ -0,0 +1,748 @@
+/**
+ * Module dependencies.
+ */
+
+var transports = require('./transports/index');
+var Emitter = require('component-emitter');
+var debug = require('debug')('engine.io-client:socket');
+var index = require('indexof');
+var parser = require('engine.io-parser');
+var parseuri = require('parseuri');
+var parseqs = require('parseqs');
+
+/**
+ * Module exports.
+ */
+
+module.exports = Socket;
+
+/**
+ * Socket constructor.
+ *
+ * @param {String|Object} uri or options
+ * @param {Object} options
+ * @api public
+ */
+
+function Socket (uri, opts) {
+  if (!(this instanceof Socket)) return new Socket(uri, opts);
+
+  opts = opts || {};
+
+  if (uri && 'object' === typeof uri) {
+    opts = uri;
+    uri = null;
+  }
+
+  if (uri) {
+    uri = parseuri(uri);
+    opts.hostname = uri.host;
+    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';
+    opts.port = uri.port;
+    if (uri.query) opts.query = uri.query;
+  } else if (opts.host) {
+    opts.hostname = parseuri(opts.host).host;
+  }
+
+  this.secure = null != opts.secure ? opts.secure
+    : (typeof location !== 'undefined' && 'https:' === location.protocol);
+
+  if (opts.hostname && !opts.port) {
+    // if no port is specified manually, use the protocol default
+    opts.port = this.secure ? '443' : '80';
+  }
+
+  this.agent = opts.agent || false;
+  this.hostname = opts.hostname ||
+    (typeof location !== 'undefined' ? location.hostname : 'localhost');
+  this.port = opts.port || (typeof location !== 'undefined' && location.port
+      ? location.port
+      : (this.secure ? 443 : 80));
+  this.query = opts.query || {};
+  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);
+  this.upgrade = false !== opts.upgrade;
+  this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
+  this.forceJSONP = !!opts.forceJSONP;
+  this.jsonp = false !== opts.jsonp;
+  this.forceBase64 = !!opts.forceBase64;
+  this.enablesXDR = !!opts.enablesXDR;
+  this.withCredentials = false !== opts.withCredentials;
+  this.timestampParam = opts.timestampParam || 't';
+  this.timestampRequests = opts.timestampRequests;
+  this.transports = opts.transports || ['polling', 'websocket'];
+  this.transportOptions = opts.transportOptions || {};
+  this.readyState = '';
+  this.writeBuffer = [];
+  this.prevBufferLen = 0;
+  this.policyPort = opts.policyPort || 843;
+  this.rememberUpgrade = opts.rememberUpgrade || false;
+  this.binaryType = null;
+  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
+  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;
+
+  if (true === this.perMessageDeflate) this.perMessageDeflate = {};
+  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {
+    this.perMessageDeflate.threshold = 1024;
+  }
+
+  // SSL options for Node.js client
+  this.pfx = opts.pfx || undefined;
+  this.key = opts.key || undefined;
+  this.passphrase = opts.passphrase || undefined;
+  this.cert = opts.cert || undefined;
+  this.ca = opts.ca || undefined;
+  this.ciphers = opts.ciphers || undefined;
+  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;
+  this.forceNode = !!opts.forceNode;
+
+  // detect ReactNative environment
+  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');
+
+  // other options for Node.js or ReactNative client
+  if (typeof self === 'undefined' || this.isReactNative) {
+    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {
+      this.extraHeaders = opts.extraHeaders;
+    }
+
+    if (opts.localAddress) {
+      this.localAddress = opts.localAddress;
+    }
+  }
+
+  // set on handshake
+  this.id = null;
+  this.upgrades = null;
+  this.pingInterval = null;
+  this.pingTimeout = null;
+
+  // set on heartbeat
+  this.pingIntervalTimer = null;
+  this.pingTimeoutTimer = null;
+
+  this.open();
+}
+
+Socket.priorWebsocketSuccess = false;
+
+/**
+ * Mix in `Emitter`.
+ */
+
+Emitter(Socket.prototype);
+
+/**
+ * Protocol version.
+ *
+ * @api public
+ */
+
+Socket.protocol = parser.protocol; // this is an int
+
+/**
+ * Expose deps for legacy compatibility
+ * and standalone browser access.
+ */
+
+Socket.Socket = Socket;
+Socket.Transport = require('./transport');
+Socket.transports = require('./transports/index');
+Socket.parser = require('engine.io-parser');
+
+/**
+ * Creates transport of the given type.
+ *
+ * @param {String} transport name
+ * @return {Transport}
+ * @api private
+ */
+
+Socket.prototype.createTransport = function (name) {
+  debug('creating transport "%s"', name);
+  var query = clone(this.query);
+
+  // append engine.io protocol identifier
+  query.EIO = parser.protocol;
+
+  // transport name
+  query.transport = name;
+
+  // per-transport options
+  var options = this.transportOptions[name] || {};
+
+  // session id if we already have one
+  if (this.id) query.sid = this.id;
+
+  var transport = new transports[name]({
+    query: query,
+    socket: this,
+    agent: options.agent || this.agent,
+    hostname: options.hostname || this.hostname,
+    port: options.port || this.port,
+    secure: options.secure || this.secure,
+    path: options.path || this.path,
+    forceJSONP: options.forceJSONP || this.forceJSONP,
+    jsonp: options.jsonp || this.jsonp,
+    forceBase64: options.forceBase64 || this.forceBase64,
+    enablesXDR: options.enablesXDR || this.enablesXDR,
+    withCredentials: options.withCredentials || this.withCredentials,
+    timestampRequests: options.timestampRequests || this.timestampRequests,
+    timestampParam: options.timestampParam || this.timestampParam,
+    policyPort: options.policyPort || this.policyPort,
+    pfx: options.pfx || this.pfx,
+    key: options.key || this.key,
+    passphrase: options.passphrase || this.passphrase,
+    cert: options.cert || this.cert,
+    ca: options.ca || this.ca,
+    ciphers: options.ciphers || this.ciphers,
+    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,
+    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,
+    extraHeaders: options.extraHeaders || this.extraHeaders,
+    forceNode: options.forceNode || this.forceNode,
+    localAddress: options.localAddress || this.localAddress,
+    requestTimeout: options.requestTimeout || this.requestTimeout,
+    protocols: options.protocols || void (0),
+    isReactNative: this.isReactNative
+  });
+
+  return transport;
+};
+
+function clone (obj) {
+  var o = {};
+  for (var i in obj) {
+    if (obj.hasOwnProperty(i)) {
+      o[i] = obj[i];
+    }
+  }
+  return o;
+}
+
+/**
+ * Initializes transport to use and starts probe.
+ *
+ * @api private
+ */
+Socket.prototype.open = function () {
+  var transport;
+  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {
+    transport = 'websocket';
+  } else if (0 === this.transports.length) {
+    // Emit error on next tick so it can be listened to
+    var self = this;
+    setTimeout(function () {
+      self.emit('error', 'No transports available');
+    }, 0);
+    return;
+  } else {
+    transport = this.transports[0];
+  }
+  this.readyState = 'opening';
+
+  // Retry with the next transport if the transport is disabled (jsonp: false)
+  try {
+    transport = this.createTransport(transport);
+  } catch (e) {
+    this.transports.shift();
+    this.open();
+    return;
+  }
+
+  transport.open();
+  this.setTransport(transport);
+};
+
+/**
+ * Sets the current transport. Disables the existing one (if any).
+ *
+ * @api private
+ */
+
+Socket.prototype.setTransport = function (transport) {
+  debug('setting transport %s', transport.name);
+  var self = this;
+
+  if (this.transport) {
+    debug('clearing existing transport %s', this.transport.name);
+    this.transport.removeAllListeners();
+  }
+
+  // set up transport
+  this.transport = transport;
+
+  // set up transport listeners
+  transport
+  .on('drain', function () {
+    self.onDrain();
+  })
+  .on('packet', function (packet) {
+    self.onPacket(packet);
+  })
+  .on('error', function (e) {
+    self.onError(e);
+  })
+  .on('close', function () {
+    self.onClose('transport close');
+  });
+};
+
+/**
+ * Probes a transport.
+ *
+ * @param {String} transport name
+ * @api private
+ */
+
+Socket.prototype.probe = function (name) {
+  debug('probing transport "%s"', name);
+  var transport = this.createTransport(name, { probe: 1 });
+  var failed = false;
+  var self = this;
+
+  Socket.priorWebsocketSuccess = false;
+
+  function onTransportOpen () {
+    if (self.onlyBinaryUpgrades) {
+      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
+      failed = failed || upgradeLosesBinary;
+    }
+    if (failed) return;
+
+    debug('probe transport "%s" opened', name);
+    transport.send([{ type: 'ping', data: 'probe' }]);
+    transport.once('packet', function (msg) {
+      if (failed) return;
+      if ('pong' === msg.type && 'probe' === msg.data) {
+        debug('probe transport "%s" pong', name);
+        self.upgrading = true;
+        self.emit('upgrading', transport);
+        if (!transport) return;
+        Socket.priorWebsocketSuccess = 'websocket' === transport.name;
+
+        debug('pausing current transport "%s"', self.transport.name);
+        self.transport.pause(function () {
+          if (failed) return;
+          if ('closed' === self.readyState) return;
+          debug('changing transport and sending upgrade packet');
+
+          cleanup();
+
+          self.setTransport(transport);
+          transport.send([{ type: 'upgrade' }]);
+          self.emit('upgrade', transport);
+          transport = null;
+          self.upgrading = false;
+          self.flush();
+        });
+      } else {
+        debug('probe transport "%s" failed', name);
+        var err = new Error('probe error');
+        err.transport = transport.name;
+        self.emit('upgradeError', err);
+      }
+    });
+  }
+
+  function freezeTransport () {
+    if (failed) return;
+
+    // Any callback called by transport should be ignored since now
+    failed = true;
+
+    cleanup();
+
+    transport.close();
+    transport = null;
+  }
+
+  // Handle any error that happens while probing
+  function onerror (err) {
+    var error = new Error('probe error: ' + err);
+    error.transport = transport.name;
+
+    freezeTransport();
+
+    debug('probe transport "%s" failed because of error: %s', name, err);
+
+    self.emit('upgradeError', error);
+  }
+
+  function onTransportClose () {
+    onerror('transport closed');
+  }
+
+  // When the socket is closed while we're probing
+  function onclose () {
+    onerror('socket closed');
+  }
+
+  // When the socket is upgraded while we're probing
+  function onupgrade (to) {
+    if (transport && to.name !== transport.name) {
+      debug('"%s" works - aborting "%s"', to.name, transport.name);
+      freezeTransport();
+    }
+  }
+
+  // Remove all listeners on the transport and on self
+  function cleanup () {
+    transport.removeListener('open', onTransportOpen);
+    transport.removeListener('error', onerror);
+    transport.removeListener('close', onTransportClose);
+    self.removeListener('close', onclose);
+    self.removeListener('upgrading', onupgrade);
+  }
+
+  transport.once('open', onTransportOpen);
+  transport.once('error', onerror);
+  transport.once('close', onTransportClose);
+
+  this.once('close', onclose);
+  this.once('upgrading', onupgrade);
+
+  transport.open();
+};
+
+/**
+ * Called when connection is deemed open.
+ *
+ * @api public
+ */
+
+Socket.prototype.onOpen = function () {
+  debug('socket open');
+  this.readyState = 'open';
+  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;
+  this.emit('open');
+  this.flush();
+
+  // we check for `readyState` in case an `open`
+  // listener already closed the socket
+  if ('open' === this.readyState && this.upgrade && this.transport.pause) {
+    debug('starting upgrade probes');
+    for (var i = 0, l = this.upgrades.length; i < l; i++) {
+      this.probe(this.upgrades[i]);
+    }
+  }
+};
+
+/**
+ * Handles a packet.
+ *
+ * @api private
+ */
+
+Socket.prototype.onPacket = function (packet) {
+  if ('opening' === this.readyState || 'open' === this.readyState ||
+      'closing' === this.readyState) {
+    debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
+
+    this.emit('packet', packet);
+
+    // Socket is live - any packet counts
+    this.emit('heartbeat');
+
+    switch (packet.type) {
+      case 'open':
+        this.onHandshake(JSON.parse(packet.data));
+        break;
+
+      case 'pong':
+        this.setPing();
+        this.emit('pong');
+        break;
+
+      case 'error':
+        var err = new Error('server error');
+        err.code = packet.data;
+        this.onError(err);
+        break;
+
+      case 'message':
+        this.emit('data', packet.data);
+        this.emit('message', packet.data);
+        break;
+    }
+  } else {
+    debug('packet received with socket readyState "%s"', this.readyState);
+  }
+};
+
+/**
+ * Called upon handshake completion.
+ *
+ * @param {Object} handshake obj
+ * @api private
+ */
+
+Socket.prototype.onHandshake = function (data) {
+  this.emit('handshake', data);
+  this.id = data.sid;
+  this.transport.query.sid = data.sid;
+  this.upgrades = this.filterUpgrades(data.upgrades);
+  this.pingInterval = data.pingInterval;
+  this.pingTimeout = data.pingTimeout;
+  this.onOpen();
+  // In case open handler closes socket
+  if ('closed' === this.readyState) return;
+  this.setPing();
+
+  // Prolong liveness of socket on heartbeat
+  this.removeListener('heartbeat', this.onHeartbeat);
+  this.on('heartbeat', this.onHeartbeat);
+};
+
+/**
+ * Resets ping timeout.
+ *
+ * @api private
+ */
+
+Socket.prototype.onHeartbeat = function (timeout) {
+  clearTimeout(this.pingTimeoutTimer);
+  var self = this;
+  self.pingTimeoutTimer = setTimeout(function () {
+    if ('closed' === self.readyState) return;
+    self.onClose('ping timeout');
+  }, timeout || (self.pingInterval + self.pingTimeout));
+};
+
+/**
+ * Pings server every `this.pingInterval` and expects response
+ * within `this.pingTimeout` or closes connection.
+ *
+ * @api private
+ */
+
+Socket.prototype.setPing = function () {
+  var self = this;
+  clearTimeout(self.pingIntervalTimer);
+  self.pingIntervalTimer = setTimeout(function () {
+    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);
+    self.ping();
+    self.onHeartbeat(self.pingTimeout);
+  }, self.pingInterval);
+};
+
+/**
+* Sends a ping packet.
+*
+* @api private
+*/
+
+Socket.prototype.ping = function () {
+  var self = this;
+  this.sendPacket('ping', function () {
+    self.emit('ping');
+  });
+};
+
+/**
+ * Called on `drain` event
+ *
+ * @api private
+ */
+
+Socket.prototype.onDrain = function () {
+  this.writeBuffer.splice(0, this.prevBufferLen);
+
+  // setting prevBufferLen = 0 is very important
+  // for example, when upgrading, upgrade packet is sent over,
+  // and a nonzero prevBufferLen could cause problems on `drain`
+  this.prevBufferLen = 0;
+
+  if (0 === this.writeBuffer.length) {
+    this.emit('drain');
+  } else {
+    this.flush();
+  }
+};
+
+/**
+ * Flush write buffers.
+ *
+ * @api private
+ */
+
+Socket.prototype.flush = function () {
+  if ('closed' !== this.readyState && this.transport.writable &&
+    !this.upgrading && this.writeBuffer.length) {
+    debug('flushing %d packets in socket', this.writeBuffer.length);
+    this.transport.send(this.writeBuffer);
+    // keep track of current length of writeBuffer
+    // splice writeBuffer and callbackBuffer on `drain`
+    this.prevBufferLen = this.writeBuffer.length;
+    this.emit('flush');
+  }
+};
+
+/**
+ * Sends a message.
+ *
+ * @param {String} message.
+ * @param {Function} callback function.
+ * @param {Object} options.
+ * @return {Socket} for chaining.
+ * @api public
+ */
+
+Socket.prototype.write =
+Socket.prototype.send = function (msg, options, fn) {
+  this.sendPacket('message', msg, options, fn);
+  return this;
+};
+
+/**
+ * Sends a packet.
+ *
+ * @param {String} packet type.
+ * @param {String} data.
+ * @param {Object} options.
+ * @param {Function} callback function.
+ * @api private
+ */
+
+Socket.prototype.sendPacket = function (type, data, options, fn) {
+  if ('function' === typeof data) {
+    fn = data;
+    data = undefined;
+  }
+
+  if ('function' === typeof options) {
+    fn = options;
+    options = null;
+  }
+
+  if ('closing' === this.readyState || 'closed' === this.readyState) {
+    return;
+  }
+
+  options = options || {};
+  options.compress = false !== options.compress;
+
+  var packet = {
+    type: type,
+    data: data,
+    options: options
+  };
+  this.emit('packetCreate', packet);
+  this.writeBuffer.push(packet);
+  if (fn) this.once('flush', fn);
+  this.flush();
+};
+
+/**
+ * Closes the connection.
+ *
+ * @api private
+ */
+
+Socket.prototype.close = function () {
+  if ('opening' === this.readyState || 'open' === this.readyState) {
+    this.readyState = 'closing';
+
+    var self = this;
+
+    if (this.writeBuffer.length) {
+      this.once('drain', function () {
+        if (this.upgrading) {
+          waitForUpgrade();
+        } else {
+          close();
+        }
+      });
+    } else if (this.upgrading) {
+      waitForUpgrade();
+    } else {
+      close();
+    }
+  }
+
+  function close () {
+    self.onClose('forced close');
+    debug('socket closing - telling transport to close');
+    self.transport.close();
+  }
+
+  function cleanupAndClose () {
+    self.removeListener('upgrade', cleanupAndClose);
+    self.removeListener('upgradeError', cleanupAndClose);
+    close();
+  }
+
+  function waitForUpgrade () {
+    // wait for upgrade to finish since we can't send packets while pausing a transport
+    self.once('upgrade', cleanupAndClose);
+    self.once('upgradeError', cleanupAndClose);
+  }
+
+  return this;
+};
+
+/**
+ * Called upon transport error
+ *
+ * @api private
+ */
+
+Socket.prototype.onError = function (err) {
+  debug('socket error %j', err);
+  Socket.priorWebsocketSuccess = false;
+  this.emit('error', err);
+  this.onClose('transport error', err);
+};
+
+/**
+ * Called upon transport close.
+ *
+ * @api private
+ */
+
+Socket.prototype.onClose = function (reason, desc) {
+  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {
+    debug('socket close with reason: "%s"', reason);
+    var self = this;
+
+    // clear timers
+    clearTimeout(this.pingIntervalTimer);
+    clearTimeout(this.pingTimeoutTimer);
+
+    // stop event from firing again for transport
+    this.transport.removeAllListeners('close');
+
+    // ensure transport won't stay open
+    this.transport.close();
+
+    // ignore further transport communication
+    this.transport.removeAllListeners();
+
+    // set ready state
+    this.readyState = 'closed';
+
+    // clear session id
+    this.id = null;
+
+    // emit close event
+    this.emit('close', reason, desc);
+
+    // clean buffers after, so users can still
+    // grab the buffers on `close` event
+    self.writeBuffer = [];
+    self.prevBufferLen = 0;
+  }
+};
+
+/**
+ * Filters upgrades, returning only those matching client transports.
+ *
+ * @param {Array} server upgrades
+ * @api private
+ *
+ */
+
+Socket.prototype.filterUpgrades = function (upgrades) {
+  var filteredUpgrades = [];
+  for (var i = 0, j = upgrades.length; i < j; i++) {
+    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
+  }
+  return filteredUpgrades;
+};
diff --git a/signaling_server/service/node_modules/engine.io-client/lib/transports/polling.js b/signaling_server/service/node_modules/engine.io-client/lib/transports/polling.js
new file mode 100644 (file)
index 0000000..786398b
--- /dev/null
@@ -0,0 +1,245 @@
+/**
+ * Module dependencies.
+ */
+
+var Transport = require('../transport');
+var parseqs = require('parseqs');
+var parser = require('engine.io-parser');
+var inherit = require('component-inherit');
+var yeast = require('yeast');
+var debug = require('debug')('engine.io-client:polling');
+
+/**
+ * Module exports.
+ */
+
+module.exports = Polling;
+
+/**
+ * Is XHR2 supported?
+ */
+
+var hasXHR2 = (function () {
+  var XMLHttpRequest = require('xmlhttprequest-ssl');
+  var xhr = new XMLHttpRequest({ xdomain: false });
+  return null != xhr.responseType;
+})();
+
+/**
+ * Polling interface.
+ *
+ * @param {Object} opts
+ * @api private
+ */
+
+function Polling (opts) {
+  var forceBase64 = (opts && opts.forceBase64);
+  if (!hasXHR2 || forceBase64) {
+    this.supportsBinary = false;
+  }
+  Transport.call(this, opts);
+}
+
+/**
+ * Inherits from Transport.
+ */
+
+inherit(Polling, Transport);
+
+/**
+ * Transport name.
+ */
+
+Polling.prototype.name = 'polling';
+
+/**
+ * Opens the socket (triggers polling). We write a PING message to determine
+ * when the transport is open.
+ *
+ * @api private
+ */
+
+Polling.prototype.doOpen = function () {
+  this.poll();
+};
+
+/**
+ * Pauses polling.
+ *
+ * @param {Function} callback upon buffers are flushed and transport is paused
+ * @api private
+ */
+
+Polling.prototype.pause = function (onPause) {
+  var self = this;
+
+  this.readyState = 'pausing';
+
+  function pause () {
+    debug('paused');
+    self.readyState = 'paused';
+    onPause();
+  }
+
+  if (this.polling || !this.writable) {
+    var total = 0;
+
+    if (this.polling) {
+      debug('we are currently polling - waiting to pause');
+      total++;
+      this.once('pollComplete', function () {
+        debug('pre-pause polling complete');
+        --total || pause();
+      });
+    }
+
+    if (!this.writable) {
+      debug('we are currently writing - waiting to pause');
+      total++;
+      this.once('drain', function () {
+        debug('pre-pause writing complete');
+        --total || pause();
+      });
+    }
+  } else {
+    pause();
+  }
+};
+
+/**
+ * Starts polling cycle.
+ *
+ * @api public
+ */
+
+Polling.prototype.poll = function () {
+  debug('polling');
+  this.polling = true;
+  this.doPoll();
+  this.emit('poll');
+};
+
+/**
+ * Overloads onData to detect payloads.
+ *
+ * @api private
+ */
+
+Polling.prototype.onData = function (data) {
+  var self = this;
+  debug('polling got data %s', data);
+  var callback = function (packet, index, total) {
+    // if its the first message we consider the transport open
+    if ('opening' === self.readyState && packet.type === 'open') {
+      self.onOpen();
+    }
+
+    // if its a close packet, we close the ongoing requests
+    if ('close' === packet.type) {
+      self.onClose();
+      return false;
+    }
+
+    // otherwise bypass onData and handle the message
+    self.onPacket(packet);
+  };
+
+  // decode payload
+  parser.decodePayload(data, this.socket.binaryType, callback);
+
+  // if an event did not trigger closing
+  if ('closed' !== this.readyState) {
+    // if we got data we're not polling
+    this.polling = false;
+    this.emit('pollComplete');
+
+    if ('open' === this.readyState) {
+      this.poll();
+    } else {
+      debug('ignoring poll - transport state "%s"', this.readyState);
+    }
+  }
+};
+
+/**
+ * For polling, send a close packet.
+ *
+ * @api private
+ */
+
+Polling.prototype.doClose = function () {
+  var self = this;
+
+  function close () {
+    debug('writing close packet');
+    self.write([{ type: 'close' }]);
+  }
+
+  if ('open' === this.readyState) {
+    debug('transport open - closing');
+    close();
+  } else {
+    // in case we're trying to close while
+    // handshaking is in progress (GH-164)
+    debug('transport not open - deferring close');
+    this.once('open', close);
+  }
+};
+
+/**
+ * Writes a packets payload.
+ *
+ * @param {Array} data packets
+ * @param {Function} drain callback
+ * @api private
+ */
+
+Polling.prototype.write = function (packets) {
+  var self = this;
+  this.writable = false;
+  var callbackfn = function () {
+    self.writable = true;
+    self.emit('drain');
+  };
+
+  parser.encodePayload(packets, this.supportsBinary, function (data) {
+    self.doWrite(data, callbackfn);
+  });
+};
+
+/**
+ * Generates uri for connection.
+ *
+ * @api private
+ */
+
+Polling.prototype.uri = function () {
+  var query = this.query || {};
+  var schema = this.secure ? 'https' : 'http';
+  var port = '';
+
+  // cache busting is forced
+  if (false !== this.timestampRequests) {
+    query[this.timestampParam] = yeast();
+  }
+
+  if (!this.supportsBinary && !query.sid) {
+    query.b64 = 1;
+  }
+
+  query = parseqs.encode(query);
+
+  // avoid port if default for schema
+  if (this.port && (('https' === schema && Number(this.port) !== 443) ||
+     ('http' === schema && Number(this.port) !== 80))) {
+    port = ':' + this.port;
+  }
+
+  // prepend ? to query
+  if (query.length) {
+    query = '?' + query;
+  }
+
+  var ipv6 = this.hostname.indexOf(':') !== -1;
+  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
+};
diff --git a/signaling_server/service/node_modules/engine.io-client/lib/transports/websocket.js b/signaling_server/service/node_modules/engine.io-client/lib/transports/websocket.js
new file mode 100644 (file)
index 0000000..f9c4b7a
--- /dev/null
@@ -0,0 +1,299 @@
+/**
+ * Module dependencies.
+ */
+
+var Transport = require('../transport');
+var parser = require('engine.io-parser');
+var parseqs = require('parseqs');
+var inherit = require('component-inherit');
+var yeast = require('yeast');
+var debug = require('debug')('engine.io-client:websocket');
+
+var BrowserWebSocket, NodeWebSocket;
+
+if (typeof WebSocket !== 'undefined') {
+  BrowserWebSocket = WebSocket;
+} else if (typeof self !== 'undefined') {
+  BrowserWebSocket = self.WebSocket || self.MozWebSocket;
+}
+
+if (typeof window === 'undefined') {
+  try {
+    NodeWebSocket = require('ws');
+  } catch (e) { }
+}
+
+/**
+ * Get either the `WebSocket` or `MozWebSocket` globals
+ * in the browser or try to resolve WebSocket-compatible
+ * interface exposed by `ws` for Node-like environment.
+ */
+
+var WebSocketImpl = BrowserWebSocket || NodeWebSocket;
+
+/**
+ * Module exports.
+ */
+
+module.exports = WS;
+
+/**
+ * WebSocket transport constructor.
+ *
+ * @api {Object} connection options
+ * @api public
+ */
+
+function WS (opts) {
+  var forceBase64 = (opts && opts.forceBase64);
+  if (forceBase64) {
+    this.supportsBinary = false;
+  }
+  this.perMessageDeflate = opts.perMessageDeflate;
+  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;
+  this.protocols = opts.protocols;
+  if (!this.usingBrowserWebSocket) {
+    WebSocketImpl = NodeWebSocket;
+  }
+  Transport.call(this, opts);
+}
+
+/**
+ * Inherits from Transport.
+ */
+
+inherit(WS, Transport);
+
+/**
+ * Transport name.
+ *
+ * @api public
+ */
+
+WS.prototype.name = 'websocket';
+
+/*
+ * WebSockets support binary
+ */
+
+WS.prototype.supportsBinary = true;
+
+/**
+ * Opens socket.
+ *
+ * @api private
+ */
+
+WS.prototype.doOpen = function () {
+  if (!this.check()) {
+    // let probe timeout
+    return;
+  }
+
+  var uri = this.uri();
+  var protocols = this.protocols;
+
+  var opts = {};
+
+  if (!this.isReactNative) {
+    opts.agent = this.agent;
+    opts.perMessageDeflate = this.perMessageDeflate;
+
+    // SSL options for Node.js client
+    opts.pfx = this.pfx;
+    opts.key = this.key;
+    opts.passphrase = this.passphrase;
+    opts.cert = this.cert;
+    opts.ca = this.ca;
+    opts.ciphers = this.ciphers;
+    opts.rejectUnauthorized = this.rejectUnauthorized;
+  }
+
+  if (this.extraHeaders) {
+    opts.headers = this.extraHeaders;
+  }
+  if (this.localAddress) {
+    opts.localAddress = this.localAddress;
+  }
+
+  try {
+    this.ws =
+      this.usingBrowserWebSocket && !this.isReactNative
+        ? protocols
+          ? new WebSocketImpl(uri, protocols)
+          : new WebSocketImpl(uri)
+        : new WebSocketImpl(uri, protocols, opts);
+  } catch (err) {
+    return this.emit('error', err);
+  }
+
+  if (this.ws.binaryType === undefined) {
+    this.supportsBinary = false;
+  }
+
+  if (this.ws.supports && this.ws.supports.binary) {
+    this.supportsBinary = true;
+    this.ws.binaryType = 'nodebuffer';
+  } else {
+    this.ws.binaryType = 'arraybuffer';
+  }
+
+  this.addEventListeners();
+};
+
+/**
+ * Adds event listeners to the socket
+ *
+ * @api private
+ */
+
+WS.prototype.addEventListeners = function () {
+  var self = this;
+
+  this.ws.onopen = function () {
+    self.onOpen();
+  };
+  this.ws.onclose = function () {
+    self.onClose();
+  };
+  this.ws.onmessage = function (ev) {
+    self.onData(ev.data);
+  };
+  this.ws.onerror = function (e) {
+    self.onError('websocket error', e);
+  };
+};
+
+/**
+ * Writes data to socket.
+ *
+ * @param {Array} array of packets.
+ * @api private
+ */
+
+WS.prototype.write = function (packets) {
+  var self = this;
+  this.writable = false;
+
+  // encodePacket efficient as it uses WS framing
+  // no need for encodePayload
+  var total = packets.length;
+  for (var i = 0, l = total; i < l; i++) {
+    (function (packet) {
+      parser.encodePacket(packet, self.supportsBinary, function (data) {
+        if (!self.usingBrowserWebSocket) {
+          // always create a new object (GH-437)
+          var opts = {};
+          if (packet.options) {
+            opts.compress = packet.options.compress;
+          }
+
+          if (self.perMessageDeflate) {
+            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;
+            if (len < self.perMessageDeflate.threshold) {
+              opts.compress = false;
+            }
+          }
+        }
+
+        // Sometimes the websocket has already been closed but the browser didn't
+        // have a chance of informing us about it yet, in that case send will
+        // throw an error
+        try {
+          if (self.usingBrowserWebSocket) {
+            // TypeError is thrown when passing the second argument on Safari
+            self.ws.send(data);
+          } else {
+            self.ws.send(data, opts);
+          }
+        } catch (e) {
+          debug('websocket closed before onclose event');
+        }
+
+        --total || done();
+      });
+    })(packets[i]);
+  }
+
+  function done () {
+    self.emit('flush');
+
+    // fake drain
+    // defer to next tick to allow Socket to clear writeBuffer
+    setTimeout(function () {
+      self.writable = true;
+      self.emit('drain');
+    }, 0);
+  }
+};
+
+/**
+ * Called upon close
+ *
+ * @api private
+ */
+
+WS.prototype.onClose = function () {
+  Transport.prototype.onClose.call(this);
+};
+
+/**
+ * Closes socket.
+ *
+ * @api private
+ */
+
+WS.prototype.doClose = function () {
+  if (typeof this.ws !== 'undefined') {
+    this.ws.close();
+  }
+};
+
+/**
+ * Generates uri for connection.
+ *
+ * @api private
+ */
+
+WS.prototype.uri = function () {
+  var query = this.query || {};
+  var schema = this.secure ? 'wss' : 'ws';
+  var port = '';
+
+  // avoid port if default for schema
+  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||
+    ('ws' === schema && Number(this.port) !== 80))) {
+    port = ':' + this.port;
+  }
+
+  // append timestamp to URI
+  if (this.timestampRequests) {
+    query[this.timestampParam] = yeast();
+  }
+
+  // communicate binary support capabilities
+  if (!this.supportsBinary) {
+    query.b64 = 1;
+  }
+
+  query = parseqs.encode(query);
+
+  // prepend ? to query
+  if (query.length) {
+    query = '?' + query;
+  }
+
+  var ipv6 = this.hostname.indexOf(':') !== -1;
+  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
+};
+
+/**
+ * Feature detection for WebSocket.
+ *
+ * @return {Boolean} whether this transport is available.
+ * @api public
+ */
+
+WS.prototype.check = function () {
+  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);
+};
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/debug/package.json b/signaling_server/service/node_modules/engine.io-client/node_modules/debug/package.json
new file mode 100644 (file)
index 0000000..a740c87
--- /dev/null
@@ -0,0 +1,85 @@
+{
+  "_args": [
+    [
+      "debug@3.1.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "debug@3.1.0",
+  "_id": "debug@3.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+  "_location": "/engine.io-client/debug",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "debug@3.1.0",
+    "name": "debug",
+    "escapedName": "debug",
+    "rawSpec": "3.1.0",
+    "saveSpec": null,
+    "fetchSpec": "3.1.0"
+  },
+  "_requiredBy": [
+    "/engine.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+  "_spec": "3.1.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca"
+  },
+  "browser": "./src/browser.js",
+  "bugs": {
+    "url": "https://github.com/visionmedia/debug/issues"
+  },
+  "contributors": [
+    {
+      "name": "Nathan Rajlich",
+      "email": "nathan@tootallnate.net",
+      "url": "http://n8.io"
+    },
+    {
+      "name": "Andrew Rhyne",
+      "email": "rhyneandrew@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "ms": "2.0.0"
+  },
+  "description": "small debugging utility",
+  "devDependencies": {
+    "browserify": "14.4.0",
+    "chai": "^3.5.0",
+    "concurrently": "^3.1.0",
+    "coveralls": "^2.11.15",
+    "eslint": "^3.12.1",
+    "istanbul": "^0.4.5",
+    "karma": "^1.3.0",
+    "karma-chai": "^0.1.0",
+    "karma-mocha": "^1.3.0",
+    "karma-phantomjs-launcher": "^1.0.2",
+    "karma-sinon": "^1.0.5",
+    "mocha": "^3.2.0",
+    "mocha-lcov-reporter": "^1.2.0",
+    "rimraf": "^2.5.4",
+    "sinon": "^1.17.6",
+    "sinon-chai": "^2.8.0"
+  },
+  "homepage": "https://github.com/visionmedia/debug#readme",
+  "keywords": [
+    "debug",
+    "log",
+    "debugger"
+  ],
+  "license": "MIT",
+  "main": "./src/index.js",
+  "name": "debug",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/visionmedia/debug.git"
+  },
+  "version": "3.1.0"
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ms/index.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ms/index.js
new file mode 100644 (file)
index 0000000..6a522b1
--- /dev/null
@@ -0,0 +1,152 @@
+/**
+ * Helpers.
+ */
+
+var s = 1000;
+var m = s * 60;
+var h = m * 60;
+var d = h * 24;
+var y = d * 365.25;
+
+/**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ *  - `long` verbose formatting [false]
+ *
+ * @param {String|Number} val
+ * @param {Object} [options]
+ * @throws {Error} throw an error if val is not a non-empty string or a number
+ * @return {String|Number}
+ * @api public
+ */
+
+module.exports = function(val, options) {
+  options = options || {};
+  var type = typeof val;
+  if (type === 'string' && val.length > 0) {
+    return parse(val);
+  } else if (type === 'number' && isNaN(val) === false) {
+    return options.long ? fmtLong(val) : fmtShort(val);
+  }
+  throw new Error(
+    'val is not a non-empty string or a valid number. val=' +
+      JSON.stringify(val)
+  );
+};
+
+/**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @param {String} str
+ * @return {Number}
+ * @api private
+ */
+
+function parse(str) {
+  str = String(str);
+  if (str.length > 100) {
+    return;
+  }
+  var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
+    str
+  );
+  if (!match) {
+    return;
+  }
+  var n = parseFloat(match[1]);
+  var type = (match[2] || 'ms').toLowerCase();
+  switch (type) {
+    case 'years':
+    case 'year':
+    case 'yrs':
+    case 'yr':
+    case 'y':
+      return n * y;
+    case 'days':
+    case 'day':
+    case 'd':
+      return n * d;
+    case 'hours':
+    case 'hour':
+    case 'hrs':
+    case 'hr':
+    case 'h':
+      return n * h;
+    case 'minutes':
+    case 'minute':
+    case 'mins':
+    case 'min':
+    case 'm':
+      return n * m;
+    case 'seconds':
+    case 'second':
+    case 'secs':
+    case 'sec':
+    case 's':
+      return n * s;
+    case 'milliseconds':
+    case 'millisecond':
+    case 'msecs':
+    case 'msec':
+    case 'ms':
+      return n;
+    default:
+      return undefined;
+  }
+}
+
+/**
+ * Short format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtShort(ms) {
+  if (ms >= d) {
+    return Math.round(ms / d) + 'd';
+  }
+  if (ms >= h) {
+    return Math.round(ms / h) + 'h';
+  }
+  if (ms >= m) {
+    return Math.round(ms / m) + 'm';
+  }
+  if (ms >= s) {
+    return Math.round(ms / s) + 's';
+  }
+  return ms + 'ms';
+}
+
+/**
+ * Long format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtLong(ms) {
+  return plural(ms, d, 'day') ||
+    plural(ms, h, 'hour') ||
+    plural(ms, m, 'minute') ||
+    plural(ms, s, 'second') ||
+    ms + ' ms';
+}
+
+/**
+ * Pluralization helper.
+ */
+
+function plural(ms, n, name) {
+  if (ms < n) {
+    return;
+  }
+  if (ms < n * 1.5) {
+    return Math.floor(ms / n) + ' ' + name;
+  }
+  return Math.ceil(ms / n) + ' ' + name + 's';
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ms/package.json b/signaling_server/service/node_modules/engine.io-client/node_modules/ms/package.json
new file mode 100644 (file)
index 0000000..0d361a8
--- /dev/null
@@ -0,0 +1,72 @@
+{
+  "_args": [
+    [
+      "ms@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ms@2.0.0",
+  "_id": "ms@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+  "_location": "/engine.io-client/ms",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ms@2.0.0",
+    "name": "ms",
+    "escapedName": "ms",
+    "rawSpec": "2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "2.0.0"
+  },
+  "_requiredBy": [
+    "/engine.io-client/debug"
+  ],
+  "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/zeit/ms/issues"
+  },
+  "description": "Tiny milisecond conversion utility",
+  "devDependencies": {
+    "eslint": "3.19.0",
+    "expect.js": "0.3.1",
+    "husky": "0.13.3",
+    "lint-staged": "3.4.1",
+    "mocha": "3.4.1"
+  },
+  "eslintConfig": {
+    "extends": "eslint:recommended",
+    "env": {
+      "node": true,
+      "es6": true
+    }
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/zeit/ms#readme",
+  "license": "MIT",
+  "lint-staged": {
+    "*.js": [
+      "npm run lint",
+      "prettier --single-quote --write",
+      "git add"
+    ]
+  },
+  "main": "./index",
+  "name": "ms",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/zeit/ms.git"
+  },
+  "scripts": {
+    "lint": "eslint lib/* bin/*",
+    "precommit": "lint-staged",
+    "test": "mocha tests.js"
+  },
+  "version": "2.0.0"
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ms/readme.md b/signaling_server/service/node_modules/engine.io-client/node_modules/ms/readme.md
new file mode 100644 (file)
index 0000000..84a9974
--- /dev/null
@@ -0,0 +1,51 @@
+# ms
+
+[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms)
+[![Slack Channel](http://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/)
+
+Use this package to easily convert various time formats to milliseconds.
+
+## Examples
+
+```js
+ms('2 days')  // 172800000
+ms('1d')      // 86400000
+ms('10h')     // 36000000
+ms('2.5 hrs') // 9000000
+ms('2h')      // 7200000
+ms('1m')      // 60000
+ms('5s')      // 5000
+ms('1y')      // 31557600000
+ms('100')     // 100
+```
+
+### Convert from milliseconds
+
+```js
+ms(60000)             // "1m"
+ms(2 * 60000)         // "2m"
+ms(ms('10 hours'))    // "10h"
+```
+
+### Time format written-out
+
+```js
+ms(60000, { long: true })             // "1 minute"
+ms(2 * 60000, { long: true })         // "2 minutes"
+ms(ms('10 hours'), { long: true })    // "10 hours"
+```
+
+## Features
+
+- Works both in [node](https://nodejs.org) and in the browser.
+- If a number is supplied to `ms`, a string with a unit is returned.
+- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`).
+- If you pass a string with a number and a valid unit, the number of equivalent ms is returned.
+
+## Caught a bug?
+
+1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device
+2. Link the package to the global module directory: `npm link`
+3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms!
+
+As always, you can run the tests using: `npm test`
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/README.md b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/README.md
new file mode 100644 (file)
index 0000000..6aea136
--- /dev/null
@@ -0,0 +1,496 @@
+# ws: a Node.js WebSocket library
+
+[![Version npm](https://img.shields.io/npm/v/ws.svg?logo=npm)](https://www.npmjs.com/package/ws)
+[![Build](https://img.shields.io/github/workflow/status/websockets/ws/CI/master?label=build&logo=github)](https://github.com/websockets/ws/actions?query=workflow%3ACI+branch%3Amaster)
+[![Windows x86 Build](https://img.shields.io/appveyor/ci/lpinca/ws/master.svg?logo=appveyor)](https://ci.appveyor.com/project/lpinca/ws)
+[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg)](https://coveralls.io/github/websockets/ws)
+
+ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and
+server implementation.
+
+Passes the quite extensive Autobahn test suite: [server][server-report],
+[client][client-report].
+
+**Note**: This module does not work in the browser. The client in the docs is a
+reference to a back end with the role of a client in the WebSocket
+communication. Browser clients must use the native
+[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket)
+object. To make the same code work seamlessly on Node.js and the browser, you
+can use one of the many wrappers available on npm, like
+[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws).
+
+## Table of Contents
+
+- [Protocol support](#protocol-support)
+- [Installing](#installing)
+  - [Opt-in for performance and spec compliance](#opt-in-for-performance-and-spec-compliance)
+- [API docs](#api-docs)
+- [WebSocket compression](#websocket-compression)
+- [Usage examples](#usage-examples)
+  - [Sending and receiving text data](#sending-and-receiving-text-data)
+  - [Sending binary data](#sending-binary-data)
+  - [Simple server](#simple-server)
+  - [External HTTP/S server](#external-https-server)
+  - [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server)
+  - [Client authentication](#client-authentication)
+  - [Server broadcast](#server-broadcast)
+  - [echo.websocket.org demo](#echowebsocketorg-demo)
+  - [Use the Node.js streams API](#use-the-nodejs-streams-api)
+  - [Other examples](#other-examples)
+- [FAQ](#faq)
+  - [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client)
+  - [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections)
+  - [How to connect via a proxy?](#how-to-connect-via-a-proxy)
+- [Changelog](#changelog)
+- [License](#license)
+
+## Protocol support
+
+- **HyBi drafts 07-12** (Use the option `protocolVersion: 8`)
+- **HyBi drafts 13-17** (Current default, alternatively option
+  `protocolVersion: 13`)
+
+## Installing
+
+```
+npm install ws
+```
+
+### Opt-in for performance and spec compliance
+
+There are 2 optional modules that can be installed along side with the ws
+module. These modules are binary addons which improve certain operations.
+Prebuilt binaries are available for the most popular platforms so you don't
+necessarily need to have a C++ compiler installed on your machine.
+
+- `npm install --save-optional bufferutil`: Allows to efficiently perform
+  operations such as masking and unmasking the data payload of the WebSocket
+  frames.
+- `npm install --save-optional utf-8-validate`: Allows to efficiently check if a
+  message contains valid UTF-8 as required by the spec.
+
+## API docs
+
+See [`/doc/ws.md`](./doc/ws.md) for Node.js-like documentation of ws classes and
+utility functions.
+
+## WebSocket compression
+
+ws supports the [permessage-deflate extension][permessage-deflate] which enables
+the client and server to negotiate a compression algorithm and its parameters,
+and then selectively apply it to the data payloads of each WebSocket message.
+
+The extension is disabled by default on the server and enabled by default on the
+client. It adds a significant overhead in terms of performance and memory
+consumption so we suggest to enable it only if it is really needed.
+
+Note that Node.js has a variety of issues with high-performance compression,
+where increased concurrency, especially on Linux, can lead to [catastrophic
+memory fragmentation][node-zlib-bug] and slow performance. If you intend to use
+permessage-deflate in production, it is worthwhile to set up a test
+representative of your workload and ensure Node.js/zlib will handle it with
+acceptable performance and memory usage.
+
+Tuning of permessage-deflate can be done via the options defined below. You can
+also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly
+into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs].
+
+See [the docs][ws-server-options] for more options.
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({
+  port: 8080,
+  perMessageDeflate: {
+    zlibDeflateOptions: {
+      // See zlib defaults.
+      chunkSize: 1024,
+      memLevel: 7,
+      level: 3
+    },
+    zlibInflateOptions: {
+      chunkSize: 10 * 1024
+    },
+    // Other options settable:
+    clientNoContextTakeover: true, // Defaults to negotiated value.
+    serverNoContextTakeover: true, // Defaults to negotiated value.
+    serverMaxWindowBits: 10, // Defaults to negotiated value.
+    // Below options specified as default values.
+    concurrencyLimit: 10, // Limits zlib concurrency for perf.
+    threshold: 1024 // Size (in bytes) below which messages
+    // should not be compressed.
+  }
+});
+```
+
+The client will only use the extension if it is supported and enabled on the
+server. To always disable the extension on the client set the
+`perMessageDeflate` option to `false`.
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('ws://www.host.com/path', {
+  perMessageDeflate: false
+});
+```
+
+## Usage examples
+
+### Sending and receiving text data
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('ws://www.host.com/path');
+
+ws.on('open', function open() {
+  ws.send('something');
+});
+
+ws.on('message', function incoming(data) {
+  console.log(data);
+});
+```
+
+### Sending binary data
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('ws://www.host.com/path');
+
+ws.on('open', function open() {
+  const array = new Float32Array(5);
+
+  for (var i = 0; i < array.length; ++i) {
+    array[i] = i / 2;
+  }
+
+  ws.send(array);
+});
+```
+
+### Simple server
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws) {
+  ws.on('message', function incoming(message) {
+    console.log('received: %s', message);
+  });
+
+  ws.send('something');
+});
+```
+
+### External HTTP/S server
+
+```js
+const fs = require('fs');
+const https = require('https');
+const WebSocket = require('ws');
+
+const server = https.createServer({
+  cert: fs.readFileSync('/path/to/cert.pem'),
+  key: fs.readFileSync('/path/to/key.pem')
+});
+const wss = new WebSocket.Server({ server });
+
+wss.on('connection', function connection(ws) {
+  ws.on('message', function incoming(message) {
+    console.log('received: %s', message);
+  });
+
+  ws.send('something');
+});
+
+server.listen(8080);
+```
+
+### Multiple servers sharing a single HTTP/S server
+
+```js
+const http = require('http');
+const WebSocket = require('ws');
+const url = require('url');
+
+const server = http.createServer();
+const wss1 = new WebSocket.Server({ noServer: true });
+const wss2 = new WebSocket.Server({ noServer: true });
+
+wss1.on('connection', function connection(ws) {
+  // ...
+});
+
+wss2.on('connection', function connection(ws) {
+  // ...
+});
+
+server.on('upgrade', function upgrade(request, socket, head) {
+  const pathname = url.parse(request.url).pathname;
+
+  if (pathname === '/foo') {
+    wss1.handleUpgrade(request, socket, head, function done(ws) {
+      wss1.emit('connection', ws, request);
+    });
+  } else if (pathname === '/bar') {
+    wss2.handleUpgrade(request, socket, head, function done(ws) {
+      wss2.emit('connection', ws, request);
+    });
+  } else {
+    socket.destroy();
+  }
+});
+
+server.listen(8080);
+```
+
+### Client authentication
+
+```js
+const http = require('http');
+const WebSocket = require('ws');
+
+const server = http.createServer();
+const wss = new WebSocket.Server({ noServer: true });
+
+wss.on('connection', function connection(ws, request, client) {
+  ws.on('message', function message(msg) {
+    console.log(`Received message ${msg} from user ${client}`);
+  });
+});
+
+server.on('upgrade', function upgrade(request, socket, head) {
+  // This function is not defined on purpose. Implement it with your own logic.
+  authenticate(request, (err, client) => {
+    if (err || !client) {
+      socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
+      socket.destroy();
+      return;
+    }
+
+    wss.handleUpgrade(request, socket, head, function done(ws) {
+      wss.emit('connection', ws, request, client);
+    });
+  });
+});
+
+server.listen(8080);
+```
+
+Also see the provided [example][session-parse-example] using `express-session`.
+
+### Server broadcast
+
+A client WebSocket broadcasting to all connected WebSocket clients, including
+itself.
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws) {
+  ws.on('message', function incoming(data) {
+    wss.clients.forEach(function each(client) {
+      if (client.readyState === WebSocket.OPEN) {
+        client.send(data);
+      }
+    });
+  });
+});
+```
+
+A client WebSocket broadcasting to every other connected WebSocket clients,
+excluding itself.
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws) {
+  ws.on('message', function incoming(data) {
+    wss.clients.forEach(function each(client) {
+      if (client !== ws && client.readyState === WebSocket.OPEN) {
+        client.send(data);
+      }
+    });
+  });
+});
+```
+
+### echo.websocket.org demo
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('wss://echo.websocket.org/', {
+  origin: 'https://websocket.org'
+});
+
+ws.on('open', function open() {
+  console.log('connected');
+  ws.send(Date.now());
+});
+
+ws.on('close', function close() {
+  console.log('disconnected');
+});
+
+ws.on('message', function incoming(data) {
+  console.log(`Roundtrip time: ${Date.now() - data} ms`);
+
+  setTimeout(function timeout() {
+    ws.send(Date.now());
+  }, 500);
+});
+```
+
+### Use the Node.js streams API
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('wss://echo.websocket.org/', {
+  origin: 'https://websocket.org'
+});
+
+const duplex = WebSocket.createWebSocketStream(ws, { encoding: 'utf8' });
+
+duplex.pipe(process.stdout);
+process.stdin.pipe(duplex);
+```
+
+### Other examples
+
+For a full example with a browser client communicating with a ws server, see the
+examples folder.
+
+Otherwise, see the test cases.
+
+## FAQ
+
+### How to get the IP address of the client?
+
+The remote IP address can be obtained from the raw socket.
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws, req) {
+  const ip = req.socket.remoteAddress;
+});
+```
+
+When the server runs behind a proxy like NGINX, the de-facto standard is to use
+the `X-Forwarded-For` header.
+
+```js
+wss.on('connection', function connection(ws, req) {
+  const ip = req.headers['x-forwarded-for'].split(/\s*,\s*/)[0];
+});
+```
+
+### How to detect and close broken connections?
+
+Sometimes the link between the server and the client can be interrupted in a way
+that keeps both the server and the client unaware of the broken state of the
+connection (e.g. when pulling the cord).
+
+In these cases ping messages can be used as a means to verify that the remote
+endpoint is still responsive.
+
+```js
+const WebSocket = require('ws');
+
+function noop() {}
+
+function heartbeat() {
+  this.isAlive = true;
+}
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws) {
+  ws.isAlive = true;
+  ws.on('pong', heartbeat);
+});
+
+const interval = setInterval(function ping() {
+  wss.clients.forEach(function each(ws) {
+    if (ws.isAlive === false) return ws.terminate();
+
+    ws.isAlive = false;
+    ws.ping(noop);
+  });
+}, 30000);
+
+wss.on('close', function close() {
+  clearInterval(interval);
+});
+```
+
+Pong messages are automatically sent in response to ping messages as required by
+the spec.
+
+Just like the server example above your clients might as well lose connection
+without knowing it. You might want to add a ping listener on your clients to
+prevent that. A simple implementation would be:
+
+```js
+const WebSocket = require('ws');
+
+function heartbeat() {
+  clearTimeout(this.pingTimeout);
+
+  // Use `WebSocket#terminate()`, which immediately destroys the connection,
+  // instead of `WebSocket#close()`, which waits for the close timer.
+  // Delay should be equal to the interval at which your server
+  // sends out pings plus a conservative assumption of the latency.
+  this.pingTimeout = setTimeout(() => {
+    this.terminate();
+  }, 30000 + 1000);
+}
+
+const client = new WebSocket('wss://echo.websocket.org/');
+
+client.on('open', heartbeat);
+client.on('ping', heartbeat);
+client.on('close', function clear() {
+  clearTimeout(this.pingTimeout);
+});
+```
+
+### How to connect via a proxy?
+
+Use a custom `http.Agent` implementation like [https-proxy-agent][] or
+[socks-proxy-agent][].
+
+## Changelog
+
+We're using the GitHub [releases][changelog] for changelog entries.
+
+## License
+
+[MIT](LICENSE)
+
+[changelog]: https://github.com/websockets/ws/releases
+[client-report]: http://websockets.github.io/ws/autobahn/clients/
+[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent
+[node-zlib-bug]: https://github.com/nodejs/node/issues/8871
+[node-zlib-deflaterawdocs]:
+  https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options
+[permessage-deflate]: https://tools.ietf.org/html/rfc7692
+[server-report]: http://websockets.github.io/ws/autobahn/servers/
+[session-parse-example]: ./examples/express-session-parse
+[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent
+[ws-server-options]:
+  https://github.com/websockets/ws/blob/master/doc/ws.md#new-websocketserveroptions-callback
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/browser.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/browser.js
new file mode 100644 (file)
index 0000000..ca4f628
--- /dev/null
@@ -0,0 +1,8 @@
+'use strict';
+
+module.exports = function () {
+  throw new Error(
+    'ws does not work in the browser. Browser clients must use the native ' +
+      'WebSocket object'
+  );
+};
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/index.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/index.js
new file mode 100644 (file)
index 0000000..722c786
--- /dev/null
@@ -0,0 +1,10 @@
+'use strict';
+
+const WebSocket = require('./lib/websocket');
+
+WebSocket.createWebSocketStream = require('./lib/stream');
+WebSocket.Server = require('./lib/websocket-server');
+WebSocket.Receiver = require('./lib/receiver');
+WebSocket.Sender = require('./lib/sender');
+
+module.exports = WebSocket;
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js
new file mode 100644 (file)
index 0000000..6fd84c3
--- /dev/null
@@ -0,0 +1,129 @@
+'use strict';
+
+const { EMPTY_BUFFER } = require('./constants');
+
+/**
+ * Merges an array of buffers into a new buffer.
+ *
+ * @param {Buffer[]} list The array of buffers to concat
+ * @param {Number} totalLength The total length of buffers in the list
+ * @return {Buffer} The resulting buffer
+ * @public
+ */
+function concat(list, totalLength) {
+  if (list.length === 0) return EMPTY_BUFFER;
+  if (list.length === 1) return list[0];
+
+  const target = Buffer.allocUnsafe(totalLength);
+  let offset = 0;
+
+  for (let i = 0; i < list.length; i++) {
+    const buf = list[i];
+    target.set(buf, offset);
+    offset += buf.length;
+  }
+
+  if (offset < totalLength) return target.slice(0, offset);
+
+  return target;
+}
+
+/**
+ * Masks a buffer using the given mask.
+ *
+ * @param {Buffer} source The buffer to mask
+ * @param {Buffer} mask The mask to use
+ * @param {Buffer} output The buffer where to store the result
+ * @param {Number} offset The offset at which to start writing
+ * @param {Number} length The number of bytes to mask.
+ * @public
+ */
+function _mask(source, mask, output, offset, length) {
+  for (let i = 0; i < length; i++) {
+    output[offset + i] = source[i] ^ mask[i & 3];
+  }
+}
+
+/**
+ * Unmasks a buffer using the given mask.
+ *
+ * @param {Buffer} buffer The buffer to unmask
+ * @param {Buffer} mask The mask to use
+ * @public
+ */
+function _unmask(buffer, mask) {
+  // Required until https://github.com/nodejs/node/issues/9006 is resolved.
+  const length = buffer.length;
+  for (let i = 0; i < length; i++) {
+    buffer[i] ^= mask[i & 3];
+  }
+}
+
+/**
+ * Converts a buffer to an `ArrayBuffer`.
+ *
+ * @param {Buffer} buf The buffer to convert
+ * @return {ArrayBuffer} Converted buffer
+ * @public
+ */
+function toArrayBuffer(buf) {
+  if (buf.byteLength === buf.buffer.byteLength) {
+    return buf.buffer;
+  }
+
+  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+}
+
+/**
+ * Converts `data` to a `Buffer`.
+ *
+ * @param {*} data The data to convert
+ * @return {Buffer} The buffer
+ * @throws {TypeError}
+ * @public
+ */
+function toBuffer(data) {
+  toBuffer.readOnly = true;
+
+  if (Buffer.isBuffer(data)) return data;
+
+  let buf;
+
+  if (data instanceof ArrayBuffer) {
+    buf = Buffer.from(data);
+  } else if (ArrayBuffer.isView(data)) {
+    buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
+  } else {
+    buf = Buffer.from(data);
+    toBuffer.readOnly = false;
+  }
+
+  return buf;
+}
+
+try {
+  const bufferUtil = require('bufferutil');
+  const bu = bufferUtil.BufferUtil || bufferUtil;
+
+  module.exports = {
+    concat,
+    mask(source, mask, output, offset, length) {
+      if (length < 48) _mask(source, mask, output, offset, length);
+      else bu.mask(source, mask, output, offset, length);
+    },
+    toArrayBuffer,
+    toBuffer,
+    unmask(buffer, mask) {
+      if (buffer.length < 32) _unmask(buffer, mask);
+      else bu.unmask(buffer, mask);
+    }
+  };
+} catch (e) /* istanbul ignore next */ {
+  module.exports = {
+    concat,
+    mask: _mask,
+    toArrayBuffer,
+    toBuffer,
+    unmask: _unmask
+  };
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/event-target.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/event-target.js
new file mode 100644 (file)
index 0000000..a6fbe72
--- /dev/null
@@ -0,0 +1,184 @@
+'use strict';
+
+/**
+ * Class representing an event.
+ *
+ * @private
+ */
+class Event {
+  /**
+   * Create a new `Event`.
+   *
+   * @param {String} type The name of the event
+   * @param {Object} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(type, target) {
+    this.target = target;
+    this.type = type;
+  }
+}
+
+/**
+ * Class representing a message event.
+ *
+ * @extends Event
+ * @private
+ */
+class MessageEvent extends Event {
+  /**
+   * Create a new `MessageEvent`.
+   *
+   * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data
+   * @param {WebSocket} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(data, target) {
+    super('message', target);
+
+    this.data = data;
+  }
+}
+
+/**
+ * Class representing a close event.
+ *
+ * @extends Event
+ * @private
+ */
+class CloseEvent extends Event {
+  /**
+   * Create a new `CloseEvent`.
+   *
+   * @param {Number} code The status code explaining why the connection is being
+   *     closed
+   * @param {String} reason A human-readable string explaining why the
+   *     connection is closing
+   * @param {WebSocket} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(code, reason, target) {
+    super('close', target);
+
+    this.wasClean = target._closeFrameReceived && target._closeFrameSent;
+    this.reason = reason;
+    this.code = code;
+  }
+}
+
+/**
+ * Class representing an open event.
+ *
+ * @extends Event
+ * @private
+ */
+class OpenEvent extends Event {
+  /**
+   * Create a new `OpenEvent`.
+   *
+   * @param {WebSocket} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(target) {
+    super('open', target);
+  }
+}
+
+/**
+ * Class representing an error event.
+ *
+ * @extends Event
+ * @private
+ */
+class ErrorEvent extends Event {
+  /**
+   * Create a new `ErrorEvent`.
+   *
+   * @param {Object} error The error that generated this event
+   * @param {WebSocket} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(error, target) {
+    super('error', target);
+
+    this.message = error.message;
+    this.error = error;
+  }
+}
+
+/**
+ * This provides methods for emulating the `EventTarget` interface. It's not
+ * meant to be used directly.
+ *
+ * @mixin
+ */
+const EventTarget = {
+  /**
+   * Register an event listener.
+   *
+   * @param {String} type A string representing the event type to listen for
+   * @param {Function} listener The listener to add
+   * @param {Object} [options] An options object specifies characteristics about
+   *     the event listener
+   * @param {Boolean} [options.once=false] A `Boolean`` indicating that the
+   *     listener should be invoked at most once after being added. If `true`,
+   *     the listener would be automatically removed when invoked.
+   * @public
+   */
+  addEventListener(type, listener, options) {
+    if (typeof listener !== 'function') return;
+
+    function onMessage(data) {
+      listener.call(this, new MessageEvent(data, this));
+    }
+
+    function onClose(code, message) {
+      listener.call(this, new CloseEvent(code, message, this));
+    }
+
+    function onError(error) {
+      listener.call(this, new ErrorEvent(error, this));
+    }
+
+    function onOpen() {
+      listener.call(this, new OpenEvent(this));
+    }
+
+    const method = options && options.once ? 'once' : 'on';
+
+    if (type === 'message') {
+      onMessage._listener = listener;
+      this[method](type, onMessage);
+    } else if (type === 'close') {
+      onClose._listener = listener;
+      this[method](type, onClose);
+    } else if (type === 'error') {
+      onError._listener = listener;
+      this[method](type, onError);
+    } else if (type === 'open') {
+      onOpen._listener = listener;
+      this[method](type, onOpen);
+    } else {
+      this[method](type, listener);
+    }
+  },
+
+  /**
+   * Remove an event listener.
+   *
+   * @param {String} type A string representing the event type to remove
+   * @param {Function} listener The listener to remove
+   * @public
+   */
+  removeEventListener(type, listener) {
+    const listeners = this.listeners(type);
+
+    for (let i = 0; i < listeners.length; i++) {
+      if (listeners[i] === listener || listeners[i]._listener === listener) {
+        this.removeListener(type, listeners[i]);
+      }
+    }
+  }
+};
+
+module.exports = EventTarget;
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/extension.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/extension.js
new file mode 100644 (file)
index 0000000..87a4213
--- /dev/null
@@ -0,0 +1,223 @@
+'use strict';
+
+//
+// Allowed token characters:
+//
+// '!', '#', '$', '%', '&', ''', '*', '+', '-',
+// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'
+//
+// tokenChars[32] === 0 // ' '
+// tokenChars[33] === 1 // '!'
+// tokenChars[34] === 0 // '"'
+// ...
+//
+// prettier-ignore
+const tokenChars = [
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
+  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63
+  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127
+];
+
+/**
+ * Adds an offer to the map of extension offers or a parameter to the map of
+ * parameters.
+ *
+ * @param {Object} dest The map of extension offers or parameters
+ * @param {String} name The extension or parameter name
+ * @param {(Object|Boolean|String)} elem The extension parameters or the
+ *     parameter value
+ * @private
+ */
+function push(dest, name, elem) {
+  if (dest[name] === undefined) dest[name] = [elem];
+  else dest[name].push(elem);
+}
+
+/**
+ * Parses the `Sec-WebSocket-Extensions` header into an object.
+ *
+ * @param {String} header The field value of the header
+ * @return {Object} The parsed object
+ * @public
+ */
+function parse(header) {
+  const offers = Object.create(null);
+
+  if (header === undefined || header === '') return offers;
+
+  let params = Object.create(null);
+  let mustUnescape = false;
+  let isEscaping = false;
+  let inQuotes = false;
+  let extensionName;
+  let paramName;
+  let start = -1;
+  let end = -1;
+  let i = 0;
+
+  for (; i < header.length; i++) {
+    const code = header.charCodeAt(i);
+
+    if (extensionName === undefined) {
+      if (end === -1 && tokenChars[code] === 1) {
+        if (start === -1) start = i;
+      } else if (code === 0x20 /* ' ' */ || code === 0x09 /* '\t' */) {
+        if (end === -1 && start !== -1) end = i;
+      } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {
+        if (start === -1) {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+
+        if (end === -1) end = i;
+        const name = header.slice(start, end);
+        if (code === 0x2c) {
+          push(offers, name, params);
+          params = Object.create(null);
+        } else {
+          extensionName = name;
+        }
+
+        start = end = -1;
+      } else {
+        throw new SyntaxError(`Unexpected character at index ${i}`);
+      }
+    } else if (paramName === undefined) {
+      if (end === -1 && tokenChars[code] === 1) {
+        if (start === -1) start = i;
+      } else if (code === 0x20 || code === 0x09) {
+        if (end === -1 && start !== -1) end = i;
+      } else if (code === 0x3b || code === 0x2c) {
+        if (start === -1) {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+
+        if (end === -1) end = i;
+        push(params, header.slice(start, end), true);
+        if (code === 0x2c) {
+          push(offers, extensionName, params);
+          params = Object.create(null);
+          extensionName = undefined;
+        }
+
+        start = end = -1;
+      } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {
+        paramName = header.slice(start, i);
+        start = end = -1;
+      } else {
+        throw new SyntaxError(`Unexpected character at index ${i}`);
+      }
+    } else {
+      //
+      // The value of a quoted-string after unescaping must conform to the
+      // token ABNF, so only token characters are valid.
+      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1
+      //
+      if (isEscaping) {
+        if (tokenChars[code] !== 1) {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+        if (start === -1) start = i;
+        else if (!mustUnescape) mustUnescape = true;
+        isEscaping = false;
+      } else if (inQuotes) {
+        if (tokenChars[code] === 1) {
+          if (start === -1) start = i;
+        } else if (code === 0x22 /* '"' */ && start !== -1) {
+          inQuotes = false;
+          end = i;
+        } else if (code === 0x5c /* '\' */) {
+          isEscaping = true;
+        } else {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {
+        inQuotes = true;
+      } else if (end === -1 && tokenChars[code] === 1) {
+        if (start === -1) start = i;
+      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {
+        if (end === -1) end = i;
+      } else if (code === 0x3b || code === 0x2c) {
+        if (start === -1) {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+
+        if (end === -1) end = i;
+        let value = header.slice(start, end);
+        if (mustUnescape) {
+          value = value.replace(/\\/g, '');
+          mustUnescape = false;
+        }
+        push(params, paramName, value);
+        if (code === 0x2c) {
+          push(offers, extensionName, params);
+          params = Object.create(null);
+          extensionName = undefined;
+        }
+
+        paramName = undefined;
+        start = end = -1;
+      } else {
+        throw new SyntaxError(`Unexpected character at index ${i}`);
+      }
+    }
+  }
+
+  if (start === -1 || inQuotes) {
+    throw new SyntaxError('Unexpected end of input');
+  }
+
+  if (end === -1) end = i;
+  const token = header.slice(start, end);
+  if (extensionName === undefined) {
+    push(offers, token, params);
+  } else {
+    if (paramName === undefined) {
+      push(params, token, true);
+    } else if (mustUnescape) {
+      push(params, paramName, token.replace(/\\/g, ''));
+    } else {
+      push(params, paramName, token);
+    }
+    push(offers, extensionName, params);
+  }
+
+  return offers;
+}
+
+/**
+ * Builds the `Sec-WebSocket-Extensions` header field value.
+ *
+ * @param {Object} extensions The map of extensions and parameters to format
+ * @return {String} A string representing the given object
+ * @public
+ */
+function format(extensions) {
+  return Object.keys(extensions)
+    .map((extension) => {
+      let configurations = extensions[extension];
+      if (!Array.isArray(configurations)) configurations = [configurations];
+      return configurations
+        .map((params) => {
+          return [extension]
+            .concat(
+              Object.keys(params).map((k) => {
+                let values = params[k];
+                if (!Array.isArray(values)) values = [values];
+                return values
+                  .map((v) => (v === true ? k : `${k}=${v}`))
+                  .join('; ');
+              })
+            )
+            .join('; ');
+        })
+        .join(', ');
+    })
+    .join(', ');
+}
+
+module.exports = { format, parse };
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/limiter.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/limiter.js
new file mode 100644 (file)
index 0000000..3fd3578
--- /dev/null
@@ -0,0 +1,55 @@
+'use strict';
+
+const kDone = Symbol('kDone');
+const kRun = Symbol('kRun');
+
+/**
+ * A very simple job queue with adjustable concurrency. Adapted from
+ * https://github.com/STRML/async-limiter
+ */
+class Limiter {
+  /**
+   * Creates a new `Limiter`.
+   *
+   * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed
+   *     to run concurrently
+   */
+  constructor(concurrency) {
+    this[kDone] = () => {
+      this.pending--;
+      this[kRun]();
+    };
+    this.concurrency = concurrency || Infinity;
+    this.jobs = [];
+    this.pending = 0;
+  }
+
+  /**
+   * Adds a job to the queue.
+   *
+   * @param {Function} job The job to run
+   * @public
+   */
+  add(job) {
+    this.jobs.push(job);
+    this[kRun]();
+  }
+
+  /**
+   * Removes a job from the queue and runs it if possible.
+   *
+   * @private
+   */
+  [kRun]() {
+    if (this.pending === this.concurrency) return;
+
+    if (this.jobs.length) {
+      const job = this.jobs.shift();
+
+      this.pending++;
+      job(this[kDone]);
+    }
+  }
+}
+
+module.exports = Limiter;
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js
new file mode 100644 (file)
index 0000000..a8974b9
--- /dev/null
@@ -0,0 +1,517 @@
+'use strict';
+
+const zlib = require('zlib');
+
+const bufferUtil = require('./buffer-util');
+const Limiter = require('./limiter');
+const { kStatusCode, NOOP } = require('./constants');
+
+const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);
+const kPerMessageDeflate = Symbol('permessage-deflate');
+const kTotalLength = Symbol('total-length');
+const kCallback = Symbol('callback');
+const kBuffers = Symbol('buffers');
+const kError = Symbol('error');
+
+//
+// We limit zlib concurrency, which prevents severe memory fragmentation
+// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913
+// and https://github.com/websockets/ws/issues/1202
+//
+// Intentionally global; it's the global thread pool that's an issue.
+//
+let zlibLimiter;
+
+/**
+ * permessage-deflate implementation.
+ */
+class PerMessageDeflate {
+  /**
+   * Creates a PerMessageDeflate instance.
+   *
+   * @param {Object} [options] Configuration options
+   * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept
+   *     disabling of server context takeover
+   * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/
+   *     acknowledge disabling of client context takeover
+   * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the
+   *     use of a custom server window size
+   * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support
+   *     for, or request, a custom client window size
+   * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on
+   *     deflate
+   * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on
+   *     inflate
+   * @param {Number} [options.threshold=1024] Size (in bytes) below which
+   *     messages should not be compressed
+   * @param {Number} [options.concurrencyLimit=10] The number of concurrent
+   *     calls to zlib
+   * @param {Boolean} [isServer=false] Create the instance in either server or
+   *     client mode
+   * @param {Number} [maxPayload=0] The maximum allowed message length
+   */
+  constructor(options, isServer, maxPayload) {
+    this._maxPayload = maxPayload | 0;
+    this._options = options || {};
+    this._threshold =
+      this._options.threshold !== undefined ? this._options.threshold : 1024;
+    this._isServer = !!isServer;
+    this._deflate = null;
+    this._inflate = null;
+
+    this.params = null;
+
+    if (!zlibLimiter) {
+      const concurrency =
+        this._options.concurrencyLimit !== undefined
+          ? this._options.concurrencyLimit
+          : 10;
+      zlibLimiter = new Limiter(concurrency);
+    }
+  }
+
+  /**
+   * @type {String}
+   */
+  static get extensionName() {
+    return 'permessage-deflate';
+  }
+
+  /**
+   * Create an extension negotiation offer.
+   *
+   * @return {Object} Extension parameters
+   * @public
+   */
+  offer() {
+    const params = {};
+
+    if (this._options.serverNoContextTakeover) {
+      params.server_no_context_takeover = true;
+    }
+    if (this._options.clientNoContextTakeover) {
+      params.client_no_context_takeover = true;
+    }
+    if (this._options.serverMaxWindowBits) {
+      params.server_max_window_bits = this._options.serverMaxWindowBits;
+    }
+    if (this._options.clientMaxWindowBits) {
+      params.client_max_window_bits = this._options.clientMaxWindowBits;
+    } else if (this._options.clientMaxWindowBits == null) {
+      params.client_max_window_bits = true;
+    }
+
+    return params;
+  }
+
+  /**
+   * Accept an extension negotiation offer/response.
+   *
+   * @param {Array} configurations The extension negotiation offers/reponse
+   * @return {Object} Accepted configuration
+   * @public
+   */
+  accept(configurations) {
+    configurations = this.normalizeParams(configurations);
+
+    this.params = this._isServer
+      ? this.acceptAsServer(configurations)
+      : this.acceptAsClient(configurations);
+
+    return this.params;
+  }
+
+  /**
+   * Releases all resources used by the extension.
+   *
+   * @public
+   */
+  cleanup() {
+    if (this._inflate) {
+      this._inflate.close();
+      this._inflate = null;
+    }
+
+    if (this._deflate) {
+      const callback = this._deflate[kCallback];
+
+      this._deflate.close();
+      this._deflate = null;
+
+      if (callback) {
+        callback(
+          new Error(
+            'The deflate stream was closed while data was being processed'
+          )
+        );
+      }
+    }
+  }
+
+  /**
+   *  Accept an extension negotiation offer.
+   *
+   * @param {Array} offers The extension negotiation offers
+   * @return {Object} Accepted configuration
+   * @private
+   */
+  acceptAsServer(offers) {
+    const opts = this._options;
+    const accepted = offers.find((params) => {
+      if (
+        (opts.serverNoContextTakeover === false &&
+          params.server_no_context_takeover) ||
+        (params.server_max_window_bits &&
+          (opts.serverMaxWindowBits === false ||
+            (typeof opts.serverMaxWindowBits === 'number' &&
+              opts.serverMaxWindowBits > params.server_max_window_bits))) ||
+        (typeof opts.clientMaxWindowBits === 'number' &&
+          !params.client_max_window_bits)
+      ) {
+        return false;
+      }
+
+      return true;
+    });
+
+    if (!accepted) {
+      throw new Error('None of the extension offers can be accepted');
+    }
+
+    if (opts.serverNoContextTakeover) {
+      accepted.server_no_context_takeover = true;
+    }
+    if (opts.clientNoContextTakeover) {
+      accepted.client_no_context_takeover = true;
+    }
+    if (typeof opts.serverMaxWindowBits === 'number') {
+      accepted.server_max_window_bits = opts.serverMaxWindowBits;
+    }
+    if (typeof opts.clientMaxWindowBits === 'number') {
+      accepted.client_max_window_bits = opts.clientMaxWindowBits;
+    } else if (
+      accepted.client_max_window_bits === true ||
+      opts.clientMaxWindowBits === false
+    ) {
+      delete accepted.client_max_window_bits;
+    }
+
+    return accepted;
+  }
+
+  /**
+   * Accept the extension negotiation response.
+   *
+   * @param {Array} response The extension negotiation response
+   * @return {Object} Accepted configuration
+   * @private
+   */
+  acceptAsClient(response) {
+    const params = response[0];
+
+    if (
+      this._options.clientNoContextTakeover === false &&
+      params.client_no_context_takeover
+    ) {
+      throw new Error('Unexpected parameter "client_no_context_takeover"');
+    }
+
+    if (!params.client_max_window_bits) {
+      if (typeof this._options.clientMaxWindowBits === 'number') {
+        params.client_max_window_bits = this._options.clientMaxWindowBits;
+      }
+    } else if (
+      this._options.clientMaxWindowBits === false ||
+      (typeof this._options.clientMaxWindowBits === 'number' &&
+        params.client_max_window_bits > this._options.clientMaxWindowBits)
+    ) {
+      throw new Error(
+        'Unexpected or invalid parameter "client_max_window_bits"'
+      );
+    }
+
+    return params;
+  }
+
+  /**
+   * Normalize parameters.
+   *
+   * @param {Array} configurations The extension negotiation offers/reponse
+   * @return {Array} The offers/response with normalized parameters
+   * @private
+   */
+  normalizeParams(configurations) {
+    configurations.forEach((params) => {
+      Object.keys(params).forEach((key) => {
+        let value = params[key];
+
+        if (value.length > 1) {
+          throw new Error(`Parameter "${key}" must have only a single value`);
+        }
+
+        value = value[0];
+
+        if (key === 'client_max_window_bits') {
+          if (value !== true) {
+            const num = +value;
+            if (!Number.isInteger(num) || num < 8 || num > 15) {
+              throw new TypeError(
+                `Invalid value for parameter "${key}": ${value}`
+              );
+            }
+            value = num;
+          } else if (!this._isServer) {
+            throw new TypeError(
+              `Invalid value for parameter "${key}": ${value}`
+            );
+          }
+        } else if (key === 'server_max_window_bits') {
+          const num = +value;
+          if (!Number.isInteger(num) || num < 8 || num > 15) {
+            throw new TypeError(
+              `Invalid value for parameter "${key}": ${value}`
+            );
+          }
+          value = num;
+        } else if (
+          key === 'client_no_context_takeover' ||
+          key === 'server_no_context_takeover'
+        ) {
+          if (value !== true) {
+            throw new TypeError(
+              `Invalid value for parameter "${key}": ${value}`
+            );
+          }
+        } else {
+          throw new Error(`Unknown parameter "${key}"`);
+        }
+
+        params[key] = value;
+      });
+    });
+
+    return configurations;
+  }
+
+  /**
+   * Decompress data. Concurrency limited.
+   *
+   * @param {Buffer} data Compressed data
+   * @param {Boolean} fin Specifies whether or not this is the last fragment
+   * @param {Function} callback Callback
+   * @public
+   */
+  decompress(data, fin, callback) {
+    zlibLimiter.add((done) => {
+      this._decompress(data, fin, (err, result) => {
+        done();
+        callback(err, result);
+      });
+    });
+  }
+
+  /**
+   * Compress data. Concurrency limited.
+   *
+   * @param {Buffer} data Data to compress
+   * @param {Boolean} fin Specifies whether or not this is the last fragment
+   * @param {Function} callback Callback
+   * @public
+   */
+  compress(data, fin, callback) {
+    zlibLimiter.add((done) => {
+      this._compress(data, fin, (err, result) => {
+        done();
+        callback(err, result);
+      });
+    });
+  }
+
+  /**
+   * Decompress data.
+   *
+   * @param {Buffer} data Compressed data
+   * @param {Boolean} fin Specifies whether or not this is the last fragment
+   * @param {Function} callback Callback
+   * @private
+   */
+  _decompress(data, fin, callback) {
+    const endpoint = this._isServer ? 'client' : 'server';
+
+    if (!this._inflate) {
+      const key = `${endpoint}_max_window_bits`;
+      const windowBits =
+        typeof this.params[key] !== 'number'
+          ? zlib.Z_DEFAULT_WINDOWBITS
+          : this.params[key];
+
+      this._inflate = zlib.createInflateRaw({
+        ...this._options.zlibInflateOptions,
+        windowBits
+      });
+      this._inflate[kPerMessageDeflate] = this;
+      this._inflate[kTotalLength] = 0;
+      this._inflate[kBuffers] = [];
+      this._inflate.on('error', inflateOnError);
+      this._inflate.on('data', inflateOnData);
+    }
+
+    this._inflate[kCallback] = callback;
+
+    this._inflate.write(data);
+    if (fin) this._inflate.write(TRAILER);
+
+    this._inflate.flush(() => {
+      const err = this._inflate[kError];
+
+      if (err) {
+        this._inflate.close();
+        this._inflate = null;
+        callback(err);
+        return;
+      }
+
+      const data = bufferUtil.concat(
+        this._inflate[kBuffers],
+        this._inflate[kTotalLength]
+      );
+
+      if (this._inflate._readableState.endEmitted) {
+        this._inflate.close();
+        this._inflate = null;
+      } else {
+        this._inflate[kTotalLength] = 0;
+        this._inflate[kBuffers] = [];
+
+        if (fin && this.params[`${endpoint}_no_context_takeover`]) {
+          this._inflate.reset();
+        }
+      }
+
+      callback(null, data);
+    });
+  }
+
+  /**
+   * Compress data.
+   *
+   * @param {Buffer} data Data to compress
+   * @param {Boolean} fin Specifies whether or not this is the last fragment
+   * @param {Function} callback Callback
+   * @private
+   */
+  _compress(data, fin, callback) {
+    const endpoint = this._isServer ? 'server' : 'client';
+
+    if (!this._deflate) {
+      const key = `${endpoint}_max_window_bits`;
+      const windowBits =
+        typeof this.params[key] !== 'number'
+          ? zlib.Z_DEFAULT_WINDOWBITS
+          : this.params[key];
+
+      this._deflate = zlib.createDeflateRaw({
+        ...this._options.zlibDeflateOptions,
+        windowBits
+      });
+
+      this._deflate[kTotalLength] = 0;
+      this._deflate[kBuffers] = [];
+
+      //
+      // An `'error'` event is emitted, only on Node.js < 10.0.0, if the
+      // `zlib.DeflateRaw` instance is closed while data is being processed.
+      // This can happen if `PerMessageDeflate#cleanup()` is called at the wrong
+      // time due to an abnormal WebSocket closure.
+      //
+      this._deflate.on('error', NOOP);
+      this._deflate.on('data', deflateOnData);
+    }
+
+    this._deflate[kCallback] = callback;
+
+    this._deflate.write(data);
+    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {
+      if (!this._deflate) {
+        //
+        // The deflate stream was closed while data was being processed.
+        //
+        return;
+      }
+
+      let data = bufferUtil.concat(
+        this._deflate[kBuffers],
+        this._deflate[kTotalLength]
+      );
+
+      if (fin) data = data.slice(0, data.length - 4);
+
+      //
+      // Ensure that the callback will not be called again in
+      // `PerMessageDeflate#cleanup()`.
+      //
+      this._deflate[kCallback] = null;
+
+      this._deflate[kTotalLength] = 0;
+      this._deflate[kBuffers] = [];
+
+      if (fin && this.params[`${endpoint}_no_context_takeover`]) {
+        this._deflate.reset();
+      }
+
+      callback(null, data);
+    });
+  }
+}
+
+module.exports = PerMessageDeflate;
+
+/**
+ * The listener of the `zlib.DeflateRaw` stream `'data'` event.
+ *
+ * @param {Buffer} chunk A chunk of data
+ * @private
+ */
+function deflateOnData(chunk) {
+  this[kBuffers].push(chunk);
+  this[kTotalLength] += chunk.length;
+}
+
+/**
+ * The listener of the `zlib.InflateRaw` stream `'data'` event.
+ *
+ * @param {Buffer} chunk A chunk of data
+ * @private
+ */
+function inflateOnData(chunk) {
+  this[kTotalLength] += chunk.length;
+
+  if (
+    this[kPerMessageDeflate]._maxPayload < 1 ||
+    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload
+  ) {
+    this[kBuffers].push(chunk);
+    return;
+  }
+
+  this[kError] = new RangeError('Max payload size exceeded');
+  this[kError][kStatusCode] = 1009;
+  this.removeListener('data', inflateOnData);
+  this.reset();
+}
+
+/**
+ * The listener of the `zlib.InflateRaw` stream `'error'` event.
+ *
+ * @param {Error} err The emitted error
+ * @private
+ */
+function inflateOnError(err) {
+  //
+  // There is no need to call `Zlib#close()` as the handle is automatically
+  // closed when an error is emitted.
+  //
+  this[kPerMessageDeflate]._inflate = null;
+  err[kStatusCode] = 1007;
+  this[kCallback](err);
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/receiver.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/receiver.js
new file mode 100644 (file)
index 0000000..65a5ab4
--- /dev/null
@@ -0,0 +1,507 @@
+'use strict';
+
+const { Writable } = require('stream');
+
+const PerMessageDeflate = require('./permessage-deflate');
+const {
+  BINARY_TYPES,
+  EMPTY_BUFFER,
+  kStatusCode,
+  kWebSocket
+} = require('./constants');
+const { concat, toArrayBuffer, unmask } = require('./buffer-util');
+const { isValidStatusCode, isValidUTF8 } = require('./validation');
+
+const GET_INFO = 0;
+const GET_PAYLOAD_LENGTH_16 = 1;
+const GET_PAYLOAD_LENGTH_64 = 2;
+const GET_MASK = 3;
+const GET_DATA = 4;
+const INFLATING = 5;
+
+/**
+ * HyBi Receiver implementation.
+ *
+ * @extends stream.Writable
+ */
+class Receiver extends Writable {
+  /**
+   * Creates a Receiver instance.
+   *
+   * @param {String} [binaryType=nodebuffer] The type for binary data
+   * @param {Object} [extensions] An object containing the negotiated extensions
+   * @param {Boolean} [isServer=false] Specifies whether to operate in client or
+   *     server mode
+   * @param {Number} [maxPayload=0] The maximum allowed message length
+   */
+  constructor(binaryType, extensions, isServer, maxPayload) {
+    super();
+
+    this._binaryType = binaryType || BINARY_TYPES[0];
+    this[kWebSocket] = undefined;
+    this._extensions = extensions || {};
+    this._isServer = !!isServer;
+    this._maxPayload = maxPayload | 0;
+
+    this._bufferedBytes = 0;
+    this._buffers = [];
+
+    this._compressed = false;
+    this._payloadLength = 0;
+    this._mask = undefined;
+    this._fragmented = 0;
+    this._masked = false;
+    this._fin = false;
+    this._opcode = 0;
+
+    this._totalPayloadLength = 0;
+    this._messageLength = 0;
+    this._fragments = [];
+
+    this._state = GET_INFO;
+    this._loop = false;
+  }
+
+  /**
+   * Implements `Writable.prototype._write()`.
+   *
+   * @param {Buffer} chunk The chunk of data to write
+   * @param {String} encoding The character encoding of `chunk`
+   * @param {Function} cb Callback
+   * @private
+   */
+  _write(chunk, encoding, cb) {
+    if (this._opcode === 0x08 && this._state == GET_INFO) return cb();
+
+    this._bufferedBytes += chunk.length;
+    this._buffers.push(chunk);
+    this.startLoop(cb);
+  }
+
+  /**
+   * Consumes `n` bytes from the buffered data.
+   *
+   * @param {Number} n The number of bytes to consume
+   * @return {Buffer} The consumed bytes
+   * @private
+   */
+  consume(n) {
+    this._bufferedBytes -= n;
+
+    if (n === this._buffers[0].length) return this._buffers.shift();
+
+    if (n < this._buffers[0].length) {
+      const buf = this._buffers[0];
+      this._buffers[0] = buf.slice(n);
+      return buf.slice(0, n);
+    }
+
+    const dst = Buffer.allocUnsafe(n);
+
+    do {
+      const buf = this._buffers[0];
+      const offset = dst.length - n;
+
+      if (n >= buf.length) {
+        dst.set(this._buffers.shift(), offset);
+      } else {
+        dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);
+        this._buffers[0] = buf.slice(n);
+      }
+
+      n -= buf.length;
+    } while (n > 0);
+
+    return dst;
+  }
+
+  /**
+   * Starts the parsing loop.
+   *
+   * @param {Function} cb Callback
+   * @private
+   */
+  startLoop(cb) {
+    let err;
+    this._loop = true;
+
+    do {
+      switch (this._state) {
+        case GET_INFO:
+          err = this.getInfo();
+          break;
+        case GET_PAYLOAD_LENGTH_16:
+          err = this.getPayloadLength16();
+          break;
+        case GET_PAYLOAD_LENGTH_64:
+          err = this.getPayloadLength64();
+          break;
+        case GET_MASK:
+          this.getMask();
+          break;
+        case GET_DATA:
+          err = this.getData(cb);
+          break;
+        default:
+          // `INFLATING`
+          this._loop = false;
+          return;
+      }
+    } while (this._loop);
+
+    cb(err);
+  }
+
+  /**
+   * Reads the first two bytes of a frame.
+   *
+   * @return {(RangeError|undefined)} A possible error
+   * @private
+   */
+  getInfo() {
+    if (this._bufferedBytes < 2) {
+      this._loop = false;
+      return;
+    }
+
+    const buf = this.consume(2);
+
+    if ((buf[0] & 0x30) !== 0x00) {
+      this._loop = false;
+      return error(RangeError, 'RSV2 and RSV3 must be clear', true, 1002);
+    }
+
+    const compressed = (buf[0] & 0x40) === 0x40;
+
+    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {
+      this._loop = false;
+      return error(RangeError, 'RSV1 must be clear', true, 1002);
+    }
+
+    this._fin = (buf[0] & 0x80) === 0x80;
+    this._opcode = buf[0] & 0x0f;
+    this._payloadLength = buf[1] & 0x7f;
+
+    if (this._opcode === 0x00) {
+      if (compressed) {
+        this._loop = false;
+        return error(RangeError, 'RSV1 must be clear', true, 1002);
+      }
+
+      if (!this._fragmented) {
+        this._loop = false;
+        return error(RangeError, 'invalid opcode 0', true, 1002);
+      }
+
+      this._opcode = this._fragmented;
+    } else if (this._opcode === 0x01 || this._opcode === 0x02) {
+      if (this._fragmented) {
+        this._loop = false;
+        return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
+      }
+
+      this._compressed = compressed;
+    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {
+      if (!this._fin) {
+        this._loop = false;
+        return error(RangeError, 'FIN must be set', true, 1002);
+      }
+
+      if (compressed) {
+        this._loop = false;
+        return error(RangeError, 'RSV1 must be clear', true, 1002);
+      }
+
+      if (this._payloadLength > 0x7d) {
+        this._loop = false;
+        return error(
+          RangeError,
+          `invalid payload length ${this._payloadLength}`,
+          true,
+          1002
+        );
+      }
+    } else {
+      this._loop = false;
+      return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
+    }
+
+    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;
+    this._masked = (buf[1] & 0x80) === 0x80;
+
+    if (this._isServer) {
+      if (!this._masked) {
+        this._loop = false;
+        return error(RangeError, 'MASK must be set', true, 1002);
+      }
+    } else if (this._masked) {
+      this._loop = false;
+      return error(RangeError, 'MASK must be clear', true, 1002);
+    }
+
+    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;
+    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;
+    else return this.haveLength();
+  }
+
+  /**
+   * Gets extended payload length (7+16).
+   *
+   * @return {(RangeError|undefined)} A possible error
+   * @private
+   */
+  getPayloadLength16() {
+    if (this._bufferedBytes < 2) {
+      this._loop = false;
+      return;
+    }
+
+    this._payloadLength = this.consume(2).readUInt16BE(0);
+    return this.haveLength();
+  }
+
+  /**
+   * Gets extended payload length (7+64).
+   *
+   * @return {(RangeError|undefined)} A possible error
+   * @private
+   */
+  getPayloadLength64() {
+    if (this._bufferedBytes < 8) {
+      this._loop = false;
+      return;
+    }
+
+    const buf = this.consume(8);
+    const num = buf.readUInt32BE(0);
+
+    //
+    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned
+    // if payload length is greater than this number.
+    //
+    if (num > Math.pow(2, 53 - 32) - 1) {
+      this._loop = false;
+      return error(
+        RangeError,
+        'Unsupported WebSocket frame: payload length > 2^53 - 1',
+        false,
+        1009
+      );
+    }
+
+    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);
+    return this.haveLength();
+  }
+
+  /**
+   * Payload length has been read.
+   *
+   * @return {(RangeError|undefined)} A possible error
+   * @private
+   */
+  haveLength() {
+    if (this._payloadLength && this._opcode < 0x08) {
+      this._totalPayloadLength += this._payloadLength;
+      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {
+        this._loop = false;
+        return error(RangeError, 'Max payload size exceeded', false, 1009);
+      }
+    }
+
+    if (this._masked) this._state = GET_MASK;
+    else this._state = GET_DATA;
+  }
+
+  /**
+   * Reads mask bytes.
+   *
+   * @private
+   */
+  getMask() {
+    if (this._bufferedBytes < 4) {
+      this._loop = false;
+      return;
+    }
+
+    this._mask = this.consume(4);
+    this._state = GET_DATA;
+  }
+
+  /**
+   * Reads data bytes.
+   *
+   * @param {Function} cb Callback
+   * @return {(Error|RangeError|undefined)} A possible error
+   * @private
+   */
+  getData(cb) {
+    let data = EMPTY_BUFFER;
+
+    if (this._payloadLength) {
+      if (this._bufferedBytes < this._payloadLength) {
+        this._loop = false;
+        return;
+      }
+
+      data = this.consume(this._payloadLength);
+      if (this._masked) unmask(data, this._mask);
+    }
+
+    if (this._opcode > 0x07) return this.controlMessage(data);
+
+    if (this._compressed) {
+      this._state = INFLATING;
+      this.decompress(data, cb);
+      return;
+    }
+
+    if (data.length) {
+      //
+      // This message is not compressed so its lenght is the sum of the payload
+      // length of all fragments.
+      //
+      this._messageLength = this._totalPayloadLength;
+      this._fragments.push(data);
+    }
+
+    return this.dataMessage();
+  }
+
+  /**
+   * Decompresses data.
+   *
+   * @param {Buffer} data Compressed data
+   * @param {Function} cb Callback
+   * @private
+   */
+  decompress(data, cb) {
+    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
+
+    perMessageDeflate.decompress(data, this._fin, (err, buf) => {
+      if (err) return cb(err);
+
+      if (buf.length) {
+        this._messageLength += buf.length;
+        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {
+          return cb(
+            error(RangeError, 'Max payload size exceeded', false, 1009)
+          );
+        }
+
+        this._fragments.push(buf);
+      }
+
+      const er = this.dataMessage();
+      if (er) return cb(er);
+
+      this.startLoop(cb);
+    });
+  }
+
+  /**
+   * Handles a data message.
+   *
+   * @return {(Error|undefined)} A possible error
+   * @private
+   */
+  dataMessage() {
+    if (this._fin) {
+      const messageLength = this._messageLength;
+      const fragments = this._fragments;
+
+      this._totalPayloadLength = 0;
+      this._messageLength = 0;
+      this._fragmented = 0;
+      this._fragments = [];
+
+      if (this._opcode === 2) {
+        let data;
+
+        if (this._binaryType === 'nodebuffer') {
+          data = concat(fragments, messageLength);
+        } else if (this._binaryType === 'arraybuffer') {
+          data = toArrayBuffer(concat(fragments, messageLength));
+        } else {
+          data = fragments;
+        }
+
+        this.emit('message', data);
+      } else {
+        const buf = concat(fragments, messageLength);
+
+        if (!isValidUTF8(buf)) {
+          this._loop = false;
+          return error(Error, 'invalid UTF-8 sequence', true, 1007);
+        }
+
+        this.emit('message', buf.toString());
+      }
+    }
+
+    this._state = GET_INFO;
+  }
+
+  /**
+   * Handles a control message.
+   *
+   * @param {Buffer} data Data to handle
+   * @return {(Error|RangeError|undefined)} A possible error
+   * @private
+   */
+  controlMessage(data) {
+    if (this._opcode === 0x08) {
+      this._loop = false;
+
+      if (data.length === 0) {
+        this.emit('conclude', 1005, '');
+        this.end();
+      } else if (data.length === 1) {
+        return error(RangeError, 'invalid payload length 1', true, 1002);
+      } else {
+        const code = data.readUInt16BE(0);
+
+        if (!isValidStatusCode(code)) {
+          return error(RangeError, `invalid status code ${code}`, true, 1002);
+        }
+
+        const buf = data.slice(2);
+
+        if (!isValidUTF8(buf)) {
+          return error(Error, 'invalid UTF-8 sequence', true, 1007);
+        }
+
+        this.emit('conclude', code, buf.toString());
+        this.end();
+      }
+    } else if (this._opcode === 0x09) {
+      this.emit('ping', data);
+    } else {
+      this.emit('pong', data);
+    }
+
+    this._state = GET_INFO;
+  }
+}
+
+module.exports = Receiver;
+
+/**
+ * Builds an error object.
+ *
+ * @param {(Error|RangeError)} ErrorCtor The error constructor
+ * @param {String} message The error message
+ * @param {Boolean} prefix Specifies whether or not to add a default prefix to
+ *     `message`
+ * @param {Number} statusCode The status code
+ * @return {(Error|RangeError)} The error
+ * @private
+ */
+function error(ErrorCtor, message, prefix, statusCode) {
+  const err = new ErrorCtor(
+    prefix ? `Invalid WebSocket frame: ${message}` : message
+  );
+
+  Error.captureStackTrace(err, error);
+  err[kStatusCode] = statusCode;
+  return err;
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/sender.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/sender.js
new file mode 100644 (file)
index 0000000..ad71e19
--- /dev/null
@@ -0,0 +1,405 @@
+'use strict';
+
+const { randomFillSync } = require('crypto');
+
+const PerMessageDeflate = require('./permessage-deflate');
+const { EMPTY_BUFFER } = require('./constants');
+const { isValidStatusCode } = require('./validation');
+const { mask: applyMask, toBuffer } = require('./buffer-util');
+
+const mask = Buffer.alloc(4);
+
+/**
+ * HyBi Sender implementation.
+ */
+class Sender {
+  /**
+   * Creates a Sender instance.
+   *
+   * @param {net.Socket} socket The connection socket
+   * @param {Object} [extensions] An object containing the negotiated extensions
+   */
+  constructor(socket, extensions) {
+    this._extensions = extensions || {};
+    this._socket = socket;
+
+    this._firstFragment = true;
+    this._compress = false;
+
+    this._bufferedBytes = 0;
+    this._deflating = false;
+    this._queue = [];
+  }
+
+  /**
+   * Frames a piece of data according to the HyBi WebSocket protocol.
+   *
+   * @param {Buffer} data The data to frame
+   * @param {Object} options Options object
+   * @param {Number} options.opcode The opcode
+   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be
+   *     modified
+   * @param {Boolean} [options.fin=false] Specifies whether or not to set the
+   *     FIN bit
+   * @param {Boolean} [options.mask=false] Specifies whether or not to mask
+   *     `data`
+   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the
+   *     RSV1 bit
+   * @return {Buffer[]} The framed data as a list of `Buffer` instances
+   * @public
+   */
+  static frame(data, options) {
+    const merge = options.mask && options.readOnly;
+    let offset = options.mask ? 6 : 2;
+    let payloadLength = data.length;
+
+    if (data.length >= 65536) {
+      offset += 8;
+      payloadLength = 127;
+    } else if (data.length > 125) {
+      offset += 2;
+      payloadLength = 126;
+    }
+
+    const target = Buffer.allocUnsafe(merge ? data.length + offset : offset);
+
+    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;
+    if (options.rsv1) target[0] |= 0x40;
+
+    target[1] = payloadLength;
+
+    if (payloadLength === 126) {
+      target.writeUInt16BE(data.length, 2);
+    } else if (payloadLength === 127) {
+      target.writeUInt32BE(0, 2);
+      target.writeUInt32BE(data.length, 6);
+    }
+
+    if (!options.mask) return [target, data];
+
+    randomFillSync(mask, 0, 4);
+
+    target[1] |= 0x80;
+    target[offset - 4] = mask[0];
+    target[offset - 3] = mask[1];
+    target[offset - 2] = mask[2];
+    target[offset - 1] = mask[3];
+
+    if (merge) {
+      applyMask(data, mask, target, offset, data.length);
+      return [target];
+    }
+
+    applyMask(data, mask, data, 0, data.length);
+    return [target, data];
+  }
+
+  /**
+   * Sends a close message to the other peer.
+   *
+   * @param {Number} [code] The status code component of the body
+   * @param {String} [data] The message component of the body
+   * @param {Boolean} [mask=false] Specifies whether or not to mask the message
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  close(code, data, mask, cb) {
+    let buf;
+
+    if (code === undefined) {
+      buf = EMPTY_BUFFER;
+    } else if (typeof code !== 'number' || !isValidStatusCode(code)) {
+      throw new TypeError('First argument must be a valid error code number');
+    } else if (data === undefined || data === '') {
+      buf = Buffer.allocUnsafe(2);
+      buf.writeUInt16BE(code, 0);
+    } else {
+      const length = Buffer.byteLength(data);
+
+      if (length > 123) {
+        throw new RangeError('The message must not be greater than 123 bytes');
+      }
+
+      buf = Buffer.allocUnsafe(2 + length);
+      buf.writeUInt16BE(code, 0);
+      buf.write(data, 2);
+    }
+
+    if (this._deflating) {
+      this.enqueue([this.doClose, buf, mask, cb]);
+    } else {
+      this.doClose(buf, mask, cb);
+    }
+  }
+
+  /**
+   * Frames and sends a close message.
+   *
+   * @param {Buffer} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  doClose(data, mask, cb) {
+    this.sendFrame(
+      Sender.frame(data, {
+        fin: true,
+        rsv1: false,
+        opcode: 0x08,
+        mask,
+        readOnly: false
+      }),
+      cb
+    );
+  }
+
+  /**
+   * Sends a ping message to the other peer.
+   *
+   * @param {*} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  ping(data, mask, cb) {
+    const buf = toBuffer(data);
+
+    if (buf.length > 125) {
+      throw new RangeError('The data size must not be greater than 125 bytes');
+    }
+
+    if (this._deflating) {
+      this.enqueue([this.doPing, buf, mask, toBuffer.readOnly, cb]);
+    } else {
+      this.doPing(buf, mask, toBuffer.readOnly, cb);
+    }
+  }
+
+  /**
+   * Frames and sends a ping message.
+   *
+   * @param {Buffer} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  doPing(data, mask, readOnly, cb) {
+    this.sendFrame(
+      Sender.frame(data, {
+        fin: true,
+        rsv1: false,
+        opcode: 0x09,
+        mask,
+        readOnly
+      }),
+      cb
+    );
+  }
+
+  /**
+   * Sends a pong message to the other peer.
+   *
+   * @param {*} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  pong(data, mask, cb) {
+    const buf = toBuffer(data);
+
+    if (buf.length > 125) {
+      throw new RangeError('The data size must not be greater than 125 bytes');
+    }
+
+    if (this._deflating) {
+      this.enqueue([this.doPong, buf, mask, toBuffer.readOnly, cb]);
+    } else {
+      this.doPong(buf, mask, toBuffer.readOnly, cb);
+    }
+  }
+
+  /**
+   * Frames and sends a pong message.
+   *
+   * @param {Buffer} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  doPong(data, mask, readOnly, cb) {
+    this.sendFrame(
+      Sender.frame(data, {
+        fin: true,
+        rsv1: false,
+        opcode: 0x0a,
+        mask,
+        readOnly
+      }),
+      cb
+    );
+  }
+
+  /**
+   * Sends a data message to the other peer.
+   *
+   * @param {*} data The message to send
+   * @param {Object} options Options object
+   * @param {Boolean} [options.compress=false] Specifies whether or not to
+   *     compress `data`
+   * @param {Boolean} [options.binary=false] Specifies whether `data` is binary
+   *     or text
+   * @param {Boolean} [options.fin=false] Specifies whether the fragment is the
+   *     last one
+   * @param {Boolean} [options.mask=false] Specifies whether or not to mask
+   *     `data`
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  send(data, options, cb) {
+    const buf = toBuffer(data);
+    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
+    let opcode = options.binary ? 2 : 1;
+    let rsv1 = options.compress;
+
+    if (this._firstFragment) {
+      this._firstFragment = false;
+      if (rsv1 && perMessageDeflate) {
+        rsv1 = buf.length >= perMessageDeflate._threshold;
+      }
+      this._compress = rsv1;
+    } else {
+      rsv1 = false;
+      opcode = 0;
+    }
+
+    if (options.fin) this._firstFragment = true;
+
+    if (perMessageDeflate) {
+      const opts = {
+        fin: options.fin,
+        rsv1,
+        opcode,
+        mask: options.mask,
+        readOnly: toBuffer.readOnly
+      };
+
+      if (this._deflating) {
+        this.enqueue([this.dispatch, buf, this._compress, opts, cb]);
+      } else {
+        this.dispatch(buf, this._compress, opts, cb);
+      }
+    } else {
+      this.sendFrame(
+        Sender.frame(buf, {
+          fin: options.fin,
+          rsv1: false,
+          opcode,
+          mask: options.mask,
+          readOnly: toBuffer.readOnly
+        }),
+        cb
+      );
+    }
+  }
+
+  /**
+   * Dispatches a data message.
+   *
+   * @param {Buffer} data The message to send
+   * @param {Boolean} [compress=false] Specifies whether or not to compress
+   *     `data`
+   * @param {Object} options Options object
+   * @param {Number} options.opcode The opcode
+   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be
+   *     modified
+   * @param {Boolean} [options.fin=false] Specifies whether or not to set the
+   *     FIN bit
+   * @param {Boolean} [options.mask=false] Specifies whether or not to mask
+   *     `data`
+   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the
+   *     RSV1 bit
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  dispatch(data, compress, options, cb) {
+    if (!compress) {
+      this.sendFrame(Sender.frame(data, options), cb);
+      return;
+    }
+
+    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
+
+    this._bufferedBytes += data.length;
+    this._deflating = true;
+    perMessageDeflate.compress(data, options.fin, (_, buf) => {
+      if (this._socket.destroyed) {
+        const err = new Error(
+          'The socket was closed while data was being compressed'
+        );
+
+        if (typeof cb === 'function') cb(err);
+
+        for (let i = 0; i < this._queue.length; i++) {
+          const callback = this._queue[i][4];
+
+          if (typeof callback === 'function') callback(err);
+        }
+
+        return;
+      }
+
+      this._bufferedBytes -= data.length;
+      this._deflating = false;
+      options.readOnly = false;
+      this.sendFrame(Sender.frame(buf, options), cb);
+      this.dequeue();
+    });
+  }
+
+  /**
+   * Executes queued send operations.
+   *
+   * @private
+   */
+  dequeue() {
+    while (!this._deflating && this._queue.length) {
+      const params = this._queue.shift();
+
+      this._bufferedBytes -= params[1].length;
+      Reflect.apply(params[0], this, params.slice(1));
+    }
+  }
+
+  /**
+   * Enqueues a send operation.
+   *
+   * @param {Array} params Send operation parameters.
+   * @private
+   */
+  enqueue(params) {
+    this._bufferedBytes += params[1].length;
+    this._queue.push(params);
+  }
+
+  /**
+   * Sends a frame.
+   *
+   * @param {Buffer[]} list The frame to send
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  sendFrame(list, cb) {
+    if (list.length === 2) {
+      this._socket.cork();
+      this._socket.write(list[0]);
+      this._socket.write(list[1], cb);
+      this._socket.uncork();
+    } else {
+      this._socket.write(list[0], cb);
+    }
+  }
+}
+
+module.exports = Sender;
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/stream.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/stream.js
new file mode 100644 (file)
index 0000000..604cf36
--- /dev/null
@@ -0,0 +1,165 @@
+'use strict';
+
+const { Duplex } = require('stream');
+
+/**
+ * Emits the `'close'` event on a stream.
+ *
+ * @param {stream.Duplex} The stream.
+ * @private
+ */
+function emitClose(stream) {
+  stream.emit('close');
+}
+
+/**
+ * The listener of the `'end'` event.
+ *
+ * @private
+ */
+function duplexOnEnd() {
+  if (!this.destroyed && this._writableState.finished) {
+    this.destroy();
+  }
+}
+
+/**
+ * The listener of the `'error'` event.
+ *
+ * @param {Error} err The error
+ * @private
+ */
+function duplexOnError(err) {
+  this.removeListener('error', duplexOnError);
+  this.destroy();
+  if (this.listenerCount('error') === 0) {
+    // Do not suppress the throwing behavior.
+    this.emit('error', err);
+  }
+}
+
+/**
+ * Wraps a `WebSocket` in a duplex stream.
+ *
+ * @param {WebSocket} ws The `WebSocket` to wrap
+ * @param {Object} [options] The options for the `Duplex` constructor
+ * @return {stream.Duplex} The duplex stream
+ * @public
+ */
+function createWebSocketStream(ws, options) {
+  let resumeOnReceiverDrain = true;
+
+  function receiverOnDrain() {
+    if (resumeOnReceiverDrain) ws._socket.resume();
+  }
+
+  if (ws.readyState === ws.CONNECTING) {
+    ws.once('open', function open() {
+      ws._receiver.removeAllListeners('drain');
+      ws._receiver.on('drain', receiverOnDrain);
+    });
+  } else {
+    ws._receiver.removeAllListeners('drain');
+    ws._receiver.on('drain', receiverOnDrain);
+  }
+
+  const duplex = new Duplex({
+    ...options,
+    autoDestroy: false,
+    emitClose: false,
+    objectMode: false,
+    writableObjectMode: false
+  });
+
+  ws.on('message', function message(msg) {
+    if (!duplex.push(msg)) {
+      resumeOnReceiverDrain = false;
+      ws._socket.pause();
+    }
+  });
+
+  ws.once('error', function error(err) {
+    if (duplex.destroyed) return;
+
+    duplex.destroy(err);
+  });
+
+  ws.once('close', function close() {
+    if (duplex.destroyed) return;
+
+    duplex.push(null);
+  });
+
+  duplex._destroy = function (err, callback) {
+    if (ws.readyState === ws.CLOSED) {
+      callback(err);
+      process.nextTick(emitClose, duplex);
+      return;
+    }
+
+    let called = false;
+
+    ws.once('error', function error(err) {
+      called = true;
+      callback(err);
+    });
+
+    ws.once('close', function close() {
+      if (!called) callback(err);
+      process.nextTick(emitClose, duplex);
+    });
+    ws.terminate();
+  };
+
+  duplex._final = function (callback) {
+    if (ws.readyState === ws.CONNECTING) {
+      ws.once('open', function open() {
+        duplex._final(callback);
+      });
+      return;
+    }
+
+    // If the value of the `_socket` property is `null` it means that `ws` is a
+    // client websocket and the handshake failed. In fact, when this happens, a
+    // socket is never assigned to the websocket. Wait for the `'error'` event
+    // that will be emitted by the websocket.
+    if (ws._socket === null) return;
+
+    if (ws._socket._writableState.finished) {
+      callback();
+      if (duplex._readableState.endEmitted) duplex.destroy();
+    } else {
+      ws._socket.once('finish', function finish() {
+        // `duplex` is not destroyed here because the `'end'` event will be
+        // emitted on `duplex` after this `'finish'` event. The EOF signaling
+        // `null` chunk is, in fact, pushed when the websocket emits `'close'`.
+        callback();
+      });
+      ws.close();
+    }
+  };
+
+  duplex._read = function () {
+    if (ws.readyState === ws.OPEN && !resumeOnReceiverDrain) {
+      resumeOnReceiverDrain = true;
+      if (!ws._receiver._writableState.needDrain) ws._socket.resume();
+    }
+  };
+
+  duplex._write = function (chunk, encoding, callback) {
+    if (ws.readyState === ws.CONNECTING) {
+      ws.once('open', function open() {
+        duplex._write(chunk, encoding, callback);
+      });
+      return;
+    }
+
+    ws.send(chunk, callback);
+  };
+
+  duplex.on('end', duplexOnEnd);
+  duplex.on('error', duplexOnError);
+  return duplex;
+}
+
+module.exports = createWebSocketStream;
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/validation.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/validation.js
new file mode 100644 (file)
index 0000000..32db5a5
--- /dev/null
@@ -0,0 +1,30 @@
+'use strict';
+
+try {
+  const isValidUTF8 = require('utf-8-validate');
+
+  exports.isValidUTF8 =
+    typeof isValidUTF8 === 'object'
+      ? isValidUTF8.Validation.isValidUTF8 // utf-8-validate@<3.0.0
+      : isValidUTF8;
+} catch (e) /* istanbul ignore next */ {
+  exports.isValidUTF8 = () => true;
+}
+
+/**
+ * Checks if a status code is allowed in a close frame.
+ *
+ * @param {Number} code The status code
+ * @return {Boolean} `true` if the status code is valid, else `false`
+ * @public
+ */
+exports.isValidStatusCode = (code) => {
+  return (
+    (code >= 1000 &&
+      code <= 1014 &&
+      code !== 1004 &&
+      code !== 1005 &&
+      code !== 1006) ||
+    (code >= 3000 && code <= 4999)
+  );
+};
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js
new file mode 100644 (file)
index 0000000..b99ad05
--- /dev/null
@@ -0,0 +1,406 @@
+'use strict';
+
+const EventEmitter = require('events');
+const { createHash } = require('crypto');
+const { createServer, STATUS_CODES } = require('http');
+
+const PerMessageDeflate = require('./permessage-deflate');
+const WebSocket = require('./websocket');
+const { format, parse } = require('./extension');
+const { GUID, kWebSocket } = require('./constants');
+
+const keyRegex = /^[+/0-9A-Za-z]{22}==$/;
+
+/**
+ * Class representing a WebSocket server.
+ *
+ * @extends EventEmitter
+ */
+class WebSocketServer extends EventEmitter {
+  /**
+   * Create a `WebSocketServer` instance.
+   *
+   * @param {Object} options Configuration options
+   * @param {Number} [options.backlog=511] The maximum length of the queue of
+   *     pending connections
+   * @param {Boolean} [options.clientTracking=true] Specifies whether or not to
+   *     track clients
+   * @param {Function} [options.handleProtocols] A hook to handle protocols
+   * @param {String} [options.host] The hostname where to bind the server
+   * @param {Number} [options.maxPayload=104857600] The maximum allowed message
+   *     size
+   * @param {Boolean} [options.noServer=false] Enable no server mode
+   * @param {String} [options.path] Accept only connections matching this path
+   * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable
+   *     permessage-deflate
+   * @param {Number} [options.port] The port where to bind the server
+   * @param {http.Server} [options.server] A pre-created HTTP/S server to use
+   * @param {Function} [options.verifyClient] A hook to reject connections
+   * @param {Function} [callback] A listener for the `listening` event
+   */
+  constructor(options, callback) {
+    super();
+
+    options = {
+      maxPayload: 100 * 1024 * 1024,
+      perMessageDeflate: false,
+      handleProtocols: null,
+      clientTracking: true,
+      verifyClient: null,
+      noServer: false,
+      backlog: null, // use default (511 as implemented in net.js)
+      server: null,
+      host: null,
+      path: null,
+      port: null,
+      ...options
+    };
+
+    if (options.port == null && !options.server && !options.noServer) {
+      throw new TypeError(
+        'One of the "port", "server", or "noServer" options must be specified'
+      );
+    }
+
+    if (options.port != null) {
+      this._server = createServer((req, res) => {
+        const body = STATUS_CODES[426];
+
+        res.writeHead(426, {
+          'Content-Length': body.length,
+          'Content-Type': 'text/plain'
+        });
+        res.end(body);
+      });
+      this._server.listen(
+        options.port,
+        options.host,
+        options.backlog,
+        callback
+      );
+    } else if (options.server) {
+      this._server = options.server;
+    }
+
+    if (this._server) {
+      const emitConnection = this.emit.bind(this, 'connection');
+
+      this._removeListeners = addListeners(this._server, {
+        listening: this.emit.bind(this, 'listening'),
+        error: this.emit.bind(this, 'error'),
+        upgrade: (req, socket, head) => {
+          this.handleUpgrade(req, socket, head, emitConnection);
+        }
+      });
+    }
+
+    if (options.perMessageDeflate === true) options.perMessageDeflate = {};
+    if (options.clientTracking) this.clients = new Set();
+    this.options = options;
+  }
+
+  /**
+   * Returns the bound address, the address family name, and port of the server
+   * as reported by the operating system if listening on an IP socket.
+   * If the server is listening on a pipe or UNIX domain socket, the name is
+   * returned as a string.
+   *
+   * @return {(Object|String|null)} The address of the server
+   * @public
+   */
+  address() {
+    if (this.options.noServer) {
+      throw new Error('The server is operating in "noServer" mode');
+    }
+
+    if (!this._server) return null;
+    return this._server.address();
+  }
+
+  /**
+   * Close the server.
+   *
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  close(cb) {
+    if (cb) this.once('close', cb);
+
+    //
+    // Terminate all associated clients.
+    //
+    if (this.clients) {
+      for (const client of this.clients) client.terminate();
+    }
+
+    const server = this._server;
+
+    if (server) {
+      this._removeListeners();
+      this._removeListeners = this._server = null;
+
+      //
+      // Close the http server if it was internally created.
+      //
+      if (this.options.port != null) {
+        server.close(() => this.emit('close'));
+        return;
+      }
+    }
+
+    process.nextTick(emitClose, this);
+  }
+
+  /**
+   * See if a given request should be handled by this server instance.
+   *
+   * @param {http.IncomingMessage} req Request object to inspect
+   * @return {Boolean} `true` if the request is valid, else `false`
+   * @public
+   */
+  shouldHandle(req) {
+    if (this.options.path) {
+      const index = req.url.indexOf('?');
+      const pathname = index !== -1 ? req.url.slice(0, index) : req.url;
+
+      if (pathname !== this.options.path) return false;
+    }
+
+    return true;
+  }
+
+  /**
+   * Handle a HTTP Upgrade request.
+   *
+   * @param {http.IncomingMessage} req The request object
+   * @param {net.Socket} socket The network socket between the server and client
+   * @param {Buffer} head The first packet of the upgraded stream
+   * @param {Function} cb Callback
+   * @public
+   */
+  handleUpgrade(req, socket, head, cb) {
+    socket.on('error', socketOnError);
+
+    const key =
+      req.headers['sec-websocket-key'] !== undefined
+        ? req.headers['sec-websocket-key'].trim()
+        : false;
+    const version = +req.headers['sec-websocket-version'];
+    const extensions = {};
+
+    if (
+      req.method !== 'GET' ||
+      req.headers.upgrade.toLowerCase() !== 'websocket' ||
+      !key ||
+      !keyRegex.test(key) ||
+      (version !== 8 && version !== 13) ||
+      !this.shouldHandle(req)
+    ) {
+      return abortHandshake(socket, 400);
+    }
+
+    if (this.options.perMessageDeflate) {
+      const perMessageDeflate = new PerMessageDeflate(
+        this.options.perMessageDeflate,
+        true,
+        this.options.maxPayload
+      );
+
+      try {
+        const offers = parse(req.headers['sec-websocket-extensions']);
+
+        if (offers[PerMessageDeflate.extensionName]) {
+          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);
+          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
+        }
+      } catch (err) {
+        return abortHandshake(socket, 400);
+      }
+    }
+
+    //
+    // Optionally call external client verification handler.
+    //
+    if (this.options.verifyClient) {
+      const info = {
+        origin:
+          req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],
+        secure: !!(req.socket.authorized || req.socket.encrypted),
+        req
+      };
+
+      if (this.options.verifyClient.length === 2) {
+        this.options.verifyClient(info, (verified, code, message, headers) => {
+          if (!verified) {
+            return abortHandshake(socket, code || 401, message, headers);
+          }
+
+          this.completeUpgrade(key, extensions, req, socket, head, cb);
+        });
+        return;
+      }
+
+      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);
+    }
+
+    this.completeUpgrade(key, extensions, req, socket, head, cb);
+  }
+
+  /**
+   * Upgrade the connection to WebSocket.
+   *
+   * @param {String} key The value of the `Sec-WebSocket-Key` header
+   * @param {Object} extensions The accepted extensions
+   * @param {http.IncomingMessage} req The request object
+   * @param {net.Socket} socket The network socket between the server and client
+   * @param {Buffer} head The first packet of the upgraded stream
+   * @param {Function} cb Callback
+   * @throws {Error} If called more than once with the same socket
+   * @private
+   */
+  completeUpgrade(key, extensions, req, socket, head, cb) {
+    //
+    // Destroy the socket if the client has already sent a FIN packet.
+    //
+    if (!socket.readable || !socket.writable) return socket.destroy();
+
+    if (socket[kWebSocket]) {
+      throw new Error(
+        'server.handleUpgrade() was called more than once with the same ' +
+          'socket, possibly due to a misconfiguration'
+      );
+    }
+
+    const digest = createHash('sha1')
+      .update(key + GUID)
+      .digest('base64');
+
+    const headers = [
+      'HTTP/1.1 101 Switching Protocols',
+      'Upgrade: websocket',
+      'Connection: Upgrade',
+      `Sec-WebSocket-Accept: ${digest}`
+    ];
+
+    const ws = new WebSocket(null);
+    let protocol = req.headers['sec-websocket-protocol'];
+
+    if (protocol) {
+      protocol = protocol.trim().split(/ *, */);
+
+      //
+      // Optionally call external protocol selection handler.
+      //
+      if (this.options.handleProtocols) {
+        protocol = this.options.handleProtocols(protocol, req);
+      } else {
+        protocol = protocol[0];
+      }
+
+      if (protocol) {
+        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);
+        ws._protocol = protocol;
+      }
+    }
+
+    if (extensions[PerMessageDeflate.extensionName]) {
+      const params = extensions[PerMessageDeflate.extensionName].params;
+      const value = format({
+        [PerMessageDeflate.extensionName]: [params]
+      });
+      headers.push(`Sec-WebSocket-Extensions: ${value}`);
+      ws._extensions = extensions;
+    }
+
+    //
+    // Allow external modification/inspection of handshake headers.
+    //
+    this.emit('headers', headers, req);
+
+    socket.write(headers.concat('\r\n').join('\r\n'));
+    socket.removeListener('error', socketOnError);
+
+    ws.setSocket(socket, head, this.options.maxPayload);
+
+    if (this.clients) {
+      this.clients.add(ws);
+      ws.on('close', () => this.clients.delete(ws));
+    }
+
+    cb(ws, req);
+  }
+}
+
+module.exports = WebSocketServer;
+
+/**
+ * Add event listeners on an `EventEmitter` using a map of <event, listener>
+ * pairs.
+ *
+ * @param {EventEmitter} server The event emitter
+ * @param {Object.<String, Function>} map The listeners to add
+ * @return {Function} A function that will remove the added listeners when
+ *     called
+ * @private
+ */
+function addListeners(server, map) {
+  for (const event of Object.keys(map)) server.on(event, map[event]);
+
+  return function removeListeners() {
+    for (const event of Object.keys(map)) {
+      server.removeListener(event, map[event]);
+    }
+  };
+}
+
+/**
+ * Emit a `'close'` event on an `EventEmitter`.
+ *
+ * @param {EventEmitter} server The event emitter
+ * @private
+ */
+function emitClose(server) {
+  server.emit('close');
+}
+
+/**
+ * Handle premature socket errors.
+ *
+ * @private
+ */
+function socketOnError() {
+  this.destroy();
+}
+
+/**
+ * Close the connection when preconditions are not fulfilled.
+ *
+ * @param {net.Socket} socket The socket of the upgrade request
+ * @param {Number} code The HTTP response status code
+ * @param {String} [message] The HTTP response body
+ * @param {Object} [headers] Additional HTTP response headers
+ * @private
+ */
+function abortHandshake(socket, code, message, headers) {
+  if (socket.writable) {
+    message = message || STATUS_CODES[code];
+    headers = {
+      Connection: 'close',
+      'Content-Type': 'text/html',
+      'Content-Length': Buffer.byteLength(message),
+      ...headers
+    };
+
+    socket.write(
+      `HTTP/1.1 ${code} ${STATUS_CODES[code]}\r\n` +
+        Object.keys(headers)
+          .map((h) => `${h}: ${headers[h]}`)
+          .join('\r\n') +
+        '\r\n\r\n' +
+        message
+    );
+  }
+
+  socket.removeListener('error', socketOnError);
+  socket.destroy();
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/websocket.js b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/lib/websocket.js
new file mode 100644 (file)
index 0000000..0e2a83d
--- /dev/null
@@ -0,0 +1,933 @@
+'use strict';
+
+const EventEmitter = require('events');
+const https = require('https');
+const http = require('http');
+const net = require('net');
+const tls = require('tls');
+const { randomBytes, createHash } = require('crypto');
+const { URL } = require('url');
+
+const PerMessageDeflate = require('./permessage-deflate');
+const Receiver = require('./receiver');
+const Sender = require('./sender');
+const {
+  BINARY_TYPES,
+  EMPTY_BUFFER,
+  GUID,
+  kStatusCode,
+  kWebSocket,
+  NOOP
+} = require('./constants');
+const { addEventListener, removeEventListener } = require('./event-target');
+const { format, parse } = require('./extension');
+const { toBuffer } = require('./buffer-util');
+
+const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
+const protocolVersions = [8, 13];
+const closeTimeout = 30 * 1000;
+
+/**
+ * Class representing a WebSocket.
+ *
+ * @extends EventEmitter
+ */
+class WebSocket extends EventEmitter {
+  /**
+   * Create a new `WebSocket`.
+   *
+   * @param {(String|url.URL)} address The URL to which to connect
+   * @param {(String|String[])} [protocols] The subprotocols
+   * @param {Object} [options] Connection options
+   */
+  constructor(address, protocols, options) {
+    super();
+
+    this._binaryType = BINARY_TYPES[0];
+    this._closeCode = 1006;
+    this._closeFrameReceived = false;
+    this._closeFrameSent = false;
+    this._closeMessage = '';
+    this._closeTimer = null;
+    this._extensions = {};
+    this._protocol = '';
+    this._readyState = WebSocket.CONNECTING;
+    this._receiver = null;
+    this._sender = null;
+    this._socket = null;
+
+    if (address !== null) {
+      this._bufferedAmount = 0;
+      this._isServer = false;
+      this._redirects = 0;
+
+      if (Array.isArray(protocols)) {
+        protocols = protocols.join(', ');
+      } else if (typeof protocols === 'object' && protocols !== null) {
+        options = protocols;
+        protocols = undefined;
+      }
+
+      initAsClient(this, address, protocols, options);
+    } else {
+      this._isServer = true;
+    }
+  }
+
+  /**
+   * This deviates from the WHATWG interface since ws doesn't support the
+   * required default "blob" type (instead we define a custom "nodebuffer"
+   * type).
+   *
+   * @type {String}
+   */
+  get binaryType() {
+    return this._binaryType;
+  }
+
+  set binaryType(type) {
+    if (!BINARY_TYPES.includes(type)) return;
+
+    this._binaryType = type;
+
+    //
+    // Allow to change `binaryType` on the fly.
+    //
+    if (this._receiver) this._receiver._binaryType = type;
+  }
+
+  /**
+   * @type {Number}
+   */
+  get bufferedAmount() {
+    if (!this._socket) return this._bufferedAmount;
+
+    return this._socket._writableState.length + this._sender._bufferedBytes;
+  }
+
+  /**
+   * @type {String}
+   */
+  get extensions() {
+    return Object.keys(this._extensions).join();
+  }
+
+  /**
+   * @type {String}
+   */
+  get protocol() {
+    return this._protocol;
+  }
+
+  /**
+   * @type {Number}
+   */
+  get readyState() {
+    return this._readyState;
+  }
+
+  /**
+   * @type {String}
+   */
+  get url() {
+    return this._url;
+  }
+
+  /**
+   * Set up the socket and the internal resources.
+   *
+   * @param {net.Socket} socket The network socket between the server and client
+   * @param {Buffer} head The first packet of the upgraded stream
+   * @param {Number} [maxPayload=0] The maximum allowed message size
+   * @private
+   */
+  setSocket(socket, head, maxPayload) {
+    const receiver = new Receiver(
+      this.binaryType,
+      this._extensions,
+      this._isServer,
+      maxPayload
+    );
+
+    this._sender = new Sender(socket, this._extensions);
+    this._receiver = receiver;
+    this._socket = socket;
+
+    receiver[kWebSocket] = this;
+    socket[kWebSocket] = this;
+
+    receiver.on('conclude', receiverOnConclude);
+    receiver.on('drain', receiverOnDrain);
+    receiver.on('error', receiverOnError);
+    receiver.on('message', receiverOnMessage);
+    receiver.on('ping', receiverOnPing);
+    receiver.on('pong', receiverOnPong);
+
+    socket.setTimeout(0);
+    socket.setNoDelay();
+
+    if (head.length > 0) socket.unshift(head);
+
+    socket.on('close', socketOnClose);
+    socket.on('data', socketOnData);
+    socket.on('end', socketOnEnd);
+    socket.on('error', socketOnError);
+
+    this._readyState = WebSocket.OPEN;
+    this.emit('open');
+  }
+
+  /**
+   * Emit the `'close'` event.
+   *
+   * @private
+   */
+  emitClose() {
+    if (!this._socket) {
+      this._readyState = WebSocket.CLOSED;
+      this.emit('close', this._closeCode, this._closeMessage);
+      return;
+    }
+
+    if (this._extensions[PerMessageDeflate.extensionName]) {
+      this._extensions[PerMessageDeflate.extensionName].cleanup();
+    }
+
+    this._receiver.removeAllListeners();
+    this._readyState = WebSocket.CLOSED;
+    this.emit('close', this._closeCode, this._closeMessage);
+  }
+
+  /**
+   * Start a closing handshake.
+   *
+   *          +----------+   +-----------+   +----------+
+   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -
+   *    |     +----------+   +-----------+   +----------+     |
+   *          +----------+   +-----------+         |
+   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING
+   *          +----------+   +-----------+   |
+   *    |           |                        |   +---+        |
+   *                +------------------------+-->|fin| - - - -
+   *    |         +---+                      |   +---+
+   *     - - - - -|fin|<---------------------+
+   *              +---+
+   *
+   * @param {Number} [code] Status code explaining why the connection is closing
+   * @param {String} [data] A string explaining why the connection is closing
+   * @public
+   */
+  close(code, data) {
+    if (this.readyState === WebSocket.CLOSED) return;
+    if (this.readyState === WebSocket.CONNECTING) {
+      const msg = 'WebSocket was closed before the connection was established';
+      return abortHandshake(this, this._req, msg);
+    }
+
+    if (this.readyState === WebSocket.CLOSING) {
+      if (this._closeFrameSent && this._closeFrameReceived) this._socket.end();
+      return;
+    }
+
+    this._readyState = WebSocket.CLOSING;
+    this._sender.close(code, data, !this._isServer, (err) => {
+      //
+      // This error is handled by the `'error'` listener on the socket. We only
+      // want to know if the close frame has been sent here.
+      //
+      if (err) return;
+
+      this._closeFrameSent = true;
+      if (this._closeFrameReceived) this._socket.end();
+    });
+
+    //
+    // Specify a timeout for the closing handshake to complete.
+    //
+    this._closeTimer = setTimeout(
+      this._socket.destroy.bind(this._socket),
+      closeTimeout
+    );
+  }
+
+  /**
+   * Send a ping.
+   *
+   * @param {*} [data] The data to send
+   * @param {Boolean} [mask] Indicates whether or not to mask `data`
+   * @param {Function} [cb] Callback which is executed when the ping is sent
+   * @public
+   */
+  ping(data, mask, cb) {
+    if (this.readyState === WebSocket.CONNECTING) {
+      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
+    }
+
+    if (typeof data === 'function') {
+      cb = data;
+      data = mask = undefined;
+    } else if (typeof mask === 'function') {
+      cb = mask;
+      mask = undefined;
+    }
+
+    if (typeof data === 'number') data = data.toString();
+
+    if (this.readyState !== WebSocket.OPEN) {
+      sendAfterClose(this, data, cb);
+      return;
+    }
+
+    if (mask === undefined) mask = !this._isServer;
+    this._sender.ping(data || EMPTY_BUFFER, mask, cb);
+  }
+
+  /**
+   * Send a pong.
+   *
+   * @param {*} [data] The data to send
+   * @param {Boolean} [mask] Indicates whether or not to mask `data`
+   * @param {Function} [cb] Callback which is executed when the pong is sent
+   * @public
+   */
+  pong(data, mask, cb) {
+    if (this.readyState === WebSocket.CONNECTING) {
+      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
+    }
+
+    if (typeof data === 'function') {
+      cb = data;
+      data = mask = undefined;
+    } else if (typeof mask === 'function') {
+      cb = mask;
+      mask = undefined;
+    }
+
+    if (typeof data === 'number') data = data.toString();
+
+    if (this.readyState !== WebSocket.OPEN) {
+      sendAfterClose(this, data, cb);
+      return;
+    }
+
+    if (mask === undefined) mask = !this._isServer;
+    this._sender.pong(data || EMPTY_BUFFER, mask, cb);
+  }
+
+  /**
+   * Send a data message.
+   *
+   * @param {*} data The message to send
+   * @param {Object} [options] Options object
+   * @param {Boolean} [options.compress] Specifies whether or not to compress
+   *     `data`
+   * @param {Boolean} [options.binary] Specifies whether `data` is binary or
+   *     text
+   * @param {Boolean} [options.fin=true] Specifies whether the fragment is the
+   *     last one
+   * @param {Boolean} [options.mask] Specifies whether or not to mask `data`
+   * @param {Function} [cb] Callback which is executed when data is written out
+   * @public
+   */
+  send(data, options, cb) {
+    if (this.readyState === WebSocket.CONNECTING) {
+      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
+    }
+
+    if (typeof options === 'function') {
+      cb = options;
+      options = {};
+    }
+
+    if (typeof data === 'number') data = data.toString();
+
+    if (this.readyState !== WebSocket.OPEN) {
+      sendAfterClose(this, data, cb);
+      return;
+    }
+
+    const opts = {
+      binary: typeof data !== 'string',
+      mask: !this._isServer,
+      compress: true,
+      fin: true,
+      ...options
+    };
+
+    if (!this._extensions[PerMessageDeflate.extensionName]) {
+      opts.compress = false;
+    }
+
+    this._sender.send(data || EMPTY_BUFFER, opts, cb);
+  }
+
+  /**
+   * Forcibly close the connection.
+   *
+   * @public
+   */
+  terminate() {
+    if (this.readyState === WebSocket.CLOSED) return;
+    if (this.readyState === WebSocket.CONNECTING) {
+      const msg = 'WebSocket was closed before the connection was established';
+      return abortHandshake(this, this._req, msg);
+    }
+
+    if (this._socket) {
+      this._readyState = WebSocket.CLOSING;
+      this._socket.destroy();
+    }
+  }
+}
+
+readyStates.forEach((readyState, i) => {
+  const descriptor = { enumerable: true, value: i };
+
+  Object.defineProperty(WebSocket.prototype, readyState, descriptor);
+  Object.defineProperty(WebSocket, readyState, descriptor);
+});
+
+[
+  'binaryType',
+  'bufferedAmount',
+  'extensions',
+  'protocol',
+  'readyState',
+  'url'
+].forEach((property) => {
+  Object.defineProperty(WebSocket.prototype, property, { enumerable: true });
+});
+
+//
+// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.
+// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface
+//
+['open', 'error', 'close', 'message'].forEach((method) => {
+  Object.defineProperty(WebSocket.prototype, `on${method}`, {
+    configurable: true,
+    enumerable: true,
+    /**
+     * Return the listener of the event.
+     *
+     * @return {(Function|undefined)} The event listener or `undefined`
+     * @public
+     */
+    get() {
+      const listeners = this.listeners(method);
+      for (let i = 0; i < listeners.length; i++) {
+        if (listeners[i]._listener) return listeners[i]._listener;
+      }
+
+      return undefined;
+    },
+    /**
+     * Add a listener for the event.
+     *
+     * @param {Function} listener The listener to add
+     * @public
+     */
+    set(listener) {
+      const listeners = this.listeners(method);
+      for (let i = 0; i < listeners.length; i++) {
+        //
+        // Remove only the listeners added via `addEventListener`.
+        //
+        if (listeners[i]._listener) this.removeListener(method, listeners[i]);
+      }
+      this.addEventListener(method, listener);
+    }
+  });
+});
+
+WebSocket.prototype.addEventListener = addEventListener;
+WebSocket.prototype.removeEventListener = removeEventListener;
+
+module.exports = WebSocket;
+
+/**
+ * Initialize a WebSocket client.
+ *
+ * @param {WebSocket} websocket The client to initialize
+ * @param {(String|url.URL)} address The URL to which to connect
+ * @param {String} [protocols] The subprotocols
+ * @param {Object} [options] Connection options
+ * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable
+ *     permessage-deflate
+ * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the
+ *     handshake request
+ * @param {Number} [options.protocolVersion=13] Value of the
+ *     `Sec-WebSocket-Version` header
+ * @param {String} [options.origin] Value of the `Origin` or
+ *     `Sec-WebSocket-Origin` header
+ * @param {Number} [options.maxPayload=104857600] The maximum allowed message
+ *     size
+ * @param {Boolean} [options.followRedirects=false] Whether or not to follow
+ *     redirects
+ * @param {Number} [options.maxRedirects=10] The maximum number of redirects
+ *     allowed
+ * @private
+ */
+function initAsClient(websocket, address, protocols, options) {
+  const opts = {
+    protocolVersion: protocolVersions[1],
+    maxPayload: 100 * 1024 * 1024,
+    perMessageDeflate: true,
+    followRedirects: false,
+    maxRedirects: 10,
+    ...options,
+    createConnection: undefined,
+    socketPath: undefined,
+    hostname: undefined,
+    protocol: undefined,
+    timeout: undefined,
+    method: undefined,
+    host: undefined,
+    path: undefined,
+    port: undefined
+  };
+
+  if (!protocolVersions.includes(opts.protocolVersion)) {
+    throw new RangeError(
+      `Unsupported protocol version: ${opts.protocolVersion} ` +
+        `(supported versions: ${protocolVersions.join(', ')})`
+    );
+  }
+
+  let parsedUrl;
+
+  if (address instanceof URL) {
+    parsedUrl = address;
+    websocket._url = address.href;
+  } else {
+    parsedUrl = new URL(address);
+    websocket._url = address;
+  }
+
+  const isUnixSocket = parsedUrl.protocol === 'ws+unix:';
+
+  if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {
+    throw new Error(`Invalid URL: ${websocket.url}`);
+  }
+
+  const isSecure =
+    parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';
+  const defaultPort = isSecure ? 443 : 80;
+  const key = randomBytes(16).toString('base64');
+  const get = isSecure ? https.get : http.get;
+  let perMessageDeflate;
+
+  opts.createConnection = isSecure ? tlsConnect : netConnect;
+  opts.defaultPort = opts.defaultPort || defaultPort;
+  opts.port = parsedUrl.port || defaultPort;
+  opts.host = parsedUrl.hostname.startsWith('[')
+    ? parsedUrl.hostname.slice(1, -1)
+    : parsedUrl.hostname;
+  opts.headers = {
+    'Sec-WebSocket-Version': opts.protocolVersion,
+    'Sec-WebSocket-Key': key,
+    Connection: 'Upgrade',
+    Upgrade: 'websocket',
+    ...opts.headers
+  };
+  opts.path = parsedUrl.pathname + parsedUrl.search;
+  opts.timeout = opts.handshakeTimeout;
+
+  if (opts.perMessageDeflate) {
+    perMessageDeflate = new PerMessageDeflate(
+      opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},
+      false,
+      opts.maxPayload
+    );
+    opts.headers['Sec-WebSocket-Extensions'] = format({
+      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()
+    });
+  }
+  if (protocols) {
+    opts.headers['Sec-WebSocket-Protocol'] = protocols;
+  }
+  if (opts.origin) {
+    if (opts.protocolVersion < 13) {
+      opts.headers['Sec-WebSocket-Origin'] = opts.origin;
+    } else {
+      opts.headers.Origin = opts.origin;
+    }
+  }
+  if (parsedUrl.username || parsedUrl.password) {
+    opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;
+  }
+
+  if (isUnixSocket) {
+    const parts = opts.path.split(':');
+
+    opts.socketPath = parts[0];
+    opts.path = parts[1];
+  }
+
+  let req = (websocket._req = get(opts));
+
+  if (opts.timeout) {
+    req.on('timeout', () => {
+      abortHandshake(websocket, req, 'Opening handshake has timed out');
+    });
+  }
+
+  req.on('error', (err) => {
+    if (req === null || req.aborted) return;
+
+    req = websocket._req = null;
+    websocket._readyState = WebSocket.CLOSING;
+    websocket.emit('error', err);
+    websocket.emitClose();
+  });
+
+  req.on('response', (res) => {
+    const location = res.headers.location;
+    const statusCode = res.statusCode;
+
+    if (
+      location &&
+      opts.followRedirects &&
+      statusCode >= 300 &&
+      statusCode < 400
+    ) {
+      if (++websocket._redirects > opts.maxRedirects) {
+        abortHandshake(websocket, req, 'Maximum redirects exceeded');
+        return;
+      }
+
+      req.abort();
+
+      const addr = new URL(location, address);
+
+      initAsClient(websocket, addr, protocols, options);
+    } else if (!websocket.emit('unexpected-response', req, res)) {
+      abortHandshake(
+        websocket,
+        req,
+        `Unexpected server response: ${res.statusCode}`
+      );
+    }
+  });
+
+  req.on('upgrade', (res, socket, head) => {
+    websocket.emit('upgrade', res);
+
+    //
+    // The user may have closed the connection from a listener of the `upgrade`
+    // event.
+    //
+    if (websocket.readyState !== WebSocket.CONNECTING) return;
+
+    req = websocket._req = null;
+
+    const digest = createHash('sha1')
+      .update(key + GUID)
+      .digest('base64');
+
+    if (res.headers['sec-websocket-accept'] !== digest) {
+      abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');
+      return;
+    }
+
+    const serverProt = res.headers['sec-websocket-protocol'];
+    const protList = (protocols || '').split(/, */);
+    let protError;
+
+    if (!protocols && serverProt) {
+      protError = 'Server sent a subprotocol but none was requested';
+    } else if (protocols && !serverProt) {
+      protError = 'Server sent no subprotocol';
+    } else if (serverProt && !protList.includes(serverProt)) {
+      protError = 'Server sent an invalid subprotocol';
+    }
+
+    if (protError) {
+      abortHandshake(websocket, socket, protError);
+      return;
+    }
+
+    if (serverProt) websocket._protocol = serverProt;
+
+    if (perMessageDeflate) {
+      try {
+        const extensions = parse(res.headers['sec-websocket-extensions']);
+
+        if (extensions[PerMessageDeflate.extensionName]) {
+          perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
+          websocket._extensions[
+            PerMessageDeflate.extensionName
+          ] = perMessageDeflate;
+        }
+      } catch (err) {
+        abortHandshake(
+          websocket,
+          socket,
+          'Invalid Sec-WebSocket-Extensions header'
+        );
+        return;
+      }
+    }
+
+    websocket.setSocket(socket, head, opts.maxPayload);
+  });
+}
+
+/**
+ * Create a `net.Socket` and initiate a connection.
+ *
+ * @param {Object} options Connection options
+ * @return {net.Socket} The newly created socket used to start the connection
+ * @private
+ */
+function netConnect(options) {
+  options.path = options.socketPath;
+  return net.connect(options);
+}
+
+/**
+ * Create a `tls.TLSSocket` and initiate a connection.
+ *
+ * @param {Object} options Connection options
+ * @return {tls.TLSSocket} The newly created socket used to start the connection
+ * @private
+ */
+function tlsConnect(options) {
+  options.path = undefined;
+
+  if (!options.servername && options.servername !== '') {
+    options.servername = net.isIP(options.host) ? '' : options.host;
+  }
+
+  return tls.connect(options);
+}
+
+/**
+ * Abort the handshake and emit an error.
+ *
+ * @param {WebSocket} websocket The WebSocket instance
+ * @param {(http.ClientRequest|net.Socket)} stream The request to abort or the
+ *     socket to destroy
+ * @param {String} message The error message
+ * @private
+ */
+function abortHandshake(websocket, stream, message) {
+  websocket._readyState = WebSocket.CLOSING;
+
+  const err = new Error(message);
+  Error.captureStackTrace(err, abortHandshake);
+
+  if (stream.setHeader) {
+    stream.abort();
+    stream.once('abort', websocket.emitClose.bind(websocket));
+    websocket.emit('error', err);
+  } else {
+    stream.destroy(err);
+    stream.once('error', websocket.emit.bind(websocket, 'error'));
+    stream.once('close', websocket.emitClose.bind(websocket));
+  }
+}
+
+/**
+ * Handle cases where the `ping()`, `pong()`, or `send()` methods are called
+ * when the `readyState` attribute is `CLOSING` or `CLOSED`.
+ *
+ * @param {WebSocket} websocket The WebSocket instance
+ * @param {*} [data] The data to send
+ * @param {Function} [cb] Callback
+ * @private
+ */
+function sendAfterClose(websocket, data, cb) {
+  if (data) {
+    const length = toBuffer(data).length;
+
+    //
+    // The `_bufferedAmount` property is used only when the peer is a client and
+    // the opening handshake fails. Under these circumstances, in fact, the
+    // `setSocket()` method is not called, so the `_socket` and `_sender`
+    // properties are set to `null`.
+    //
+    if (websocket._socket) websocket._sender._bufferedBytes += length;
+    else websocket._bufferedAmount += length;
+  }
+
+  if (cb) {
+    const err = new Error(
+      `WebSocket is not open: readyState ${websocket.readyState} ` +
+        `(${readyStates[websocket.readyState]})`
+    );
+    cb(err);
+  }
+}
+
+/**
+ * The listener of the `Receiver` `'conclude'` event.
+ *
+ * @param {Number} code The status code
+ * @param {String} reason The reason for closing
+ * @private
+ */
+function receiverOnConclude(code, reason) {
+  const websocket = this[kWebSocket];
+
+  websocket._socket.removeListener('data', socketOnData);
+  websocket._socket.resume();
+
+  websocket._closeFrameReceived = true;
+  websocket._closeMessage = reason;
+  websocket._closeCode = code;
+
+  if (code === 1005) websocket.close();
+  else websocket.close(code, reason);
+}
+
+/**
+ * The listener of the `Receiver` `'drain'` event.
+ *
+ * @private
+ */
+function receiverOnDrain() {
+  this[kWebSocket]._socket.resume();
+}
+
+/**
+ * The listener of the `Receiver` `'error'` event.
+ *
+ * @param {(RangeError|Error)} err The emitted error
+ * @private
+ */
+function receiverOnError(err) {
+  const websocket = this[kWebSocket];
+
+  websocket._socket.removeListener('data', socketOnData);
+
+  websocket._readyState = WebSocket.CLOSING;
+  websocket._closeCode = err[kStatusCode];
+  websocket.emit('error', err);
+  websocket._socket.destroy();
+}
+
+/**
+ * The listener of the `Receiver` `'finish'` event.
+ *
+ * @private
+ */
+function receiverOnFinish() {
+  this[kWebSocket].emitClose();
+}
+
+/**
+ * The listener of the `Receiver` `'message'` event.
+ *
+ * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message
+ * @private
+ */
+function receiverOnMessage(data) {
+  this[kWebSocket].emit('message', data);
+}
+
+/**
+ * The listener of the `Receiver` `'ping'` event.
+ *
+ * @param {Buffer} data The data included in the ping frame
+ * @private
+ */
+function receiverOnPing(data) {
+  const websocket = this[kWebSocket];
+
+  websocket.pong(data, !websocket._isServer, NOOP);
+  websocket.emit('ping', data);
+}
+
+/**
+ * The listener of the `Receiver` `'pong'` event.
+ *
+ * @param {Buffer} data The data included in the pong frame
+ * @private
+ */
+function receiverOnPong(data) {
+  this[kWebSocket].emit('pong', data);
+}
+
+/**
+ * The listener of the `net.Socket` `'close'` event.
+ *
+ * @private
+ */
+function socketOnClose() {
+  const websocket = this[kWebSocket];
+
+  this.removeListener('close', socketOnClose);
+  this.removeListener('end', socketOnEnd);
+
+  websocket._readyState = WebSocket.CLOSING;
+
+  //
+  // The close frame might not have been received or the `'end'` event emitted,
+  // for example, if the socket was destroyed due to an error. Ensure that the
+  // `receiver` stream is closed after writing any remaining buffered data to
+  // it. If the readable side of the socket is in flowing mode then there is no
+  // buffered data as everything has been already written and `readable.read()`
+  // will return `null`. If instead, the socket is paused, any possible buffered
+  // data will be read as a single chunk and emitted synchronously in a single
+  // `'data'` event.
+  //
+  websocket._socket.read();
+  websocket._receiver.end();
+
+  this.removeListener('data', socketOnData);
+  this[kWebSocket] = undefined;
+
+  clearTimeout(websocket._closeTimer);
+
+  if (
+    websocket._receiver._writableState.finished ||
+    websocket._receiver._writableState.errorEmitted
+  ) {
+    websocket.emitClose();
+  } else {
+    websocket._receiver.on('error', receiverOnFinish);
+    websocket._receiver.on('finish', receiverOnFinish);
+  }
+}
+
+/**
+ * The listener of the `net.Socket` `'data'` event.
+ *
+ * @param {Buffer} chunk A chunk of data
+ * @private
+ */
+function socketOnData(chunk) {
+  if (!this[kWebSocket]._receiver.write(chunk)) {
+    this.pause();
+  }
+}
+
+/**
+ * The listener of the `net.Socket` `'end'` event.
+ *
+ * @private
+ */
+function socketOnEnd() {
+  const websocket = this[kWebSocket];
+
+  websocket._readyState = WebSocket.CLOSING;
+  websocket._receiver.end();
+  this.end();
+}
+
+/**
+ * The listener of the `net.Socket` `'error'` event.
+ *
+ * @private
+ */
+function socketOnError() {
+  const websocket = this[kWebSocket];
+
+  this.removeListener('error', socketOnError);
+  this.on('error', NOOP);
+
+  if (websocket) {
+    websocket._readyState = WebSocket.CLOSING;
+    this.destroy();
+  }
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/node_modules/ws/package.json b/signaling_server/service/node_modules/engine.io-client/node_modules/ws/package.json
new file mode 100644 (file)
index 0000000..b8215f1
--- /dev/null
@@ -0,0 +1,93 @@
+{
+  "_args": [
+    [
+      "ws@7.4.4",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ws@7.4.4",
+  "_id": "ws@7.4.4",
+  "_inBundle": false,
+  "_integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
+  "_location": "/engine.io-client/ws",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ws@7.4.4",
+    "name": "ws",
+    "escapedName": "ws",
+    "rawSpec": "7.4.4",
+    "saveSpec": null,
+    "fetchSpec": "7.4.4"
+  },
+  "_requiredBy": [
+    "/engine.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
+  "_spec": "7.4.4",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Einar Otto Stangvik",
+    "email": "einaros@gmail.com",
+    "url": "http://2x.io"
+  },
+  "browser": "browser.js",
+  "bugs": {
+    "url": "https://github.com/websockets/ws/issues"
+  },
+  "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js",
+  "devDependencies": {
+    "benchmark": "^2.1.4",
+    "bufferutil": "^4.0.1",
+    "eslint": "^7.2.0",
+    "eslint-config-prettier": "^8.1.0",
+    "eslint-plugin-prettier": "^3.0.1",
+    "mocha": "^7.0.0",
+    "nyc": "^15.0.0",
+    "prettier": "^2.0.5",
+    "utf-8-validate": "^5.0.2"
+  },
+  "engines": {
+    "node": ">=8.3.0"
+  },
+  "files": [
+    "browser.js",
+    "index.js",
+    "lib/*.js"
+  ],
+  "homepage": "https://github.com/websockets/ws",
+  "keywords": [
+    "HyBi",
+    "Push",
+    "RFC-6455",
+    "WebSocket",
+    "WebSockets",
+    "real-time"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "ws",
+  "peerDependencies": {
+    "bufferutil": "^4.0.1",
+    "utf-8-validate": "^5.0.2"
+  },
+  "peerDependenciesMeta": {
+    "bufferutil": {
+      "optional": true
+    },
+    "utf-8-validate": {
+      "optional": true
+    }
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/websockets/ws.git"
+  },
+  "scripts": {
+    "integration": "mocha --throw-deprecation test/*.integration.js",
+    "lint": "eslint --ignore-path .gitignore . && prettier --check --ignore-path .gitignore \"**/*.{json,md,yaml,yml}\"",
+    "test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js"
+  },
+  "version": "7.4.4"
+}
diff --git a/signaling_server/service/node_modules/engine.io-client/package.json b/signaling_server/service/node_modules/engine.io-client/package.json
new file mode 100644 (file)
index 0000000..7a76043
--- /dev/null
@@ -0,0 +1,115 @@
+{
+  "_args": [
+    [
+      "engine.io-client@3.5.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "engine.io-client@3.5.1",
+  "_id": "engine.io-client@3.5.1",
+  "_inBundle": false,
+  "_integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==",
+  "_location": "/engine.io-client",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "engine.io-client@3.5.1",
+    "name": "engine.io-client",
+    "escapedName": "engine.io-client",
+    "rawSpec": "3.5.1",
+    "saveSpec": null,
+    "fetchSpec": "3.5.1"
+  },
+  "_requiredBy": [
+    "/socket.io/socket.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz",
+  "_spec": "3.5.1",
+  "_where": "/opt/source/offload.js",
+  "browser": {
+    "ws": false,
+    "xmlhttprequest-ssl": "./lib/xmlhttprequest.js",
+    "./lib/globalThis.js": "./lib/globalThis.browser.js"
+  },
+  "bugs": {
+    "url": "https://github.com/socketio/engine.io-client/issues"
+  },
+  "contributors": [
+    {
+      "name": "Guillermo Rauch",
+      "email": "rauchg@gmail.com"
+    },
+    {
+      "name": "Vladimir Dronnikov",
+      "email": "dronnikov@gmail.com"
+    },
+    {
+      "name": "Christoph Dorn",
+      "url": "https://github.com/cadorn"
+    },
+    {
+      "name": "Mark Mokryn",
+      "email": "mokesmokes@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "component-emitter": "~1.3.0",
+    "component-inherit": "0.0.3",
+    "debug": "~3.1.0",
+    "engine.io-parser": "~2.2.0",
+    "has-cors": "1.1.0",
+    "indexof": "0.0.1",
+    "parseqs": "0.0.6",
+    "parseuri": "0.0.6",
+    "ws": "~7.4.2",
+    "xmlhttprequest-ssl": "~1.5.4",
+    "yeast": "0.1.2"
+  },
+  "description": "Client for the realtime Engine",
+  "devDependencies": {
+    "babel-core": "^6.24.0",
+    "babel-eslint": "4.1.7",
+    "babel-loader": "^6.4.1",
+    "babel-preset-es2015": "^6.24.0",
+    "blob": "^0.0.4",
+    "concat-stream": "^1.6.0",
+    "del": "^2.2.2",
+    "derequire": "^2.0.6",
+    "engine.io": "3.4.0",
+    "eslint-config-standard": "4.4.0",
+    "eslint-plugin-standard": "1.3.1",
+    "expect.js": "^0.3.1",
+    "express": "4.15.2",
+    "gulp": "3.9.1",
+    "gulp-eslint": "1.1.1",
+    "gulp-file": "^0.3.0",
+    "gulp-istanbul": "^1.1.1",
+    "gulp-mocha": "^4.3.0",
+    "gulp-task-listing": "1.0.1",
+    "istanbul": "^0.4.5",
+    "mocha": "^3.2.0",
+    "webpack": "1.12.12",
+    "webpack-stream": "^3.2.0",
+    "zuul": "3.11.1",
+    "zuul-builder-webpack": "^1.2.0",
+    "zuul-ngrok": "4.0.0"
+  },
+  "files": [
+    "index.js",
+    "lib/",
+    "engine.io.js"
+  ],
+  "homepage": "https://github.com/socketio/engine.io-client",
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "engine.io-client",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/socketio/engine.io-client.git"
+  },
+  "scripts": {
+    "test": "gulp test"
+  },
+  "version": "3.5.1"
+}
diff --git a/signaling_server/service/node_modules/engine.io-parser/CHANGELOG.md b/signaling_server/service/node_modules/engine.io-parser/CHANGELOG.md
new file mode 100644 (file)
index 0000000..a442aeb
--- /dev/null
@@ -0,0 +1 @@
+## [2.2.1](https://github.com/socketio/engine.io-parser/compare/2.2.0...2.2.1) (2020-09-30)
diff --git a/signaling_server/service/node_modules/engine.io-parser/package.json b/signaling_server/service/node_modules/engine.io-parser/package.json
new file mode 100644 (file)
index 0000000..b0efdb7
--- /dev/null
@@ -0,0 +1,66 @@
+{
+  "_args": [
+    [
+      "engine.io-parser@2.2.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "engine.io-parser@2.2.1",
+  "_id": "engine.io-parser@2.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
+  "_location": "/engine.io-parser",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "engine.io-parser@2.2.1",
+    "name": "engine.io-parser",
+    "escapedName": "engine.io-parser",
+    "rawSpec": "2.2.1",
+    "saveSpec": null,
+    "fetchSpec": "2.2.1"
+  },
+  "_requiredBy": [
+    "/engine.io",
+    "/engine.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
+  "_spec": "2.2.1",
+  "_where": "/opt/source/offload.js",
+  "browser": "./lib/browser.js",
+  "bugs": {
+    "url": "https://github.com/socketio/engine.io-parser/issues"
+  },
+  "dependencies": {
+    "after": "0.8.2",
+    "arraybuffer.slice": "~0.0.7",
+    "base64-arraybuffer": "0.1.4",
+    "blob": "0.0.5",
+    "has-binary2": "~1.0.2"
+  },
+  "description": "Parser for the client for the realtime Engine",
+  "devDependencies": {
+    "benchmark": "^2.1.4",
+    "expect.js": "0.3.1",
+    "mocha": "^5.2.0",
+    "socket.io-browsers": "^1.0.2",
+    "zuul": "3.11.1",
+    "zuul-ngrok": "4.0.0"
+  },
+  "files": [
+    "lib/"
+  ],
+  "homepage": "https://github.com/socketio/engine.io-parser",
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "engine.io-parser",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/socketio/engine.io-parser.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "version": "2.2.1"
+}
diff --git a/signaling_server/service/node_modules/engine.io/CHANGELOG.md b/signaling_server/service/node_modules/engine.io/CHANGELOG.md
new file mode 100644 (file)
index 0000000..8b2261f
--- /dev/null
@@ -0,0 +1,29 @@
+# [3.5.0](https://github.com/socketio/engine.io/compare/3.4.2...3.5.0) (2020-12-30)
+
+
+### Features
+
+* add support for all cookie options ([19cc582](https://github.com/socketio/engine.io/commit/19cc58264a06dca47ed401fbaca32dcdb80a903b)), closes [/github.com/jshttp/cookie#options-1](https://github.com//github.com/jshttp/cookie/issues/options-1)
+* disable perMessageDeflate by default ([5ad2736](https://github.com/socketio/engine.io/commit/5ad273601eb66c7b318542f87026837bf9dddd21))
+
+
+
+## [3.4.2](https://github.com/socketio/engine.io/compare/3.4.1...3.4.2) (2020-06-04)
+
+
+### Bug Fixes
+
+* remove explicit require of uws ([85e544a](https://github.com/socketio/engine.io/commit/85e544afd95a5890761a613263a5eba0c9a18a93))
+
+
+
+## [3.4.1](https://github.com/socketio/engine.io/compare/3.4.0...3.4.1) (2020-04-17)
+
+
+### Bug Fixes
+
+* ignore errors when forcefully closing the socket ([da851ec](https://github.com/socketio/engine.io/commit/da851ec4ec89d96df2ee5c711f328b5d795423e9))
+* use SameSite=Strict by default ([001ca62](https://github.com/socketio/engine.io/commit/001ca62cc4a8f511f3b2fbd9e4493ad274a6a0e5))
+
+
+
diff --git a/signaling_server/service/node_modules/engine.io/README.md b/signaling_server/service/node_modules/engine.io/README.md
new file mode 100644 (file)
index 0000000..8009d68
--- /dev/null
@@ -0,0 +1,564 @@
+
+# Engine.IO: the realtime engine
+
+[![Build Status](https://github.com/socketio/engine.io/workflows/CI/badge.svg)](https://github.com/socketio/engine.io/actions)
+[![NPM version](https://badge.fury.io/js/engine.io.svg)](http://badge.fury.io/js/engine.io)
+
+`Engine.IO` is the implementation of transport-based
+cross-browser/cross-device bi-directional communication layer for
+[Socket.IO](http://github.com/socketio/socket.io).
+
+## How to use
+
+### Server
+
+#### (A) Listening on a port
+
+```js
+var engine = require('engine.io');
+var server = engine.listen(80);
+
+server.on('connection', function(socket){
+  socket.send('utf 8 string');
+  socket.send(Buffer.from([0, 1, 2, 3, 4, 5])); // binary data
+});
+```
+
+#### (B) Intercepting requests for a http.Server
+
+```js
+var engine = require('engine.io');
+var http = require('http').createServer().listen(3000);
+var server = engine.attach(http);
+
+server.on('connection', function (socket) {
+  socket.on('message', function(data){ });
+  socket.on('close', function(){ });
+});
+```
+
+#### (C) Passing in requests
+
+```js
+var engine = require('engine.io');
+var server = new engine.Server();
+
+server.on('connection', function(socket){
+  socket.send('hi');
+});
+
+// …
+httpServer.on('upgrade', function(req, socket, head){
+  server.handleUpgrade(req, socket, head);
+});
+httpServer.on('request', function(req, res){
+  server.handleRequest(req, res);
+});
+```
+
+### Client
+
+```html
+<script src="/path/to/engine.io.js"></script>
+<script>
+  var socket = new eio.Socket('ws://localhost/');
+  socket.on('open', function(){
+    socket.on('message', function(data){});
+    socket.on('close', function(){});
+  });
+</script>
+```
+
+For more information on the client refer to the
+[engine-client](http://github.com/learnboost/engine.io-client) repository.
+
+## What features does it have?
+
+- **Maximum reliability**. Connections are established even in the presence of:
+  - proxies and load balancers.
+  - personal firewall and antivirus software.
+  - for more information refer to **Goals** and **Architecture** sections
+- **Minimal client size** aided by:
+  - lazy loading of flash transports.
+  - lack of redundant transports.
+- **Scalable**
+  - load balancer friendly
+- **Future proof**
+- **100% Node.JS core style**
+  - No API sugar (left for higher level projects)
+  - Written in readable vanilla JavaScript
+
+## API
+
+### Server
+
+<hr><br>
+
+#### Top-level
+
+These are exposed by `require('engine.io')`:
+
+##### Events
+
+- `flush`
+    - Called when a socket buffer is being flushed.
+    - **Arguments**
+      - `Socket`: socket being flushed
+      - `Array`: write buffer
+- `drain`
+    - Called when a socket buffer is drained
+    - **Arguments**
+      - `Socket`: socket being flushed
+
+##### Properties
+
+- `protocol` _(Number)_: protocol revision number
+- `Server`: Server class constructor
+- `Socket`: Socket class constructor
+- `Transport` _(Function)_: transport constructor
+- `transports` _(Object)_: map of available transports
+
+##### Methods
+
+- `()`
+    - Returns a new `Server` instance. If the first argument is an `http.Server` then the
+      new `Server` instance will be attached to it. Otherwise, the arguments are passed
+      directly to the `Server` constructor.
+    - **Parameters**
+      - `http.Server`: optional, server to attach to.
+      - `Object`: optional, options object (see `Server#constructor` api docs below)
+
+  The following are identical ways to instantiate a server and then attach it.
+
+```js
+var httpServer; // previously created with `http.createServer();` from node.js api.
+
+// create a server first, and then attach
+var eioServer = require('engine.io').Server();
+eioServer.attach(httpServer);
+
+// or call the module as a function to get `Server`
+var eioServer = require('engine.io')();
+eioServer.attach(httpServer);
+
+// immediately attach
+var eioServer = require('engine.io')(httpServer);
+
+// with custom options
+var eioServer = require('engine.io')(httpServer, {
+  maxHttpBufferSize: 1e3
+});
+```
+
+- `listen`
+    - Creates an `http.Server` which listens on the given port and attaches WS
+      to it. It returns `501 Not Implemented` for regular http requests.
+    - **Parameters**
+      - `Number`: port to listen on.
+      - `Object`: optional, options object
+      - `Function`: callback for `listen`.
+    - **Options**
+      - All options from `Server.attach` method, documented below.
+      - **Additionally** See Server `constructor` below for options you can pass for creating the new Server
+    - **Returns** `Server`
+
+```js
+var engine = require('engine.io');
+var server = engine.listen(3000, {
+  pingTimeout: 2000,
+  pingInterval: 10000
+});
+
+server.on('connection', /* ... */);
+```
+
+- `attach`
+    - Captures `upgrade` requests for a `http.Server`. In other words, makes
+      a regular http.Server WebSocket-compatible.
+    - **Parameters**
+      - `http.Server`: server to attach to.
+      - `Object`: optional, options object
+    - **Options**
+      - All options from `Server.attach` method, documented below.
+      - **Additionally** See Server `constructor` below for options you can pass for creating the new Server
+    - **Returns** `Server` a new Server instance.
+
+```js
+var engine = require('engine.io');
+var httpServer = require('http').createServer().listen(3000);
+var server = engine.attach(httpServer, {
+  wsEngine: 'uws' // requires having uws as dependency
+});
+
+server.on('connection', /* ... */);
+```
+
+#### Server
+
+The main server/manager. _Inherits from EventEmitter_.
+
+##### Events
+
+- `connection`
+    - Fired when a new connection is established.
+    - **Arguments**
+      - `Socket`: a Socket object
+
+##### Properties
+
+**Important**: if you plan to use Engine.IO in a scalable way, please
+keep in mind the properties below will only reflect the clients connected
+to a single process.
+
+- `clients` _(Object)_: hash of connected clients by id.
+- `clientsCount` _(Number)_: number of connected clients.
+
+##### Methods
+
+- **constructor**
+    - Initializes the server
+    - **Parameters**
+      - `Object`: optional, options object
+    - **Options**
+      - `pingTimeout` (`Number`): how many ms without a pong packet to
+        consider the connection closed (`5000`)
+      - `pingInterval` (`Number`): how many ms before sending a new ping
+        packet (`25000`)
+      - `upgradeTimeout` (`Number`): how many ms before an uncompleted transport upgrade is cancelled (`10000`)
+      - `maxHttpBufferSize` (`Number`): how many bytes or characters a message
+        can be, before closing the session (to avoid DoS). Default
+        value is `10E7`.
+      - `allowRequest` (`Function`): A function that receives a given handshake
+        or upgrade request as its first parameter, and can decide whether to
+        continue or not. The second argument is a function that needs to be
+        called with the decided information: `fn(err, success)`, where
+        `success` is a boolean value where false means that the request is
+        rejected, and err is an error code.
+      - `transports` (`<Array> String`): transports to allow connections
+        to (`['polling', 'websocket']`)
+      - `allowUpgrades` (`Boolean`): whether to allow transport upgrades
+        (`true`)
+      - `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension
+        (see [ws module](https://github.com/einaros/ws) api docs). Set to `true` to enable. (`false`)
+        - `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
+      - `httpCompression` (`Object|Boolean`): parameters of the http compression for the polling transports
+        (see [zlib](http://nodejs.org/api/zlib.html#zlib_options) api docs). Set to `false` to disable. (`true`)
+        - `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
+      - `cookie` (`String|Boolean`): name of the HTTP cookie that
+        contains the client sid to send as part of handshake response
+        headers. Set to `false` to not send one. (`io`)
+      - `cookiePath` (`String|Boolean`): path of the above `cookie`
+        option. If false, no path will be sent, which means browsers will only send the cookie on the engine.io attached path (`/engine.io`).
+        Set false to not save io cookie on all requests. (`/`)
+      - `cookieHttpOnly` (`Boolean`): If `true` HttpOnly io cookie cannot be accessed by client-side APIs, such as JavaScript. (`true`) _This option has no effect if `cookie` or `cookiePath` is set to `false`._
+      - `wsEngine` (`String`): what WebSocket server implementation to use. Specified module must conform to the `ws` interface (see [ws module api docs](https://github.com/websockets/ws/blob/master/doc/ws.md)). Default value is `ws`. An alternative c++ addon is also available by installing `uws` module.
+      - `initialPacket` (`Object`): an optional packet which will be concatenated to the handshake packet emitted by Engine.IO.
+- `close`
+    - Closes all clients
+    - **Returns** `Server` for chaining
+- `handleRequest`
+    - Called internally when a `Engine` request is intercepted.
+    - **Parameters**
+      - `http.IncomingMessage`: a node request object
+      - `http.ServerResponse`: a node response object
+    - **Returns** `Server` for chaining
+- `handleUpgrade`
+    - Called internally when a `Engine` ws upgrade is intercepted.
+    - **Parameters** (same as `upgrade` event)
+      - `http.IncomingMessage`: a node request object
+      - `net.Stream`: TCP socket for the request
+      - `Buffer`: legacy tail bytes
+    - **Returns** `Server` for chaining
+- `attach`
+    - Attach this Server instance to an `http.Server`
+    - Captures `upgrade` requests for a `http.Server`. In other words, makes
+      a regular http.Server WebSocket-compatible.
+    - **Parameters**
+      - `http.Server`: server to attach to.
+      - `Object`: optional, options object
+    - **Options**
+      - `path` (`String`): name of the path to capture (`/engine.io`).
+      - `destroyUpgrade` (`Boolean`): destroy unhandled upgrade requests (`true`)
+      - `destroyUpgradeTimeout` (`Number`): milliseconds after which unhandled requests are ended (`1000`)
+      - `handlePreflightRequest` (`Boolean|Function`): whether to let engine.io handle the OPTIONS requests. You can also pass a custom function to handle the requests (`true`)
+- `generateId`
+    - Generate a socket id.
+    - Overwrite this method to generate your custom socket id.
+    - **Parameters**
+      - `http.IncomingMessage`: a node request object
+  - **Returns** A socket id for connected client.
+
+<hr><br>
+
+#### Socket
+
+A representation of a client. _Inherits from EventEmitter_.
+
+##### Events
+
+- `close`
+    - Fired when the client is disconnected.
+    - **Arguments**
+      - `String`: reason for closing
+      - `Object`: description object (optional)
+- `message`
+    - Fired when the client sends a message.
+    - **Arguments**
+      - `String` or `Buffer`: Unicode string or Buffer with binary contents
+- `error`
+    - Fired when an error occurs.
+    - **Arguments**
+      - `Error`: error object
+- `flush`
+    - Called when the write buffer is being flushed.
+    - **Arguments**
+      - `Array`: write buffer
+- `drain`
+    - Called when the write buffer is drained
+- `packet`
+    - Called when a socket received a packet (`message`, `ping`)
+    - **Arguments**
+      - `type`: packet type
+      - `data`: packet data (if type is message)
+- `packetCreate`
+    - Called before a socket sends a packet (`message`, `pong`)
+    - **Arguments**
+      - `type`: packet type
+      - `data`: packet data (if type is message)
+
+##### Properties
+
+- `id` _(String)_: unique identifier
+- `server` _(Server)_: engine parent reference
+- `request` _(http.IncomingMessage)_: request that originated the Socket
+- `upgraded` _(Boolean)_: whether the transport has been upgraded
+- `readyState` _(String)_: opening|open|closing|closed
+- `transport` _(Transport)_: transport reference
+
+##### Methods
+
+- `send`:
+    - Sends a message, performing `message = toString(arguments[0])` unless
+      sending binary data, which is sent as is.
+    - **Parameters**
+      - `String` | `Buffer` | `ArrayBuffer` | `ArrayBufferView`: a string or any object implementing `toString()`, with outgoing data, or a Buffer or ArrayBuffer with binary data. Also any ArrayBufferView can be sent as is.
+      - `Object`: optional, options object
+      - `Function`: optional, a callback executed when the message gets flushed out by the transport
+    - **Options**
+      - `compress` (`Boolean`): whether to compress sending data. This option might be ignored and forced to be `true` when using polling. (`true`)
+    - **Returns** `Socket` for chaining
+- `close`
+    - Disconnects the client
+    - **Returns** `Socket` for chaining
+
+### Client
+
+<hr><br>
+
+Exposed in the `eio` global namespace (in the browser), or by
+`require('engine.io-client')` (in Node.JS).
+
+For the client API refer to the
+[engine-client](http://github.com/learnboost/engine.io-client) repository.
+
+## Debug / logging
+
+Engine.IO is powered by [debug](http://github.com/visionmedia/debug).
+In order to see all the debug output, run your app with the environment variable
+`DEBUG` including the desired scope.
+
+To see the output from all of Engine.IO's debugging scopes you can use:
+
+```
+DEBUG=engine* node myapp
+```
+
+## Transports
+
+- `polling`: XHR / JSONP polling transport.
+- `websocket`: WebSocket transport.
+
+## Plugins
+
+- [engine.io-conflation](https://github.com/EugenDueck/engine.io-conflation): Makes **conflation and aggregation** of messages straightforward.
+
+## Support
+
+The support channels for `engine.io` are the same as `socket.io`:
+  - irc.freenode.net **#socket.io**
+  - [Google Groups](http://groups.google.com/group/socket_io)
+  - [Website](http://socket.io)
+
+## Development
+
+To contribute patches, run tests or benchmarks, make sure to clone the
+repository:
+
+```
+git clone git://github.com/LearnBoost/engine.io.git
+```
+
+Then:
+
+```
+cd engine.io
+npm install
+```
+
+## Tests
+
+Tests run with `npm test`. It runs the server tests that are aided by
+the usage of `engine.io-client`.
+
+Make sure `npm install` is run first.
+
+## Goals
+
+The main goal of `Engine` is ensuring the most reliable realtime communication.
+Unlike the previous Socket.IO core, it always establishes a long-polling
+connection first, then tries to upgrade to better transports that are "tested" on
+the side.
+
+During the lifetime of the Socket.IO projects, we've found countless drawbacks
+to relying on `HTML5 WebSocket` or `Flash Socket` as the first connection
+mechanisms.
+
+Both are clearly the _right way_ of establishing a bidirectional communication,
+with HTML5 WebSocket being the way of the future. However, to answer most business
+needs, alternative traditional HTTP 1.1 mechanisms are just as good as delivering
+the same solution.
+
+WebSocket based connections have two fundamental benefits:
+
+1. **Better server performance**
+  - _A: Load balancers_<br>
+      Load balancing a long polling connection poses a serious architectural nightmare
+      since requests can come from any number of open sockets by the user agent, but
+      they all need to be routed to the process and computer that owns the `Engine`
+      connection. This negatively impacts RAM and CPU usage.
+  - _B: Network traffic_<br>
+      WebSocket is designed around the premise that each message frame has to be
+      surrounded by the least amount of data. In HTTP 1.1 transports, each message
+      frame is surrounded by HTTP headers and chunked encoding frames. If you try to
+      send the message _"Hello world"_ with xhr-polling, the message ultimately
+      becomes larger than if you were to send it with WebSocket.
+  - _C: Lightweight parser_<br>
+      As an effect of **B**, the server has to do a lot more work to parse the network
+      data and figure out the message when traditional HTTP requests are used
+      (as in long polling). This means that another advantage of WebSocket is
+      less server CPU usage.
+
+2. **Better user experience**
+
+    Due to the reasons stated in point **1**, the most important effect of being able
+    to establish a WebSocket connection is raw data transfer speed, which translates
+    in _some_ cases in better user experience.
+
+    Applications with heavy realtime interaction (such as games) will benefit greatly,
+    whereas applications like realtime chat (Gmail/Facebook), newsfeeds (Facebook) or
+    timelines (Twitter) will have negligible user experience improvements.
+
+Having said this, attempting to establish a WebSocket connection directly so far has
+proven problematic:
+
+1. **Proxies**<br>
+    Many corporate proxies block WebSocket traffic.
+
+2. **Personal firewall and antivirus software**<br>
+    As a result of our research, we've found that at least 3 personal security
+    applications block WebSocket traffic.
+
+3. **Cloud application platforms**<br>
+    Platforms like Heroku or No.de have had trouble keeping up with the fast-paced
+    nature of the evolution of the WebSocket protocol. Applications therefore end up
+    inevitably using long polling, but the seamless installation experience of
+    Socket.IO we strive for (_"require() it and it just works"_) disappears.
+
+Some of these problems have solutions. In the case of proxies and personal programs,
+however, the solutions many times involve upgrading software. Experience has shown
+that relying on client software upgrades to deliver a business solution is
+fruitless: the very existence of this project has to do with a fragmented panorama
+of user agent distribution, with clients connecting with latest versions of the most
+modern user agents (Chrome, Firefox and Safari), but others with versions as low as
+IE 5.5.
+
+From the user perspective, an unsuccessful WebSocket connection can translate in
+up to at least 10 seconds of waiting for the realtime application to begin
+exchanging data. This **perceptively** hurts user experience.
+
+To summarize, **Engine** focuses on reliability and user experience first, marginal
+potential UX improvements and increased server performance second. `Engine` is the
+result of all the lessons learned with WebSocket in the wild.
+
+## Architecture
+
+The main premise of `Engine`, and the core of its existence, is the ability to
+swap transports on the fly. A connection starts as xhr-polling, but it can
+switch to WebSocket.
+
+The central problem this poses is: how do we switch transports without losing
+messages?
+
+`Engine` only switches from polling to another transport in between polling
+cycles. Since the server closes the connection after a certain timeout when
+there's no activity, and the polling transport implementation buffers messages
+in between connections, this ensures no message loss and optimal performance.
+
+Another benefit of this design is that we workaround almost all the limitations
+of **Flash Socket**, such as slow connection times, increased file size (we can
+safely lazy load it without hurting user experience), etc.
+
+## FAQ
+
+### Can I use engine without Socket.IO ?
+
+Absolutely. Although the recommended framework for building realtime applications
+is Socket.IO, since it provides fundamental features for real-world applications
+such as multiplexing, reconnection support, etc.
+
+`Engine` is to Socket.IO what Connect is to Express. An essential piece for building
+realtime frameworks, but something you _probably_ won't be using for building
+actual applications.
+
+### Does the server serve the client?
+
+No. The main reason is that `Engine` is meant to be bundled with frameworks.
+Socket.IO includes `Engine`, therefore serving two clients is not necessary. If
+you use Socket.IO, including
+
+```html
+<script src="/socket.io/socket.io.js">
+```
+
+has you covered.
+
+### Can I implement `Engine` in other languages?
+
+Absolutely. The [engine.io-protocol](https://github.com/LearnBoost/engine.io-protocol)
+repository contains the most up to date description of the specification
+at all times, and the parser implementation in JavaScript.
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2014 Guillermo Rauch &lt;guillermo@learnboost.com&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/engine.io/lib/server.js b/signaling_server/service/node_modules/engine.io/lib/server.js
new file mode 100644 (file)
index 0000000..c691561
--- /dev/null
@@ -0,0 +1,591 @@
+
+/**
+ * Module dependencies.
+ */
+
+var qs = require('querystring');
+var parse = require('url').parse;
+var base64id = require('base64id');
+var transports = require('./transports');
+var EventEmitter = require('events').EventEmitter;
+var Socket = require('./socket');
+var util = require('util');
+var debug = require('debug')('engine');
+var cookieMod = require('cookie');
+
+/**
+ * Module exports.
+ */
+
+module.exports = Server;
+
+/**
+ * Server constructor.
+ *
+ * @param {Object} options
+ * @api public
+ */
+
+function Server (opts) {
+  if (!(this instanceof Server)) {
+    return new Server(opts);
+  }
+
+  this.clients = {};
+  this.clientsCount = 0;
+
+  opts = opts || {};
+
+  this.wsEngine = opts.wsEngine || process.env.EIO_WS_ENGINE || 'ws';
+  this.pingTimeout = opts.pingTimeout || 5000;
+  this.pingInterval = opts.pingInterval || 25000;
+  this.upgradeTimeout = opts.upgradeTimeout || 10000;
+  this.maxHttpBufferSize = opts.maxHttpBufferSize || 10E7;
+  this.transports = opts.transports || Object.keys(transports);
+  this.allowUpgrades = false !== opts.allowUpgrades;
+  this.allowRequest = opts.allowRequest;
+  this.cookie = false !== opts.cookie ? (opts.cookie || 'io') : false;
+  this.cookiePath = false !== opts.cookiePath ? (opts.cookiePath || '/') : false;
+  this.cookieHttpOnly = false !== opts.cookieHttpOnly;
+  this.perMessageDeflate = opts.perMessageDeflate || false;
+  this.httpCompression = false !== opts.httpCompression ? (opts.httpCompression || {}) : false;
+  this.initialPacket = opts.initialPacket;
+
+  var self = this;
+
+  // initialize compression options
+  ['perMessageDeflate', 'httpCompression'].forEach(function (type) {
+    var compression = self[type];
+    if (true === compression) self[type] = compression = {};
+    if (compression && null == compression.threshold) {
+      compression.threshold = 1024;
+    }
+  });
+
+  this.init();
+}
+
+/**
+ * Protocol errors mappings.
+ */
+
+Server.errors = {
+  UNKNOWN_TRANSPORT: 0,
+  UNKNOWN_SID: 1,
+  BAD_HANDSHAKE_METHOD: 2,
+  BAD_REQUEST: 3,
+  FORBIDDEN: 4
+};
+
+Server.errorMessages = {
+  0: 'Transport unknown',
+  1: 'Session ID unknown',
+  2: 'Bad handshake method',
+  3: 'Bad request',
+  4: 'Forbidden'
+};
+
+/**
+ * Inherits from EventEmitter.
+ */
+
+util.inherits(Server, EventEmitter);
+
+/**
+ * Initialize websocket server
+ *
+ * @api private
+ */
+
+Server.prototype.init = function () {
+  if (!~this.transports.indexOf('websocket')) return;
+
+  if (this.ws) this.ws.close();
+
+  // add explicit require for bundlers like webpack
+  var wsModule = this.wsEngine === 'ws' ? require('ws') : require(this.wsEngine);
+  this.ws = new wsModule.Server({
+    noServer: true,
+    clientTracking: false,
+    perMessageDeflate: this.perMessageDeflate,
+    maxPayload: this.maxHttpBufferSize
+  });
+};
+
+/**
+ * Returns a list of available transports for upgrade given a certain transport.
+ *
+ * @return {Array}
+ * @api public
+ */
+
+Server.prototype.upgrades = function (transport) {
+  if (!this.allowUpgrades) return [];
+  return transports[transport].upgradesTo || [];
+};
+
+/**
+ * Verifies a request.
+ *
+ * @param {http.IncomingMessage}
+ * @return {Boolean} whether the request is valid
+ * @api private
+ */
+
+Server.prototype.verify = function (req, upgrade, fn) {
+  // transport check
+  var transport = req._query.transport;
+  if (!~this.transports.indexOf(transport)) {
+    debug('unknown transport "%s"', transport);
+    return fn(Server.errors.UNKNOWN_TRANSPORT, false);
+  }
+
+  // 'Origin' header check
+  var isOriginInvalid = checkInvalidHeaderChar(req.headers.origin);
+  if (isOriginInvalid) {
+    req.headers.origin = null;
+    debug('origin header invalid');
+    return fn(Server.errors.BAD_REQUEST, false);
+  }
+
+  // sid check
+  var sid = req._query.sid;
+  if (sid) {
+    if (!this.clients.hasOwnProperty(sid)) {
+      debug('unknown sid "%s"', sid);
+      return fn(Server.errors.UNKNOWN_SID, false);
+    }
+    if (!upgrade && this.clients[sid].transport.name !== transport) {
+      debug('bad request: unexpected transport without upgrade');
+      return fn(Server.errors.BAD_REQUEST, false);
+    }
+  } else {
+    // handshake is GET only
+    if ('GET' !== req.method) return fn(Server.errors.BAD_HANDSHAKE_METHOD, false);
+    if (!this.allowRequest) return fn(null, true);
+    return this.allowRequest(req, fn);
+  }
+
+  fn(null, true);
+};
+
+/**
+ * Prepares a request by processing the query string.
+ *
+ * @api private
+ */
+
+Server.prototype.prepare = function (req) {
+  // try to leverage pre-existing `req._query` (e.g: from connect)
+  if (!req._query) {
+    req._query = ~req.url.indexOf('?') ? qs.parse(parse(req.url).query) : {};
+  }
+};
+
+/**
+ * Closes all clients.
+ *
+ * @api public
+ */
+
+Server.prototype.close = function () {
+  debug('closing all open clients');
+  for (var i in this.clients) {
+    if (this.clients.hasOwnProperty(i)) {
+      this.clients[i].close(true);
+    }
+  }
+  if (this.ws) {
+    debug('closing webSocketServer');
+    this.ws.close();
+    // don't delete this.ws because it can be used again if the http server starts listening again
+  }
+  return this;
+};
+
+/**
+ * Handles an Engine.IO HTTP request.
+ *
+ * @param {http.IncomingMessage} request
+ * @param {http.ServerResponse|http.OutgoingMessage} response
+ * @api public
+ */
+
+Server.prototype.handleRequest = function (req, res) {
+  debug('handling "%s" http request "%s"', req.method, req.url);
+  this.prepare(req);
+  req.res = res;
+
+  var self = this;
+  this.verify(req, false, function (err, success) {
+    if (!success) {
+      sendErrorMessage(req, res, err);
+      return;
+    }
+
+    if (req._query.sid) {
+      debug('setting new request for existing client');
+      self.clients[req._query.sid].transport.onRequest(req);
+    } else {
+      self.handshake(req._query.transport, req);
+    }
+  });
+};
+
+/**
+ * Sends an Engine.IO Error Message
+ *
+ * @param {http.ServerResponse} response
+ * @param {code} error code
+ * @api private
+ */
+
+function sendErrorMessage (req, res, code) {
+  var headers = { 'Content-Type': 'application/json' };
+
+  var isForbidden = !Server.errorMessages.hasOwnProperty(code);
+  if (isForbidden) {
+    res.writeHead(403, headers);
+    res.end(JSON.stringify({
+      code: Server.errors.FORBIDDEN,
+      message: code || Server.errorMessages[Server.errors.FORBIDDEN]
+    }));
+    return;
+  }
+  if (req.headers.origin) {
+    headers['Access-Control-Allow-Credentials'] = 'true';
+    headers['Access-Control-Allow-Origin'] = req.headers.origin;
+  } else {
+    headers['Access-Control-Allow-Origin'] = '*';
+  }
+  if (res !== undefined) {
+    res.writeHead(400, headers);
+    res.end(JSON.stringify({
+      code: code,
+      message: Server.errorMessages[code]
+    }));
+  }
+}
+
+/**
+ * generate a socket id.
+ * Overwrite this method to generate your custom socket id
+ *
+ * @param {Object} request object
+ * @api public
+ */
+
+Server.prototype.generateId = function (req) {
+  return base64id.generateId();
+};
+
+/**
+ * Handshakes a new client.
+ *
+ * @param {String} transport name
+ * @param {Object} request object
+ * @api private
+ */
+
+Server.prototype.handshake = function (transportName, req) {
+  var id = this.generateId(req);
+
+  debug('handshaking client "%s"', id);
+
+  try {
+    var transport = new transports[transportName](req);
+    if ('polling' === transportName) {
+      transport.maxHttpBufferSize = this.maxHttpBufferSize;
+      transport.httpCompression = this.httpCompression;
+    } else if ('websocket' === transportName) {
+      transport.perMessageDeflate = this.perMessageDeflate;
+    }
+
+    if (req._query && req._query.b64) {
+      transport.supportsBinary = false;
+    } else {
+      transport.supportsBinary = true;
+    }
+  } catch (e) {
+    debug('error handshaking to transport "%s"', transportName);
+    sendErrorMessage(req, req.res, Server.errors.BAD_REQUEST);
+    return;
+  }
+  var socket = new Socket(id, this, transport, req);
+  var self = this;
+
+  if (false !== this.cookie) {
+    transport.on('headers', function (headers) {
+      if (typeof self.cookie === 'object') {
+        headers['Set-Cookie'] = cookieMod.serialize(self.cookie.name, id, self.cookie);
+      } else {
+        headers['Set-Cookie'] = cookieMod.serialize(self.cookie, id,
+          {
+            path: self.cookiePath,
+            httpOnly: self.cookiePath ? self.cookieHttpOnly : false,
+            sameSite: true
+          });
+      }
+    });
+  }
+
+  transport.onRequest(req);
+
+  this.clients[id] = socket;
+  this.clientsCount++;
+
+  socket.once('close', function () {
+    delete self.clients[id];
+    self.clientsCount--;
+  });
+
+  this.emit('connection', socket);
+};
+
+/**
+ * Handles an Engine.IO HTTP Upgrade.
+ *
+ * @api public
+ */
+
+Server.prototype.handleUpgrade = function (req, socket, upgradeHead) {
+  this.prepare(req);
+
+  var self = this;
+  this.verify(req, true, function (err, success) {
+    if (!success) {
+      abortConnection(socket, err);
+      return;
+    }
+
+    var head = Buffer.from(upgradeHead); // eslint-disable-line node/no-deprecated-api
+    upgradeHead = null;
+
+    // delegate to ws
+    self.ws.handleUpgrade(req, socket, head, function (conn) {
+      self.onWebSocket(req, conn);
+    });
+  });
+};
+
+/**
+ * Called upon a ws.io connection.
+ *
+ * @param {ws.Socket} websocket
+ * @api private
+ */
+
+Server.prototype.onWebSocket = function (req, socket) {
+  socket.on('error', onUpgradeError);
+
+  if (transports[req._query.transport] !== undefined && !transports[req._query.transport].prototype.handlesUpgrades) {
+    debug('transport doesnt handle upgraded requests');
+    socket.close();
+    return;
+  }
+
+  // get client id
+  var id = req._query.sid;
+
+  // keep a reference to the ws.Socket
+  req.websocket = socket;
+
+  if (id) {
+    var client = this.clients[id];
+    if (!client) {
+      debug('upgrade attempt for closed client');
+      socket.close();
+    } else if (client.upgrading) {
+      debug('transport has already been trying to upgrade');
+      socket.close();
+    } else if (client.upgraded) {
+      debug('transport had already been upgraded');
+      socket.close();
+    } else {
+      debug('upgrading existing transport');
+
+      // transport error handling takes over
+      socket.removeListener('error', onUpgradeError);
+
+      var transport = new transports[req._query.transport](req);
+      if (req._query && req._query.b64) {
+        transport.supportsBinary = false;
+      } else {
+        transport.supportsBinary = true;
+      }
+      transport.perMessageDeflate = this.perMessageDeflate;
+      client.maybeUpgrade(transport);
+    }
+  } else {
+    // transport error handling takes over
+    socket.removeListener('error', onUpgradeError);
+
+    this.handshake(req._query.transport, req);
+  }
+
+  function onUpgradeError () {
+    debug('websocket error before upgrade');
+    // socket.close() not needed
+  }
+};
+
+/**
+ * Captures upgrade requests for a http.Server.
+ *
+ * @param {http.Server} server
+ * @param {Object} options
+ * @api public
+ */
+
+Server.prototype.attach = function (server, options) {
+  var self = this;
+  options = options || {};
+  var path = (options.path || '/engine.io').replace(/\/$/, '');
+
+  var destroyUpgradeTimeout = options.destroyUpgradeTimeout || 1000;
+
+  // normalize path
+  path += '/';
+
+  function check (req) {
+    if ('OPTIONS' === req.method && false === options.handlePreflightRequest) {
+      return false;
+    }
+    return path === req.url.substr(0, path.length);
+  }
+
+  // cache and clean up listeners
+  var listeners = server.listeners('request').slice(0);
+  server.removeAllListeners('request');
+  server.on('close', self.close.bind(self));
+  server.on('listening', self.init.bind(self));
+
+  // add request handler
+  server.on('request', function (req, res) {
+    if (check(req)) {
+      debug('intercepting request for path "%s"', path);
+      if ('OPTIONS' === req.method && 'function' === typeof options.handlePreflightRequest) {
+        options.handlePreflightRequest.call(server, req, res);
+      } else {
+        self.handleRequest(req, res);
+      }
+    } else {
+      for (var i = 0, l = listeners.length; i < l; i++) {
+        listeners[i].call(server, req, res);
+      }
+    }
+  });
+
+  if (~self.transports.indexOf('websocket')) {
+    server.on('upgrade', function (req, socket, head) {
+      if (check(req)) {
+        self.handleUpgrade(req, socket, head);
+      } else if (false !== options.destroyUpgrade) {
+        // default node behavior is to disconnect when no handlers
+        // but by adding a handler, we prevent that
+        // and if no eio thing handles the upgrade
+        // then the socket needs to die!
+        setTimeout(function () {
+          if (socket.writable && socket.bytesWritten <= 0) {
+            return socket.end();
+          }
+        }, destroyUpgradeTimeout);
+      }
+    });
+  }
+};
+
+/**
+ * Closes the connection
+ *
+ * @param {net.Socket} socket
+ * @param {code} error code
+ * @api private
+ */
+
+function abortConnection (socket, code) {
+  socket.on('error', () => {
+    debug('ignoring error from closed connection');
+  });
+  if (socket.writable) {
+    var message = Server.errorMessages.hasOwnProperty(code) ? Server.errorMessages[code] : String(code || '');
+    var length = Buffer.byteLength(message);
+    socket.write(
+      'HTTP/1.1 400 Bad Request\r\n' +
+      'Connection: close\r\n' +
+      'Content-type: text/html\r\n' +
+      'Content-Length: ' + length + '\r\n' +
+      '\r\n' +
+      message
+    );
+  }
+  socket.destroy();
+}
+
+/* eslint-disable */
+
+/**
+ * From https://github.com/nodejs/node/blob/v8.4.0/lib/_http_common.js#L303-L354
+ *
+ * True if val contains an invalid field-vchar
+ *  field-value    = *( field-content / obs-fold )
+ *  field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+ *  field-vchar    = VCHAR / obs-text
+ *
+ * checkInvalidHeaderChar() is currently designed to be inlinable by v8,
+ * so take care when making changes to the implementation so that the source
+ * code size does not exceed v8's default max_inlined_source_size setting.
+ **/
+var validHdrChars = [
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, // 0 - 15
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 32 - 47
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 48 - 63
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 80 - 95
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 112 - 127
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 128 ...
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1  // ... 255
+];
+
+function checkInvalidHeaderChar(val) {
+  val += '';
+  if (val.length < 1)
+    return false;
+  if (!validHdrChars[val.charCodeAt(0)]) {
+    debug('invalid header, index 0, char "%s"', val.charCodeAt(0));
+    return true;
+  }
+  if (val.length < 2)
+    return false;
+  if (!validHdrChars[val.charCodeAt(1)]) {
+    debug('invalid header, index 1, char "%s"', val.charCodeAt(1));
+    return true;
+  }
+  if (val.length < 3)
+    return false;
+  if (!validHdrChars[val.charCodeAt(2)]) {
+    debug('invalid header, index 2, char "%s"', val.charCodeAt(2));
+    return true;
+  }
+  if (val.length < 4)
+    return false;
+  if (!validHdrChars[val.charCodeAt(3)]) {
+    debug('invalid header, index 3, char "%s"', val.charCodeAt(3));
+    return true;
+  }
+  for (var i = 4; i < val.length; ++i) {
+    if (!validHdrChars[val.charCodeAt(i)]) {
+      debug('invalid header, index "%i", char "%s"', i, val.charCodeAt(i));
+      return true;
+    }
+  }
+  return false;
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/base64id/package.json b/signaling_server/service/node_modules/engine.io/node_modules/base64id/package.json
new file mode 100644 (file)
index 0000000..c6f0ef5
--- /dev/null
@@ -0,0 +1,50 @@
+{
+  "_args": [
+    [
+      "base64id@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "base64id@2.0.0",
+  "_id": "base64id@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+  "_location": "/engine.io/base64id",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "base64id@2.0.0",
+    "name": "base64id",
+    "escapedName": "base64id",
+    "rawSpec": "2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "2.0.0"
+  },
+  "_requiredBy": [
+    "/engine.io"
+  ],
+  "_resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Kristian Faeldt",
+    "email": "faeldt_kristian@cyberagent.co.jp"
+  },
+  "bugs": {
+    "url": "https://github.com/faeldt/base64id/issues"
+  },
+  "description": "Generates a base64 id",
+  "engines": {
+    "node": "^4.5.0 || >= 5.9"
+  },
+  "homepage": "https://github.com/faeldt/base64id#readme",
+  "license": "MIT",
+  "main": "./lib/base64id.js",
+  "name": "base64id",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/faeldt/base64id.git"
+  },
+  "version": "2.0.0"
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/cookie/HISTORY.md b/signaling_server/service/node_modules/engine.io/node_modules/cookie/HISTORY.md
new file mode 100644 (file)
index 0000000..ce080e0
--- /dev/null
@@ -0,0 +1,128 @@
+0.4.1 / 2020-04-21
+==================
+
+  * Fix `maxAge` option to reject invalid values
+
+0.4.0 / 2019-05-15
+==================
+
+  * Add `SameSite=None` support
+
+0.3.1 / 2016-05-26
+==================
+
+  * Fix `sameSite: true` to work with draft-7 clients
+    - `true` now sends `SameSite=Strict` instead of `SameSite`
+
+0.3.0 / 2016-05-26
+==================
+
+  * Add `sameSite` option
+    - Replaces `firstPartyOnly` option, never implemented by browsers
+  * Improve error message when `encode` is not a function
+  * Improve error message when `expires` is not a `Date`
+
+0.2.4 / 2016-05-20
+==================
+
+  * perf: enable strict mode
+  * perf: use for loop in parse
+  * perf: use string concatination for serialization
+
+0.2.3 / 2015-10-25
+==================
+
+  * Fix cookie `Max-Age` to never be a floating point number
+
+0.2.2 / 2015-09-17
+==================
+
+  * Fix regression when setting empty cookie value
+    - Ease the new restriction, which is just basic header-level validation
+  * Fix typo in invalid value errors
+
+0.2.1 / 2015-09-17
+==================
+
+  * Throw on invalid values provided to `serialize`
+    - Ensures the resulting string is a valid HTTP header value
+
+0.2.0 / 2015-08-13
+==================
+
+  * Add `firstPartyOnly` option
+  * Throw better error for invalid argument to parse
+  * perf: hoist regular expression
+
+0.1.5 / 2015-09-17
+==================
+
+  * Fix regression when setting empty cookie value
+    - Ease the new restriction, which is just basic header-level validation
+  * Fix typo in invalid value errors
+
+0.1.4 / 2015-09-17
+==================
+
+  * Throw better error for invalid argument to parse
+  * Throw on invalid values provided to `serialize`
+    - Ensures the resulting string is a valid HTTP header value
+
+0.1.3 / 2015-05-19
+==================
+
+  * Reduce the scope of try-catch deopt
+  * Remove argument reassignments
+
+0.1.2 / 2014-04-16
+==================
+
+  * Remove unnecessary files from npm package
+
+0.1.1 / 2014-02-23
+==================
+
+  * Fix bad parse when cookie value contained a comma
+  * Fix support for `maxAge` of `0`
+
+0.1.0 / 2013-05-01
+==================
+
+  * Add `decode` option
+  * Add `encode` option
+
+0.0.6 / 2013-04-08
+==================
+
+  * Ignore cookie parts missing `=`
+
+0.0.5 / 2012-10-29
+==================
+
+  * Return raw cookie value if value unescape errors
+
+0.0.4 / 2012-06-21
+==================
+
+  * Use encode/decodeURIComponent for cookie encoding/decoding
+    - Improve server/client interoperability
+
+0.0.3 / 2012-06-06
+==================
+
+  * Only escape special characters per the cookie RFC
+
+0.0.2 / 2012-06-01
+==================
+
+  * Fix `maxAge` option to not throw error
+
+0.0.1 / 2012-05-28
+==================
+
+  * Add more tests
+
+0.0.0 / 2012-05-28
+==================
+
+  * Initial release
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/cookie/README.md b/signaling_server/service/node_modules/engine.io/node_modules/cookie/README.md
new file mode 100644 (file)
index 0000000..18b2c2c
--- /dev/null
@@ -0,0 +1,257 @@
+# cookie
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Basic HTTP cookie parser and serializer for HTTP servers.
+
+## Installation
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install cookie
+```
+
+## API
+
+```js
+var cookie = require('cookie');
+```
+
+### cookie.parse(str, options)
+
+Parse an HTTP `Cookie` header string and returning an object of all cookie name-value pairs.
+The `str` argument is the string representing a `Cookie` header value and `options` is an
+optional object containing additional parsing options.
+
+```js
+var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');
+// { foo: 'bar', equation: 'E=mc^2' }
+```
+
+#### Options
+
+`cookie.parse` accepts these properties in the options object.
+
+##### decode
+
+Specifies a function that will be used to decode a cookie's value. Since the value of a cookie
+has a limited character set (and must be a simple string), this function can be used to decode
+a previously-encoded cookie value into a JavaScript string or other object.
+
+The default function is the global `decodeURIComponent`, which will decode any URL-encoded
+sequences into their byte representations.
+
+**note** if an error is thrown from this function, the original, non-decoded cookie value will
+be returned as the cookie's value.
+
+### cookie.serialize(name, value, options)
+
+Serialize a cookie name-value pair into a `Set-Cookie` header string. The `name` argument is the
+name for the cookie, the `value` argument is the value to set the cookie to, and the `options`
+argument is an optional object containing additional serialization options.
+
+```js
+var setCookie = cookie.serialize('foo', 'bar');
+// foo=bar
+```
+
+#### Options
+
+`cookie.serialize` accepts these properties in the options object.
+
+##### domain
+
+Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6265-5.2.3]. By default, no
+domain is set, and most clients will consider the cookie to apply to only the current domain.
+
+##### encode
+
+Specifies a function that will be used to encode a cookie's value. Since value of a cookie
+has a limited character set (and must be a simple string), this function can be used to encode
+a value into a string suited for a cookie's value.
+
+The default function is the global `encodeURIComponent`, which will encode a JavaScript string
+into UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range.
+
+##### expires
+
+Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6265-5.2.1].
+By default, no expiration is set, and most clients will consider this a "non-persistent cookie" and
+will delete it on a condition like exiting a web browser application.
+
+**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and
+`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,
+so if both are set, they should point to the same date and time.
+
+##### httpOnly
+
+Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6265-5.2.6]. When truthy,
+the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set.
+
+**note** be careful when setting this to `true`, as compliant clients will not allow client-side
+JavaScript to see the cookie in `document.cookie`.
+
+##### maxAge
+
+Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6265-5.2.2].
+The given number will be converted to an integer by rounding down. By default, no maximum age is set.
+
+**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and
+`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,
+so if both are set, they should point to the same date and time.
+
+##### path
+
+Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6265-5.2.4]. By default, the path
+is considered the ["default path"][rfc-6265-5.1.4].
+
+##### sameSite
+
+Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][rfc-6265bis-03-4.1.2.7].
+
+  - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
+  - `false` will not set the `SameSite` attribute.
+  - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement.
+  - `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie.
+  - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
+
+More information about the different enforcement levels can be found in
+[the specification][rfc-6265bis-03-4.1.2.7].
+
+**note** This is an attribute that has not yet been fully standardized, and may change in the future.
+This also means many clients may ignore this attribute until they understand it.
+
+##### secure
+
+Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6265-5.2.5]. When truthy,
+the `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set.
+
+**note** be careful when setting this to `true`, as compliant clients will not send the cookie back to
+the server in the future if the browser does not have an HTTPS connection.
+
+## Example
+
+The following example uses this module in conjunction with the Node.js core HTTP server
+to prompt a user for their name and display it back on future visits.
+
+```js
+var cookie = require('cookie');
+var escapeHtml = require('escape-html');
+var http = require('http');
+var url = require('url');
+
+function onRequest(req, res) {
+  // Parse the query string
+  var query = url.parse(req.url, true, true).query;
+
+  if (query && query.name) {
+    // Set a new cookie with the name
+    res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {
+      httpOnly: true,
+      maxAge: 60 * 60 * 24 * 7 // 1 week
+    }));
+
+    // Redirect back after setting cookie
+    res.statusCode = 302;
+    res.setHeader('Location', req.headers.referer || '/');
+    res.end();
+    return;
+  }
+
+  // Parse the cookies on the request
+  var cookies = cookie.parse(req.headers.cookie || '');
+
+  // Get the visitor name set in the cookie
+  var name = cookies.name;
+
+  res.setHeader('Content-Type', 'text/html; charset=UTF-8');
+
+  if (name) {
+    res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');
+  } else {
+    res.write('<p>Hello, new visitor!</p>');
+  }
+
+  res.write('<form method="GET">');
+  res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');
+  res.end('</form>');
+}
+
+http.createServer(onRequest).listen(3000);
+```
+
+## Testing
+
+```sh
+$ npm test
+```
+
+## Benchmark
+
+```
+$ npm run bench
+
+> cookie@0.3.1 bench cookie
+> node benchmark/index.js
+
+  http_parser@2.8.0
+  node@6.14.2
+  v8@5.1.281.111
+  uv@1.16.1
+  zlib@1.2.11
+  ares@1.10.1-DEV
+  icu@58.2
+  modules@48
+  napi@3
+  openssl@1.0.2o
+
+> node benchmark/parse.js
+
+  cookie.parse
+
+  6 tests completed.
+
+  simple      x 1,200,691 ops/sec ±1.12% (189 runs sampled)
+  decode      x 1,012,994 ops/sec ±0.97% (186 runs sampled)
+  unquote     x 1,074,174 ops/sec ±2.43% (186 runs sampled)
+  duplicates  x   438,424 ops/sec ±2.17% (184 runs sampled)
+  10 cookies  x   147,154 ops/sec ±1.01% (186 runs sampled)
+  100 cookies x    14,274 ops/sec ±1.07% (187 runs sampled)
+```
+
+## References
+
+- [RFC 6265: HTTP State Management Mechanism][rfc-6265]
+- [Same-site Cookies][rfc-6265bis-03-4.1.2.7]
+
+[rfc-6265bis-03-4.1.2.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7
+[rfc-6265]: https://tools.ietf.org/html/rfc6265
+[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4
+[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1
+[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2
+[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3
+[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4
+[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5
+[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6
+[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3
+
+## License
+
+[MIT](LICENSE)
+
+[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master
+[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master
+[node-version-image]: https://badgen.net/npm/node/cookie
+[node-version-url]: https://nodejs.org/en/download
+[npm-downloads-image]: https://badgen.net/npm/dm/cookie
+[npm-url]: https://npmjs.org/package/cookie
+[npm-version-image]: https://badgen.net/npm/v/cookie
+[travis-image]: https://badgen.net/travis/jshttp/cookie/master
+[travis-url]: https://travis-ci.org/jshttp/cookie
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/cookie/index.js b/signaling_server/service/node_modules/engine.io/node_modules/cookie/index.js
new file mode 100644 (file)
index 0000000..760f32e
--- /dev/null
@@ -0,0 +1,202 @@
+/*!
+ * cookie
+ * Copyright(c) 2012-2014 Roman Shtylman
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict';
+
+/**
+ * Module exports.
+ * @public
+ */
+
+exports.parse = parse;
+exports.serialize = serialize;
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var decode = decodeURIComponent;
+var encode = encodeURIComponent;
+var pairSplitRegExp = /; */;
+
+/**
+ * RegExp to match field-content in RFC 7230 sec 3.2
+ *
+ * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+ * field-vchar   = VCHAR / obs-text
+ * obs-text      = %x80-FF
+ */
+
+var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
+
+/**
+ * Parse a cookie header.
+ *
+ * Parse the given cookie header string into an object
+ * The object has the various cookies as keys(names) => values
+ *
+ * @param {string} str
+ * @param {object} [options]
+ * @return {object}
+ * @public
+ */
+
+function parse(str, options) {
+  if (typeof str !== 'string') {
+    throw new TypeError('argument str must be a string');
+  }
+
+  var obj = {}
+  var opt = options || {};
+  var pairs = str.split(pairSplitRegExp);
+  var dec = opt.decode || decode;
+
+  for (var i = 0; i < pairs.length; i++) {
+    var pair = pairs[i];
+    var eq_idx = pair.indexOf('=');
+
+    // skip things that don't look like key=value
+    if (eq_idx < 0) {
+      continue;
+    }
+
+    var key = pair.substr(0, eq_idx).trim()
+    var val = pair.substr(++eq_idx, pair.length).trim();
+
+    // quoted values
+    if ('"' == val[0]) {
+      val = val.slice(1, -1);
+    }
+
+    // only assign once
+    if (undefined == obj[key]) {
+      obj[key] = tryDecode(val, dec);
+    }
+  }
+
+  return obj;
+}
+
+/**
+ * Serialize data into a cookie header.
+ *
+ * Serialize the a name value pair into a cookie string suitable for
+ * http headers. An optional options object specified cookie parameters.
+ *
+ * serialize('foo', 'bar', { httpOnly: true })
+ *   => "foo=bar; httpOnly"
+ *
+ * @param {string} name
+ * @param {string} val
+ * @param {object} [options]
+ * @return {string}
+ * @public
+ */
+
+function serialize(name, val, options) {
+  var opt = options || {};
+  var enc = opt.encode || encode;
+
+  if (typeof enc !== 'function') {
+    throw new TypeError('option encode is invalid');
+  }
+
+  if (!fieldContentRegExp.test(name)) {
+    throw new TypeError('argument name is invalid');
+  }
+
+  var value = enc(val);
+
+  if (value && !fieldContentRegExp.test(value)) {
+    throw new TypeError('argument val is invalid');
+  }
+
+  var str = name + '=' + value;
+
+  if (null != opt.maxAge) {
+    var maxAge = opt.maxAge - 0;
+
+    if (isNaN(maxAge) || !isFinite(maxAge)) {
+      throw new TypeError('option maxAge is invalid')
+    }
+
+    str += '; Max-Age=' + Math.floor(maxAge);
+  }
+
+  if (opt.domain) {
+    if (!fieldContentRegExp.test(opt.domain)) {
+      throw new TypeError('option domain is invalid');
+    }
+
+    str += '; Domain=' + opt.domain;
+  }
+
+  if (opt.path) {
+    if (!fieldContentRegExp.test(opt.path)) {
+      throw new TypeError('option path is invalid');
+    }
+
+    str += '; Path=' + opt.path;
+  }
+
+  if (opt.expires) {
+    if (typeof opt.expires.toUTCString !== 'function') {
+      throw new TypeError('option expires is invalid');
+    }
+
+    str += '; Expires=' + opt.expires.toUTCString();
+  }
+
+  if (opt.httpOnly) {
+    str += '; HttpOnly';
+  }
+
+  if (opt.secure) {
+    str += '; Secure';
+  }
+
+  if (opt.sameSite) {
+    var sameSite = typeof opt.sameSite === 'string'
+      ? opt.sameSite.toLowerCase() : opt.sameSite;
+
+    switch (sameSite) {
+      case true:
+        str += '; SameSite=Strict';
+        break;
+      case 'lax':
+        str += '; SameSite=Lax';
+        break;
+      case 'strict':
+        str += '; SameSite=Strict';
+        break;
+      case 'none':
+        str += '; SameSite=None';
+        break;
+      default:
+        throw new TypeError('option sameSite is invalid');
+    }
+  }
+
+  return str;
+}
+
+/**
+ * Try decoding a string using a decoding function.
+ *
+ * @param {string} str
+ * @param {function} decode
+ * @private
+ */
+
+function tryDecode(str, decode) {
+  try {
+    return decode(str);
+  } catch (e) {
+    return str;
+  }
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/cookie/package.json b/signaling_server/service/node_modules/engine.io/node_modules/cookie/package.json
new file mode 100644 (file)
index 0000000..b00ef91
--- /dev/null
@@ -0,0 +1,81 @@
+{
+  "_args": [
+    [
+      "cookie@0.4.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "cookie@0.4.1",
+  "_id": "cookie@0.4.1",
+  "_inBundle": false,
+  "_integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+  "_location": "/engine.io/cookie",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "cookie@0.4.1",
+    "name": "cookie",
+    "escapedName": "cookie",
+    "rawSpec": "0.4.1",
+    "saveSpec": null,
+    "fetchSpec": "0.4.1"
+  },
+  "_requiredBy": [
+    "/engine.io"
+  ],
+  "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+  "_spec": "0.4.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Roman Shtylman",
+    "email": "shtylman@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/cookie/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "description": "HTTP server cookie parsing and serialization",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "2.1.4",
+    "eslint": "6.8.0",
+    "eslint-plugin-markdown": "1.0.2",
+    "mocha": "7.1.1",
+    "nyc": "15.0.1"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/cookie#readme",
+  "keywords": [
+    "cookie",
+    "cookies"
+  ],
+  "license": "MIT",
+  "name": "cookie",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/cookie.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js",
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks --ui qunit test/",
+    "test-ci": "nyc --reporter=text npm test",
+    "test-cov": "nyc --reporter=html --reporter=text npm test",
+    "version": "node scripts/version-history.js && git add HISTORY.md"
+  },
+  "version": "0.4.1"
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/debug/CHANGELOG.md b/signaling_server/service/node_modules/engine.io/node_modules/debug/CHANGELOG.md
new file mode 100644 (file)
index 0000000..820d21e
--- /dev/null
@@ -0,0 +1,395 @@
+
+3.1.0 / 2017-09-26
+==================
+
+  * Add `DEBUG_HIDE_DATE` env var (#486)
+  * Remove ReDoS regexp in %o formatter (#504)
+  * Remove "component" from package.json
+  * Remove `component.json`
+  * Ignore package-lock.json
+  * Examples: fix colors printout
+  * Fix: browser detection
+  * Fix: spelling mistake (#496, @EdwardBetts)
+
+3.0.1 / 2017-08-24
+==================
+
+  * Fix: Disable colors in Edge and Internet Explorer (#489)
+
+3.0.0 / 2017-08-08
+==================
+
+  * Breaking: Remove DEBUG_FD (#406)
+  * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418)
+  * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408)
+  * Addition: document `enabled` flag (#465)
+  * Addition: add 256 colors mode (#481)
+  * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440)
+  * Update: component: update "ms" to v2.0.0
+  * Update: separate the Node and Browser tests in Travis-CI
+  * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots
+  * Update: separate Node.js and web browser examples for organization
+  * Update: update "browserify" to v14.4.0
+  * Fix: fix Readme typo (#473)
+
+2.6.9 / 2017-09-22
+==================
+
+  * remove ReDoS regexp in %o formatter (#504)
+
+2.6.8 / 2017-05-18
+==================
+
+  * Fix: Check for undefined on browser globals (#462, @marbemac)
+
+2.6.7 / 2017-05-16
+==================
+
+  * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom)
+  * Fix: Inline extend function in node implementation (#452, @dougwilson)
+  * Docs: Fix typo (#455, @msasad)
+
+2.6.5 / 2017-04-27
+==================
+  
+  * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek)
+  * Misc: clean up browser reference checks (#447, @thebigredgeek)
+  * Misc: add npm-debug.log to .gitignore (@thebigredgeek)
+
+
+2.6.4 / 2017-04-20
+==================
+
+  * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo)
+  * Chore: ignore bower.json in npm installations. (#437, @joaovieira)
+  * Misc: update "ms" to v0.7.3 (@tootallnate)
+
+2.6.3 / 2017-03-13
+==================
+
+  * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts)
+  * Docs: Changelog fix (@thebigredgeek)
+
+2.6.2 / 2017-03-10
+==================
+
+  * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin)
+  * Docs: Add backers and sponsors from Open Collective (#422, @piamancini)
+  * Docs: Add Slackin invite badge (@tootallnate)
+
+2.6.1 / 2017-02-10
+==================
+
+  * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
+  * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
+  * Fix: IE8 "Expected identifier" error (#414, @vgoma)
+  * Fix: Namespaces would not disable once enabled (#409, @musikov)
+
+2.6.0 / 2016-12-28
+==================
+
+  * Fix: added better null pointer checks for browser useColors (@thebigredgeek)
+  * Improvement: removed explicit `window.debug` export (#404, @tootallnate)
+  * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
+
+2.5.2 / 2016-12-25
+==================
+
+  * Fix: reference error on window within webworkers (#393, @KlausTrainer)
+  * Docs: fixed README typo (#391, @lurch)
+  * Docs: added notice about v3 api discussion (@thebigredgeek)
+
+2.5.1 / 2016-12-20
+==================
+
+  * Fix: babel-core compatibility
+
+2.5.0 / 2016-12-20
+==================
+
+  * Fix: wrong reference in bower file (@thebigredgeek)
+  * Fix: webworker compatibility (@thebigredgeek)
+  * Fix: output formatting issue (#388, @kribblo)
+  * Fix: babel-loader compatibility (#383, @escwald)
+  * Misc: removed built asset from repo and publications (@thebigredgeek)
+  * Misc: moved source files to /src (#378, @yamikuronue)
+  * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
+  * Test: coveralls integration (#378, @yamikuronue)
+  * Docs: simplified language in the opening paragraph (#373, @yamikuronue)
+
+2.4.5 / 2016-12-17
+==================
+
+  * Fix: `navigator` undefined in Rhino (#376, @jochenberger)
+  * Fix: custom log function (#379, @hsiliev)
+  * Improvement: bit of cleanup + linting fixes (@thebigredgeek)
+  * Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
+  * Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
+
+2.4.4 / 2016-12-14
+==================
+
+  * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
+
+2.4.3 / 2016-12-14
+==================
+
+  * Fix: navigation.userAgent error for react native (#364, @escwald)
+
+2.4.2 / 2016-12-14
+==================
+
+  * Fix: browser colors (#367, @tootallnate)
+  * Misc: travis ci integration (@thebigredgeek)
+  * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
+
+2.4.1 / 2016-12-13
+==================
+
+  * Fix: typo that broke the package (#356)
+
+2.4.0 / 2016-12-13
+==================
+
+  * Fix: bower.json references unbuilt src entry point (#342, @justmatt)
+  * Fix: revert "handle regex special characters" (@tootallnate)
+  * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
+  * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
+  * Improvement: allow colors in workers (#335, @botverse)
+  * Improvement: use same color for same namespace. (#338, @lchenay)
+
+2.3.3 / 2016-11-09
+==================
+
+  * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
+  * Fix: Returning `localStorage` saved values (#331, Levi Thomason)
+  * Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
+
+2.3.2 / 2016-11-09
+==================
+
+  * Fix: be super-safe in index.js as well (@TooTallNate)
+  * Fix: should check whether process exists (Tom Newby)
+
+2.3.1 / 2016-11-09
+==================
+
+  * Fix: Added electron compatibility (#324, @paulcbetts)
+  * Improvement: Added performance optimizations (@tootallnate)
+  * Readme: Corrected PowerShell environment variable example (#252, @gimre)
+  * Misc: Removed yarn lock file from source control (#321, @fengmk2)
+
+2.3.0 / 2016-11-07
+==================
+
+  * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
+  * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
+  * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
+  * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
+  * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
+  * Package: Update "ms" to 0.7.2 (#315, @DevSide)
+  * Package: removed superfluous version property from bower.json (#207 @kkirsche)
+  * Readme: fix USE_COLORS to DEBUG_COLORS
+  * Readme: Doc fixes for format string sugar (#269, @mlucool)
+  * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
+  * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
+  * Readme: better docs for browser support (#224, @matthewmueller)
+  * Tooling: Added yarn integration for development (#317, @thebigredgeek)
+  * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
+  * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
+  * Misc: Updated contributors (@thebigredgeek)
+
+2.2.0 / 2015-05-09
+==================
+
+  * package: update "ms" to v0.7.1 (#202, @dougwilson)
+  * README: add logging to file example (#193, @DanielOchoa)
+  * README: fixed a typo (#191, @amir-s)
+  * browser: expose `storage` (#190, @stephenmathieson)
+  * Makefile: add a `distclean` target (#189, @stephenmathieson)
+
+2.1.3 / 2015-03-13
+==================
+
+  * Updated stdout/stderr example (#186)
+  * Updated example/stdout.js to match debug current behaviour
+  * Renamed example/stderr.js to stdout.js
+  * Update Readme.md (#184)
+  * replace high intensity foreground color for bold (#182, #183)
+
+2.1.2 / 2015-03-01
+==================
+
+  * dist: recompile
+  * update "ms" to v0.7.0
+  * package: update "browserify" to v9.0.3
+  * component: fix "ms.js" repo location
+  * changed bower package name
+  * updated documentation about using debug in a browser
+  * fix: security error on safari (#167, #168, @yields)
+
+2.1.1 / 2014-12-29
+==================
+
+  * browser: use `typeof` to check for `console` existence
+  * browser: check for `console.log` truthiness (fix IE 8/9)
+  * browser: add support for Chrome apps
+  * Readme: added Windows usage remarks
+  * Add `bower.json` to properly support bower install
+
+2.1.0 / 2014-10-15
+==================
+
+  * node: implement `DEBUG_FD` env variable support
+  * package: update "browserify" to v6.1.0
+  * package: add "license" field to package.json (#135, @panuhorsmalahti)
+
+2.0.0 / 2014-09-01
+==================
+
+  * package: update "browserify" to v5.11.0
+  * node: use stderr rather than stdout for logging (#29, @stephenmathieson)
+
+1.0.4 / 2014-07-15
+==================
+
+  * dist: recompile
+  * example: remove `console.info()` log usage
+  * example: add "Content-Type" UTF-8 header to browser example
+  * browser: place %c marker after the space character
+  * browser: reset the "content" color via `color: inherit`
+  * browser: add colors support for Firefox >= v31
+  * debug: prefer an instance `log()` function over the global one (#119)
+  * Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
+
+1.0.3 / 2014-07-09
+==================
+
+  * Add support for multiple wildcards in namespaces (#122, @seegno)
+  * browser: fix lint
+
+1.0.2 / 2014-06-10
+==================
+
+  * browser: update color palette (#113, @gscottolson)
+  * common: make console logging function configurable (#108, @timoxley)
+  * node: fix %o colors on old node <= 0.8.x
+  * Makefile: find node path using shell/which (#109, @timoxley)
+
+1.0.1 / 2014-06-06
+==================
+
+  * browser: use `removeItem()` to clear localStorage
+  * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
+  * package: add "contributors" section
+  * node: fix comment typo
+  * README: list authors
+
+1.0.0 / 2014-06-04
+==================
+
+  * make ms diff be global, not be scope
+  * debug: ignore empty strings in enable()
+  * node: make DEBUG_COLORS able to disable coloring
+  * *: export the `colors` array
+  * npmignore: don't publish the `dist` dir
+  * Makefile: refactor to use browserify
+  * package: add "browserify" as a dev dependency
+  * Readme: add Web Inspector Colors section
+  * node: reset terminal color for the debug content
+  * node: map "%o" to `util.inspect()`
+  * browser: map "%j" to `JSON.stringify()`
+  * debug: add custom "formatters"
+  * debug: use "ms" module for humanizing the diff
+  * Readme: add "bash" syntax highlighting
+  * browser: add Firebug color support
+  * browser: add colors for WebKit browsers
+  * node: apply log to `console`
+  * rewrite: abstract common logic for Node & browsers
+  * add .jshintrc file
+
+0.8.1 / 2014-04-14
+==================
+
+  * package: re-add the "component" section
+
+0.8.0 / 2014-03-30
+==================
+
+  * add `enable()` method for nodejs. Closes #27
+  * change from stderr to stdout
+  * remove unnecessary index.js file
+
+0.7.4 / 2013-11-13
+==================
+
+  * remove "browserify" key from package.json (fixes something in browserify)
+
+0.7.3 / 2013-10-30
+==================
+
+  * fix: catch localStorage security error when cookies are blocked (Chrome)
+  * add debug(err) support. Closes #46
+  * add .browser prop to package.json. Closes #42
+
+0.7.2 / 2013-02-06
+==================
+
+  * fix package.json
+  * fix: Mobile Safari (private mode) is broken with debug
+  * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
+
+0.7.1 / 2013-02-05
+==================
+
+  * add repository URL to package.json
+  * add DEBUG_COLORED to force colored output
+  * add browserify support
+  * fix component. Closes #24
+
+0.7.0 / 2012-05-04
+==================
+
+  * Added .component to package.json
+  * Added debug.component.js build
+
+0.6.0 / 2012-03-16
+==================
+
+  * Added support for "-" prefix in DEBUG [Vinay Pulim]
+  * Added `.enabled` flag to the node version [TooTallNate]
+
+0.5.0 / 2012-02-02
+==================
+
+  * Added: humanize diffs. Closes #8
+  * Added `debug.disable()` to the CS variant
+  * Removed padding. Closes #10
+  * Fixed: persist client-side variant again. Closes #9
+
+0.4.0 / 2012-02-01
+==================
+
+  * Added browser variant support for older browsers [TooTallNate]
+  * Added `debug.enable('project:*')` to browser variant [TooTallNate]
+  * Added padding to diff (moved it to the right)
+
+0.3.0 / 2012-01-26
+==================
+
+  * Added millisecond diff when isatty, otherwise UTC string
+
+0.2.0 / 2012-01-22
+==================
+
+  * Added wildcard support
+
+0.1.0 / 2011-12-02
+==================
+
+  * Added: remove colors unless stderr isatty [TooTallNate]
+
+0.0.1 / 2010-01-03
+==================
+
+  * Initial release
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/debug/README.md b/signaling_server/service/node_modules/engine.io/node_modules/debug/README.md
new file mode 100644 (file)
index 0000000..88dae35
--- /dev/null
@@ -0,0 +1,455 @@
+# debug
+[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug)  [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master)  [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers)
+[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors)
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.png">
+
+A tiny JavaScript debugging utility modelled after Node.js core's debugging
+technique. Works in Node.js and web browsers.
+
+## Installation
+
+```bash
+$ npm install debug
+```
+
+## Usage
+
+`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.
+
+Example [_app.js_](./examples/node/app.js):
+
+```js
+var debug = require('debug')('http')
+  , http = require('http')
+  , name = 'My App';
+
+// fake app
+
+debug('booting %o', name);
+
+http.createServer(function(req, res){
+  debug(req.method + ' ' + req.url);
+  res.end('hello\n');
+}).listen(3000, function(){
+  debug('listening');
+});
+
+// fake worker of some kind
+
+require('./worker');
+```
+
+Example [_worker.js_](./examples/node/worker.js):
+
+```js
+var a = require('debug')('worker:a')
+  , b = require('debug')('worker:b');
+
+function work() {
+  a('doing lots of uninteresting work');
+  setTimeout(work, Math.random() * 1000);
+}
+
+work();
+
+function workb() {
+  b('doing some work');
+  setTimeout(workb, Math.random() * 2000);
+}
+
+workb();
+```
+
+The `DEBUG` environment variable is then used to enable these based on space or
+comma-delimited names.
+
+Here are some examples:
+
+<img width="647" alt="screen shot 2017-08-08 at 12 53 04 pm" src="https://user-images.githubusercontent.com/71256/29091703-a6302cdc-7c38-11e7-8304-7c0b3bc600cd.png">
+<img width="647" alt="screen shot 2017-08-08 at 12 53 38 pm" src="https://user-images.githubusercontent.com/71256/29091700-a62a6888-7c38-11e7-800b-db911291ca2b.png">
+<img width="647" alt="screen shot 2017-08-08 at 12 53 25 pm" src="https://user-images.githubusercontent.com/71256/29091701-a62ea114-7c38-11e7-826a-2692bedca740.png">
+
+#### Windows command prompt notes
+
+##### CMD
+
+On Windows the environment variable is set using the `set` command.
+
+```cmd
+set DEBUG=*,-not_this
+```
+
+Example:
+
+```cmd
+set DEBUG=* & node app.js
+```
+
+##### PowerShell (VS Code default)
+
+PowerShell uses different syntax to set environment variables.
+
+```cmd
+$env:DEBUG = "*,-not_this"
+```
+
+Example:
+
+```cmd
+$env:DEBUG='app';node app.js
+```
+
+Then, run the program to be debugged as usual.
+
+npm script example:
+```js
+  "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js",
+```
+
+## Namespace Colors
+
+Every debug instance has a color generated for it based on its namespace name.
+This helps when visually parsing the debug output to identify which debug instance
+a debug line belongs to.
+
+#### Node.js
+
+In Node.js, colors are enabled when stderr is a TTY. You also _should_ install
+the [`supports-color`](https://npmjs.org/supports-color) module alongside debug,
+otherwise debug will only use a small handful of basic colors.
+
+<img width="521" src="https://user-images.githubusercontent.com/71256/29092181-47f6a9e6-7c3a-11e7-9a14-1928d8a711cd.png">
+
+#### Web Browser
+
+Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
+option. These are WebKit web inspectors, Firefox ([since version
+31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
+and the Firebug plugin for Firefox (any version).
+
+<img width="524" src="https://user-images.githubusercontent.com/71256/29092033-b65f9f2e-7c39-11e7-8e32-f6f0d8e865c1.png">
+
+
+## Millisecond diff
+
+When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.png">
+
+When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below:
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091956-6bd78372-7c39-11e7-8c55-c948396d6edd.png">
+
+
+## Conventions
+
+If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".  If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable.  You can then use it for normal output as well as debug output.
+
+## Wildcards
+
+The `*` character may be used as a wildcard. Suppose for example your library has
+debuggers named "connect:bodyParser", "connect:compress", "connect:session",
+instead of listing all three with
+`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do
+`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
+
+You can also exclude specific debuggers by prefixing them with a "-" character.
+For example, `DEBUG=*,-connect:*` would include all debuggers except those
+starting with "connect:".
+
+## Environment Variables
+
+When running through Node.js, you can set a few environment variables that will
+change the behavior of the debug logging:
+
+| Name      | Purpose                                         |
+|-----------|-------------------------------------------------|
+| `DEBUG`   | Enables/disables specific debugging namespaces. |
+| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY).  |
+| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |
+| `DEBUG_DEPTH` | Object inspection depth.                    |
+| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |
+
+
+__Note:__ The environment variables beginning with `DEBUG_` end up being
+converted into an Options object that gets used with `%o`/`%O` formatters.
+See the Node.js documentation for
+[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)
+for the complete list.
+
+## Formatters
+
+Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting.
+Below are the officially supported formatters:
+
+| Formatter | Representation |
+|-----------|----------------|
+| `%O`      | Pretty-print an Object on multiple lines. |
+| `%o`      | Pretty-print an Object all on a single line. |
+| `%s`      | String. |
+| `%d`      | Number (both integer and float). |
+| `%j`      | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |
+| `%%`      | Single percent sign ('%'). This does not consume an argument. |
+
+
+### Custom formatters
+
+You can add custom formatters by extending the `debug.formatters` object.
+For example, if you wanted to add support for rendering a Buffer as hex with
+`%h`, you could do something like:
+
+```js
+const createDebug = require('debug')
+createDebug.formatters.h = (v) => {
+  return v.toString('hex')
+}
+
+// …elsewhere
+const debug = createDebug('foo')
+debug('this is hex: %h', new Buffer('hello world'))
+//   foo this is hex: 68656c6c6f20776f726c6421 +0ms
+```
+
+
+## Browser Support
+
+You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),
+or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),
+if you don't want to build it yourself.
+
+Debug's enable state is currently persisted by `localStorage`.
+Consider the situation shown below where you have `worker:a` and `worker:b`,
+and wish to debug both. You can enable this using `localStorage.debug`:
+
+```js
+localStorage.debug = 'worker:*'
+```
+
+And then refresh the page.
+
+```js
+a = debug('worker:a');
+b = debug('worker:b');
+
+setInterval(function(){
+  a('doing some work');
+}, 1000);
+
+setInterval(function(){
+  b('doing some work');
+}, 1200);
+```
+
+
+## Output streams
+
+  By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:
+
+Example [_stdout.js_](./examples/node/stdout.js):
+
+```js
+var debug = require('debug');
+var error = debug('app:error');
+
+// by default stderr is used
+error('goes to stderr!');
+
+var log = debug('app:log');
+// set this namespace to log via console.log
+log.log = console.log.bind(console); // don't forget to bind to console!
+log('goes to stdout');
+error('still goes to stderr!');
+
+// set all output to go via console.info
+// overrides all per-namespace log settings
+debug.log = console.info.bind(console);
+error('now goes to stdout via console.info');
+log('still goes to stdout, but via console.info now');
+```
+
+## Extend
+You can simply extend debugger 
+```js
+const log = require('debug')('auth');
+
+//creates new debug instance with extended namespace
+const logSign = log.extend('sign');
+const logLogin = log.extend('login');
+
+log('hello'); // auth hello
+logSign('hello'); //auth:sign hello
+logLogin('hello'); //auth:login hello
+```
+
+## Set dynamically
+
+You can also enable debug dynamically by calling the `enable()` method :
+
+```js
+let debug = require('debug');
+
+console.log(1, debug.enabled('test'));
+
+debug.enable('test');
+console.log(2, debug.enabled('test'));
+
+debug.disable();
+console.log(3, debug.enabled('test'));
+
+```
+
+print :   
+```
+1 false
+2 true
+3 false
+```
+
+Usage :  
+`enable(namespaces)`  
+`namespaces` can include modes separated by a colon and wildcards.
+   
+Note that calling `enable()` completely overrides previously set DEBUG variable : 
+
+```
+$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))'
+=> false
+```
+
+`disable()`
+
+Will disable all namespaces. The functions returns the namespaces currently
+enabled (and skipped). This can be useful if you want to disable debugging
+temporarily without knowing what was enabled to begin with.
+
+For example:
+
+```js
+let debug = require('debug');
+debug.enable('foo:*,-foo:bar');
+let namespaces = debug.disable();
+debug.enable(namespaces);
+```
+
+Note: There is no guarantee that the string will be identical to the initial
+enable string, but semantically they will be identical.
+
+## Checking whether a debug target is enabled
+
+After you've created a debug instance, you can determine whether or not it is
+enabled by checking the `enabled` property:
+
+```javascript
+const debug = require('debug')('http');
+
+if (debug.enabled) {
+  // do stuff...
+}
+```
+
+You can also manually toggle this property to force the debug instance to be
+enabled or disabled.
+
+
+## Authors
+
+ - TJ Holowaychuk
+ - Nathan Rajlich
+ - Andrew Rhyne
+
+## Backers
+
+Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)]
+
+<a href="https://opencollective.com/debug/backer/0/website" target="_blank"><img src="https://opencollective.com/debug/backer/0/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/1/website" target="_blank"><img src="https://opencollective.com/debug/backer/1/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/2/website" target="_blank"><img src="https://opencollective.com/debug/backer/2/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/3/website" target="_blank"><img src="https://opencollective.com/debug/backer/3/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/4/website" target="_blank"><img src="https://opencollective.com/debug/backer/4/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/5/website" target="_blank"><img src="https://opencollective.com/debug/backer/5/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/6/website" target="_blank"><img src="https://opencollective.com/debug/backer/6/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/7/website" target="_blank"><img src="https://opencollective.com/debug/backer/7/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/8/website" target="_blank"><img src="https://opencollective.com/debug/backer/8/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/9/website" target="_blank"><img src="https://opencollective.com/debug/backer/9/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/10/website" target="_blank"><img src="https://opencollective.com/debug/backer/10/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/11/website" target="_blank"><img src="https://opencollective.com/debug/backer/11/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/12/website" target="_blank"><img src="https://opencollective.com/debug/backer/12/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/13/website" target="_blank"><img src="https://opencollective.com/debug/backer/13/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/14/website" target="_blank"><img src="https://opencollective.com/debug/backer/14/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/15/website" target="_blank"><img src="https://opencollective.com/debug/backer/15/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/16/website" target="_blank"><img src="https://opencollective.com/debug/backer/16/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/17/website" target="_blank"><img src="https://opencollective.com/debug/backer/17/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/18/website" target="_blank"><img src="https://opencollective.com/debug/backer/18/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/19/website" target="_blank"><img src="https://opencollective.com/debug/backer/19/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/20/website" target="_blank"><img src="https://opencollective.com/debug/backer/20/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/21/website" target="_blank"><img src="https://opencollective.com/debug/backer/21/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/22/website" target="_blank"><img src="https://opencollective.com/debug/backer/22/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/23/website" target="_blank"><img src="https://opencollective.com/debug/backer/23/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/24/website" target="_blank"><img src="https://opencollective.com/debug/backer/24/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/25/website" target="_blank"><img src="https://opencollective.com/debug/backer/25/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/26/website" target="_blank"><img src="https://opencollective.com/debug/backer/26/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/27/website" target="_blank"><img src="https://opencollective.com/debug/backer/27/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/28/website" target="_blank"><img src="https://opencollective.com/debug/backer/28/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/29/website" target="_blank"><img src="https://opencollective.com/debug/backer/29/avatar.svg"></a>
+
+
+## Sponsors
+
+Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)]
+
+<a href="https://opencollective.com/debug/sponsor/0/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/0/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/1/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/1/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/2/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/2/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/3/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/3/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/4/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/4/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/5/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/5/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/6/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/6/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/7/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/7/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/8/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/8/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/9/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/9/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/10/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/10/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/11/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/11/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/12/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/12/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/13/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/13/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/14/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/14/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/15/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/15/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/16/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/16/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/17/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/17/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/18/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/18/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/19/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/19/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/20/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/20/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/21/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/21/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/22/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/22/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/23/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/23/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/24/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/24/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/25/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/25/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/26/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/26/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/27/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/27/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/28/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/28/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/29/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/29/avatar.svg"></a>
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2014-2017 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/debug/dist/debug.js b/signaling_server/service/node_modules/engine.io/node_modules/debug/dist/debug.js
new file mode 100644 (file)
index 0000000..89ad0c2
--- /dev/null
@@ -0,0 +1,912 @@
+"use strict";
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
+
+function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
+
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+(function (f) {
+  if ((typeof exports === "undefined" ? "undefined" : _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.debug = f();
+  }
+})(function () {
+  var define, module, exports;
+  return function () {
+    function r(e, n, t) {
+      function o(i, f) {
+        if (!n[i]) {
+          if (!e[i]) {
+            var c = "function" == typeof require && require;
+            if (!f && c) return c(i, !0);
+            if (u) return u(i, !0);
+            var a = new Error("Cannot find module '" + i + "'");
+            throw a.code = "MODULE_NOT_FOUND", a;
+          }
+
+          var p = n[i] = {
+            exports: {}
+          };
+          e[i][0].call(p.exports, function (r) {
+            var n = e[i][1][r];
+            return o(n || r);
+          }, p, p.exports, r, e, n, t);
+        }
+
+        return n[i].exports;
+      }
+
+      for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) {
+        o(t[i]);
+      }
+
+      return o;
+    }
+
+    return r;
+  }()({
+    1: [function (require, module, exports) {
+      /**
+       * Helpers.
+       */
+      var s = 1000;
+      var m = s * 60;
+      var h = m * 60;
+      var d = h * 24;
+      var w = d * 7;
+      var y = d * 365.25;
+      /**
+       * Parse or format the given `val`.
+       *
+       * Options:
+       *
+       *  - `long` verbose formatting [false]
+       *
+       * @param {String|Number} val
+       * @param {Object} [options]
+       * @throws {Error} throw an error if val is not a non-empty string or a number
+       * @return {String|Number}
+       * @api public
+       */
+
+      module.exports = function (val, options) {
+        options = options || {};
+
+        var type = _typeof(val);
+
+        if (type === 'string' && val.length > 0) {
+          return parse(val);
+        } else if (type === 'number' && isNaN(val) === false) {
+          return options.long ? fmtLong(val) : fmtShort(val);
+        }
+
+        throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));
+      };
+      /**
+       * Parse the given `str` and return milliseconds.
+       *
+       * @param {String} str
+       * @return {Number}
+       * @api private
+       */
+
+
+      function parse(str) {
+        str = String(str);
+
+        if (str.length > 100) {
+          return;
+        }
+
+        var match = /^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);
+
+        if (!match) {
+          return;
+        }
+
+        var n = parseFloat(match[1]);
+        var type = (match[2] || 'ms').toLowerCase();
+
+        switch (type) {
+          case 'years':
+          case 'year':
+          case 'yrs':
+          case 'yr':
+          case 'y':
+            return n * y;
+
+          case 'weeks':
+          case 'week':
+          case 'w':
+            return n * w;
+
+          case 'days':
+          case 'day':
+          case 'd':
+            return n * d;
+
+          case 'hours':
+          case 'hour':
+          case 'hrs':
+          case 'hr':
+          case 'h':
+            return n * h;
+
+          case 'minutes':
+          case 'minute':
+          case 'mins':
+          case 'min':
+          case 'm':
+            return n * m;
+
+          case 'seconds':
+          case 'second':
+          case 'secs':
+          case 'sec':
+          case 's':
+            return n * s;
+
+          case 'milliseconds':
+          case 'millisecond':
+          case 'msecs':
+          case 'msec':
+          case 'ms':
+            return n;
+
+          default:
+            return undefined;
+        }
+      }
+      /**
+       * Short format for `ms`.
+       *
+       * @param {Number} ms
+       * @return {String}
+       * @api private
+       */
+
+
+      function fmtShort(ms) {
+        var msAbs = Math.abs(ms);
+
+        if (msAbs >= d) {
+          return Math.round(ms / d) + 'd';
+        }
+
+        if (msAbs >= h) {
+          return Math.round(ms / h) + 'h';
+        }
+
+        if (msAbs >= m) {
+          return Math.round(ms / m) + 'm';
+        }
+
+        if (msAbs >= s) {
+          return Math.round(ms / s) + 's';
+        }
+
+        return ms + 'ms';
+      }
+      /**
+       * Long format for `ms`.
+       *
+       * @param {Number} ms
+       * @return {String}
+       * @api private
+       */
+
+
+      function fmtLong(ms) {
+        var msAbs = Math.abs(ms);
+
+        if (msAbs >= d) {
+          return plural(ms, msAbs, d, 'day');
+        }
+
+        if (msAbs >= h) {
+          return plural(ms, msAbs, h, 'hour');
+        }
+
+        if (msAbs >= m) {
+          return plural(ms, msAbs, m, 'minute');
+        }
+
+        if (msAbs >= s) {
+          return plural(ms, msAbs, s, 'second');
+        }
+
+        return ms + ' ms';
+      }
+      /**
+       * Pluralization helper.
+       */
+
+
+      function plural(ms, msAbs, n, name) {
+        var isPlural = msAbs >= n * 1.5;
+        return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
+      }
+    }, {}],
+    2: [function (require, module, exports) {
+      // shim for using process in browser
+      var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it
+      // don't break things.  But we need to wrap it in a try catch in case it is
+      // wrapped in strict mode code which doesn't define any globals.  It's inside a
+      // function because try/catches deoptimize in certain engines.
+
+      var cachedSetTimeout;
+      var cachedClearTimeout;
+
+      function defaultSetTimout() {
+        throw new Error('setTimeout has not been defined');
+      }
+
+      function defaultClearTimeout() {
+        throw new Error('clearTimeout has not been defined');
+      }
+
+      (function () {
+        try {
+          if (typeof setTimeout === 'function') {
+            cachedSetTimeout = setTimeout;
+          } else {
+            cachedSetTimeout = defaultSetTimout;
+          }
+        } catch (e) {
+          cachedSetTimeout = defaultSetTimout;
+        }
+
+        try {
+          if (typeof clearTimeout === 'function') {
+            cachedClearTimeout = clearTimeout;
+          } else {
+            cachedClearTimeout = defaultClearTimeout;
+          }
+        } catch (e) {
+          cachedClearTimeout = defaultClearTimeout;
+        }
+      })();
+
+      function runTimeout(fun) {
+        if (cachedSetTimeout === setTimeout) {
+          //normal enviroments in sane situations
+          return setTimeout(fun, 0);
+        } // if setTimeout wasn't available but was latter defined
+
+
+        if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
+          cachedSetTimeout = setTimeout;
+          return setTimeout(fun, 0);
+        }
+
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedSetTimeout(fun, 0);
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+            return cachedSetTimeout.call(null, fun, 0);
+          } catch (e) {
+            // 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
+            return cachedSetTimeout.call(this, fun, 0);
+          }
+        }
+      }
+
+      function runClearTimeout(marker) {
+        if (cachedClearTimeout === clearTimeout) {
+          //normal enviroments in sane situations
+          return clearTimeout(marker);
+        } // if clearTimeout wasn't available but was latter defined
+
+
+        if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
+          cachedClearTimeout = clearTimeout;
+          return clearTimeout(marker);
+        }
+
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedClearTimeout(marker);
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+            return cachedClearTimeout.call(null, marker);
+          } catch (e) {
+            // 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.
+            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+            return cachedClearTimeout.call(this, marker);
+          }
+        }
+      }
+
+      var queue = [];
+      var draining = false;
+      var currentQueue;
+      var queueIndex = -1;
+
+      function cleanUpNextTick() {
+        if (!draining || !currentQueue) {
+          return;
+        }
+
+        draining = false;
+
+        if (currentQueue.length) {
+          queue = currentQueue.concat(queue);
+        } else {
+          queueIndex = -1;
+        }
+
+        if (queue.length) {
+          drainQueue();
+        }
+      }
+
+      function drainQueue() {
+        if (draining) {
+          return;
+        }
+
+        var timeout = runTimeout(cleanUpNextTick);
+        draining = true;
+        var len = queue.length;
+
+        while (len) {
+          currentQueue = queue;
+          queue = [];
+
+          while (++queueIndex < len) {
+            if (currentQueue) {
+              currentQueue[queueIndex].run();
+            }
+          }
+
+          queueIndex = -1;
+          len = queue.length;
+        }
+
+        currentQueue = null;
+        draining = false;
+        runClearTimeout(timeout);
+      }
+
+      process.nextTick = function (fun) {
+        var args = new Array(arguments.length - 1);
+
+        if (arguments.length > 1) {
+          for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+          }
+        }
+
+        queue.push(new Item(fun, args));
+
+        if (queue.length === 1 && !draining) {
+          runTimeout(drainQueue);
+        }
+      }; // v8 likes predictible objects
+
+
+      function Item(fun, array) {
+        this.fun = fun;
+        this.array = array;
+      }
+
+      Item.prototype.run = function () {
+        this.fun.apply(null, this.array);
+      };
+
+      process.title = 'browser';
+      process.browser = true;
+      process.env = {};
+      process.argv = [];
+      process.version = ''; // empty string to avoid regexp issues
+
+      process.versions = {};
+
+      function noop() {}
+
+      process.on = noop;
+      process.addListener = noop;
+      process.once = noop;
+      process.off = noop;
+      process.removeListener = noop;
+      process.removeAllListeners = noop;
+      process.emit = noop;
+      process.prependListener = noop;
+      process.prependOnceListener = noop;
+
+      process.listeners = function (name) {
+        return [];
+      };
+
+      process.binding = function (name) {
+        throw new Error('process.binding is not supported');
+      };
+
+      process.cwd = function () {
+        return '/';
+      };
+
+      process.chdir = function (dir) {
+        throw new Error('process.chdir is not supported');
+      };
+
+      process.umask = function () {
+        return 0;
+      };
+    }, {}],
+    3: [function (require, module, exports) {
+      /**
+       * This is the common logic for both the Node.js and web browser
+       * implementations of `debug()`.
+       */
+      function setup(env) {
+        createDebug.debug = createDebug;
+        createDebug.default = createDebug;
+        createDebug.coerce = coerce;
+        createDebug.disable = disable;
+        createDebug.enable = enable;
+        createDebug.enabled = enabled;
+        createDebug.humanize = require('ms');
+        Object.keys(env).forEach(function (key) {
+          createDebug[key] = env[key];
+        });
+        /**
+        * Active `debug` instances.
+        */
+
+        createDebug.instances = [];
+        /**
+        * The currently active debug mode names, and names to skip.
+        */
+
+        createDebug.names = [];
+        createDebug.skips = [];
+        /**
+        * Map of special "%n" handling functions, for the debug "format" argument.
+        *
+        * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+        */
+
+        createDebug.formatters = {};
+        /**
+        * Selects a color for a debug namespace
+        * @param {String} namespace The namespace string for the for the debug instance to be colored
+        * @return {Number|String} An ANSI color code for the given namespace
+        * @api private
+        */
+
+        function selectColor(namespace) {
+          var hash = 0;
+
+          for (var i = 0; i < namespace.length; i++) {
+            hash = (hash << 5) - hash + namespace.charCodeAt(i);
+            hash |= 0; // Convert to 32bit integer
+          }
+
+          return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+        }
+
+        createDebug.selectColor = selectColor;
+        /**
+        * Create a debugger with the given `namespace`.
+        *
+        * @param {String} namespace
+        * @return {Function}
+        * @api public
+        */
+
+        function createDebug(namespace) {
+          var prevTime;
+
+          function debug() {
+            for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+              args[_key] = arguments[_key];
+            }
+
+            // Disabled?
+            if (!debug.enabled) {
+              return;
+            }
+
+            var self = debug; // Set `diff` timestamp
+
+            var curr = Number(new Date());
+            var ms = curr - (prevTime || curr);
+            self.diff = ms;
+            self.prev = prevTime;
+            self.curr = curr;
+            prevTime = curr;
+            args[0] = createDebug.coerce(args[0]);
+
+            if (typeof args[0] !== 'string') {
+              // Anything else let's inspect with %O
+              args.unshift('%O');
+            } // Apply any `formatters` transformations
+
+
+            var index = 0;
+            args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
+              // If we encounter an escaped % then don't increase the array index
+              if (match === '%%') {
+                return match;
+              }
+
+              index++;
+              var formatter = createDebug.formatters[format];
+
+              if (typeof formatter === 'function') {
+                var val = args[index];
+                match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`
+
+                args.splice(index, 1);
+                index--;
+              }
+
+              return match;
+            }); // Apply env-specific formatting (colors, etc.)
+
+            createDebug.formatArgs.call(self, args);
+            var logFn = self.log || createDebug.log;
+            logFn.apply(self, args);
+          }
+
+          debug.namespace = namespace;
+          debug.enabled = createDebug.enabled(namespace);
+          debug.useColors = createDebug.useColors();
+          debug.color = selectColor(namespace);
+          debug.destroy = destroy;
+          debug.extend = extend; // Debug.formatArgs = formatArgs;
+          // debug.rawLog = rawLog;
+          // env-specific initialization logic for debug instances
+
+          if (typeof createDebug.init === 'function') {
+            createDebug.init(debug);
+          }
+
+          createDebug.instances.push(debug);
+          return debug;
+        }
+
+        function destroy() {
+          var index = createDebug.instances.indexOf(this);
+
+          if (index !== -1) {
+            createDebug.instances.splice(index, 1);
+            return true;
+          }
+
+          return false;
+        }
+
+        function extend(namespace, delimiter) {
+          var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
+          newDebug.log = this.log;
+          return newDebug;
+        }
+        /**
+        * Enables a debug mode by namespaces. This can include modes
+        * separated by a colon and wildcards.
+        *
+        * @param {String} namespaces
+        * @api public
+        */
+
+
+        function enable(namespaces) {
+          createDebug.save(namespaces);
+          createDebug.names = [];
+          createDebug.skips = [];
+          var i;
+          var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+          var len = split.length;
+
+          for (i = 0; i < len; i++) {
+            if (!split[i]) {
+              // ignore empty strings
+              continue;
+            }
+
+            namespaces = split[i].replace(/\*/g, '.*?');
+
+            if (namespaces[0] === '-') {
+              createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+            } else {
+              createDebug.names.push(new RegExp('^' + namespaces + '$'));
+            }
+          }
+
+          for (i = 0; i < createDebug.instances.length; i++) {
+            var instance = createDebug.instances[i];
+            instance.enabled = createDebug.enabled(instance.namespace);
+          }
+        }
+        /**
+        * Disable debug output.
+        *
+        * @return {String} namespaces
+        * @api public
+        */
+
+
+        function disable() {
+          var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) {
+            return '-' + namespace;
+          }))).join(',');
+          createDebug.enable('');
+          return namespaces;
+        }
+        /**
+        * Returns true if the given mode name is enabled, false otherwise.
+        *
+        * @param {String} name
+        * @return {Boolean}
+        * @api public
+        */
+
+
+        function enabled(name) {
+          if (name[name.length - 1] === '*') {
+            return true;
+          }
+
+          var i;
+          var len;
+
+          for (i = 0, len = createDebug.skips.length; i < len; i++) {
+            if (createDebug.skips[i].test(name)) {
+              return false;
+            }
+          }
+
+          for (i = 0, len = createDebug.names.length; i < len; i++) {
+            if (createDebug.names[i].test(name)) {
+              return true;
+            }
+          }
+
+          return false;
+        }
+        /**
+        * Convert regexp to namespace
+        *
+        * @param {RegExp} regxep
+        * @return {String} namespace
+        * @api private
+        */
+
+
+        function toNamespace(regexp) {
+          return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*');
+        }
+        /**
+        * Coerce `val`.
+        *
+        * @param {Mixed} val
+        * @return {Mixed}
+        * @api private
+        */
+
+
+        function coerce(val) {
+          if (val instanceof Error) {
+            return val.stack || val.message;
+          }
+
+          return val;
+        }
+
+        createDebug.enable(createDebug.load());
+        return createDebug;
+      }
+
+      module.exports = setup;
+    }, {
+      "ms": 1
+    }],
+    4: [function (require, module, exports) {
+      (function (process) {
+        /* eslint-env browser */
+
+        /**
+         * This is the web browser implementation of `debug()`.
+         */
+        exports.log = log;
+        exports.formatArgs = formatArgs;
+        exports.save = save;
+        exports.load = load;
+        exports.useColors = useColors;
+        exports.storage = localstorage();
+        /**
+         * Colors.
+         */
+
+        exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];
+        /**
+         * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+         * and the Firebug extension (any Firefox version) are known
+         * to support "%c" CSS customizations.
+         *
+         * TODO: add a `localStorage` variable to explicitly enable/disable colors
+         */
+        // eslint-disable-next-line complexity
+
+        function useColors() {
+          // NB: In an Electron preload script, document will be defined but not fully
+          // initialized. Since we know we're in Chrome, we'll just detect this case
+          // explicitly
+          if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
+            return true;
+          } // Internet Explorer and Edge do not support colors.
+
+
+          if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+            return false;
+          } // Is webkit? http://stackoverflow.com/a/16459606/376773
+          // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+
+
+          return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
+          typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
+          // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+          typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
+          typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
+        }
+        /**
+         * Colorize log arguments if enabled.
+         *
+         * @api public
+         */
+
+
+        function formatArgs(args) {
+          args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);
+
+          if (!this.useColors) {
+            return;
+          }
+
+          var c = 'color: ' + this.color;
+          args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other
+          // arguments passed either before or after the %c, so we need to
+          // figure out the correct index to insert the CSS into
+
+          var index = 0;
+          var lastC = 0;
+          args[0].replace(/%[a-zA-Z%]/g, function (match) {
+            if (match === '%%') {
+              return;
+            }
+
+            index++;
+
+            if (match === '%c') {
+              // We only are interested in the *last* %c
+              // (the user may have provided their own)
+              lastC = index;
+            }
+          });
+          args.splice(lastC, 0, c);
+        }
+        /**
+         * Invokes `console.log()` when available.
+         * No-op when `console.log` is not a "function".
+         *
+         * @api public
+         */
+
+
+        function log() {
+          var _console;
+
+          // This hackery is required for IE8/9, where
+          // the `console.log` function doesn't have 'apply'
+          return (typeof console === "undefined" ? "undefined" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);
+        }
+        /**
+         * Save `namespaces`.
+         *
+         * @param {String} namespaces
+         * @api private
+         */
+
+
+        function save(namespaces) {
+          try {
+            if (namespaces) {
+              exports.storage.setItem('debug', namespaces);
+            } else {
+              exports.storage.removeItem('debug');
+            }
+          } catch (error) {// Swallow
+            // XXX (@Qix-) should we be logging these?
+          }
+        }
+        /**
+         * Load `namespaces`.
+         *
+         * @return {String} returns the previously persisted debug modes
+         * @api private
+         */
+
+
+        function load() {
+          var r;
+
+          try {
+            r = exports.storage.getItem('debug');
+          } catch (error) {} // Swallow
+          // XXX (@Qix-) should we be logging these?
+          // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+
+
+          if (!r && typeof process !== 'undefined' && 'env' in process) {
+            r = process.env.DEBUG;
+          }
+
+          return r;
+        }
+        /**
+         * Localstorage attempts to return the localstorage.
+         *
+         * This is necessary because safari throws
+         * when a user disables cookies/localstorage
+         * and you attempt to access it.
+         *
+         * @return {LocalStorage}
+         * @api private
+         */
+
+
+        function localstorage() {
+          try {
+            // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
+            // The Browser also has localStorage in the global context.
+            return localStorage;
+          } catch (error) {// Swallow
+            // XXX (@Qix-) should we be logging these?
+          }
+        }
+
+        module.exports = require('./common')(exports);
+        var formatters = module.exports.formatters;
+        /**
+         * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+         */
+
+        formatters.j = function (v) {
+          try {
+            return JSON.stringify(v);
+          } catch (error) {
+            return '[UnexpectedJSONParseError]: ' + error.message;
+          }
+        };
+      }).call(this, require('_process'));
+    }, {
+      "./common": 3,
+      "_process": 2
+    }]
+  }, {}, [4])(4);
+});
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/debug/package.json b/signaling_server/service/node_modules/engine.io/node_modules/debug/package.json
new file mode 100644 (file)
index 0000000..9063b39
--- /dev/null
@@ -0,0 +1,105 @@
+{
+  "_args": [
+    [
+      "debug@4.1.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "debug@4.1.1",
+  "_id": "debug@4.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+  "_location": "/engine.io/debug",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "debug@4.1.1",
+    "name": "debug",
+    "escapedName": "debug",
+    "rawSpec": "4.1.1",
+    "saveSpec": null,
+    "fetchSpec": "4.1.1"
+  },
+  "_requiredBy": [
+    "/engine.io"
+  ],
+  "_resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+  "_spec": "4.1.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca"
+  },
+  "browser": "./src/browser.js",
+  "bugs": {
+    "url": "https://github.com/visionmedia/debug/issues"
+  },
+  "contributors": [
+    {
+      "name": "Nathan Rajlich",
+      "email": "nathan@tootallnate.net",
+      "url": "http://n8.io"
+    },
+    {
+      "name": "Andrew Rhyne",
+      "email": "rhyneandrew@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "ms": "^2.1.1"
+  },
+  "description": "small debugging utility",
+  "devDependencies": {
+    "@babel/cli": "^7.0.0",
+    "@babel/core": "^7.0.0",
+    "@babel/preset-env": "^7.0.0",
+    "browserify": "14.4.0",
+    "chai": "^3.5.0",
+    "concurrently": "^3.1.0",
+    "coveralls": "^3.0.2",
+    "istanbul": "^0.4.5",
+    "karma": "^3.0.0",
+    "karma-chai": "^0.1.0",
+    "karma-mocha": "^1.3.0",
+    "karma-phantomjs-launcher": "^1.0.2",
+    "mocha": "^5.2.0",
+    "mocha-lcov-reporter": "^1.2.0",
+    "rimraf": "^2.5.4",
+    "xo": "^0.23.0"
+  },
+  "files": [
+    "src",
+    "dist/debug.js",
+    "LICENSE",
+    "README.md"
+  ],
+  "homepage": "https://github.com/visionmedia/debug#readme",
+  "keywords": [
+    "debug",
+    "log",
+    "debugger"
+  ],
+  "license": "MIT",
+  "main": "./src/index.js",
+  "name": "debug",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/visionmedia/debug.git"
+  },
+  "scripts": {
+    "build": "npm run build:debug && npm run build:test",
+    "build:debug": "babel -o dist/debug.js dist/debug.es6.js > dist/debug.js",
+    "build:test": "babel -d dist test.js",
+    "clean": "rimraf dist coverage",
+    "lint": "xo",
+    "prebuild:debug": "mkdir -p dist && browserify --standalone debug -o dist/debug.es6.js .",
+    "pretest:browser": "npm run build",
+    "test": "npm run test:node && npm run test:browser",
+    "test:browser": "karma start --single-run",
+    "test:coverage": "cat ./coverage/lcov.info | coveralls",
+    "test:node": "istanbul cover _mocha -- test.js"
+  },
+  "unpkg": "./dist/debug.js",
+  "version": "4.1.1"
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/debug/src/browser.js b/signaling_server/service/node_modules/engine.io/node_modules/debug/src/browser.js
new file mode 100644 (file)
index 0000000..5f34c0d
--- /dev/null
@@ -0,0 +1,264 @@
+/* eslint-env browser */
+
+/**
+ * This is the web browser implementation of `debug()`.
+ */
+
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = localstorage();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+       '#0000CC',
+       '#0000FF',
+       '#0033CC',
+       '#0033FF',
+       '#0066CC',
+       '#0066FF',
+       '#0099CC',
+       '#0099FF',
+       '#00CC00',
+       '#00CC33',
+       '#00CC66',
+       '#00CC99',
+       '#00CCCC',
+       '#00CCFF',
+       '#3300CC',
+       '#3300FF',
+       '#3333CC',
+       '#3333FF',
+       '#3366CC',
+       '#3366FF',
+       '#3399CC',
+       '#3399FF',
+       '#33CC00',
+       '#33CC33',
+       '#33CC66',
+       '#33CC99',
+       '#33CCCC',
+       '#33CCFF',
+       '#6600CC',
+       '#6600FF',
+       '#6633CC',
+       '#6633FF',
+       '#66CC00',
+       '#66CC33',
+       '#9900CC',
+       '#9900FF',
+       '#9933CC',
+       '#9933FF',
+       '#99CC00',
+       '#99CC33',
+       '#CC0000',
+       '#CC0033',
+       '#CC0066',
+       '#CC0099',
+       '#CC00CC',
+       '#CC00FF',
+       '#CC3300',
+       '#CC3333',
+       '#CC3366',
+       '#CC3399',
+       '#CC33CC',
+       '#CC33FF',
+       '#CC6600',
+       '#CC6633',
+       '#CC9900',
+       '#CC9933',
+       '#CCCC00',
+       '#CCCC33',
+       '#FF0000',
+       '#FF0033',
+       '#FF0066',
+       '#FF0099',
+       '#FF00CC',
+       '#FF00FF',
+       '#FF3300',
+       '#FF3333',
+       '#FF3366',
+       '#FF3399',
+       '#FF33CC',
+       '#FF33FF',
+       '#FF6600',
+       '#FF6633',
+       '#FF9900',
+       '#FF9933',
+       '#FFCC00',
+       '#FFCC33'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+// eslint-disable-next-line complexity
+function useColors() {
+       // NB: In an Electron preload script, document will be defined but not fully
+       // initialized. Since we know we're in Chrome, we'll just detect this case
+       // explicitly
+       if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
+               return true;
+       }
+
+       // Internet Explorer and Edge do not support colors.
+       if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+               return false;
+       }
+
+       // Is webkit? http://stackoverflow.com/a/16459606/376773
+       // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+       return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+               // Is firebug? http://stackoverflow.com/a/398120/376773
+               (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+               // Is firefox >= v31?
+               // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+               (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+               // Double check webkit in userAgent just in case we are in a worker
+               (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+       args[0] = (this.useColors ? '%c' : '') +
+               this.namespace +
+               (this.useColors ? ' %c' : ' ') +
+               args[0] +
+               (this.useColors ? '%c ' : ' ') +
+               '+' + module.exports.humanize(this.diff);
+
+       if (!this.useColors) {
+               return;
+       }
+
+       const c = 'color: ' + this.color;
+       args.splice(1, 0, c, 'color: inherit');
+
+       // The final "%c" is somewhat tricky, because there could be other
+       // arguments passed either before or after the %c, so we need to
+       // figure out the correct index to insert the CSS into
+       let index = 0;
+       let lastC = 0;
+       args[0].replace(/%[a-zA-Z%]/g, match => {
+               if (match === '%%') {
+                       return;
+               }
+               index++;
+               if (match === '%c') {
+                       // We only are interested in the *last* %c
+                       // (the user may have provided their own)
+                       lastC = index;
+               }
+       });
+
+       args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.log()` when available.
+ * No-op when `console.log` is not a "function".
+ *
+ * @api public
+ */
+function log(...args) {
+       // This hackery is required for IE8/9, where
+       // the `console.log` function doesn't have 'apply'
+       return typeof console === 'object' &&
+               console.log &&
+               console.log(...args);
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+function save(namespaces) {
+       try {
+               if (namespaces) {
+                       exports.storage.setItem('debug', namespaces);
+               } else {
+                       exports.storage.removeItem('debug');
+               }
+       } catch (error) {
+               // Swallow
+               // XXX (@Qix-) should we be logging these?
+       }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+function load() {
+       let r;
+       try {
+               r = exports.storage.getItem('debug');
+       } catch (error) {
+               // Swallow
+               // XXX (@Qix-) should we be logging these?
+       }
+
+       // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+       if (!r && typeof process !== 'undefined' && 'env' in process) {
+               r = process.env.DEBUG;
+       }
+
+       return r;
+}
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+       try {
+               // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
+               // The Browser also has localStorage in the global context.
+               return localStorage;
+       } catch (error) {
+               // Swallow
+               // XXX (@Qix-) should we be logging these?
+       }
+}
+
+module.exports = require('./common')(exports);
+
+const {formatters} = module.exports;
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+formatters.j = function (v) {
+       try {
+               return JSON.stringify(v);
+       } catch (error) {
+               return '[UnexpectedJSONParseError]: ' + error.message;
+       }
+};
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/debug/src/common.js b/signaling_server/service/node_modules/engine.io/node_modules/debug/src/common.js
new file mode 100644 (file)
index 0000000..2f82b8d
--- /dev/null
@@ -0,0 +1,266 @@
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ */
+
+function setup(env) {
+       createDebug.debug = createDebug;
+       createDebug.default = createDebug;
+       createDebug.coerce = coerce;
+       createDebug.disable = disable;
+       createDebug.enable = enable;
+       createDebug.enabled = enabled;
+       createDebug.humanize = require('ms');
+
+       Object.keys(env).forEach(key => {
+               createDebug[key] = env[key];
+       });
+
+       /**
+       * Active `debug` instances.
+       */
+       createDebug.instances = [];
+
+       /**
+       * The currently active debug mode names, and names to skip.
+       */
+
+       createDebug.names = [];
+       createDebug.skips = [];
+
+       /**
+       * Map of special "%n" handling functions, for the debug "format" argument.
+       *
+       * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+       */
+       createDebug.formatters = {};
+
+       /**
+       * Selects a color for a debug namespace
+       * @param {String} namespace The namespace string for the for the debug instance to be colored
+       * @return {Number|String} An ANSI color code for the given namespace
+       * @api private
+       */
+       function selectColor(namespace) {
+               let hash = 0;
+
+               for (let i = 0; i < namespace.length; i++) {
+                       hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
+                       hash |= 0; // Convert to 32bit integer
+               }
+
+               return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+       }
+       createDebug.selectColor = selectColor;
+
+       /**
+       * Create a debugger with the given `namespace`.
+       *
+       * @param {String} namespace
+       * @return {Function}
+       * @api public
+       */
+       function createDebug(namespace) {
+               let prevTime;
+
+               function debug(...args) {
+                       // Disabled?
+                       if (!debug.enabled) {
+                               return;
+                       }
+
+                       const self = debug;
+
+                       // Set `diff` timestamp
+                       const curr = Number(new Date());
+                       const ms = curr - (prevTime || curr);
+                       self.diff = ms;
+                       self.prev = prevTime;
+                       self.curr = curr;
+                       prevTime = curr;
+
+                       args[0] = createDebug.coerce(args[0]);
+
+                       if (typeof args[0] !== 'string') {
+                               // Anything else let's inspect with %O
+                               args.unshift('%O');
+                       }
+
+                       // Apply any `formatters` transformations
+                       let index = 0;
+                       args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
+                               // If we encounter an escaped % then don't increase the array index
+                               if (match === '%%') {
+                                       return match;
+                               }
+                               index++;
+                               const formatter = createDebug.formatters[format];
+                               if (typeof formatter === 'function') {
+                                       const val = args[index];
+                                       match = formatter.call(self, val);
+
+                                       // Now we need to remove `args[index]` since it's inlined in the `format`
+                                       args.splice(index, 1);
+                                       index--;
+                               }
+                               return match;
+                       });
+
+                       // Apply env-specific formatting (colors, etc.)
+                       createDebug.formatArgs.call(self, args);
+
+                       const logFn = self.log || createDebug.log;
+                       logFn.apply(self, args);
+               }
+
+               debug.namespace = namespace;
+               debug.enabled = createDebug.enabled(namespace);
+               debug.useColors = createDebug.useColors();
+               debug.color = selectColor(namespace);
+               debug.destroy = destroy;
+               debug.extend = extend;
+               // Debug.formatArgs = formatArgs;
+               // debug.rawLog = rawLog;
+
+               // env-specific initialization logic for debug instances
+               if (typeof createDebug.init === 'function') {
+                       createDebug.init(debug);
+               }
+
+               createDebug.instances.push(debug);
+
+               return debug;
+       }
+
+       function destroy() {
+               const index = createDebug.instances.indexOf(this);
+               if (index !== -1) {
+                       createDebug.instances.splice(index, 1);
+                       return true;
+               }
+               return false;
+       }
+
+       function extend(namespace, delimiter) {
+               const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
+               newDebug.log = this.log;
+               return newDebug;
+       }
+
+       /**
+       * Enables a debug mode by namespaces. This can include modes
+       * separated by a colon and wildcards.
+       *
+       * @param {String} namespaces
+       * @api public
+       */
+       function enable(namespaces) {
+               createDebug.save(namespaces);
+
+               createDebug.names = [];
+               createDebug.skips = [];
+
+               let i;
+               const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+               const len = split.length;
+
+               for (i = 0; i < len; i++) {
+                       if (!split[i]) {
+                               // ignore empty strings
+                               continue;
+                       }
+
+                       namespaces = split[i].replace(/\*/g, '.*?');
+
+                       if (namespaces[0] === '-') {
+                               createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+                       } else {
+                               createDebug.names.push(new RegExp('^' + namespaces + '$'));
+                       }
+               }
+
+               for (i = 0; i < createDebug.instances.length; i++) {
+                       const instance = createDebug.instances[i];
+                       instance.enabled = createDebug.enabled(instance.namespace);
+               }
+       }
+
+       /**
+       * Disable debug output.
+       *
+       * @return {String} namespaces
+       * @api public
+       */
+       function disable() {
+               const namespaces = [
+                       ...createDebug.names.map(toNamespace),
+                       ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)
+               ].join(',');
+               createDebug.enable('');
+               return namespaces;
+       }
+
+       /**
+       * Returns true if the given mode name is enabled, false otherwise.
+       *
+       * @param {String} name
+       * @return {Boolean}
+       * @api public
+       */
+       function enabled(name) {
+               if (name[name.length - 1] === '*') {
+                       return true;
+               }
+
+               let i;
+               let len;
+
+               for (i = 0, len = createDebug.skips.length; i < len; i++) {
+                       if (createDebug.skips[i].test(name)) {
+                               return false;
+                       }
+               }
+
+               for (i = 0, len = createDebug.names.length; i < len; i++) {
+                       if (createDebug.names[i].test(name)) {
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+
+       /**
+       * Convert regexp to namespace
+       *
+       * @param {RegExp} regxep
+       * @return {String} namespace
+       * @api private
+       */
+       function toNamespace(regexp) {
+               return regexp.toString()
+                       .substring(2, regexp.toString().length - 2)
+                       .replace(/\.\*\?$/, '*');
+       }
+
+       /**
+       * Coerce `val`.
+       *
+       * @param {Mixed} val
+       * @return {Mixed}
+       * @api private
+       */
+       function coerce(val) {
+               if (val instanceof Error) {
+                       return val.stack || val.message;
+               }
+               return val;
+       }
+
+       createDebug.enable(createDebug.load());
+
+       return createDebug;
+}
+
+module.exports = setup;
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/debug/src/index.js b/signaling_server/service/node_modules/engine.io/node_modules/debug/src/index.js
new file mode 100644 (file)
index 0000000..bf4c57f
--- /dev/null
@@ -0,0 +1,10 @@
+/**
+ * Detect Electron renderer / nwjs process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {
+       module.exports = require('./browser.js');
+} else {
+       module.exports = require('./node.js');
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/debug/src/node.js b/signaling_server/service/node_modules/engine.io/node_modules/debug/src/node.js
new file mode 100644 (file)
index 0000000..5e1f154
--- /dev/null
@@ -0,0 +1,257 @@
+/**
+ * Module dependencies.
+ */
+
+const tty = require('tty');
+const util = require('util');
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ */
+
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+
+/**
+ * Colors.
+ */
+
+exports.colors = [6, 2, 3, 4, 5, 1];
+
+try {
+       // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)
+       // eslint-disable-next-line import/no-extraneous-dependencies
+       const supportsColor = require('supports-color');
+
+       if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
+               exports.colors = [
+                       20,
+                       21,
+                       26,
+                       27,
+                       32,
+                       33,
+                       38,
+                       39,
+                       40,
+                       41,
+                       42,
+                       43,
+                       44,
+                       45,
+                       56,
+                       57,
+                       62,
+                       63,
+                       68,
+                       69,
+                       74,
+                       75,
+                       76,
+                       77,
+                       78,
+                       79,
+                       80,
+                       81,
+                       92,
+                       93,
+                       98,
+                       99,
+                       112,
+                       113,
+                       128,
+                       129,
+                       134,
+                       135,
+                       148,
+                       149,
+                       160,
+                       161,
+                       162,
+                       163,
+                       164,
+                       165,
+                       166,
+                       167,
+                       168,
+                       169,
+                       170,
+                       171,
+                       172,
+                       173,
+                       178,
+                       179,
+                       184,
+                       185,
+                       196,
+                       197,
+                       198,
+                       199,
+                       200,
+                       201,
+                       202,
+                       203,
+                       204,
+                       205,
+                       206,
+                       207,
+                       208,
+                       209,
+                       214,
+                       215,
+                       220,
+                       221
+               ];
+       }
+} catch (error) {
+       // Swallow - we only care if `supports-color` is available; it doesn't have to be.
+}
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(key => {
+       return /^debug_/i.test(key);
+}).reduce((obj, key) => {
+       // Camel-case
+       const prop = key
+               .substring(6)
+               .toLowerCase()
+               .replace(/_([a-z])/g, (_, k) => {
+                       return k.toUpperCase();
+               });
+
+       // Coerce string value into JS value
+       let val = process.env[key];
+       if (/^(yes|on|true|enabled)$/i.test(val)) {
+               val = true;
+       } else if (/^(no|off|false|disabled)$/i.test(val)) {
+               val = false;
+       } else if (val === 'null') {
+               val = null;
+       } else {
+               val = Number(val);
+       }
+
+       obj[prop] = val;
+       return obj;
+}, {});
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+       return 'colors' in exports.inspectOpts ?
+               Boolean(exports.inspectOpts.colors) :
+               tty.isatty(process.stderr.fd);
+}
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+       const {namespace: name, useColors} = this;
+
+       if (useColors) {
+               const c = this.color;
+               const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c);
+               const prefix = `  ${colorCode};1m${name} \u001B[0m`;
+
+               args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+               args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m');
+       } else {
+               args[0] = getDate() + name + ' ' + args[0];
+       }
+}
+
+function getDate() {
+       if (exports.inspectOpts.hideDate) {
+               return '';
+       }
+       return new Date().toISOString() + ' ';
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to stderr.
+ */
+
+function log(...args) {
+       return process.stderr.write(util.format(...args) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+function save(namespaces) {
+       if (namespaces) {
+               process.env.DEBUG = namespaces;
+       } else {
+               // If you set a process.env field to null or undefined, it gets cast to the
+               // string 'null' or 'undefined'. Just delete instead.
+               delete process.env.DEBUG;
+       }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+       return process.env.DEBUG;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init(debug) {
+       debug.inspectOpts = {};
+
+       const keys = Object.keys(exports.inspectOpts);
+       for (let i = 0; i < keys.length; i++) {
+               debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+       }
+}
+
+module.exports = require('./common')(exports);
+
+const {formatters} = module.exports;
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+formatters.o = function (v) {
+       this.inspectOpts.colors = this.useColors;
+       return util.inspect(v, this.inspectOpts)
+               .replace(/\s*\n\s*/g, ' ');
+};
+
+/**
+ * Map %O to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+formatters.O = function (v) {
+       this.inspectOpts.colors = this.useColors;
+       return util.inspect(v, this.inspectOpts);
+};
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/README.md b/signaling_server/service/node_modules/engine.io/node_modules/ws/README.md
new file mode 100644 (file)
index 0000000..6aea136
--- /dev/null
@@ -0,0 +1,496 @@
+# ws: a Node.js WebSocket library
+
+[![Version npm](https://img.shields.io/npm/v/ws.svg?logo=npm)](https://www.npmjs.com/package/ws)
+[![Build](https://img.shields.io/github/workflow/status/websockets/ws/CI/master?label=build&logo=github)](https://github.com/websockets/ws/actions?query=workflow%3ACI+branch%3Amaster)
+[![Windows x86 Build](https://img.shields.io/appveyor/ci/lpinca/ws/master.svg?logo=appveyor)](https://ci.appveyor.com/project/lpinca/ws)
+[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg)](https://coveralls.io/github/websockets/ws)
+
+ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and
+server implementation.
+
+Passes the quite extensive Autobahn test suite: [server][server-report],
+[client][client-report].
+
+**Note**: This module does not work in the browser. The client in the docs is a
+reference to a back end with the role of a client in the WebSocket
+communication. Browser clients must use the native
+[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket)
+object. To make the same code work seamlessly on Node.js and the browser, you
+can use one of the many wrappers available on npm, like
+[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws).
+
+## Table of Contents
+
+- [Protocol support](#protocol-support)
+- [Installing](#installing)
+  - [Opt-in for performance and spec compliance](#opt-in-for-performance-and-spec-compliance)
+- [API docs](#api-docs)
+- [WebSocket compression](#websocket-compression)
+- [Usage examples](#usage-examples)
+  - [Sending and receiving text data](#sending-and-receiving-text-data)
+  - [Sending binary data](#sending-binary-data)
+  - [Simple server](#simple-server)
+  - [External HTTP/S server](#external-https-server)
+  - [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server)
+  - [Client authentication](#client-authentication)
+  - [Server broadcast](#server-broadcast)
+  - [echo.websocket.org demo](#echowebsocketorg-demo)
+  - [Use the Node.js streams API](#use-the-nodejs-streams-api)
+  - [Other examples](#other-examples)
+- [FAQ](#faq)
+  - [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client)
+  - [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections)
+  - [How to connect via a proxy?](#how-to-connect-via-a-proxy)
+- [Changelog](#changelog)
+- [License](#license)
+
+## Protocol support
+
+- **HyBi drafts 07-12** (Use the option `protocolVersion: 8`)
+- **HyBi drafts 13-17** (Current default, alternatively option
+  `protocolVersion: 13`)
+
+## Installing
+
+```
+npm install ws
+```
+
+### Opt-in for performance and spec compliance
+
+There are 2 optional modules that can be installed along side with the ws
+module. These modules are binary addons which improve certain operations.
+Prebuilt binaries are available for the most popular platforms so you don't
+necessarily need to have a C++ compiler installed on your machine.
+
+- `npm install --save-optional bufferutil`: Allows to efficiently perform
+  operations such as masking and unmasking the data payload of the WebSocket
+  frames.
+- `npm install --save-optional utf-8-validate`: Allows to efficiently check if a
+  message contains valid UTF-8 as required by the spec.
+
+## API docs
+
+See [`/doc/ws.md`](./doc/ws.md) for Node.js-like documentation of ws classes and
+utility functions.
+
+## WebSocket compression
+
+ws supports the [permessage-deflate extension][permessage-deflate] which enables
+the client and server to negotiate a compression algorithm and its parameters,
+and then selectively apply it to the data payloads of each WebSocket message.
+
+The extension is disabled by default on the server and enabled by default on the
+client. It adds a significant overhead in terms of performance and memory
+consumption so we suggest to enable it only if it is really needed.
+
+Note that Node.js has a variety of issues with high-performance compression,
+where increased concurrency, especially on Linux, can lead to [catastrophic
+memory fragmentation][node-zlib-bug] and slow performance. If you intend to use
+permessage-deflate in production, it is worthwhile to set up a test
+representative of your workload and ensure Node.js/zlib will handle it with
+acceptable performance and memory usage.
+
+Tuning of permessage-deflate can be done via the options defined below. You can
+also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly
+into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs].
+
+See [the docs][ws-server-options] for more options.
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({
+  port: 8080,
+  perMessageDeflate: {
+    zlibDeflateOptions: {
+      // See zlib defaults.
+      chunkSize: 1024,
+      memLevel: 7,
+      level: 3
+    },
+    zlibInflateOptions: {
+      chunkSize: 10 * 1024
+    },
+    // Other options settable:
+    clientNoContextTakeover: true, // Defaults to negotiated value.
+    serverNoContextTakeover: true, // Defaults to negotiated value.
+    serverMaxWindowBits: 10, // Defaults to negotiated value.
+    // Below options specified as default values.
+    concurrencyLimit: 10, // Limits zlib concurrency for perf.
+    threshold: 1024 // Size (in bytes) below which messages
+    // should not be compressed.
+  }
+});
+```
+
+The client will only use the extension if it is supported and enabled on the
+server. To always disable the extension on the client set the
+`perMessageDeflate` option to `false`.
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('ws://www.host.com/path', {
+  perMessageDeflate: false
+});
+```
+
+## Usage examples
+
+### Sending and receiving text data
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('ws://www.host.com/path');
+
+ws.on('open', function open() {
+  ws.send('something');
+});
+
+ws.on('message', function incoming(data) {
+  console.log(data);
+});
+```
+
+### Sending binary data
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('ws://www.host.com/path');
+
+ws.on('open', function open() {
+  const array = new Float32Array(5);
+
+  for (var i = 0; i < array.length; ++i) {
+    array[i] = i / 2;
+  }
+
+  ws.send(array);
+});
+```
+
+### Simple server
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws) {
+  ws.on('message', function incoming(message) {
+    console.log('received: %s', message);
+  });
+
+  ws.send('something');
+});
+```
+
+### External HTTP/S server
+
+```js
+const fs = require('fs');
+const https = require('https');
+const WebSocket = require('ws');
+
+const server = https.createServer({
+  cert: fs.readFileSync('/path/to/cert.pem'),
+  key: fs.readFileSync('/path/to/key.pem')
+});
+const wss = new WebSocket.Server({ server });
+
+wss.on('connection', function connection(ws) {
+  ws.on('message', function incoming(message) {
+    console.log('received: %s', message);
+  });
+
+  ws.send('something');
+});
+
+server.listen(8080);
+```
+
+### Multiple servers sharing a single HTTP/S server
+
+```js
+const http = require('http');
+const WebSocket = require('ws');
+const url = require('url');
+
+const server = http.createServer();
+const wss1 = new WebSocket.Server({ noServer: true });
+const wss2 = new WebSocket.Server({ noServer: true });
+
+wss1.on('connection', function connection(ws) {
+  // ...
+});
+
+wss2.on('connection', function connection(ws) {
+  // ...
+});
+
+server.on('upgrade', function upgrade(request, socket, head) {
+  const pathname = url.parse(request.url).pathname;
+
+  if (pathname === '/foo') {
+    wss1.handleUpgrade(request, socket, head, function done(ws) {
+      wss1.emit('connection', ws, request);
+    });
+  } else if (pathname === '/bar') {
+    wss2.handleUpgrade(request, socket, head, function done(ws) {
+      wss2.emit('connection', ws, request);
+    });
+  } else {
+    socket.destroy();
+  }
+});
+
+server.listen(8080);
+```
+
+### Client authentication
+
+```js
+const http = require('http');
+const WebSocket = require('ws');
+
+const server = http.createServer();
+const wss = new WebSocket.Server({ noServer: true });
+
+wss.on('connection', function connection(ws, request, client) {
+  ws.on('message', function message(msg) {
+    console.log(`Received message ${msg} from user ${client}`);
+  });
+});
+
+server.on('upgrade', function upgrade(request, socket, head) {
+  // This function is not defined on purpose. Implement it with your own logic.
+  authenticate(request, (err, client) => {
+    if (err || !client) {
+      socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
+      socket.destroy();
+      return;
+    }
+
+    wss.handleUpgrade(request, socket, head, function done(ws) {
+      wss.emit('connection', ws, request, client);
+    });
+  });
+});
+
+server.listen(8080);
+```
+
+Also see the provided [example][session-parse-example] using `express-session`.
+
+### Server broadcast
+
+A client WebSocket broadcasting to all connected WebSocket clients, including
+itself.
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws) {
+  ws.on('message', function incoming(data) {
+    wss.clients.forEach(function each(client) {
+      if (client.readyState === WebSocket.OPEN) {
+        client.send(data);
+      }
+    });
+  });
+});
+```
+
+A client WebSocket broadcasting to every other connected WebSocket clients,
+excluding itself.
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws) {
+  ws.on('message', function incoming(data) {
+    wss.clients.forEach(function each(client) {
+      if (client !== ws && client.readyState === WebSocket.OPEN) {
+        client.send(data);
+      }
+    });
+  });
+});
+```
+
+### echo.websocket.org demo
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('wss://echo.websocket.org/', {
+  origin: 'https://websocket.org'
+});
+
+ws.on('open', function open() {
+  console.log('connected');
+  ws.send(Date.now());
+});
+
+ws.on('close', function close() {
+  console.log('disconnected');
+});
+
+ws.on('message', function incoming(data) {
+  console.log(`Roundtrip time: ${Date.now() - data} ms`);
+
+  setTimeout(function timeout() {
+    ws.send(Date.now());
+  }, 500);
+});
+```
+
+### Use the Node.js streams API
+
+```js
+const WebSocket = require('ws');
+
+const ws = new WebSocket('wss://echo.websocket.org/', {
+  origin: 'https://websocket.org'
+});
+
+const duplex = WebSocket.createWebSocketStream(ws, { encoding: 'utf8' });
+
+duplex.pipe(process.stdout);
+process.stdin.pipe(duplex);
+```
+
+### Other examples
+
+For a full example with a browser client communicating with a ws server, see the
+examples folder.
+
+Otherwise, see the test cases.
+
+## FAQ
+
+### How to get the IP address of the client?
+
+The remote IP address can be obtained from the raw socket.
+
+```js
+const WebSocket = require('ws');
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws, req) {
+  const ip = req.socket.remoteAddress;
+});
+```
+
+When the server runs behind a proxy like NGINX, the de-facto standard is to use
+the `X-Forwarded-For` header.
+
+```js
+wss.on('connection', function connection(ws, req) {
+  const ip = req.headers['x-forwarded-for'].split(/\s*,\s*/)[0];
+});
+```
+
+### How to detect and close broken connections?
+
+Sometimes the link between the server and the client can be interrupted in a way
+that keeps both the server and the client unaware of the broken state of the
+connection (e.g. when pulling the cord).
+
+In these cases ping messages can be used as a means to verify that the remote
+endpoint is still responsive.
+
+```js
+const WebSocket = require('ws');
+
+function noop() {}
+
+function heartbeat() {
+  this.isAlive = true;
+}
+
+const wss = new WebSocket.Server({ port: 8080 });
+
+wss.on('connection', function connection(ws) {
+  ws.isAlive = true;
+  ws.on('pong', heartbeat);
+});
+
+const interval = setInterval(function ping() {
+  wss.clients.forEach(function each(ws) {
+    if (ws.isAlive === false) return ws.terminate();
+
+    ws.isAlive = false;
+    ws.ping(noop);
+  });
+}, 30000);
+
+wss.on('close', function close() {
+  clearInterval(interval);
+});
+```
+
+Pong messages are automatically sent in response to ping messages as required by
+the spec.
+
+Just like the server example above your clients might as well lose connection
+without knowing it. You might want to add a ping listener on your clients to
+prevent that. A simple implementation would be:
+
+```js
+const WebSocket = require('ws');
+
+function heartbeat() {
+  clearTimeout(this.pingTimeout);
+
+  // Use `WebSocket#terminate()`, which immediately destroys the connection,
+  // instead of `WebSocket#close()`, which waits for the close timer.
+  // Delay should be equal to the interval at which your server
+  // sends out pings plus a conservative assumption of the latency.
+  this.pingTimeout = setTimeout(() => {
+    this.terminate();
+  }, 30000 + 1000);
+}
+
+const client = new WebSocket('wss://echo.websocket.org/');
+
+client.on('open', heartbeat);
+client.on('ping', heartbeat);
+client.on('close', function clear() {
+  clearTimeout(this.pingTimeout);
+});
+```
+
+### How to connect via a proxy?
+
+Use a custom `http.Agent` implementation like [https-proxy-agent][] or
+[socks-proxy-agent][].
+
+## Changelog
+
+We're using the GitHub [releases][changelog] for changelog entries.
+
+## License
+
+[MIT](LICENSE)
+
+[changelog]: https://github.com/websockets/ws/releases
+[client-report]: http://websockets.github.io/ws/autobahn/clients/
+[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent
+[node-zlib-bug]: https://github.com/nodejs/node/issues/8871
+[node-zlib-deflaterawdocs]:
+  https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options
+[permessage-deflate]: https://tools.ietf.org/html/rfc7692
+[server-report]: http://websockets.github.io/ws/autobahn/servers/
+[session-parse-example]: ./examples/express-session-parse
+[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent
+[ws-server-options]:
+  https://github.com/websockets/ws/blob/master/doc/ws.md#new-websocketserveroptions-callback
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/browser.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/browser.js
new file mode 100644 (file)
index 0000000..ca4f628
--- /dev/null
@@ -0,0 +1,8 @@
+'use strict';
+
+module.exports = function () {
+  throw new Error(
+    'ws does not work in the browser. Browser clients must use the native ' +
+      'WebSocket object'
+  );
+};
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/index.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/index.js
new file mode 100644 (file)
index 0000000..722c786
--- /dev/null
@@ -0,0 +1,10 @@
+'use strict';
+
+const WebSocket = require('./lib/websocket');
+
+WebSocket.createWebSocketStream = require('./lib/stream');
+WebSocket.Server = require('./lib/websocket-server');
+WebSocket.Receiver = require('./lib/receiver');
+WebSocket.Sender = require('./lib/sender');
+
+module.exports = WebSocket;
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/buffer-util.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/buffer-util.js
new file mode 100644 (file)
index 0000000..6fd84c3
--- /dev/null
@@ -0,0 +1,129 @@
+'use strict';
+
+const { EMPTY_BUFFER } = require('./constants');
+
+/**
+ * Merges an array of buffers into a new buffer.
+ *
+ * @param {Buffer[]} list The array of buffers to concat
+ * @param {Number} totalLength The total length of buffers in the list
+ * @return {Buffer} The resulting buffer
+ * @public
+ */
+function concat(list, totalLength) {
+  if (list.length === 0) return EMPTY_BUFFER;
+  if (list.length === 1) return list[0];
+
+  const target = Buffer.allocUnsafe(totalLength);
+  let offset = 0;
+
+  for (let i = 0; i < list.length; i++) {
+    const buf = list[i];
+    target.set(buf, offset);
+    offset += buf.length;
+  }
+
+  if (offset < totalLength) return target.slice(0, offset);
+
+  return target;
+}
+
+/**
+ * Masks a buffer using the given mask.
+ *
+ * @param {Buffer} source The buffer to mask
+ * @param {Buffer} mask The mask to use
+ * @param {Buffer} output The buffer where to store the result
+ * @param {Number} offset The offset at which to start writing
+ * @param {Number} length The number of bytes to mask.
+ * @public
+ */
+function _mask(source, mask, output, offset, length) {
+  for (let i = 0; i < length; i++) {
+    output[offset + i] = source[i] ^ mask[i & 3];
+  }
+}
+
+/**
+ * Unmasks a buffer using the given mask.
+ *
+ * @param {Buffer} buffer The buffer to unmask
+ * @param {Buffer} mask The mask to use
+ * @public
+ */
+function _unmask(buffer, mask) {
+  // Required until https://github.com/nodejs/node/issues/9006 is resolved.
+  const length = buffer.length;
+  for (let i = 0; i < length; i++) {
+    buffer[i] ^= mask[i & 3];
+  }
+}
+
+/**
+ * Converts a buffer to an `ArrayBuffer`.
+ *
+ * @param {Buffer} buf The buffer to convert
+ * @return {ArrayBuffer} Converted buffer
+ * @public
+ */
+function toArrayBuffer(buf) {
+  if (buf.byteLength === buf.buffer.byteLength) {
+    return buf.buffer;
+  }
+
+  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+}
+
+/**
+ * Converts `data` to a `Buffer`.
+ *
+ * @param {*} data The data to convert
+ * @return {Buffer} The buffer
+ * @throws {TypeError}
+ * @public
+ */
+function toBuffer(data) {
+  toBuffer.readOnly = true;
+
+  if (Buffer.isBuffer(data)) return data;
+
+  let buf;
+
+  if (data instanceof ArrayBuffer) {
+    buf = Buffer.from(data);
+  } else if (ArrayBuffer.isView(data)) {
+    buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
+  } else {
+    buf = Buffer.from(data);
+    toBuffer.readOnly = false;
+  }
+
+  return buf;
+}
+
+try {
+  const bufferUtil = require('bufferutil');
+  const bu = bufferUtil.BufferUtil || bufferUtil;
+
+  module.exports = {
+    concat,
+    mask(source, mask, output, offset, length) {
+      if (length < 48) _mask(source, mask, output, offset, length);
+      else bu.mask(source, mask, output, offset, length);
+    },
+    toArrayBuffer,
+    toBuffer,
+    unmask(buffer, mask) {
+      if (buffer.length < 32) _unmask(buffer, mask);
+      else bu.unmask(buffer, mask);
+    }
+  };
+} catch (e) /* istanbul ignore next */ {
+  module.exports = {
+    concat,
+    mask: _mask,
+    toArrayBuffer,
+    toBuffer,
+    unmask: _unmask
+  };
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/event-target.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/event-target.js
new file mode 100644 (file)
index 0000000..a6fbe72
--- /dev/null
@@ -0,0 +1,184 @@
+'use strict';
+
+/**
+ * Class representing an event.
+ *
+ * @private
+ */
+class Event {
+  /**
+   * Create a new `Event`.
+   *
+   * @param {String} type The name of the event
+   * @param {Object} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(type, target) {
+    this.target = target;
+    this.type = type;
+  }
+}
+
+/**
+ * Class representing a message event.
+ *
+ * @extends Event
+ * @private
+ */
+class MessageEvent extends Event {
+  /**
+   * Create a new `MessageEvent`.
+   *
+   * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data
+   * @param {WebSocket} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(data, target) {
+    super('message', target);
+
+    this.data = data;
+  }
+}
+
+/**
+ * Class representing a close event.
+ *
+ * @extends Event
+ * @private
+ */
+class CloseEvent extends Event {
+  /**
+   * Create a new `CloseEvent`.
+   *
+   * @param {Number} code The status code explaining why the connection is being
+   *     closed
+   * @param {String} reason A human-readable string explaining why the
+   *     connection is closing
+   * @param {WebSocket} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(code, reason, target) {
+    super('close', target);
+
+    this.wasClean = target._closeFrameReceived && target._closeFrameSent;
+    this.reason = reason;
+    this.code = code;
+  }
+}
+
+/**
+ * Class representing an open event.
+ *
+ * @extends Event
+ * @private
+ */
+class OpenEvent extends Event {
+  /**
+   * Create a new `OpenEvent`.
+   *
+   * @param {WebSocket} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(target) {
+    super('open', target);
+  }
+}
+
+/**
+ * Class representing an error event.
+ *
+ * @extends Event
+ * @private
+ */
+class ErrorEvent extends Event {
+  /**
+   * Create a new `ErrorEvent`.
+   *
+   * @param {Object} error The error that generated this event
+   * @param {WebSocket} target A reference to the target to which the event was
+   *     dispatched
+   */
+  constructor(error, target) {
+    super('error', target);
+
+    this.message = error.message;
+    this.error = error;
+  }
+}
+
+/**
+ * This provides methods for emulating the `EventTarget` interface. It's not
+ * meant to be used directly.
+ *
+ * @mixin
+ */
+const EventTarget = {
+  /**
+   * Register an event listener.
+   *
+   * @param {String} type A string representing the event type to listen for
+   * @param {Function} listener The listener to add
+   * @param {Object} [options] An options object specifies characteristics about
+   *     the event listener
+   * @param {Boolean} [options.once=false] A `Boolean`` indicating that the
+   *     listener should be invoked at most once after being added. If `true`,
+   *     the listener would be automatically removed when invoked.
+   * @public
+   */
+  addEventListener(type, listener, options) {
+    if (typeof listener !== 'function') return;
+
+    function onMessage(data) {
+      listener.call(this, new MessageEvent(data, this));
+    }
+
+    function onClose(code, message) {
+      listener.call(this, new CloseEvent(code, message, this));
+    }
+
+    function onError(error) {
+      listener.call(this, new ErrorEvent(error, this));
+    }
+
+    function onOpen() {
+      listener.call(this, new OpenEvent(this));
+    }
+
+    const method = options && options.once ? 'once' : 'on';
+
+    if (type === 'message') {
+      onMessage._listener = listener;
+      this[method](type, onMessage);
+    } else if (type === 'close') {
+      onClose._listener = listener;
+      this[method](type, onClose);
+    } else if (type === 'error') {
+      onError._listener = listener;
+      this[method](type, onError);
+    } else if (type === 'open') {
+      onOpen._listener = listener;
+      this[method](type, onOpen);
+    } else {
+      this[method](type, listener);
+    }
+  },
+
+  /**
+   * Remove an event listener.
+   *
+   * @param {String} type A string representing the event type to remove
+   * @param {Function} listener The listener to remove
+   * @public
+   */
+  removeEventListener(type, listener) {
+    const listeners = this.listeners(type);
+
+    for (let i = 0; i < listeners.length; i++) {
+      if (listeners[i] === listener || listeners[i]._listener === listener) {
+        this.removeListener(type, listeners[i]);
+      }
+    }
+  }
+};
+
+module.exports = EventTarget;
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/extension.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/extension.js
new file mode 100644 (file)
index 0000000..87a4213
--- /dev/null
@@ -0,0 +1,223 @@
+'use strict';
+
+//
+// Allowed token characters:
+//
+// '!', '#', '$', '%', '&', ''', '*', '+', '-',
+// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'
+//
+// tokenChars[32] === 0 // ' '
+// tokenChars[33] === 1 // '!'
+// tokenChars[34] === 0 // '"'
+// ...
+//
+// prettier-ignore
+const tokenChars = [
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
+  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63
+  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127
+];
+
+/**
+ * Adds an offer to the map of extension offers or a parameter to the map of
+ * parameters.
+ *
+ * @param {Object} dest The map of extension offers or parameters
+ * @param {String} name The extension or parameter name
+ * @param {(Object|Boolean|String)} elem The extension parameters or the
+ *     parameter value
+ * @private
+ */
+function push(dest, name, elem) {
+  if (dest[name] === undefined) dest[name] = [elem];
+  else dest[name].push(elem);
+}
+
+/**
+ * Parses the `Sec-WebSocket-Extensions` header into an object.
+ *
+ * @param {String} header The field value of the header
+ * @return {Object} The parsed object
+ * @public
+ */
+function parse(header) {
+  const offers = Object.create(null);
+
+  if (header === undefined || header === '') return offers;
+
+  let params = Object.create(null);
+  let mustUnescape = false;
+  let isEscaping = false;
+  let inQuotes = false;
+  let extensionName;
+  let paramName;
+  let start = -1;
+  let end = -1;
+  let i = 0;
+
+  for (; i < header.length; i++) {
+    const code = header.charCodeAt(i);
+
+    if (extensionName === undefined) {
+      if (end === -1 && tokenChars[code] === 1) {
+        if (start === -1) start = i;
+      } else if (code === 0x20 /* ' ' */ || code === 0x09 /* '\t' */) {
+        if (end === -1 && start !== -1) end = i;
+      } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {
+        if (start === -1) {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+
+        if (end === -1) end = i;
+        const name = header.slice(start, end);
+        if (code === 0x2c) {
+          push(offers, name, params);
+          params = Object.create(null);
+        } else {
+          extensionName = name;
+        }
+
+        start = end = -1;
+      } else {
+        throw new SyntaxError(`Unexpected character at index ${i}`);
+      }
+    } else if (paramName === undefined) {
+      if (end === -1 && tokenChars[code] === 1) {
+        if (start === -1) start = i;
+      } else if (code === 0x20 || code === 0x09) {
+        if (end === -1 && start !== -1) end = i;
+      } else if (code === 0x3b || code === 0x2c) {
+        if (start === -1) {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+
+        if (end === -1) end = i;
+        push(params, header.slice(start, end), true);
+        if (code === 0x2c) {
+          push(offers, extensionName, params);
+          params = Object.create(null);
+          extensionName = undefined;
+        }
+
+        start = end = -1;
+      } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {
+        paramName = header.slice(start, i);
+        start = end = -1;
+      } else {
+        throw new SyntaxError(`Unexpected character at index ${i}`);
+      }
+    } else {
+      //
+      // The value of a quoted-string after unescaping must conform to the
+      // token ABNF, so only token characters are valid.
+      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1
+      //
+      if (isEscaping) {
+        if (tokenChars[code] !== 1) {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+        if (start === -1) start = i;
+        else if (!mustUnescape) mustUnescape = true;
+        isEscaping = false;
+      } else if (inQuotes) {
+        if (tokenChars[code] === 1) {
+          if (start === -1) start = i;
+        } else if (code === 0x22 /* '"' */ && start !== -1) {
+          inQuotes = false;
+          end = i;
+        } else if (code === 0x5c /* '\' */) {
+          isEscaping = true;
+        } else {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {
+        inQuotes = true;
+      } else if (end === -1 && tokenChars[code] === 1) {
+        if (start === -1) start = i;
+      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {
+        if (end === -1) end = i;
+      } else if (code === 0x3b || code === 0x2c) {
+        if (start === -1) {
+          throw new SyntaxError(`Unexpected character at index ${i}`);
+        }
+
+        if (end === -1) end = i;
+        let value = header.slice(start, end);
+        if (mustUnescape) {
+          value = value.replace(/\\/g, '');
+          mustUnescape = false;
+        }
+        push(params, paramName, value);
+        if (code === 0x2c) {
+          push(offers, extensionName, params);
+          params = Object.create(null);
+          extensionName = undefined;
+        }
+
+        paramName = undefined;
+        start = end = -1;
+      } else {
+        throw new SyntaxError(`Unexpected character at index ${i}`);
+      }
+    }
+  }
+
+  if (start === -1 || inQuotes) {
+    throw new SyntaxError('Unexpected end of input');
+  }
+
+  if (end === -1) end = i;
+  const token = header.slice(start, end);
+  if (extensionName === undefined) {
+    push(offers, token, params);
+  } else {
+    if (paramName === undefined) {
+      push(params, token, true);
+    } else if (mustUnescape) {
+      push(params, paramName, token.replace(/\\/g, ''));
+    } else {
+      push(params, paramName, token);
+    }
+    push(offers, extensionName, params);
+  }
+
+  return offers;
+}
+
+/**
+ * Builds the `Sec-WebSocket-Extensions` header field value.
+ *
+ * @param {Object} extensions The map of extensions and parameters to format
+ * @return {String} A string representing the given object
+ * @public
+ */
+function format(extensions) {
+  return Object.keys(extensions)
+    .map((extension) => {
+      let configurations = extensions[extension];
+      if (!Array.isArray(configurations)) configurations = [configurations];
+      return configurations
+        .map((params) => {
+          return [extension]
+            .concat(
+              Object.keys(params).map((k) => {
+                let values = params[k];
+                if (!Array.isArray(values)) values = [values];
+                return values
+                  .map((v) => (v === true ? k : `${k}=${v}`))
+                  .join('; ');
+              })
+            )
+            .join('; ');
+        })
+        .join(', ');
+    })
+    .join(', ');
+}
+
+module.exports = { format, parse };
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/limiter.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/limiter.js
new file mode 100644 (file)
index 0000000..3fd3578
--- /dev/null
@@ -0,0 +1,55 @@
+'use strict';
+
+const kDone = Symbol('kDone');
+const kRun = Symbol('kRun');
+
+/**
+ * A very simple job queue with adjustable concurrency. Adapted from
+ * https://github.com/STRML/async-limiter
+ */
+class Limiter {
+  /**
+   * Creates a new `Limiter`.
+   *
+   * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed
+   *     to run concurrently
+   */
+  constructor(concurrency) {
+    this[kDone] = () => {
+      this.pending--;
+      this[kRun]();
+    };
+    this.concurrency = concurrency || Infinity;
+    this.jobs = [];
+    this.pending = 0;
+  }
+
+  /**
+   * Adds a job to the queue.
+   *
+   * @param {Function} job The job to run
+   * @public
+   */
+  add(job) {
+    this.jobs.push(job);
+    this[kRun]();
+  }
+
+  /**
+   * Removes a job from the queue and runs it if possible.
+   *
+   * @private
+   */
+  [kRun]() {
+    if (this.pending === this.concurrency) return;
+
+    if (this.jobs.length) {
+      const job = this.jobs.shift();
+
+      this.pending++;
+      job(this[kDone]);
+    }
+  }
+}
+
+module.exports = Limiter;
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/permessage-deflate.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/permessage-deflate.js
new file mode 100644 (file)
index 0000000..a8974b9
--- /dev/null
@@ -0,0 +1,517 @@
+'use strict';
+
+const zlib = require('zlib');
+
+const bufferUtil = require('./buffer-util');
+const Limiter = require('./limiter');
+const { kStatusCode, NOOP } = require('./constants');
+
+const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);
+const kPerMessageDeflate = Symbol('permessage-deflate');
+const kTotalLength = Symbol('total-length');
+const kCallback = Symbol('callback');
+const kBuffers = Symbol('buffers');
+const kError = Symbol('error');
+
+//
+// We limit zlib concurrency, which prevents severe memory fragmentation
+// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913
+// and https://github.com/websockets/ws/issues/1202
+//
+// Intentionally global; it's the global thread pool that's an issue.
+//
+let zlibLimiter;
+
+/**
+ * permessage-deflate implementation.
+ */
+class PerMessageDeflate {
+  /**
+   * Creates a PerMessageDeflate instance.
+   *
+   * @param {Object} [options] Configuration options
+   * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept
+   *     disabling of server context takeover
+   * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/
+   *     acknowledge disabling of client context takeover
+   * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the
+   *     use of a custom server window size
+   * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support
+   *     for, or request, a custom client window size
+   * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on
+   *     deflate
+   * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on
+   *     inflate
+   * @param {Number} [options.threshold=1024] Size (in bytes) below which
+   *     messages should not be compressed
+   * @param {Number} [options.concurrencyLimit=10] The number of concurrent
+   *     calls to zlib
+   * @param {Boolean} [isServer=false] Create the instance in either server or
+   *     client mode
+   * @param {Number} [maxPayload=0] The maximum allowed message length
+   */
+  constructor(options, isServer, maxPayload) {
+    this._maxPayload = maxPayload | 0;
+    this._options = options || {};
+    this._threshold =
+      this._options.threshold !== undefined ? this._options.threshold : 1024;
+    this._isServer = !!isServer;
+    this._deflate = null;
+    this._inflate = null;
+
+    this.params = null;
+
+    if (!zlibLimiter) {
+      const concurrency =
+        this._options.concurrencyLimit !== undefined
+          ? this._options.concurrencyLimit
+          : 10;
+      zlibLimiter = new Limiter(concurrency);
+    }
+  }
+
+  /**
+   * @type {String}
+   */
+  static get extensionName() {
+    return 'permessage-deflate';
+  }
+
+  /**
+   * Create an extension negotiation offer.
+   *
+   * @return {Object} Extension parameters
+   * @public
+   */
+  offer() {
+    const params = {};
+
+    if (this._options.serverNoContextTakeover) {
+      params.server_no_context_takeover = true;
+    }
+    if (this._options.clientNoContextTakeover) {
+      params.client_no_context_takeover = true;
+    }
+    if (this._options.serverMaxWindowBits) {
+      params.server_max_window_bits = this._options.serverMaxWindowBits;
+    }
+    if (this._options.clientMaxWindowBits) {
+      params.client_max_window_bits = this._options.clientMaxWindowBits;
+    } else if (this._options.clientMaxWindowBits == null) {
+      params.client_max_window_bits = true;
+    }
+
+    return params;
+  }
+
+  /**
+   * Accept an extension negotiation offer/response.
+   *
+   * @param {Array} configurations The extension negotiation offers/reponse
+   * @return {Object} Accepted configuration
+   * @public
+   */
+  accept(configurations) {
+    configurations = this.normalizeParams(configurations);
+
+    this.params = this._isServer
+      ? this.acceptAsServer(configurations)
+      : this.acceptAsClient(configurations);
+
+    return this.params;
+  }
+
+  /**
+   * Releases all resources used by the extension.
+   *
+   * @public
+   */
+  cleanup() {
+    if (this._inflate) {
+      this._inflate.close();
+      this._inflate = null;
+    }
+
+    if (this._deflate) {
+      const callback = this._deflate[kCallback];
+
+      this._deflate.close();
+      this._deflate = null;
+
+      if (callback) {
+        callback(
+          new Error(
+            'The deflate stream was closed while data was being processed'
+          )
+        );
+      }
+    }
+  }
+
+  /**
+   *  Accept an extension negotiation offer.
+   *
+   * @param {Array} offers The extension negotiation offers
+   * @return {Object} Accepted configuration
+   * @private
+   */
+  acceptAsServer(offers) {
+    const opts = this._options;
+    const accepted = offers.find((params) => {
+      if (
+        (opts.serverNoContextTakeover === false &&
+          params.server_no_context_takeover) ||
+        (params.server_max_window_bits &&
+          (opts.serverMaxWindowBits === false ||
+            (typeof opts.serverMaxWindowBits === 'number' &&
+              opts.serverMaxWindowBits > params.server_max_window_bits))) ||
+        (typeof opts.clientMaxWindowBits === 'number' &&
+          !params.client_max_window_bits)
+      ) {
+        return false;
+      }
+
+      return true;
+    });
+
+    if (!accepted) {
+      throw new Error('None of the extension offers can be accepted');
+    }
+
+    if (opts.serverNoContextTakeover) {
+      accepted.server_no_context_takeover = true;
+    }
+    if (opts.clientNoContextTakeover) {
+      accepted.client_no_context_takeover = true;
+    }
+    if (typeof opts.serverMaxWindowBits === 'number') {
+      accepted.server_max_window_bits = opts.serverMaxWindowBits;
+    }
+    if (typeof opts.clientMaxWindowBits === 'number') {
+      accepted.client_max_window_bits = opts.clientMaxWindowBits;
+    } else if (
+      accepted.client_max_window_bits === true ||
+      opts.clientMaxWindowBits === false
+    ) {
+      delete accepted.client_max_window_bits;
+    }
+
+    return accepted;
+  }
+
+  /**
+   * Accept the extension negotiation response.
+   *
+   * @param {Array} response The extension negotiation response
+   * @return {Object} Accepted configuration
+   * @private
+   */
+  acceptAsClient(response) {
+    const params = response[0];
+
+    if (
+      this._options.clientNoContextTakeover === false &&
+      params.client_no_context_takeover
+    ) {
+      throw new Error('Unexpected parameter "client_no_context_takeover"');
+    }
+
+    if (!params.client_max_window_bits) {
+      if (typeof this._options.clientMaxWindowBits === 'number') {
+        params.client_max_window_bits = this._options.clientMaxWindowBits;
+      }
+    } else if (
+      this._options.clientMaxWindowBits === false ||
+      (typeof this._options.clientMaxWindowBits === 'number' &&
+        params.client_max_window_bits > this._options.clientMaxWindowBits)
+    ) {
+      throw new Error(
+        'Unexpected or invalid parameter "client_max_window_bits"'
+      );
+    }
+
+    return params;
+  }
+
+  /**
+   * Normalize parameters.
+   *
+   * @param {Array} configurations The extension negotiation offers/reponse
+   * @return {Array} The offers/response with normalized parameters
+   * @private
+   */
+  normalizeParams(configurations) {
+    configurations.forEach((params) => {
+      Object.keys(params).forEach((key) => {
+        let value = params[key];
+
+        if (value.length > 1) {
+          throw new Error(`Parameter "${key}" must have only a single value`);
+        }
+
+        value = value[0];
+
+        if (key === 'client_max_window_bits') {
+          if (value !== true) {
+            const num = +value;
+            if (!Number.isInteger(num) || num < 8 || num > 15) {
+              throw new TypeError(
+                `Invalid value for parameter "${key}": ${value}`
+              );
+            }
+            value = num;
+          } else if (!this._isServer) {
+            throw new TypeError(
+              `Invalid value for parameter "${key}": ${value}`
+            );
+          }
+        } else if (key === 'server_max_window_bits') {
+          const num = +value;
+          if (!Number.isInteger(num) || num < 8 || num > 15) {
+            throw new TypeError(
+              `Invalid value for parameter "${key}": ${value}`
+            );
+          }
+          value = num;
+        } else if (
+          key === 'client_no_context_takeover' ||
+          key === 'server_no_context_takeover'
+        ) {
+          if (value !== true) {
+            throw new TypeError(
+              `Invalid value for parameter "${key}": ${value}`
+            );
+          }
+        } else {
+          throw new Error(`Unknown parameter "${key}"`);
+        }
+
+        params[key] = value;
+      });
+    });
+
+    return configurations;
+  }
+
+  /**
+   * Decompress data. Concurrency limited.
+   *
+   * @param {Buffer} data Compressed data
+   * @param {Boolean} fin Specifies whether or not this is the last fragment
+   * @param {Function} callback Callback
+   * @public
+   */
+  decompress(data, fin, callback) {
+    zlibLimiter.add((done) => {
+      this._decompress(data, fin, (err, result) => {
+        done();
+        callback(err, result);
+      });
+    });
+  }
+
+  /**
+   * Compress data. Concurrency limited.
+   *
+   * @param {Buffer} data Data to compress
+   * @param {Boolean} fin Specifies whether or not this is the last fragment
+   * @param {Function} callback Callback
+   * @public
+   */
+  compress(data, fin, callback) {
+    zlibLimiter.add((done) => {
+      this._compress(data, fin, (err, result) => {
+        done();
+        callback(err, result);
+      });
+    });
+  }
+
+  /**
+   * Decompress data.
+   *
+   * @param {Buffer} data Compressed data
+   * @param {Boolean} fin Specifies whether or not this is the last fragment
+   * @param {Function} callback Callback
+   * @private
+   */
+  _decompress(data, fin, callback) {
+    const endpoint = this._isServer ? 'client' : 'server';
+
+    if (!this._inflate) {
+      const key = `${endpoint}_max_window_bits`;
+      const windowBits =
+        typeof this.params[key] !== 'number'
+          ? zlib.Z_DEFAULT_WINDOWBITS
+          : this.params[key];
+
+      this._inflate = zlib.createInflateRaw({
+        ...this._options.zlibInflateOptions,
+        windowBits
+      });
+      this._inflate[kPerMessageDeflate] = this;
+      this._inflate[kTotalLength] = 0;
+      this._inflate[kBuffers] = [];
+      this._inflate.on('error', inflateOnError);
+      this._inflate.on('data', inflateOnData);
+    }
+
+    this._inflate[kCallback] = callback;
+
+    this._inflate.write(data);
+    if (fin) this._inflate.write(TRAILER);
+
+    this._inflate.flush(() => {
+      const err = this._inflate[kError];
+
+      if (err) {
+        this._inflate.close();
+        this._inflate = null;
+        callback(err);
+        return;
+      }
+
+      const data = bufferUtil.concat(
+        this._inflate[kBuffers],
+        this._inflate[kTotalLength]
+      );
+
+      if (this._inflate._readableState.endEmitted) {
+        this._inflate.close();
+        this._inflate = null;
+      } else {
+        this._inflate[kTotalLength] = 0;
+        this._inflate[kBuffers] = [];
+
+        if (fin && this.params[`${endpoint}_no_context_takeover`]) {
+          this._inflate.reset();
+        }
+      }
+
+      callback(null, data);
+    });
+  }
+
+  /**
+   * Compress data.
+   *
+   * @param {Buffer} data Data to compress
+   * @param {Boolean} fin Specifies whether or not this is the last fragment
+   * @param {Function} callback Callback
+   * @private
+   */
+  _compress(data, fin, callback) {
+    const endpoint = this._isServer ? 'server' : 'client';
+
+    if (!this._deflate) {
+      const key = `${endpoint}_max_window_bits`;
+      const windowBits =
+        typeof this.params[key] !== 'number'
+          ? zlib.Z_DEFAULT_WINDOWBITS
+          : this.params[key];
+
+      this._deflate = zlib.createDeflateRaw({
+        ...this._options.zlibDeflateOptions,
+        windowBits
+      });
+
+      this._deflate[kTotalLength] = 0;
+      this._deflate[kBuffers] = [];
+
+      //
+      // An `'error'` event is emitted, only on Node.js < 10.0.0, if the
+      // `zlib.DeflateRaw` instance is closed while data is being processed.
+      // This can happen if `PerMessageDeflate#cleanup()` is called at the wrong
+      // time due to an abnormal WebSocket closure.
+      //
+      this._deflate.on('error', NOOP);
+      this._deflate.on('data', deflateOnData);
+    }
+
+    this._deflate[kCallback] = callback;
+
+    this._deflate.write(data);
+    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {
+      if (!this._deflate) {
+        //
+        // The deflate stream was closed while data was being processed.
+        //
+        return;
+      }
+
+      let data = bufferUtil.concat(
+        this._deflate[kBuffers],
+        this._deflate[kTotalLength]
+      );
+
+      if (fin) data = data.slice(0, data.length - 4);
+
+      //
+      // Ensure that the callback will not be called again in
+      // `PerMessageDeflate#cleanup()`.
+      //
+      this._deflate[kCallback] = null;
+
+      this._deflate[kTotalLength] = 0;
+      this._deflate[kBuffers] = [];
+
+      if (fin && this.params[`${endpoint}_no_context_takeover`]) {
+        this._deflate.reset();
+      }
+
+      callback(null, data);
+    });
+  }
+}
+
+module.exports = PerMessageDeflate;
+
+/**
+ * The listener of the `zlib.DeflateRaw` stream `'data'` event.
+ *
+ * @param {Buffer} chunk A chunk of data
+ * @private
+ */
+function deflateOnData(chunk) {
+  this[kBuffers].push(chunk);
+  this[kTotalLength] += chunk.length;
+}
+
+/**
+ * The listener of the `zlib.InflateRaw` stream `'data'` event.
+ *
+ * @param {Buffer} chunk A chunk of data
+ * @private
+ */
+function inflateOnData(chunk) {
+  this[kTotalLength] += chunk.length;
+
+  if (
+    this[kPerMessageDeflate]._maxPayload < 1 ||
+    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload
+  ) {
+    this[kBuffers].push(chunk);
+    return;
+  }
+
+  this[kError] = new RangeError('Max payload size exceeded');
+  this[kError][kStatusCode] = 1009;
+  this.removeListener('data', inflateOnData);
+  this.reset();
+}
+
+/**
+ * The listener of the `zlib.InflateRaw` stream `'error'` event.
+ *
+ * @param {Error} err The emitted error
+ * @private
+ */
+function inflateOnError(err) {
+  //
+  // There is no need to call `Zlib#close()` as the handle is automatically
+  // closed when an error is emitted.
+  //
+  this[kPerMessageDeflate]._inflate = null;
+  err[kStatusCode] = 1007;
+  this[kCallback](err);
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/receiver.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/receiver.js
new file mode 100644 (file)
index 0000000..65a5ab4
--- /dev/null
@@ -0,0 +1,507 @@
+'use strict';
+
+const { Writable } = require('stream');
+
+const PerMessageDeflate = require('./permessage-deflate');
+const {
+  BINARY_TYPES,
+  EMPTY_BUFFER,
+  kStatusCode,
+  kWebSocket
+} = require('./constants');
+const { concat, toArrayBuffer, unmask } = require('./buffer-util');
+const { isValidStatusCode, isValidUTF8 } = require('./validation');
+
+const GET_INFO = 0;
+const GET_PAYLOAD_LENGTH_16 = 1;
+const GET_PAYLOAD_LENGTH_64 = 2;
+const GET_MASK = 3;
+const GET_DATA = 4;
+const INFLATING = 5;
+
+/**
+ * HyBi Receiver implementation.
+ *
+ * @extends stream.Writable
+ */
+class Receiver extends Writable {
+  /**
+   * Creates a Receiver instance.
+   *
+   * @param {String} [binaryType=nodebuffer] The type for binary data
+   * @param {Object} [extensions] An object containing the negotiated extensions
+   * @param {Boolean} [isServer=false] Specifies whether to operate in client or
+   *     server mode
+   * @param {Number} [maxPayload=0] The maximum allowed message length
+   */
+  constructor(binaryType, extensions, isServer, maxPayload) {
+    super();
+
+    this._binaryType = binaryType || BINARY_TYPES[0];
+    this[kWebSocket] = undefined;
+    this._extensions = extensions || {};
+    this._isServer = !!isServer;
+    this._maxPayload = maxPayload | 0;
+
+    this._bufferedBytes = 0;
+    this._buffers = [];
+
+    this._compressed = false;
+    this._payloadLength = 0;
+    this._mask = undefined;
+    this._fragmented = 0;
+    this._masked = false;
+    this._fin = false;
+    this._opcode = 0;
+
+    this._totalPayloadLength = 0;
+    this._messageLength = 0;
+    this._fragments = [];
+
+    this._state = GET_INFO;
+    this._loop = false;
+  }
+
+  /**
+   * Implements `Writable.prototype._write()`.
+   *
+   * @param {Buffer} chunk The chunk of data to write
+   * @param {String} encoding The character encoding of `chunk`
+   * @param {Function} cb Callback
+   * @private
+   */
+  _write(chunk, encoding, cb) {
+    if (this._opcode === 0x08 && this._state == GET_INFO) return cb();
+
+    this._bufferedBytes += chunk.length;
+    this._buffers.push(chunk);
+    this.startLoop(cb);
+  }
+
+  /**
+   * Consumes `n` bytes from the buffered data.
+   *
+   * @param {Number} n The number of bytes to consume
+   * @return {Buffer} The consumed bytes
+   * @private
+   */
+  consume(n) {
+    this._bufferedBytes -= n;
+
+    if (n === this._buffers[0].length) return this._buffers.shift();
+
+    if (n < this._buffers[0].length) {
+      const buf = this._buffers[0];
+      this._buffers[0] = buf.slice(n);
+      return buf.slice(0, n);
+    }
+
+    const dst = Buffer.allocUnsafe(n);
+
+    do {
+      const buf = this._buffers[0];
+      const offset = dst.length - n;
+
+      if (n >= buf.length) {
+        dst.set(this._buffers.shift(), offset);
+      } else {
+        dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);
+        this._buffers[0] = buf.slice(n);
+      }
+
+      n -= buf.length;
+    } while (n > 0);
+
+    return dst;
+  }
+
+  /**
+   * Starts the parsing loop.
+   *
+   * @param {Function} cb Callback
+   * @private
+   */
+  startLoop(cb) {
+    let err;
+    this._loop = true;
+
+    do {
+      switch (this._state) {
+        case GET_INFO:
+          err = this.getInfo();
+          break;
+        case GET_PAYLOAD_LENGTH_16:
+          err = this.getPayloadLength16();
+          break;
+        case GET_PAYLOAD_LENGTH_64:
+          err = this.getPayloadLength64();
+          break;
+        case GET_MASK:
+          this.getMask();
+          break;
+        case GET_DATA:
+          err = this.getData(cb);
+          break;
+        default:
+          // `INFLATING`
+          this._loop = false;
+          return;
+      }
+    } while (this._loop);
+
+    cb(err);
+  }
+
+  /**
+   * Reads the first two bytes of a frame.
+   *
+   * @return {(RangeError|undefined)} A possible error
+   * @private
+   */
+  getInfo() {
+    if (this._bufferedBytes < 2) {
+      this._loop = false;
+      return;
+    }
+
+    const buf = this.consume(2);
+
+    if ((buf[0] & 0x30) !== 0x00) {
+      this._loop = false;
+      return error(RangeError, 'RSV2 and RSV3 must be clear', true, 1002);
+    }
+
+    const compressed = (buf[0] & 0x40) === 0x40;
+
+    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {
+      this._loop = false;
+      return error(RangeError, 'RSV1 must be clear', true, 1002);
+    }
+
+    this._fin = (buf[0] & 0x80) === 0x80;
+    this._opcode = buf[0] & 0x0f;
+    this._payloadLength = buf[1] & 0x7f;
+
+    if (this._opcode === 0x00) {
+      if (compressed) {
+        this._loop = false;
+        return error(RangeError, 'RSV1 must be clear', true, 1002);
+      }
+
+      if (!this._fragmented) {
+        this._loop = false;
+        return error(RangeError, 'invalid opcode 0', true, 1002);
+      }
+
+      this._opcode = this._fragmented;
+    } else if (this._opcode === 0x01 || this._opcode === 0x02) {
+      if (this._fragmented) {
+        this._loop = false;
+        return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
+      }
+
+      this._compressed = compressed;
+    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {
+      if (!this._fin) {
+        this._loop = false;
+        return error(RangeError, 'FIN must be set', true, 1002);
+      }
+
+      if (compressed) {
+        this._loop = false;
+        return error(RangeError, 'RSV1 must be clear', true, 1002);
+      }
+
+      if (this._payloadLength > 0x7d) {
+        this._loop = false;
+        return error(
+          RangeError,
+          `invalid payload length ${this._payloadLength}`,
+          true,
+          1002
+        );
+      }
+    } else {
+      this._loop = false;
+      return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
+    }
+
+    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;
+    this._masked = (buf[1] & 0x80) === 0x80;
+
+    if (this._isServer) {
+      if (!this._masked) {
+        this._loop = false;
+        return error(RangeError, 'MASK must be set', true, 1002);
+      }
+    } else if (this._masked) {
+      this._loop = false;
+      return error(RangeError, 'MASK must be clear', true, 1002);
+    }
+
+    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;
+    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;
+    else return this.haveLength();
+  }
+
+  /**
+   * Gets extended payload length (7+16).
+   *
+   * @return {(RangeError|undefined)} A possible error
+   * @private
+   */
+  getPayloadLength16() {
+    if (this._bufferedBytes < 2) {
+      this._loop = false;
+      return;
+    }
+
+    this._payloadLength = this.consume(2).readUInt16BE(0);
+    return this.haveLength();
+  }
+
+  /**
+   * Gets extended payload length (7+64).
+   *
+   * @return {(RangeError|undefined)} A possible error
+   * @private
+   */
+  getPayloadLength64() {
+    if (this._bufferedBytes < 8) {
+      this._loop = false;
+      return;
+    }
+
+    const buf = this.consume(8);
+    const num = buf.readUInt32BE(0);
+
+    //
+    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned
+    // if payload length is greater than this number.
+    //
+    if (num > Math.pow(2, 53 - 32) - 1) {
+      this._loop = false;
+      return error(
+        RangeError,
+        'Unsupported WebSocket frame: payload length > 2^53 - 1',
+        false,
+        1009
+      );
+    }
+
+    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);
+    return this.haveLength();
+  }
+
+  /**
+   * Payload length has been read.
+   *
+   * @return {(RangeError|undefined)} A possible error
+   * @private
+   */
+  haveLength() {
+    if (this._payloadLength && this._opcode < 0x08) {
+      this._totalPayloadLength += this._payloadLength;
+      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {
+        this._loop = false;
+        return error(RangeError, 'Max payload size exceeded', false, 1009);
+      }
+    }
+
+    if (this._masked) this._state = GET_MASK;
+    else this._state = GET_DATA;
+  }
+
+  /**
+   * Reads mask bytes.
+   *
+   * @private
+   */
+  getMask() {
+    if (this._bufferedBytes < 4) {
+      this._loop = false;
+      return;
+    }
+
+    this._mask = this.consume(4);
+    this._state = GET_DATA;
+  }
+
+  /**
+   * Reads data bytes.
+   *
+   * @param {Function} cb Callback
+   * @return {(Error|RangeError|undefined)} A possible error
+   * @private
+   */
+  getData(cb) {
+    let data = EMPTY_BUFFER;
+
+    if (this._payloadLength) {
+      if (this._bufferedBytes < this._payloadLength) {
+        this._loop = false;
+        return;
+      }
+
+      data = this.consume(this._payloadLength);
+      if (this._masked) unmask(data, this._mask);
+    }
+
+    if (this._opcode > 0x07) return this.controlMessage(data);
+
+    if (this._compressed) {
+      this._state = INFLATING;
+      this.decompress(data, cb);
+      return;
+    }
+
+    if (data.length) {
+      //
+      // This message is not compressed so its lenght is the sum of the payload
+      // length of all fragments.
+      //
+      this._messageLength = this._totalPayloadLength;
+      this._fragments.push(data);
+    }
+
+    return this.dataMessage();
+  }
+
+  /**
+   * Decompresses data.
+   *
+   * @param {Buffer} data Compressed data
+   * @param {Function} cb Callback
+   * @private
+   */
+  decompress(data, cb) {
+    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
+
+    perMessageDeflate.decompress(data, this._fin, (err, buf) => {
+      if (err) return cb(err);
+
+      if (buf.length) {
+        this._messageLength += buf.length;
+        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {
+          return cb(
+            error(RangeError, 'Max payload size exceeded', false, 1009)
+          );
+        }
+
+        this._fragments.push(buf);
+      }
+
+      const er = this.dataMessage();
+      if (er) return cb(er);
+
+      this.startLoop(cb);
+    });
+  }
+
+  /**
+   * Handles a data message.
+   *
+   * @return {(Error|undefined)} A possible error
+   * @private
+   */
+  dataMessage() {
+    if (this._fin) {
+      const messageLength = this._messageLength;
+      const fragments = this._fragments;
+
+      this._totalPayloadLength = 0;
+      this._messageLength = 0;
+      this._fragmented = 0;
+      this._fragments = [];
+
+      if (this._opcode === 2) {
+        let data;
+
+        if (this._binaryType === 'nodebuffer') {
+          data = concat(fragments, messageLength);
+        } else if (this._binaryType === 'arraybuffer') {
+          data = toArrayBuffer(concat(fragments, messageLength));
+        } else {
+          data = fragments;
+        }
+
+        this.emit('message', data);
+      } else {
+        const buf = concat(fragments, messageLength);
+
+        if (!isValidUTF8(buf)) {
+          this._loop = false;
+          return error(Error, 'invalid UTF-8 sequence', true, 1007);
+        }
+
+        this.emit('message', buf.toString());
+      }
+    }
+
+    this._state = GET_INFO;
+  }
+
+  /**
+   * Handles a control message.
+   *
+   * @param {Buffer} data Data to handle
+   * @return {(Error|RangeError|undefined)} A possible error
+   * @private
+   */
+  controlMessage(data) {
+    if (this._opcode === 0x08) {
+      this._loop = false;
+
+      if (data.length === 0) {
+        this.emit('conclude', 1005, '');
+        this.end();
+      } else if (data.length === 1) {
+        return error(RangeError, 'invalid payload length 1', true, 1002);
+      } else {
+        const code = data.readUInt16BE(0);
+
+        if (!isValidStatusCode(code)) {
+          return error(RangeError, `invalid status code ${code}`, true, 1002);
+        }
+
+        const buf = data.slice(2);
+
+        if (!isValidUTF8(buf)) {
+          return error(Error, 'invalid UTF-8 sequence', true, 1007);
+        }
+
+        this.emit('conclude', code, buf.toString());
+        this.end();
+      }
+    } else if (this._opcode === 0x09) {
+      this.emit('ping', data);
+    } else {
+      this.emit('pong', data);
+    }
+
+    this._state = GET_INFO;
+  }
+}
+
+module.exports = Receiver;
+
+/**
+ * Builds an error object.
+ *
+ * @param {(Error|RangeError)} ErrorCtor The error constructor
+ * @param {String} message The error message
+ * @param {Boolean} prefix Specifies whether or not to add a default prefix to
+ *     `message`
+ * @param {Number} statusCode The status code
+ * @return {(Error|RangeError)} The error
+ * @private
+ */
+function error(ErrorCtor, message, prefix, statusCode) {
+  const err = new ErrorCtor(
+    prefix ? `Invalid WebSocket frame: ${message}` : message
+  );
+
+  Error.captureStackTrace(err, error);
+  err[kStatusCode] = statusCode;
+  return err;
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/sender.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/sender.js
new file mode 100644 (file)
index 0000000..ad71e19
--- /dev/null
@@ -0,0 +1,405 @@
+'use strict';
+
+const { randomFillSync } = require('crypto');
+
+const PerMessageDeflate = require('./permessage-deflate');
+const { EMPTY_BUFFER } = require('./constants');
+const { isValidStatusCode } = require('./validation');
+const { mask: applyMask, toBuffer } = require('./buffer-util');
+
+const mask = Buffer.alloc(4);
+
+/**
+ * HyBi Sender implementation.
+ */
+class Sender {
+  /**
+   * Creates a Sender instance.
+   *
+   * @param {net.Socket} socket The connection socket
+   * @param {Object} [extensions] An object containing the negotiated extensions
+   */
+  constructor(socket, extensions) {
+    this._extensions = extensions || {};
+    this._socket = socket;
+
+    this._firstFragment = true;
+    this._compress = false;
+
+    this._bufferedBytes = 0;
+    this._deflating = false;
+    this._queue = [];
+  }
+
+  /**
+   * Frames a piece of data according to the HyBi WebSocket protocol.
+   *
+   * @param {Buffer} data The data to frame
+   * @param {Object} options Options object
+   * @param {Number} options.opcode The opcode
+   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be
+   *     modified
+   * @param {Boolean} [options.fin=false] Specifies whether or not to set the
+   *     FIN bit
+   * @param {Boolean} [options.mask=false] Specifies whether or not to mask
+   *     `data`
+   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the
+   *     RSV1 bit
+   * @return {Buffer[]} The framed data as a list of `Buffer` instances
+   * @public
+   */
+  static frame(data, options) {
+    const merge = options.mask && options.readOnly;
+    let offset = options.mask ? 6 : 2;
+    let payloadLength = data.length;
+
+    if (data.length >= 65536) {
+      offset += 8;
+      payloadLength = 127;
+    } else if (data.length > 125) {
+      offset += 2;
+      payloadLength = 126;
+    }
+
+    const target = Buffer.allocUnsafe(merge ? data.length + offset : offset);
+
+    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;
+    if (options.rsv1) target[0] |= 0x40;
+
+    target[1] = payloadLength;
+
+    if (payloadLength === 126) {
+      target.writeUInt16BE(data.length, 2);
+    } else if (payloadLength === 127) {
+      target.writeUInt32BE(0, 2);
+      target.writeUInt32BE(data.length, 6);
+    }
+
+    if (!options.mask) return [target, data];
+
+    randomFillSync(mask, 0, 4);
+
+    target[1] |= 0x80;
+    target[offset - 4] = mask[0];
+    target[offset - 3] = mask[1];
+    target[offset - 2] = mask[2];
+    target[offset - 1] = mask[3];
+
+    if (merge) {
+      applyMask(data, mask, target, offset, data.length);
+      return [target];
+    }
+
+    applyMask(data, mask, data, 0, data.length);
+    return [target, data];
+  }
+
+  /**
+   * Sends a close message to the other peer.
+   *
+   * @param {Number} [code] The status code component of the body
+   * @param {String} [data] The message component of the body
+   * @param {Boolean} [mask=false] Specifies whether or not to mask the message
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  close(code, data, mask, cb) {
+    let buf;
+
+    if (code === undefined) {
+      buf = EMPTY_BUFFER;
+    } else if (typeof code !== 'number' || !isValidStatusCode(code)) {
+      throw new TypeError('First argument must be a valid error code number');
+    } else if (data === undefined || data === '') {
+      buf = Buffer.allocUnsafe(2);
+      buf.writeUInt16BE(code, 0);
+    } else {
+      const length = Buffer.byteLength(data);
+
+      if (length > 123) {
+        throw new RangeError('The message must not be greater than 123 bytes');
+      }
+
+      buf = Buffer.allocUnsafe(2 + length);
+      buf.writeUInt16BE(code, 0);
+      buf.write(data, 2);
+    }
+
+    if (this._deflating) {
+      this.enqueue([this.doClose, buf, mask, cb]);
+    } else {
+      this.doClose(buf, mask, cb);
+    }
+  }
+
+  /**
+   * Frames and sends a close message.
+   *
+   * @param {Buffer} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  doClose(data, mask, cb) {
+    this.sendFrame(
+      Sender.frame(data, {
+        fin: true,
+        rsv1: false,
+        opcode: 0x08,
+        mask,
+        readOnly: false
+      }),
+      cb
+    );
+  }
+
+  /**
+   * Sends a ping message to the other peer.
+   *
+   * @param {*} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  ping(data, mask, cb) {
+    const buf = toBuffer(data);
+
+    if (buf.length > 125) {
+      throw new RangeError('The data size must not be greater than 125 bytes');
+    }
+
+    if (this._deflating) {
+      this.enqueue([this.doPing, buf, mask, toBuffer.readOnly, cb]);
+    } else {
+      this.doPing(buf, mask, toBuffer.readOnly, cb);
+    }
+  }
+
+  /**
+   * Frames and sends a ping message.
+   *
+   * @param {Buffer} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  doPing(data, mask, readOnly, cb) {
+    this.sendFrame(
+      Sender.frame(data, {
+        fin: true,
+        rsv1: false,
+        opcode: 0x09,
+        mask,
+        readOnly
+      }),
+      cb
+    );
+  }
+
+  /**
+   * Sends a pong message to the other peer.
+   *
+   * @param {*} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  pong(data, mask, cb) {
+    const buf = toBuffer(data);
+
+    if (buf.length > 125) {
+      throw new RangeError('The data size must not be greater than 125 bytes');
+    }
+
+    if (this._deflating) {
+      this.enqueue([this.doPong, buf, mask, toBuffer.readOnly, cb]);
+    } else {
+      this.doPong(buf, mask, toBuffer.readOnly, cb);
+    }
+  }
+
+  /**
+   * Frames and sends a pong message.
+   *
+   * @param {Buffer} data The message to send
+   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
+   * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  doPong(data, mask, readOnly, cb) {
+    this.sendFrame(
+      Sender.frame(data, {
+        fin: true,
+        rsv1: false,
+        opcode: 0x0a,
+        mask,
+        readOnly
+      }),
+      cb
+    );
+  }
+
+  /**
+   * Sends a data message to the other peer.
+   *
+   * @param {*} data The message to send
+   * @param {Object} options Options object
+   * @param {Boolean} [options.compress=false] Specifies whether or not to
+   *     compress `data`
+   * @param {Boolean} [options.binary=false] Specifies whether `data` is binary
+   *     or text
+   * @param {Boolean} [options.fin=false] Specifies whether the fragment is the
+   *     last one
+   * @param {Boolean} [options.mask=false] Specifies whether or not to mask
+   *     `data`
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  send(data, options, cb) {
+    const buf = toBuffer(data);
+    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
+    let opcode = options.binary ? 2 : 1;
+    let rsv1 = options.compress;
+
+    if (this._firstFragment) {
+      this._firstFragment = false;
+      if (rsv1 && perMessageDeflate) {
+        rsv1 = buf.length >= perMessageDeflate._threshold;
+      }
+      this._compress = rsv1;
+    } else {
+      rsv1 = false;
+      opcode = 0;
+    }
+
+    if (options.fin) this._firstFragment = true;
+
+    if (perMessageDeflate) {
+      const opts = {
+        fin: options.fin,
+        rsv1,
+        opcode,
+        mask: options.mask,
+        readOnly: toBuffer.readOnly
+      };
+
+      if (this._deflating) {
+        this.enqueue([this.dispatch, buf, this._compress, opts, cb]);
+      } else {
+        this.dispatch(buf, this._compress, opts, cb);
+      }
+    } else {
+      this.sendFrame(
+        Sender.frame(buf, {
+          fin: options.fin,
+          rsv1: false,
+          opcode,
+          mask: options.mask,
+          readOnly: toBuffer.readOnly
+        }),
+        cb
+      );
+    }
+  }
+
+  /**
+   * Dispatches a data message.
+   *
+   * @param {Buffer} data The message to send
+   * @param {Boolean} [compress=false] Specifies whether or not to compress
+   *     `data`
+   * @param {Object} options Options object
+   * @param {Number} options.opcode The opcode
+   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be
+   *     modified
+   * @param {Boolean} [options.fin=false] Specifies whether or not to set the
+   *     FIN bit
+   * @param {Boolean} [options.mask=false] Specifies whether or not to mask
+   *     `data`
+   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the
+   *     RSV1 bit
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  dispatch(data, compress, options, cb) {
+    if (!compress) {
+      this.sendFrame(Sender.frame(data, options), cb);
+      return;
+    }
+
+    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
+
+    this._bufferedBytes += data.length;
+    this._deflating = true;
+    perMessageDeflate.compress(data, options.fin, (_, buf) => {
+      if (this._socket.destroyed) {
+        const err = new Error(
+          'The socket was closed while data was being compressed'
+        );
+
+        if (typeof cb === 'function') cb(err);
+
+        for (let i = 0; i < this._queue.length; i++) {
+          const callback = this._queue[i][4];
+
+          if (typeof callback === 'function') callback(err);
+        }
+
+        return;
+      }
+
+      this._bufferedBytes -= data.length;
+      this._deflating = false;
+      options.readOnly = false;
+      this.sendFrame(Sender.frame(buf, options), cb);
+      this.dequeue();
+    });
+  }
+
+  /**
+   * Executes queued send operations.
+   *
+   * @private
+   */
+  dequeue() {
+    while (!this._deflating && this._queue.length) {
+      const params = this._queue.shift();
+
+      this._bufferedBytes -= params[1].length;
+      Reflect.apply(params[0], this, params.slice(1));
+    }
+  }
+
+  /**
+   * Enqueues a send operation.
+   *
+   * @param {Array} params Send operation parameters.
+   * @private
+   */
+  enqueue(params) {
+    this._bufferedBytes += params[1].length;
+    this._queue.push(params);
+  }
+
+  /**
+   * Sends a frame.
+   *
+   * @param {Buffer[]} list The frame to send
+   * @param {Function} [cb] Callback
+   * @private
+   */
+  sendFrame(list, cb) {
+    if (list.length === 2) {
+      this._socket.cork();
+      this._socket.write(list[0]);
+      this._socket.write(list[1], cb);
+      this._socket.uncork();
+    } else {
+      this._socket.write(list[0], cb);
+    }
+  }
+}
+
+module.exports = Sender;
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/stream.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/stream.js
new file mode 100644 (file)
index 0000000..604cf36
--- /dev/null
@@ -0,0 +1,165 @@
+'use strict';
+
+const { Duplex } = require('stream');
+
+/**
+ * Emits the `'close'` event on a stream.
+ *
+ * @param {stream.Duplex} The stream.
+ * @private
+ */
+function emitClose(stream) {
+  stream.emit('close');
+}
+
+/**
+ * The listener of the `'end'` event.
+ *
+ * @private
+ */
+function duplexOnEnd() {
+  if (!this.destroyed && this._writableState.finished) {
+    this.destroy();
+  }
+}
+
+/**
+ * The listener of the `'error'` event.
+ *
+ * @param {Error} err The error
+ * @private
+ */
+function duplexOnError(err) {
+  this.removeListener('error', duplexOnError);
+  this.destroy();
+  if (this.listenerCount('error') === 0) {
+    // Do not suppress the throwing behavior.
+    this.emit('error', err);
+  }
+}
+
+/**
+ * Wraps a `WebSocket` in a duplex stream.
+ *
+ * @param {WebSocket} ws The `WebSocket` to wrap
+ * @param {Object} [options] The options for the `Duplex` constructor
+ * @return {stream.Duplex} The duplex stream
+ * @public
+ */
+function createWebSocketStream(ws, options) {
+  let resumeOnReceiverDrain = true;
+
+  function receiverOnDrain() {
+    if (resumeOnReceiverDrain) ws._socket.resume();
+  }
+
+  if (ws.readyState === ws.CONNECTING) {
+    ws.once('open', function open() {
+      ws._receiver.removeAllListeners('drain');
+      ws._receiver.on('drain', receiverOnDrain);
+    });
+  } else {
+    ws._receiver.removeAllListeners('drain');
+    ws._receiver.on('drain', receiverOnDrain);
+  }
+
+  const duplex = new Duplex({
+    ...options,
+    autoDestroy: false,
+    emitClose: false,
+    objectMode: false,
+    writableObjectMode: false
+  });
+
+  ws.on('message', function message(msg) {
+    if (!duplex.push(msg)) {
+      resumeOnReceiverDrain = false;
+      ws._socket.pause();
+    }
+  });
+
+  ws.once('error', function error(err) {
+    if (duplex.destroyed) return;
+
+    duplex.destroy(err);
+  });
+
+  ws.once('close', function close() {
+    if (duplex.destroyed) return;
+
+    duplex.push(null);
+  });
+
+  duplex._destroy = function (err, callback) {
+    if (ws.readyState === ws.CLOSED) {
+      callback(err);
+      process.nextTick(emitClose, duplex);
+      return;
+    }
+
+    let called = false;
+
+    ws.once('error', function error(err) {
+      called = true;
+      callback(err);
+    });
+
+    ws.once('close', function close() {
+      if (!called) callback(err);
+      process.nextTick(emitClose, duplex);
+    });
+    ws.terminate();
+  };
+
+  duplex._final = function (callback) {
+    if (ws.readyState === ws.CONNECTING) {
+      ws.once('open', function open() {
+        duplex._final(callback);
+      });
+      return;
+    }
+
+    // If the value of the `_socket` property is `null` it means that `ws` is a
+    // client websocket and the handshake failed. In fact, when this happens, a
+    // socket is never assigned to the websocket. Wait for the `'error'` event
+    // that will be emitted by the websocket.
+    if (ws._socket === null) return;
+
+    if (ws._socket._writableState.finished) {
+      callback();
+      if (duplex._readableState.endEmitted) duplex.destroy();
+    } else {
+      ws._socket.once('finish', function finish() {
+        // `duplex` is not destroyed here because the `'end'` event will be
+        // emitted on `duplex` after this `'finish'` event. The EOF signaling
+        // `null` chunk is, in fact, pushed when the websocket emits `'close'`.
+        callback();
+      });
+      ws.close();
+    }
+  };
+
+  duplex._read = function () {
+    if (ws.readyState === ws.OPEN && !resumeOnReceiverDrain) {
+      resumeOnReceiverDrain = true;
+      if (!ws._receiver._writableState.needDrain) ws._socket.resume();
+    }
+  };
+
+  duplex._write = function (chunk, encoding, callback) {
+    if (ws.readyState === ws.CONNECTING) {
+      ws.once('open', function open() {
+        duplex._write(chunk, encoding, callback);
+      });
+      return;
+    }
+
+    ws.send(chunk, callback);
+  };
+
+  duplex.on('end', duplexOnEnd);
+  duplex.on('error', duplexOnError);
+  return duplex;
+}
+
+module.exports = createWebSocketStream;
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/validation.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/validation.js
new file mode 100644 (file)
index 0000000..32db5a5
--- /dev/null
@@ -0,0 +1,30 @@
+'use strict';
+
+try {
+  const isValidUTF8 = require('utf-8-validate');
+
+  exports.isValidUTF8 =
+    typeof isValidUTF8 === 'object'
+      ? isValidUTF8.Validation.isValidUTF8 // utf-8-validate@<3.0.0
+      : isValidUTF8;
+} catch (e) /* istanbul ignore next */ {
+  exports.isValidUTF8 = () => true;
+}
+
+/**
+ * Checks if a status code is allowed in a close frame.
+ *
+ * @param {Number} code The status code
+ * @return {Boolean} `true` if the status code is valid, else `false`
+ * @public
+ */
+exports.isValidStatusCode = (code) => {
+  return (
+    (code >= 1000 &&
+      code <= 1014 &&
+      code !== 1004 &&
+      code !== 1005 &&
+      code !== 1006) ||
+    (code >= 3000 && code <= 4999)
+  );
+};
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/websocket-server.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/websocket-server.js
new file mode 100644 (file)
index 0000000..b99ad05
--- /dev/null
@@ -0,0 +1,406 @@
+'use strict';
+
+const EventEmitter = require('events');
+const { createHash } = require('crypto');
+const { createServer, STATUS_CODES } = require('http');
+
+const PerMessageDeflate = require('./permessage-deflate');
+const WebSocket = require('./websocket');
+const { format, parse } = require('./extension');
+const { GUID, kWebSocket } = require('./constants');
+
+const keyRegex = /^[+/0-9A-Za-z]{22}==$/;
+
+/**
+ * Class representing a WebSocket server.
+ *
+ * @extends EventEmitter
+ */
+class WebSocketServer extends EventEmitter {
+  /**
+   * Create a `WebSocketServer` instance.
+   *
+   * @param {Object} options Configuration options
+   * @param {Number} [options.backlog=511] The maximum length of the queue of
+   *     pending connections
+   * @param {Boolean} [options.clientTracking=true] Specifies whether or not to
+   *     track clients
+   * @param {Function} [options.handleProtocols] A hook to handle protocols
+   * @param {String} [options.host] The hostname where to bind the server
+   * @param {Number} [options.maxPayload=104857600] The maximum allowed message
+   *     size
+   * @param {Boolean} [options.noServer=false] Enable no server mode
+   * @param {String} [options.path] Accept only connections matching this path
+   * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable
+   *     permessage-deflate
+   * @param {Number} [options.port] The port where to bind the server
+   * @param {http.Server} [options.server] A pre-created HTTP/S server to use
+   * @param {Function} [options.verifyClient] A hook to reject connections
+   * @param {Function} [callback] A listener for the `listening` event
+   */
+  constructor(options, callback) {
+    super();
+
+    options = {
+      maxPayload: 100 * 1024 * 1024,
+      perMessageDeflate: false,
+      handleProtocols: null,
+      clientTracking: true,
+      verifyClient: null,
+      noServer: false,
+      backlog: null, // use default (511 as implemented in net.js)
+      server: null,
+      host: null,
+      path: null,
+      port: null,
+      ...options
+    };
+
+    if (options.port == null && !options.server && !options.noServer) {
+      throw new TypeError(
+        'One of the "port", "server", or "noServer" options must be specified'
+      );
+    }
+
+    if (options.port != null) {
+      this._server = createServer((req, res) => {
+        const body = STATUS_CODES[426];
+
+        res.writeHead(426, {
+          'Content-Length': body.length,
+          'Content-Type': 'text/plain'
+        });
+        res.end(body);
+      });
+      this._server.listen(
+        options.port,
+        options.host,
+        options.backlog,
+        callback
+      );
+    } else if (options.server) {
+      this._server = options.server;
+    }
+
+    if (this._server) {
+      const emitConnection = this.emit.bind(this, 'connection');
+
+      this._removeListeners = addListeners(this._server, {
+        listening: this.emit.bind(this, 'listening'),
+        error: this.emit.bind(this, 'error'),
+        upgrade: (req, socket, head) => {
+          this.handleUpgrade(req, socket, head, emitConnection);
+        }
+      });
+    }
+
+    if (options.perMessageDeflate === true) options.perMessageDeflate = {};
+    if (options.clientTracking) this.clients = new Set();
+    this.options = options;
+  }
+
+  /**
+   * Returns the bound address, the address family name, and port of the server
+   * as reported by the operating system if listening on an IP socket.
+   * If the server is listening on a pipe or UNIX domain socket, the name is
+   * returned as a string.
+   *
+   * @return {(Object|String|null)} The address of the server
+   * @public
+   */
+  address() {
+    if (this.options.noServer) {
+      throw new Error('The server is operating in "noServer" mode');
+    }
+
+    if (!this._server) return null;
+    return this._server.address();
+  }
+
+  /**
+   * Close the server.
+   *
+   * @param {Function} [cb] Callback
+   * @public
+   */
+  close(cb) {
+    if (cb) this.once('close', cb);
+
+    //
+    // Terminate all associated clients.
+    //
+    if (this.clients) {
+      for (const client of this.clients) client.terminate();
+    }
+
+    const server = this._server;
+
+    if (server) {
+      this._removeListeners();
+      this._removeListeners = this._server = null;
+
+      //
+      // Close the http server if it was internally created.
+      //
+      if (this.options.port != null) {
+        server.close(() => this.emit('close'));
+        return;
+      }
+    }
+
+    process.nextTick(emitClose, this);
+  }
+
+  /**
+   * See if a given request should be handled by this server instance.
+   *
+   * @param {http.IncomingMessage} req Request object to inspect
+   * @return {Boolean} `true` if the request is valid, else `false`
+   * @public
+   */
+  shouldHandle(req) {
+    if (this.options.path) {
+      const index = req.url.indexOf('?');
+      const pathname = index !== -1 ? req.url.slice(0, index) : req.url;
+
+      if (pathname !== this.options.path) return false;
+    }
+
+    return true;
+  }
+
+  /**
+   * Handle a HTTP Upgrade request.
+   *
+   * @param {http.IncomingMessage} req The request object
+   * @param {net.Socket} socket The network socket between the server and client
+   * @param {Buffer} head The first packet of the upgraded stream
+   * @param {Function} cb Callback
+   * @public
+   */
+  handleUpgrade(req, socket, head, cb) {
+    socket.on('error', socketOnError);
+
+    const key =
+      req.headers['sec-websocket-key'] !== undefined
+        ? req.headers['sec-websocket-key'].trim()
+        : false;
+    const version = +req.headers['sec-websocket-version'];
+    const extensions = {};
+
+    if (
+      req.method !== 'GET' ||
+      req.headers.upgrade.toLowerCase() !== 'websocket' ||
+      !key ||
+      !keyRegex.test(key) ||
+      (version !== 8 && version !== 13) ||
+      !this.shouldHandle(req)
+    ) {
+      return abortHandshake(socket, 400);
+    }
+
+    if (this.options.perMessageDeflate) {
+      const perMessageDeflate = new PerMessageDeflate(
+        this.options.perMessageDeflate,
+        true,
+        this.options.maxPayload
+      );
+
+      try {
+        const offers = parse(req.headers['sec-websocket-extensions']);
+
+        if (offers[PerMessageDeflate.extensionName]) {
+          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);
+          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
+        }
+      } catch (err) {
+        return abortHandshake(socket, 400);
+      }
+    }
+
+    //
+    // Optionally call external client verification handler.
+    //
+    if (this.options.verifyClient) {
+      const info = {
+        origin:
+          req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],
+        secure: !!(req.socket.authorized || req.socket.encrypted),
+        req
+      };
+
+      if (this.options.verifyClient.length === 2) {
+        this.options.verifyClient(info, (verified, code, message, headers) => {
+          if (!verified) {
+            return abortHandshake(socket, code || 401, message, headers);
+          }
+
+          this.completeUpgrade(key, extensions, req, socket, head, cb);
+        });
+        return;
+      }
+
+      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);
+    }
+
+    this.completeUpgrade(key, extensions, req, socket, head, cb);
+  }
+
+  /**
+   * Upgrade the connection to WebSocket.
+   *
+   * @param {String} key The value of the `Sec-WebSocket-Key` header
+   * @param {Object} extensions The accepted extensions
+   * @param {http.IncomingMessage} req The request object
+   * @param {net.Socket} socket The network socket between the server and client
+   * @param {Buffer} head The first packet of the upgraded stream
+   * @param {Function} cb Callback
+   * @throws {Error} If called more than once with the same socket
+   * @private
+   */
+  completeUpgrade(key, extensions, req, socket, head, cb) {
+    //
+    // Destroy the socket if the client has already sent a FIN packet.
+    //
+    if (!socket.readable || !socket.writable) return socket.destroy();
+
+    if (socket[kWebSocket]) {
+      throw new Error(
+        'server.handleUpgrade() was called more than once with the same ' +
+          'socket, possibly due to a misconfiguration'
+      );
+    }
+
+    const digest = createHash('sha1')
+      .update(key + GUID)
+      .digest('base64');
+
+    const headers = [
+      'HTTP/1.1 101 Switching Protocols',
+      'Upgrade: websocket',
+      'Connection: Upgrade',
+      `Sec-WebSocket-Accept: ${digest}`
+    ];
+
+    const ws = new WebSocket(null);
+    let protocol = req.headers['sec-websocket-protocol'];
+
+    if (protocol) {
+      protocol = protocol.trim().split(/ *, */);
+
+      //
+      // Optionally call external protocol selection handler.
+      //
+      if (this.options.handleProtocols) {
+        protocol = this.options.handleProtocols(protocol, req);
+      } else {
+        protocol = protocol[0];
+      }
+
+      if (protocol) {
+        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);
+        ws._protocol = protocol;
+      }
+    }
+
+    if (extensions[PerMessageDeflate.extensionName]) {
+      const params = extensions[PerMessageDeflate.extensionName].params;
+      const value = format({
+        [PerMessageDeflate.extensionName]: [params]
+      });
+      headers.push(`Sec-WebSocket-Extensions: ${value}`);
+      ws._extensions = extensions;
+    }
+
+    //
+    // Allow external modification/inspection of handshake headers.
+    //
+    this.emit('headers', headers, req);
+
+    socket.write(headers.concat('\r\n').join('\r\n'));
+    socket.removeListener('error', socketOnError);
+
+    ws.setSocket(socket, head, this.options.maxPayload);
+
+    if (this.clients) {
+      this.clients.add(ws);
+      ws.on('close', () => this.clients.delete(ws));
+    }
+
+    cb(ws, req);
+  }
+}
+
+module.exports = WebSocketServer;
+
+/**
+ * Add event listeners on an `EventEmitter` using a map of <event, listener>
+ * pairs.
+ *
+ * @param {EventEmitter} server The event emitter
+ * @param {Object.<String, Function>} map The listeners to add
+ * @return {Function} A function that will remove the added listeners when
+ *     called
+ * @private
+ */
+function addListeners(server, map) {
+  for (const event of Object.keys(map)) server.on(event, map[event]);
+
+  return function removeListeners() {
+    for (const event of Object.keys(map)) {
+      server.removeListener(event, map[event]);
+    }
+  };
+}
+
+/**
+ * Emit a `'close'` event on an `EventEmitter`.
+ *
+ * @param {EventEmitter} server The event emitter
+ * @private
+ */
+function emitClose(server) {
+  server.emit('close');
+}
+
+/**
+ * Handle premature socket errors.
+ *
+ * @private
+ */
+function socketOnError() {
+  this.destroy();
+}
+
+/**
+ * Close the connection when preconditions are not fulfilled.
+ *
+ * @param {net.Socket} socket The socket of the upgrade request
+ * @param {Number} code The HTTP response status code
+ * @param {String} [message] The HTTP response body
+ * @param {Object} [headers] Additional HTTP response headers
+ * @private
+ */
+function abortHandshake(socket, code, message, headers) {
+  if (socket.writable) {
+    message = message || STATUS_CODES[code];
+    headers = {
+      Connection: 'close',
+      'Content-Type': 'text/html',
+      'Content-Length': Buffer.byteLength(message),
+      ...headers
+    };
+
+    socket.write(
+      `HTTP/1.1 ${code} ${STATUS_CODES[code]}\r\n` +
+        Object.keys(headers)
+          .map((h) => `${h}: ${headers[h]}`)
+          .join('\r\n') +
+        '\r\n\r\n' +
+        message
+    );
+  }
+
+  socket.removeListener('error', socketOnError);
+  socket.destroy();
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/websocket.js b/signaling_server/service/node_modules/engine.io/node_modules/ws/lib/websocket.js
new file mode 100644 (file)
index 0000000..0e2a83d
--- /dev/null
@@ -0,0 +1,933 @@
+'use strict';
+
+const EventEmitter = require('events');
+const https = require('https');
+const http = require('http');
+const net = require('net');
+const tls = require('tls');
+const { randomBytes, createHash } = require('crypto');
+const { URL } = require('url');
+
+const PerMessageDeflate = require('./permessage-deflate');
+const Receiver = require('./receiver');
+const Sender = require('./sender');
+const {
+  BINARY_TYPES,
+  EMPTY_BUFFER,
+  GUID,
+  kStatusCode,
+  kWebSocket,
+  NOOP
+} = require('./constants');
+const { addEventListener, removeEventListener } = require('./event-target');
+const { format, parse } = require('./extension');
+const { toBuffer } = require('./buffer-util');
+
+const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
+const protocolVersions = [8, 13];
+const closeTimeout = 30 * 1000;
+
+/**
+ * Class representing a WebSocket.
+ *
+ * @extends EventEmitter
+ */
+class WebSocket extends EventEmitter {
+  /**
+   * Create a new `WebSocket`.
+   *
+   * @param {(String|url.URL)} address The URL to which to connect
+   * @param {(String|String[])} [protocols] The subprotocols
+   * @param {Object} [options] Connection options
+   */
+  constructor(address, protocols, options) {
+    super();
+
+    this._binaryType = BINARY_TYPES[0];
+    this._closeCode = 1006;
+    this._closeFrameReceived = false;
+    this._closeFrameSent = false;
+    this._closeMessage = '';
+    this._closeTimer = null;
+    this._extensions = {};
+    this._protocol = '';
+    this._readyState = WebSocket.CONNECTING;
+    this._receiver = null;
+    this._sender = null;
+    this._socket = null;
+
+    if (address !== null) {
+      this._bufferedAmount = 0;
+      this._isServer = false;
+      this._redirects = 0;
+
+      if (Array.isArray(protocols)) {
+        protocols = protocols.join(', ');
+      } else if (typeof protocols === 'object' && protocols !== null) {
+        options = protocols;
+        protocols = undefined;
+      }
+
+      initAsClient(this, address, protocols, options);
+    } else {
+      this._isServer = true;
+    }
+  }
+
+  /**
+   * This deviates from the WHATWG interface since ws doesn't support the
+   * required default "blob" type (instead we define a custom "nodebuffer"
+   * type).
+   *
+   * @type {String}
+   */
+  get binaryType() {
+    return this._binaryType;
+  }
+
+  set binaryType(type) {
+    if (!BINARY_TYPES.includes(type)) return;
+
+    this._binaryType = type;
+
+    //
+    // Allow to change `binaryType` on the fly.
+    //
+    if (this._receiver) this._receiver._binaryType = type;
+  }
+
+  /**
+   * @type {Number}
+   */
+  get bufferedAmount() {
+    if (!this._socket) return this._bufferedAmount;
+
+    return this._socket._writableState.length + this._sender._bufferedBytes;
+  }
+
+  /**
+   * @type {String}
+   */
+  get extensions() {
+    return Object.keys(this._extensions).join();
+  }
+
+  /**
+   * @type {String}
+   */
+  get protocol() {
+    return this._protocol;
+  }
+
+  /**
+   * @type {Number}
+   */
+  get readyState() {
+    return this._readyState;
+  }
+
+  /**
+   * @type {String}
+   */
+  get url() {
+    return this._url;
+  }
+
+  /**
+   * Set up the socket and the internal resources.
+   *
+   * @param {net.Socket} socket The network socket between the server and client
+   * @param {Buffer} head The first packet of the upgraded stream
+   * @param {Number} [maxPayload=0] The maximum allowed message size
+   * @private
+   */
+  setSocket(socket, head, maxPayload) {
+    const receiver = new Receiver(
+      this.binaryType,
+      this._extensions,
+      this._isServer,
+      maxPayload
+    );
+
+    this._sender = new Sender(socket, this._extensions);
+    this._receiver = receiver;
+    this._socket = socket;
+
+    receiver[kWebSocket] = this;
+    socket[kWebSocket] = this;
+
+    receiver.on('conclude', receiverOnConclude);
+    receiver.on('drain', receiverOnDrain);
+    receiver.on('error', receiverOnError);
+    receiver.on('message', receiverOnMessage);
+    receiver.on('ping', receiverOnPing);
+    receiver.on('pong', receiverOnPong);
+
+    socket.setTimeout(0);
+    socket.setNoDelay();
+
+    if (head.length > 0) socket.unshift(head);
+
+    socket.on('close', socketOnClose);
+    socket.on('data', socketOnData);
+    socket.on('end', socketOnEnd);
+    socket.on('error', socketOnError);
+
+    this._readyState = WebSocket.OPEN;
+    this.emit('open');
+  }
+
+  /**
+   * Emit the `'close'` event.
+   *
+   * @private
+   */
+  emitClose() {
+    if (!this._socket) {
+      this._readyState = WebSocket.CLOSED;
+      this.emit('close', this._closeCode, this._closeMessage);
+      return;
+    }
+
+    if (this._extensions[PerMessageDeflate.extensionName]) {
+      this._extensions[PerMessageDeflate.extensionName].cleanup();
+    }
+
+    this._receiver.removeAllListeners();
+    this._readyState = WebSocket.CLOSED;
+    this.emit('close', this._closeCode, this._closeMessage);
+  }
+
+  /**
+   * Start a closing handshake.
+   *
+   *          +----------+   +-----------+   +----------+
+   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -
+   *    |     +----------+   +-----------+   +----------+     |
+   *          +----------+   +-----------+         |
+   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING
+   *          +----------+   +-----------+   |
+   *    |           |                        |   +---+        |
+   *                +------------------------+-->|fin| - - - -
+   *    |         +---+                      |   +---+
+   *     - - - - -|fin|<---------------------+
+   *              +---+
+   *
+   * @param {Number} [code] Status code explaining why the connection is closing
+   * @param {String} [data] A string explaining why the connection is closing
+   * @public
+   */
+  close(code, data) {
+    if (this.readyState === WebSocket.CLOSED) return;
+    if (this.readyState === WebSocket.CONNECTING) {
+      const msg = 'WebSocket was closed before the connection was established';
+      return abortHandshake(this, this._req, msg);
+    }
+
+    if (this.readyState === WebSocket.CLOSING) {
+      if (this._closeFrameSent && this._closeFrameReceived) this._socket.end();
+      return;
+    }
+
+    this._readyState = WebSocket.CLOSING;
+    this._sender.close(code, data, !this._isServer, (err) => {
+      //
+      // This error is handled by the `'error'` listener on the socket. We only
+      // want to know if the close frame has been sent here.
+      //
+      if (err) return;
+
+      this._closeFrameSent = true;
+      if (this._closeFrameReceived) this._socket.end();
+    });
+
+    //
+    // Specify a timeout for the closing handshake to complete.
+    //
+    this._closeTimer = setTimeout(
+      this._socket.destroy.bind(this._socket),
+      closeTimeout
+    );
+  }
+
+  /**
+   * Send a ping.
+   *
+   * @param {*} [data] The data to send
+   * @param {Boolean} [mask] Indicates whether or not to mask `data`
+   * @param {Function} [cb] Callback which is executed when the ping is sent
+   * @public
+   */
+  ping(data, mask, cb) {
+    if (this.readyState === WebSocket.CONNECTING) {
+      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
+    }
+
+    if (typeof data === 'function') {
+      cb = data;
+      data = mask = undefined;
+    } else if (typeof mask === 'function') {
+      cb = mask;
+      mask = undefined;
+    }
+
+    if (typeof data === 'number') data = data.toString();
+
+    if (this.readyState !== WebSocket.OPEN) {
+      sendAfterClose(this, data, cb);
+      return;
+    }
+
+    if (mask === undefined) mask = !this._isServer;
+    this._sender.ping(data || EMPTY_BUFFER, mask, cb);
+  }
+
+  /**
+   * Send a pong.
+   *
+   * @param {*} [data] The data to send
+   * @param {Boolean} [mask] Indicates whether or not to mask `data`
+   * @param {Function} [cb] Callback which is executed when the pong is sent
+   * @public
+   */
+  pong(data, mask, cb) {
+    if (this.readyState === WebSocket.CONNECTING) {
+      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
+    }
+
+    if (typeof data === 'function') {
+      cb = data;
+      data = mask = undefined;
+    } else if (typeof mask === 'function') {
+      cb = mask;
+      mask = undefined;
+    }
+
+    if (typeof data === 'number') data = data.toString();
+
+    if (this.readyState !== WebSocket.OPEN) {
+      sendAfterClose(this, data, cb);
+      return;
+    }
+
+    if (mask === undefined) mask = !this._isServer;
+    this._sender.pong(data || EMPTY_BUFFER, mask, cb);
+  }
+
+  /**
+   * Send a data message.
+   *
+   * @param {*} data The message to send
+   * @param {Object} [options] Options object
+   * @param {Boolean} [options.compress] Specifies whether or not to compress
+   *     `data`
+   * @param {Boolean} [options.binary] Specifies whether `data` is binary or
+   *     text
+   * @param {Boolean} [options.fin=true] Specifies whether the fragment is the
+   *     last one
+   * @param {Boolean} [options.mask] Specifies whether or not to mask `data`
+   * @param {Function} [cb] Callback which is executed when data is written out
+   * @public
+   */
+  send(data, options, cb) {
+    if (this.readyState === WebSocket.CONNECTING) {
+      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
+    }
+
+    if (typeof options === 'function') {
+      cb = options;
+      options = {};
+    }
+
+    if (typeof data === 'number') data = data.toString();
+
+    if (this.readyState !== WebSocket.OPEN) {
+      sendAfterClose(this, data, cb);
+      return;
+    }
+
+    const opts = {
+      binary: typeof data !== 'string',
+      mask: !this._isServer,
+      compress: true,
+      fin: true,
+      ...options
+    };
+
+    if (!this._extensions[PerMessageDeflate.extensionName]) {
+      opts.compress = false;
+    }
+
+    this._sender.send(data || EMPTY_BUFFER, opts, cb);
+  }
+
+  /**
+   * Forcibly close the connection.
+   *
+   * @public
+   */
+  terminate() {
+    if (this.readyState === WebSocket.CLOSED) return;
+    if (this.readyState === WebSocket.CONNECTING) {
+      const msg = 'WebSocket was closed before the connection was established';
+      return abortHandshake(this, this._req, msg);
+    }
+
+    if (this._socket) {
+      this._readyState = WebSocket.CLOSING;
+      this._socket.destroy();
+    }
+  }
+}
+
+readyStates.forEach((readyState, i) => {
+  const descriptor = { enumerable: true, value: i };
+
+  Object.defineProperty(WebSocket.prototype, readyState, descriptor);
+  Object.defineProperty(WebSocket, readyState, descriptor);
+});
+
+[
+  'binaryType',
+  'bufferedAmount',
+  'extensions',
+  'protocol',
+  'readyState',
+  'url'
+].forEach((property) => {
+  Object.defineProperty(WebSocket.prototype, property, { enumerable: true });
+});
+
+//
+// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.
+// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface
+//
+['open', 'error', 'close', 'message'].forEach((method) => {
+  Object.defineProperty(WebSocket.prototype, `on${method}`, {
+    configurable: true,
+    enumerable: true,
+    /**
+     * Return the listener of the event.
+     *
+     * @return {(Function|undefined)} The event listener or `undefined`
+     * @public
+     */
+    get() {
+      const listeners = this.listeners(method);
+      for (let i = 0; i < listeners.length; i++) {
+        if (listeners[i]._listener) return listeners[i]._listener;
+      }
+
+      return undefined;
+    },
+    /**
+     * Add a listener for the event.
+     *
+     * @param {Function} listener The listener to add
+     * @public
+     */
+    set(listener) {
+      const listeners = this.listeners(method);
+      for (let i = 0; i < listeners.length; i++) {
+        //
+        // Remove only the listeners added via `addEventListener`.
+        //
+        if (listeners[i]._listener) this.removeListener(method, listeners[i]);
+      }
+      this.addEventListener(method, listener);
+    }
+  });
+});
+
+WebSocket.prototype.addEventListener = addEventListener;
+WebSocket.prototype.removeEventListener = removeEventListener;
+
+module.exports = WebSocket;
+
+/**
+ * Initialize a WebSocket client.
+ *
+ * @param {WebSocket} websocket The client to initialize
+ * @param {(String|url.URL)} address The URL to which to connect
+ * @param {String} [protocols] The subprotocols
+ * @param {Object} [options] Connection options
+ * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable
+ *     permessage-deflate
+ * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the
+ *     handshake request
+ * @param {Number} [options.protocolVersion=13] Value of the
+ *     `Sec-WebSocket-Version` header
+ * @param {String} [options.origin] Value of the `Origin` or
+ *     `Sec-WebSocket-Origin` header
+ * @param {Number} [options.maxPayload=104857600] The maximum allowed message
+ *     size
+ * @param {Boolean} [options.followRedirects=false] Whether or not to follow
+ *     redirects
+ * @param {Number} [options.maxRedirects=10] The maximum number of redirects
+ *     allowed
+ * @private
+ */
+function initAsClient(websocket, address, protocols, options) {
+  const opts = {
+    protocolVersion: protocolVersions[1],
+    maxPayload: 100 * 1024 * 1024,
+    perMessageDeflate: true,
+    followRedirects: false,
+    maxRedirects: 10,
+    ...options,
+    createConnection: undefined,
+    socketPath: undefined,
+    hostname: undefined,
+    protocol: undefined,
+    timeout: undefined,
+    method: undefined,
+    host: undefined,
+    path: undefined,
+    port: undefined
+  };
+
+  if (!protocolVersions.includes(opts.protocolVersion)) {
+    throw new RangeError(
+      `Unsupported protocol version: ${opts.protocolVersion} ` +
+        `(supported versions: ${protocolVersions.join(', ')})`
+    );
+  }
+
+  let parsedUrl;
+
+  if (address instanceof URL) {
+    parsedUrl = address;
+    websocket._url = address.href;
+  } else {
+    parsedUrl = new URL(address);
+    websocket._url = address;
+  }
+
+  const isUnixSocket = parsedUrl.protocol === 'ws+unix:';
+
+  if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {
+    throw new Error(`Invalid URL: ${websocket.url}`);
+  }
+
+  const isSecure =
+    parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';
+  const defaultPort = isSecure ? 443 : 80;
+  const key = randomBytes(16).toString('base64');
+  const get = isSecure ? https.get : http.get;
+  let perMessageDeflate;
+
+  opts.createConnection = isSecure ? tlsConnect : netConnect;
+  opts.defaultPort = opts.defaultPort || defaultPort;
+  opts.port = parsedUrl.port || defaultPort;
+  opts.host = parsedUrl.hostname.startsWith('[')
+    ? parsedUrl.hostname.slice(1, -1)
+    : parsedUrl.hostname;
+  opts.headers = {
+    'Sec-WebSocket-Version': opts.protocolVersion,
+    'Sec-WebSocket-Key': key,
+    Connection: 'Upgrade',
+    Upgrade: 'websocket',
+    ...opts.headers
+  };
+  opts.path = parsedUrl.pathname + parsedUrl.search;
+  opts.timeout = opts.handshakeTimeout;
+
+  if (opts.perMessageDeflate) {
+    perMessageDeflate = new PerMessageDeflate(
+      opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},
+      false,
+      opts.maxPayload
+    );
+    opts.headers['Sec-WebSocket-Extensions'] = format({
+      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()
+    });
+  }
+  if (protocols) {
+    opts.headers['Sec-WebSocket-Protocol'] = protocols;
+  }
+  if (opts.origin) {
+    if (opts.protocolVersion < 13) {
+      opts.headers['Sec-WebSocket-Origin'] = opts.origin;
+    } else {
+      opts.headers.Origin = opts.origin;
+    }
+  }
+  if (parsedUrl.username || parsedUrl.password) {
+    opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;
+  }
+
+  if (isUnixSocket) {
+    const parts = opts.path.split(':');
+
+    opts.socketPath = parts[0];
+    opts.path = parts[1];
+  }
+
+  let req = (websocket._req = get(opts));
+
+  if (opts.timeout) {
+    req.on('timeout', () => {
+      abortHandshake(websocket, req, 'Opening handshake has timed out');
+    });
+  }
+
+  req.on('error', (err) => {
+    if (req === null || req.aborted) return;
+
+    req = websocket._req = null;
+    websocket._readyState = WebSocket.CLOSING;
+    websocket.emit('error', err);
+    websocket.emitClose();
+  });
+
+  req.on('response', (res) => {
+    const location = res.headers.location;
+    const statusCode = res.statusCode;
+
+    if (
+      location &&
+      opts.followRedirects &&
+      statusCode >= 300 &&
+      statusCode < 400
+    ) {
+      if (++websocket._redirects > opts.maxRedirects) {
+        abortHandshake(websocket, req, 'Maximum redirects exceeded');
+        return;
+      }
+
+      req.abort();
+
+      const addr = new URL(location, address);
+
+      initAsClient(websocket, addr, protocols, options);
+    } else if (!websocket.emit('unexpected-response', req, res)) {
+      abortHandshake(
+        websocket,
+        req,
+        `Unexpected server response: ${res.statusCode}`
+      );
+    }
+  });
+
+  req.on('upgrade', (res, socket, head) => {
+    websocket.emit('upgrade', res);
+
+    //
+    // The user may have closed the connection from a listener of the `upgrade`
+    // event.
+    //
+    if (websocket.readyState !== WebSocket.CONNECTING) return;
+
+    req = websocket._req = null;
+
+    const digest = createHash('sha1')
+      .update(key + GUID)
+      .digest('base64');
+
+    if (res.headers['sec-websocket-accept'] !== digest) {
+      abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');
+      return;
+    }
+
+    const serverProt = res.headers['sec-websocket-protocol'];
+    const protList = (protocols || '').split(/, */);
+    let protError;
+
+    if (!protocols && serverProt) {
+      protError = 'Server sent a subprotocol but none was requested';
+    } else if (protocols && !serverProt) {
+      protError = 'Server sent no subprotocol';
+    } else if (serverProt && !protList.includes(serverProt)) {
+      protError = 'Server sent an invalid subprotocol';
+    }
+
+    if (protError) {
+      abortHandshake(websocket, socket, protError);
+      return;
+    }
+
+    if (serverProt) websocket._protocol = serverProt;
+
+    if (perMessageDeflate) {
+      try {
+        const extensions = parse(res.headers['sec-websocket-extensions']);
+
+        if (extensions[PerMessageDeflate.extensionName]) {
+          perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
+          websocket._extensions[
+            PerMessageDeflate.extensionName
+          ] = perMessageDeflate;
+        }
+      } catch (err) {
+        abortHandshake(
+          websocket,
+          socket,
+          'Invalid Sec-WebSocket-Extensions header'
+        );
+        return;
+      }
+    }
+
+    websocket.setSocket(socket, head, opts.maxPayload);
+  });
+}
+
+/**
+ * Create a `net.Socket` and initiate a connection.
+ *
+ * @param {Object} options Connection options
+ * @return {net.Socket} The newly created socket used to start the connection
+ * @private
+ */
+function netConnect(options) {
+  options.path = options.socketPath;
+  return net.connect(options);
+}
+
+/**
+ * Create a `tls.TLSSocket` and initiate a connection.
+ *
+ * @param {Object} options Connection options
+ * @return {tls.TLSSocket} The newly created socket used to start the connection
+ * @private
+ */
+function tlsConnect(options) {
+  options.path = undefined;
+
+  if (!options.servername && options.servername !== '') {
+    options.servername = net.isIP(options.host) ? '' : options.host;
+  }
+
+  return tls.connect(options);
+}
+
+/**
+ * Abort the handshake and emit an error.
+ *
+ * @param {WebSocket} websocket The WebSocket instance
+ * @param {(http.ClientRequest|net.Socket)} stream The request to abort or the
+ *     socket to destroy
+ * @param {String} message The error message
+ * @private
+ */
+function abortHandshake(websocket, stream, message) {
+  websocket._readyState = WebSocket.CLOSING;
+
+  const err = new Error(message);
+  Error.captureStackTrace(err, abortHandshake);
+
+  if (stream.setHeader) {
+    stream.abort();
+    stream.once('abort', websocket.emitClose.bind(websocket));
+    websocket.emit('error', err);
+  } else {
+    stream.destroy(err);
+    stream.once('error', websocket.emit.bind(websocket, 'error'));
+    stream.once('close', websocket.emitClose.bind(websocket));
+  }
+}
+
+/**
+ * Handle cases where the `ping()`, `pong()`, or `send()` methods are called
+ * when the `readyState` attribute is `CLOSING` or `CLOSED`.
+ *
+ * @param {WebSocket} websocket The WebSocket instance
+ * @param {*} [data] The data to send
+ * @param {Function} [cb] Callback
+ * @private
+ */
+function sendAfterClose(websocket, data, cb) {
+  if (data) {
+    const length = toBuffer(data).length;
+
+    //
+    // The `_bufferedAmount` property is used only when the peer is a client and
+    // the opening handshake fails. Under these circumstances, in fact, the
+    // `setSocket()` method is not called, so the `_socket` and `_sender`
+    // properties are set to `null`.
+    //
+    if (websocket._socket) websocket._sender._bufferedBytes += length;
+    else websocket._bufferedAmount += length;
+  }
+
+  if (cb) {
+    const err = new Error(
+      `WebSocket is not open: readyState ${websocket.readyState} ` +
+        `(${readyStates[websocket.readyState]})`
+    );
+    cb(err);
+  }
+}
+
+/**
+ * The listener of the `Receiver` `'conclude'` event.
+ *
+ * @param {Number} code The status code
+ * @param {String} reason The reason for closing
+ * @private
+ */
+function receiverOnConclude(code, reason) {
+  const websocket = this[kWebSocket];
+
+  websocket._socket.removeListener('data', socketOnData);
+  websocket._socket.resume();
+
+  websocket._closeFrameReceived = true;
+  websocket._closeMessage = reason;
+  websocket._closeCode = code;
+
+  if (code === 1005) websocket.close();
+  else websocket.close(code, reason);
+}
+
+/**
+ * The listener of the `Receiver` `'drain'` event.
+ *
+ * @private
+ */
+function receiverOnDrain() {
+  this[kWebSocket]._socket.resume();
+}
+
+/**
+ * The listener of the `Receiver` `'error'` event.
+ *
+ * @param {(RangeError|Error)} err The emitted error
+ * @private
+ */
+function receiverOnError(err) {
+  const websocket = this[kWebSocket];
+
+  websocket._socket.removeListener('data', socketOnData);
+
+  websocket._readyState = WebSocket.CLOSING;
+  websocket._closeCode = err[kStatusCode];
+  websocket.emit('error', err);
+  websocket._socket.destroy();
+}
+
+/**
+ * The listener of the `Receiver` `'finish'` event.
+ *
+ * @private
+ */
+function receiverOnFinish() {
+  this[kWebSocket].emitClose();
+}
+
+/**
+ * The listener of the `Receiver` `'message'` event.
+ *
+ * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message
+ * @private
+ */
+function receiverOnMessage(data) {
+  this[kWebSocket].emit('message', data);
+}
+
+/**
+ * The listener of the `Receiver` `'ping'` event.
+ *
+ * @param {Buffer} data The data included in the ping frame
+ * @private
+ */
+function receiverOnPing(data) {
+  const websocket = this[kWebSocket];
+
+  websocket.pong(data, !websocket._isServer, NOOP);
+  websocket.emit('ping', data);
+}
+
+/**
+ * The listener of the `Receiver` `'pong'` event.
+ *
+ * @param {Buffer} data The data included in the pong frame
+ * @private
+ */
+function receiverOnPong(data) {
+  this[kWebSocket].emit('pong', data);
+}
+
+/**
+ * The listener of the `net.Socket` `'close'` event.
+ *
+ * @private
+ */
+function socketOnClose() {
+  const websocket = this[kWebSocket];
+
+  this.removeListener('close', socketOnClose);
+  this.removeListener('end', socketOnEnd);
+
+  websocket._readyState = WebSocket.CLOSING;
+
+  //
+  // The close frame might not have been received or the `'end'` event emitted,
+  // for example, if the socket was destroyed due to an error. Ensure that the
+  // `receiver` stream is closed after writing any remaining buffered data to
+  // it. If the readable side of the socket is in flowing mode then there is no
+  // buffered data as everything has been already written and `readable.read()`
+  // will return `null`. If instead, the socket is paused, any possible buffered
+  // data will be read as a single chunk and emitted synchronously in a single
+  // `'data'` event.
+  //
+  websocket._socket.read();
+  websocket._receiver.end();
+
+  this.removeListener('data', socketOnData);
+  this[kWebSocket] = undefined;
+
+  clearTimeout(websocket._closeTimer);
+
+  if (
+    websocket._receiver._writableState.finished ||
+    websocket._receiver._writableState.errorEmitted
+  ) {
+    websocket.emitClose();
+  } else {
+    websocket._receiver.on('error', receiverOnFinish);
+    websocket._receiver.on('finish', receiverOnFinish);
+  }
+}
+
+/**
+ * The listener of the `net.Socket` `'data'` event.
+ *
+ * @param {Buffer} chunk A chunk of data
+ * @private
+ */
+function socketOnData(chunk) {
+  if (!this[kWebSocket]._receiver.write(chunk)) {
+    this.pause();
+  }
+}
+
+/**
+ * The listener of the `net.Socket` `'end'` event.
+ *
+ * @private
+ */
+function socketOnEnd() {
+  const websocket = this[kWebSocket];
+
+  websocket._readyState = WebSocket.CLOSING;
+  websocket._receiver.end();
+  this.end();
+}
+
+/**
+ * The listener of the `net.Socket` `'error'` event.
+ *
+ * @private
+ */
+function socketOnError() {
+  const websocket = this[kWebSocket];
+
+  this.removeListener('error', socketOnError);
+  this.on('error', NOOP);
+
+  if (websocket) {
+    websocket._readyState = WebSocket.CLOSING;
+    this.destroy();
+  }
+}
diff --git a/signaling_server/service/node_modules/engine.io/node_modules/ws/package.json b/signaling_server/service/node_modules/engine.io/node_modules/ws/package.json
new file mode 100644 (file)
index 0000000..1b22ba5
--- /dev/null
@@ -0,0 +1,93 @@
+{
+  "_args": [
+    [
+      "ws@7.4.4",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ws@7.4.4",
+  "_id": "ws@7.4.4",
+  "_inBundle": false,
+  "_integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
+  "_location": "/engine.io/ws",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ws@7.4.4",
+    "name": "ws",
+    "escapedName": "ws",
+    "rawSpec": "7.4.4",
+    "saveSpec": null,
+    "fetchSpec": "7.4.4"
+  },
+  "_requiredBy": [
+    "/engine.io"
+  ],
+  "_resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
+  "_spec": "7.4.4",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Einar Otto Stangvik",
+    "email": "einaros@gmail.com",
+    "url": "http://2x.io"
+  },
+  "browser": "browser.js",
+  "bugs": {
+    "url": "https://github.com/websockets/ws/issues"
+  },
+  "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js",
+  "devDependencies": {
+    "benchmark": "^2.1.4",
+    "bufferutil": "^4.0.1",
+    "eslint": "^7.2.0",
+    "eslint-config-prettier": "^8.1.0",
+    "eslint-plugin-prettier": "^3.0.1",
+    "mocha": "^7.0.0",
+    "nyc": "^15.0.0",
+    "prettier": "^2.0.5",
+    "utf-8-validate": "^5.0.2"
+  },
+  "engines": {
+    "node": ">=8.3.0"
+  },
+  "files": [
+    "browser.js",
+    "index.js",
+    "lib/*.js"
+  ],
+  "homepage": "https://github.com/websockets/ws",
+  "keywords": [
+    "HyBi",
+    "Push",
+    "RFC-6455",
+    "WebSocket",
+    "WebSockets",
+    "real-time"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "ws",
+  "peerDependencies": {
+    "bufferutil": "^4.0.1",
+    "utf-8-validate": "^5.0.2"
+  },
+  "peerDependenciesMeta": {
+    "bufferutil": {
+      "optional": true
+    },
+    "utf-8-validate": {
+      "optional": true
+    }
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/websockets/ws.git"
+  },
+  "scripts": {
+    "integration": "mocha --throw-deprecation test/*.integration.js",
+    "lint": "eslint --ignore-path .gitignore . && prettier --check --ignore-path .gitignore \"**/*.{json,md,yaml,yml}\"",
+    "test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js"
+  },
+  "version": "7.4.4"
+}
diff --git a/signaling_server/service/node_modules/engine.io/package.json b/signaling_server/service/node_modules/engine.io/package.json
new file mode 100644 (file)
index 0000000..08c90e2
--- /dev/null
@@ -0,0 +1,101 @@
+{
+  "_args": [
+    [
+      "engine.io@3.5.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "engine.io@3.5.0",
+  "_id": "engine.io@3.5.0",
+  "_inBundle": false,
+  "_integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==",
+  "_location": "/engine.io",
+  "_phantomChildren": {
+    "ms": "2.1.2"
+  },
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "engine.io@3.5.0",
+    "name": "engine.io",
+    "escapedName": "engine.io",
+    "rawSpec": "3.5.0",
+    "saveSpec": null,
+    "fetchSpec": "3.5.0"
+  },
+  "_requiredBy": [
+    "/socket.io"
+  ],
+  "_resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz",
+  "_spec": "3.5.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Guillermo Rauch",
+    "email": "guillermo@learnboost.com"
+  },
+  "bugs": {
+    "url": "https://github.com/socketio/engine.io/issues"
+  },
+  "contributors": [
+    {
+      "name": "Eugen Dueck",
+      "url": "https://github.com/EugenDueck"
+    },
+    {
+      "name": "Afshin Mehrabani",
+      "url": "https://github.com/afshinm"
+    },
+    {
+      "name": "Christoph Dorn",
+      "url": "https://github.com/cadorn"
+    },
+    {
+      "name": "Mark Mokryn",
+      "email": "mokesmokes@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "accepts": "~1.3.4",
+    "base64id": "2.0.0",
+    "cookie": "~0.4.1",
+    "debug": "~4.1.0",
+    "engine.io-parser": "~2.2.0",
+    "ws": "~7.4.2"
+  },
+  "description": "The realtime engine behind Socket.IO. Provides the foundation of a bidirectional connection between client and server",
+  "devDependencies": {
+    "babel-eslint": "^8.0.2",
+    "babel-preset-es2015": "^6.24.0",
+    "engine.io-client": "3.5.0",
+    "eslint": "^4.5.0",
+    "eslint-config-standard": "^10.2.1",
+    "eslint-plugin-import": "^2.7.0",
+    "eslint-plugin-node": "^5.1.1",
+    "eslint-plugin-promise": "^3.5.0",
+    "eslint-plugin-standard": "^3.0.1",
+    "expect.js": "^0.3.1",
+    "mocha": "^4.0.1",
+    "s": "0.1.1",
+    "superagent": "^3.8.1",
+    "uws": "~9.14.0"
+  },
+  "engines": {
+    "node": ">=8.0.0"
+  },
+  "files": [
+    "lib/"
+  ],
+  "homepage": "https://github.com/socketio/engine.io",
+  "license": "MIT",
+  "main": "lib/engine.io",
+  "name": "engine.io",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/socketio/engine.io.git"
+  },
+  "scripts": {
+    "lint": "eslint lib/ test/ *.js",
+    "test": "npm run lint && mocha && EIO_WS_ENGINE=uws mocha"
+  },
+  "version": "3.5.0"
+}
diff --git a/signaling_server/service/node_modules/escape-html/package.json b/signaling_server/service/node_modules/escape-html/package.json
new file mode 100644 (file)
index 0000000..556adf0
--- /dev/null
@@ -0,0 +1,62 @@
+{
+  "_args": [
+    [
+      "escape-html@1.0.3",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "escape-html@1.0.3",
+  "_id": "escape-html@1.0.3",
+  "_inBundle": false,
+  "_integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+  "_location": "/escape-html",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "escape-html@1.0.3",
+    "name": "escape-html",
+    "escapedName": "escape-html",
+    "rawSpec": "1.0.3",
+    "saveSpec": null,
+    "fetchSpec": "1.0.3"
+  },
+  "_requiredBy": [
+    "/express",
+    "/finalhandler",
+    "/send",
+    "/serve-static"
+  ],
+  "_resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+  "_spec": "1.0.3",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/component/escape-html/issues"
+  },
+  "description": "Escape string for use in HTML",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "1.0.0"
+  },
+  "files": [
+    "LICENSE",
+    "Readme.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/component/escape-html#readme",
+  "keywords": [
+    "escape",
+    "html",
+    "utility"
+  ],
+  "license": "MIT",
+  "name": "escape-html",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/component/escape-html.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js"
+  },
+  "version": "1.0.3"
+}
diff --git a/signaling_server/service/node_modules/etag/package.json b/signaling_server/service/node_modules/etag/package.json
new file mode 100644 (file)
index 0000000..81aa775
--- /dev/null
@@ -0,0 +1,89 @@
+{
+  "_args": [
+    [
+      "etag@1.8.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "etag@1.8.1",
+  "_id": "etag@1.8.1",
+  "_inBundle": false,
+  "_integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+  "_location": "/etag",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "etag@1.8.1",
+    "name": "etag",
+    "escapedName": "etag",
+    "rawSpec": "1.8.1",
+    "saveSpec": null,
+    "fetchSpec": "1.8.1"
+  },
+  "_requiredBy": [
+    "/express",
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+  "_spec": "1.8.1",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/jshttp/etag/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "David Björklund",
+      "email": "david.bjorklund@gmail.com"
+    }
+  ],
+  "description": "Create simple HTTP ETags",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "2.1.4",
+    "eslint": "3.19.0",
+    "eslint-config-standard": "10.2.1",
+    "eslint-plugin-import": "2.7.0",
+    "eslint-plugin-markdown": "1.0.0-beta.6",
+    "eslint-plugin-node": "5.1.1",
+    "eslint-plugin-promise": "3.5.0",
+    "eslint-plugin-standard": "3.0.1",
+    "istanbul": "0.4.5",
+    "mocha": "1.21.5",
+    "safe-buffer": "5.1.1",
+    "seedrandom": "2.4.3"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/etag#readme",
+  "keywords": [
+    "etag",
+    "http",
+    "res"
+  ],
+  "license": "MIT",
+  "name": "etag",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/etag.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js",
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "1.8.1"
+}
diff --git a/signaling_server/service/node_modules/express/node_modules/accepts/HISTORY.md b/signaling_server/service/node_modules/express/node_modules/accepts/HISTORY.md
deleted file mode 100644 (file)
index 0bf0417..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-1.3.7 / 2019-04-29
-==================
-
-  * deps: negotiator@0.6.2
-    - Fix sorting charset, encoding, and language with extra parameters
-
-1.3.6 / 2019-04-28
-==================
-
-  * deps: mime-types@~2.1.24
-    - deps: mime-db@~1.40.0
-
-1.3.5 / 2018-02-28
-==================
-
-  * deps: mime-types@~2.1.18
-    - deps: mime-db@~1.33.0
-
-1.3.4 / 2017-08-22
-==================
-
-  * deps: mime-types@~2.1.16
-    - deps: mime-db@~1.29.0
-
-1.3.3 / 2016-05-02
-==================
-
-  * deps: mime-types@~2.1.11
-    - deps: mime-db@~1.23.0
-  * deps: negotiator@0.6.1
-    - perf: improve `Accept` parsing speed
-    - perf: improve `Accept-Charset` parsing speed
-    - perf: improve `Accept-Encoding` parsing speed
-    - perf: improve `Accept-Language` parsing speed
-
-1.3.2 / 2016-03-08
-==================
-
-  * deps: mime-types@~2.1.10
-    - Fix extension of `application/dash+xml`
-    - Update primary extension for `audio/mp4`
-    - deps: mime-db@~1.22.0
-
-1.3.1 / 2016-01-19
-==================
-
-  * deps: mime-types@~2.1.9
-    - deps: mime-db@~1.21.0
-
-1.3.0 / 2015-09-29
-==================
-
-  * deps: mime-types@~2.1.7
-    - deps: mime-db@~1.19.0
-  * deps: negotiator@0.6.0
-    - Fix including type extensions in parameters in `Accept` parsing
-    - Fix parsing `Accept` parameters with quoted equals
-    - Fix parsing `Accept` parameters with quoted semicolons
-    - Lazy-load modules from main entry point
-    - perf: delay type concatenation until needed
-    - perf: enable strict mode
-    - perf: hoist regular expressions
-    - perf: remove closures getting spec properties
-    - perf: remove a closure from media type parsing
-    - perf: remove property delete from media type parsing
-
-1.2.13 / 2015-09-06
-===================
-
-  * deps: mime-types@~2.1.6
-    - deps: mime-db@~1.18.0
-
-1.2.12 / 2015-07-30
-===================
-
-  * deps: mime-types@~2.1.4
-    - deps: mime-db@~1.16.0
-
-1.2.11 / 2015-07-16
-===================
-
-  * deps: mime-types@~2.1.3
-    - deps: mime-db@~1.15.0
-
-1.2.10 / 2015-07-01
-===================
-
-  * deps: mime-types@~2.1.2
-    - deps: mime-db@~1.14.0
-
-1.2.9 / 2015-06-08
-==================
-
-  * deps: mime-types@~2.1.1
-    - perf: fix deopt during mapping
-
-1.2.8 / 2015-06-07
-==================
-
-  * deps: mime-types@~2.1.0
-    - deps: mime-db@~1.13.0
-  * perf: avoid argument reassignment & argument slice
-  * perf: avoid negotiator recursive construction
-  * perf: enable strict mode
-  * perf: remove unnecessary bitwise operator
-
-1.2.7 / 2015-05-10
-==================
-
-  * deps: negotiator@0.5.3
-    - Fix media type parameter matching to be case-insensitive
-
-1.2.6 / 2015-05-07
-==================
-
-  * deps: mime-types@~2.0.11
-    - deps: mime-db@~1.9.1
-  * deps: negotiator@0.5.2
-    - Fix comparing media types with quoted values
-    - Fix splitting media types with quoted commas
-
-1.2.5 / 2015-03-13
-==================
-
-  * deps: mime-types@~2.0.10
-    - deps: mime-db@~1.8.0
-
-1.2.4 / 2015-02-14
-==================
-
-  * Support Node.js 0.6
-  * deps: mime-types@~2.0.9
-    - deps: mime-db@~1.7.0
-  * deps: negotiator@0.5.1
-    - Fix preference sorting to be stable for long acceptable lists
-
-1.2.3 / 2015-01-31
-==================
-
-  * deps: mime-types@~2.0.8
-    - deps: mime-db@~1.6.0
-
-1.2.2 / 2014-12-30
-==================
-
-  * deps: mime-types@~2.0.7
-    - deps: mime-db@~1.5.0
-
-1.2.1 / 2014-12-30
-==================
-
-  * deps: mime-types@~2.0.5
-    - deps: mime-db@~1.3.1
-
-1.2.0 / 2014-12-19
-==================
-
-  * deps: negotiator@0.5.0
-    - Fix list return order when large accepted list
-    - Fix missing identity encoding when q=0 exists
-    - Remove dynamic building of Negotiator class
-
-1.1.4 / 2014-12-10
-==================
-
-  * deps: mime-types@~2.0.4
-    - deps: mime-db@~1.3.0
-
-1.1.3 / 2014-11-09
-==================
-
-  * deps: mime-types@~2.0.3
-    - deps: mime-db@~1.2.0
-
-1.1.2 / 2014-10-14
-==================
-
-  * deps: negotiator@0.4.9
-    - Fix error when media type has invalid parameter
-
-1.1.1 / 2014-09-28
-==================
-
-  * deps: mime-types@~2.0.2
-    - deps: mime-db@~1.1.0
-  * deps: negotiator@0.4.8
-    - Fix all negotiations to be case-insensitive
-    - Stable sort preferences of same quality according to client order
-
-1.1.0 / 2014-09-02
-==================
-
-  * update `mime-types`
-
-1.0.7 / 2014-07-04
-==================
-
-  * Fix wrong type returned from `type` when match after unknown extension
-
-1.0.6 / 2014-06-24
-==================
-
-  * deps: negotiator@0.4.7
-
-1.0.5 / 2014-06-20
-==================
-
- * fix crash when unknown extension given
-
-1.0.4 / 2014-06-19
-==================
-
-  * use `mime-types`
-
-1.0.3 / 2014-06-11
-==================
-
-  * deps: negotiator@0.4.6
-    - Order by specificity when quality is the same
-
-1.0.2 / 2014-05-29
-==================
-
-  * Fix interpretation when header not in request
-  * deps: pin negotiator@0.4.5
-
-1.0.1 / 2014-01-18
-==================
-
-  * Identity encoding isn't always acceptable
-  * deps: negotiator@~0.4.0
-
-1.0.0 / 2013-12-27
-==================
-
-  * Genesis
diff --git a/signaling_server/service/node_modules/express/node_modules/accepts/LICENSE b/signaling_server/service/node_modules/express/node_modules/accepts/LICENSE
deleted file mode 100644 (file)
index 0616607..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
-Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/accepts/README.md b/signaling_server/service/node_modules/express/node_modules/accepts/README.md
deleted file mode 100644 (file)
index 66a2f54..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-# accepts
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
-Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
-
-In addition to negotiator, it allows:
-
-- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
-  as well as `('text/html', 'application/json')`.
-- Allows type shorthands such as `json`.
-- Returns `false` when no types match
-- Treats non-existent headers as `*`
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install accepts
-```
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var accepts = require('accepts')
-```
-
-### accepts(req)
-
-Create a new `Accepts` object for the given `req`.
-
-#### .charset(charsets)
-
-Return the first accepted charset. If nothing in `charsets` is accepted,
-then `false` is returned.
-
-#### .charsets()
-
-Return the charsets that the request accepts, in the order of the client's
-preference (most preferred first).
-
-#### .encoding(encodings)
-
-Return the first accepted encoding. If nothing in `encodings` is accepted,
-then `false` is returned.
-
-#### .encodings()
-
-Return the encodings that the request accepts, in the order of the client's
-preference (most preferred first).
-
-#### .language(languages)
-
-Return the first accepted language. If nothing in `languages` is accepted,
-then `false` is returned.
-
-#### .languages()
-
-Return the languages that the request accepts, in the order of the client's
-preference (most preferred first).
-
-#### .type(types)
-
-Return the first accepted type (and it is returned as the same text as what
-appears in the `types` array). If nothing in `types` is accepted, then `false`
-is returned.
-
-The `types` array can contain full MIME types or file extensions. Any value
-that is not a full MIME types is passed to `require('mime-types').lookup`.
-
-#### .types()
-
-Return the types that the request accepts, in the order of the client's
-preference (most preferred first).
-
-## Examples
-
-### Simple type negotiation
-
-This simple example shows how to use `accepts` to return a different typed
-respond body based on what the client wants to accept. The server lists it's
-preferences in order and will get back the best match between the client and
-server.
-
-```js
-var accepts = require('accepts')
-var http = require('http')
-
-function app (req, res) {
-  var accept = accepts(req)
-
-  // the order of this list is significant; should be server preferred order
-  switch (accept.type(['json', 'html'])) {
-    case 'json':
-      res.setHeader('Content-Type', 'application/json')
-      res.write('{"hello":"world!"}')
-      break
-    case 'html':
-      res.setHeader('Content-Type', 'text/html')
-      res.write('<b>hello, world!</b>')
-      break
-    default:
-      // the fallback is text/plain, so no need to specify it above
-      res.setHeader('Content-Type', 'text/plain')
-      res.write('hello, world!')
-      break
-  }
-
-  res.end()
-}
-
-http.createServer(app).listen(3000)
-```
-
-You can test this out with the cURL program:
-```sh
-curl -I -H'Accept: text/html' http://localhost:3000/
-```
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
-[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
-[node-version-image]: https://badgen.net/npm/node/accepts
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/accepts
-[npm-url]: https://npmjs.org/package/accepts
-[npm-version-image]: https://badgen.net/npm/v/accepts
-[travis-image]: https://badgen.net/travis/jshttp/accepts/master
-[travis-url]: https://travis-ci.org/jshttp/accepts
diff --git a/signaling_server/service/node_modules/express/node_modules/accepts/index.js b/signaling_server/service/node_modules/express/node_modules/accepts/index.js
deleted file mode 100644 (file)
index e9b2f63..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*!
- * accepts
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module dependencies.
- * @private
- */
-
-var Negotiator = require('negotiator')
-var mime = require('mime-types')
-
-/**
- * Module exports.
- * @public
- */
-
-module.exports = Accepts
-
-/**
- * Create a new Accepts object for the given req.
- *
- * @param {object} req
- * @public
- */
-
-function Accepts (req) {
-  if (!(this instanceof Accepts)) {
-    return new Accepts(req)
-  }
-
-  this.headers = req.headers
-  this.negotiator = new Negotiator(req)
-}
-
-/**
- * Check if the given `type(s)` is acceptable, returning
- * the best match when true, otherwise `undefined`, in which
- * case you should respond with 406 "Not Acceptable".
- *
- * The `type` value may be a single mime type string
- * such as "application/json", the extension name
- * such as "json" or an array `["json", "html", "text/plain"]`. When a list
- * or array is given the _best_ match, if any is returned.
- *
- * Examples:
- *
- *     // Accept: text/html
- *     this.types('html');
- *     // => "html"
- *
- *     // Accept: text/*, application/json
- *     this.types('html');
- *     // => "html"
- *     this.types('text/html');
- *     // => "text/html"
- *     this.types('json', 'text');
- *     // => "json"
- *     this.types('application/json');
- *     // => "application/json"
- *
- *     // Accept: text/*, application/json
- *     this.types('image/png');
- *     this.types('png');
- *     // => undefined
- *
- *     // Accept: text/*;q=.5, application/json
- *     this.types(['html', 'json']);
- *     this.types('html', 'json');
- *     // => "json"
- *
- * @param {String|Array} types...
- * @return {String|Array|Boolean}
- * @public
- */
-
-Accepts.prototype.type =
-Accepts.prototype.types = function (types_) {
-  var types = types_
-
-  // support flattened arguments
-  if (types && !Array.isArray(types)) {
-    types = new Array(arguments.length)
-    for (var i = 0; i < types.length; i++) {
-      types[i] = arguments[i]
-    }
-  }
-
-  // no types, return all requested types
-  if (!types || types.length === 0) {
-    return this.negotiator.mediaTypes()
-  }
-
-  // no accept header, return first given type
-  if (!this.headers.accept) {
-    return types[0]
-  }
-
-  var mimes = types.map(extToMime)
-  var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
-  var first = accepts[0]
-
-  return first
-    ? types[mimes.indexOf(first)]
-    : false
-}
-
-/**
- * Return accepted encodings or best fit based on `encodings`.
- *
- * Given `Accept-Encoding: gzip, deflate`
- * an array sorted by quality is returned:
- *
- *     ['gzip', 'deflate']
- *
- * @param {String|Array} encodings...
- * @return {String|Array}
- * @public
- */
-
-Accepts.prototype.encoding =
-Accepts.prototype.encodings = function (encodings_) {
-  var encodings = encodings_
-
-  // support flattened arguments
-  if (encodings && !Array.isArray(encodings)) {
-    encodings = new Array(arguments.length)
-    for (var i = 0; i < encodings.length; i++) {
-      encodings[i] = arguments[i]
-    }
-  }
-
-  // no encodings, return all requested encodings
-  if (!encodings || encodings.length === 0) {
-    return this.negotiator.encodings()
-  }
-
-  return this.negotiator.encodings(encodings)[0] || false
-}
-
-/**
- * Return accepted charsets or best fit based on `charsets`.
- *
- * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
- * an array sorted by quality is returned:
- *
- *     ['utf-8', 'utf-7', 'iso-8859-1']
- *
- * @param {String|Array} charsets...
- * @return {String|Array}
- * @public
- */
-
-Accepts.prototype.charset =
-Accepts.prototype.charsets = function (charsets_) {
-  var charsets = charsets_
-
-  // support flattened arguments
-  if (charsets && !Array.isArray(charsets)) {
-    charsets = new Array(arguments.length)
-    for (var i = 0; i < charsets.length; i++) {
-      charsets[i] = arguments[i]
-    }
-  }
-
-  // no charsets, return all requested charsets
-  if (!charsets || charsets.length === 0) {
-    return this.negotiator.charsets()
-  }
-
-  return this.negotiator.charsets(charsets)[0] || false
-}
-
-/**
- * Return accepted languages or best fit based on `langs`.
- *
- * Given `Accept-Language: en;q=0.8, es, pt`
- * an array sorted by quality is returned:
- *
- *     ['es', 'pt', 'en']
- *
- * @param {String|Array} langs...
- * @return {Array|String}
- * @public
- */
-
-Accepts.prototype.lang =
-Accepts.prototype.langs =
-Accepts.prototype.language =
-Accepts.prototype.languages = function (languages_) {
-  var languages = languages_
-
-  // support flattened arguments
-  if (languages && !Array.isArray(languages)) {
-    languages = new Array(arguments.length)
-    for (var i = 0; i < languages.length; i++) {
-      languages[i] = arguments[i]
-    }
-  }
-
-  // no languages, return all requested languages
-  if (!languages || languages.length === 0) {
-    return this.negotiator.languages()
-  }
-
-  return this.negotiator.languages(languages)[0] || false
-}
-
-/**
- * Convert extnames to mime.
- *
- * @param {String} type
- * @return {String}
- * @private
- */
-
-function extToMime (type) {
-  return type.indexOf('/') === -1
-    ? mime.lookup(type)
-    : type
-}
-
-/**
- * Check if mime is valid.
- *
- * @param {String} type
- * @return {String}
- * @private
- */
-
-function validMime (type) {
-  return typeof type === 'string'
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/accepts/package.json b/signaling_server/service/node_modules/express/node_modules/accepts/package.json
deleted file mode 100644 (file)
index 830fa1a..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "_from": "accepts@~1.3.7",
-  "_id": "accepts@1.3.7",
-  "_inBundle": false,
-  "_integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
-  "_location": "/accepts",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "accepts@~1.3.7",
-    "name": "accepts",
-    "escapedName": "accepts",
-    "rawSpec": "~1.3.7",
-    "saveSpec": null,
-    "fetchSpec": "~1.3.7"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
-  "_shasum": "531bc726517a3b2b41f850021c6cc15eaab507cd",
-  "_spec": "accepts@~1.3.7",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/jshttp/accepts/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "dependencies": {
-    "mime-types": "~2.1.24",
-    "negotiator": "0.6.2"
-  },
-  "deprecated": false,
-  "description": "Higher-level content negotiation",
-  "devDependencies": {
-    "deep-equal": "1.0.1",
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.2",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "mocha": "6.1.4",
-    "nyc": "14.0.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/accepts#readme",
-  "keywords": [
-    "content",
-    "negotiation",
-    "accept",
-    "accepts"
-  ],
-  "license": "MIT",
-  "name": "accepts",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/accepts.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --check-leaks --bail test/",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test"
-  },
-  "version": "1.3.7"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/array-flatten/package.json b/signaling_server/service/node_modules/express/node_modules/array-flatten/package.json
deleted file mode 100644 (file)
index 940bbba..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "_from": "array-flatten@1.1.1",
-  "_id": "array-flatten@1.1.1",
-  "_inBundle": false,
-  "_integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
-  "_location": "/array-flatten",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "array-flatten@1.1.1",
-    "name": "array-flatten",
-    "escapedName": "array-flatten",
-    "rawSpec": "1.1.1",
-    "saveSpec": null,
-    "fetchSpec": "1.1.1"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-  "_shasum": "9a5f699051b1e7073328f2a008968b64ea2955d2",
-  "_spec": "array-flatten@1.1.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Blake Embrey",
-    "email": "hello@blakeembrey.com",
-    "url": "http://blakeembrey.me"
-  },
-  "bugs": {
-    "url": "https://github.com/blakeembrey/array-flatten/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Flatten an array of nested arrays into a single flat array",
-  "devDependencies": {
-    "istanbul": "^0.3.13",
-    "mocha": "^2.2.4",
-    "pre-commit": "^1.0.7",
-    "standard": "^3.7.3"
-  },
-  "files": [
-    "array-flatten.js",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/blakeembrey/array-flatten",
-  "keywords": [
-    "array",
-    "flatten",
-    "arguments",
-    "depth"
-  ],
-  "license": "MIT",
-  "main": "array-flatten.js",
-  "name": "array-flatten",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/blakeembrey/array-flatten.git"
-  },
-  "scripts": {
-    "test": "istanbul cover _mocha -- -R spec"
-  },
-  "version": "1.1.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/asap/CHANGES.md b/signaling_server/service/node_modules/express/node_modules/asap/CHANGES.md
deleted file mode 100644 (file)
index f105b91..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-
-## 2.0.6
-
-Version 2.0.4 adds support for React Native by clarifying in package.json that
-the browser environment does not support Node.js domains.
-Why this is necessary, we leave as an exercise for the user.
-
-## 2.0.3
-
-Version 2.0.3 fixes a bug when adjusting the capacity of the task queue.
-
-## 2.0.1-2.02
-
-Version 2.0.1 fixes a bug in the way redirects were expressed that affected the
-function of Browserify, but which Mr would tolerate.
-
-## 2.0.0
-
-Version 2 of ASAP is a full rewrite with a few salient changes.
-First, the ASAP source is CommonJS only and designed with [Browserify][] and
-[Browserify-compatible][Mr] module loaders in mind.
-
-[Browserify]: https://github.com/substack/node-browserify
-[Mr]: https://github.com/montagejs/mr
-
-The new version has been refactored in two dimensions.
-Support for Node.js and browsers have been separated, using Browserify
-redirects and ASAP has been divided into two modules.
-The "raw" layer depends on the tasks to catch thrown exceptions and unravel
-Node.js domains.
-
-The full implementation of ASAP is loadable as `require("asap")` in both Node.js
-and browsers.
-
-The raw layer that lacks exception handling overhead is loadable as
-`require("asap/raw")`.
-The interface is the same for both layers.
-
-Tasks are no longer required to be functions, but can rather be any object that
-implements `task.call()`.
-With this feature you can recycle task objects to avoid garbage collector churn
-and avoid closures in general.
-
-The implementation has been rigorously documented so that our successors can
-understand the scope of the problem that this module solves and all of its
-nuances, ensuring that the next generation of implementations know what details
-are essential.
-
--   [asap.js](https://github.com/kriskowal/asap/blob/master/asap.js)
--   [raw.js](https://github.com/kriskowal/asap/blob/master/raw.js)
--   [browser-asap.js](https://github.com/kriskowal/asap/blob/master/browser-asap.js)
--   [browser-raw.js](https://github.com/kriskowal/asap/blob/master/browser-raw.js)
-
-The new version has also been rigorously tested across a broad spectrum of
-browsers, in both the window and worker context.
-The following charts capture the browser test results for the most recent
-release.
-The first chart shows test results for ASAP running in the main window context.
-The second chart shows test results for ASAP running in a web worker context.
-Test results are inconclusive (grey) on browsers that do not support web
-workers.
-These data are captured automatically by [Continuous
-Integration][].
-
-![Browser Compatibility](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-results-matrix.svg)
-
-![Compatibility in Web Workers](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-worker-results-matrix.svg)
-
-[Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md
-
diff --git a/signaling_server/service/node_modules/express/node_modules/asap/LICENSE.md b/signaling_server/service/node_modules/express/node_modules/asap/LICENSE.md
deleted file mode 100644 (file)
index ba18c61..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-Copyright 2009–2014 Contributors. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
-
diff --git a/signaling_server/service/node_modules/express/node_modules/asap/README.md b/signaling_server/service/node_modules/express/node_modules/asap/README.md
deleted file mode 100644 (file)
index 452fd8c..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-# ASAP
-
-[![Build Status](https://travis-ci.org/kriskowal/asap.png?branch=master)](https://travis-ci.org/kriskowal/asap)
-
-Promise and asynchronous observer libraries, as well as hand-rolled callback
-programs and libraries, often need a mechanism to postpone the execution of a
-callback until the next available event.
-(See [Designing API’s for Asynchrony][Zalgo].)
-The `asap` function executes a task **as soon as possible** but not before it
-returns, waiting only for the completion of the current event and previously
-scheduled tasks.
-
-```javascript
-asap(function () {
-    // ...
-});
-```
-
-[Zalgo]: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony
-
-This CommonJS package provides an `asap` module that exports a function that
-executes a task function *as soon as possible*.
-
-ASAP strives to schedule events to occur before yielding for IO, reflow,
-or redrawing.
-Each event receives an independent stack, with only platform code in parent
-frames and the events run in the order they are scheduled.
-
-ASAP provides a fast event queue that will execute tasks until it is
-empty before yielding to the JavaScript engine's underlying event-loop.
-When a task gets added to a previously empty event queue, ASAP schedules a flush
-event, preferring for that event to occur before the JavaScript engine has an
-opportunity to perform IO tasks or rendering, thus making the first task and
-subsequent tasks semantically indistinguishable.
-ASAP uses a variety of techniques to preserve this invariant on different
-versions of browsers and Node.js.
-
-By design, ASAP prevents input events from being handled until the task
-queue is empty.
-If the process is busy enough, this may cause incoming connection requests to be
-dropped, and may cause existing connections to inform the sender to reduce the
-transmission rate or stall.
-ASAP allows this on the theory that, if there is enough work to do, there is no
-sense in looking for trouble.
-As a consequence, ASAP can interfere with smooth animation.
-If your task should be tied to the rendering loop, consider using
-`requestAnimationFrame` instead.
-A long sequence of tasks can also effect the long running script dialog.
-If this is a problem, you may be able to use ASAP’s cousin `setImmediate` to
-break long processes into shorter intervals and periodically allow the browser
-to breathe.
-`setImmediate` will yield for IO, reflow, and repaint events.
-It also returns a handler and can be canceled.
-For a `setImmediate` shim, consider [YuzuJS setImmediate][setImmediate].
-
-[setImmediate]: https://github.com/YuzuJS/setImmediate
-
-Take care.
-ASAP can sustain infinite recursive calls without warning.
-It will not halt from a stack overflow, and it will not consume unbounded
-memory.
-This is behaviorally equivalent to an infinite loop.
-Just as with infinite loops, you can monitor a Node.js process for this behavior
-with a heart-beat signal.
-As with infinite loops, a very small amount of caution goes a long way to
-avoiding problems.
-
-```javascript
-function loop() {
-    asap(loop);
-}
-loop();
-```
-
-In browsers, if a task throws an exception, it will not interrupt the flushing
-of high-priority tasks.
-The exception will be postponed to a later, low-priority event to avoid
-slow-downs.
-In Node.js, if a task throws an exception, ASAP will resume flushing only if—and
-only after—the error is handled by `domain.on("error")` or
-`process.on("uncaughtException")`.
-
-## Raw ASAP
-
-Checking for exceptions comes at a cost.
-The package also provides an `asap/raw` module that exports the underlying
-implementation which is faster but stalls if a task throws an exception.
-This internal version of the ASAP function does not check for errors.
-If a task does throw an error, it will stall the event queue unless you manually
-call `rawAsap.requestFlush()` before throwing the error, or any time after.
-
-In Node.js, `asap/raw` also runs all tasks outside any domain.
-If you need a task to be bound to your domain, you will have to do it manually.
-
-```js
-if (process.domain) {
-    task = process.domain.bind(task);
-}
-rawAsap(task);
-```
-
-## Tasks
-
-A task may be any object that implements `call()`.
-A function will suffice, but closures tend not to be reusable and can cause
-garbage collector churn.
-Both `asap` and `rawAsap` accept task objects to give you the option of
-recycling task objects or using higher callable object abstractions.
-See the `asap` source for an illustration.
-
-
-## Compatibility
-
-ASAP is tested on Node.js v0.10 and in a broad spectrum of web browsers.
-The following charts capture the browser test results for the most recent
-release.
-The first chart shows test results for ASAP running in the main window context.
-The second chart shows test results for ASAP running in a web worker context.
-Test results are inconclusive (grey) on browsers that do not support web
-workers.
-These data are captured automatically by [Continuous
-Integration][].
-
-[Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md
-
-![Browser Compatibility](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-results-matrix.svg)
-
-![Compatibility in Web Workers](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-worker-results-matrix.svg)
-
-## Caveats
-
-When a task is added to an empty event queue, it is not always possible to
-guarantee that the task queue will begin flushing immediately after the current
-event.
-However, once the task queue begins flushing, it will not yield until the queue
-is empty, even if the queue grows while executing tasks.
-
-The following browsers allow the use of [DOM mutation observers][] to access
-the HTML [microtask queue][], and thus begin flushing ASAP's task queue
-immediately at the end of the current event loop turn, before any rendering or
-IO:
-
-[microtask queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#microtask-queue
-[DOM mutation observers]: http://dom.spec.whatwg.org/#mutation-observers
-
-- Android 4–4.3
-- Chrome 26–34
-- Firefox 14–29
-- Internet Explorer 11
-- iPad Safari 6–7.1
-- iPhone Safari 7–7.1
-- Safari 6–7
-
-In the absense of mutation observers, there are a few browsers, and situations
-like web workers in some of the above browsers,  where [message channels][]
-would be a useful way to avoid falling back to timers.
-Message channels give direct access to the HTML [task queue][], so the ASAP
-task queue would flush after any already queued rendering and IO tasks, but
-without having the minimum delay imposed by timers.
-However, among these browsers, Internet Explorer 10 and Safari do not reliably
-dispatch messages, so they are not worth the trouble to implement.
-
-[message channels]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#message-channels
-[task queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#concept-task
-
-- Internet Explorer 10
-- Safair 5.0-1
-- Opera 11-12
-
-In the absense of mutation observers, these browsers and the following browsers
-all fall back to using `setTimeout` and `setInterval` to ensure that a `flush`
-occurs.
-The implementation uses both and cancels whatever handler loses the race, since
-`setTimeout` tends to occasionally skip tasks in unisolated circumstances.
-Timers generally delay the flushing of ASAP's task queue for four milliseconds.
-
-- Firefox 3–13
-- Internet Explorer 6–10
-- iPad Safari 4.3
-- Lynx 2.8.7
-
-
-## Heritage
-
-ASAP has been factored out of the [Q][] asynchronous promise library.
-It originally had a naïve implementation in terms of `setTimeout`, but
-[Malte Ubl][NonBlocking] provided an insight that `postMessage` might be
-useful for creating a high-priority, no-delay event dispatch hack.
-Since then, Internet Explorer proposed and implemented `setImmediate`.
-Robert Katić began contributing to Q by measuring the performance of
-the internal implementation of `asap`, paying particular attention to
-error recovery.
-Domenic, Robert, and Kris Kowal collectively settled on the current strategy of
-unrolling the high-priority event queue internally regardless of what strategy
-we used to dispatch the potentially lower-priority flush event.
-Domenic went on to make ASAP cooperate with Node.js domains.
-
-[Q]: https://github.com/kriskowal/q
-[NonBlocking]: http://www.nonblocking.io/2011/06/windownexttick.html
-
-For further reading, Nicholas Zakas provided a thorough article on [The
-Case for setImmediate][NCZ].
-
-[NCZ]: http://www.nczonline.net/blog/2013/07/09/the-case-for-setimmediate/
-
-Ember’s RSVP promise implementation later [adopted][RSVP ASAP] the name ASAP but
-further developed the implentation.
-Particularly, The `MessagePort` implementation was abandoned due to interaction
-[problems with Mobile Internet Explorer][IE Problems] in favor of an
-implementation backed on the newer and more reliable DOM `MutationObserver`
-interface.
-These changes were back-ported into this library.
-
-[IE Problems]: https://github.com/cujojs/when/issues/197
-[RSVP ASAP]: https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js
-
-In addition, ASAP factored into `asap` and `asap/raw`, such that `asap` remained
-exception-safe, but `asap/raw` provided a tight kernel that could be used for
-tasks that guaranteed that they would not throw exceptions.
-This core is useful for promise implementations that capture thrown errors in
-rejected promises and do not need a second safety net.
-At the same time, the exception handling in `asap` was factored into separate
-implementations for Node.js and browsers, using the the [Browserify][Browser
-Config] `browser` property in `package.json` to instruct browser module loaders
-and bundlers, including [Browserify][], [Mr][], and [Mop][],  to use the
-browser-only implementation.
-
-[Browser Config]: https://gist.github.com/defunctzombie/4339901
-[Browserify]: https://github.com/substack/node-browserify
-[Mr]: https://github.com/montagejs/mr
-[Mop]: https://github.com/montagejs/mop
-
-## License
-
-Copyright 2009-2014 by Contributors
-MIT License (enclosed)
-
diff --git a/signaling_server/service/node_modules/express/node_modules/asap/asap.js b/signaling_server/service/node_modules/express/node_modules/asap/asap.js
deleted file mode 100644 (file)
index f04fcd5..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-"use strict";
-
-var rawAsap = require("./raw");
-var freeTasks = [];
-
-/**
- * Calls a task as soon as possible after returning, in its own event, with
- * priority over IO events. An exception thrown in a task can be handled by
- * `process.on("uncaughtException") or `domain.on("error")`, but will otherwise
- * crash the process. If the error is handled, all subsequent tasks will
- * resume.
- *
- * @param {{call}} task A callable object, typically a function that takes no
- * arguments.
- */
-module.exports = asap;
-function asap(task) {
-    var rawTask;
-    if (freeTasks.length) {
-        rawTask = freeTasks.pop();
-    } else {
-        rawTask = new RawTask();
-    }
-    rawTask.task = task;
-    rawTask.domain = process.domain;
-    rawAsap(rawTask);
-}
-
-function RawTask() {
-    this.task = null;
-    this.domain = null;
-}
-
-RawTask.prototype.call = function () {
-    if (this.domain) {
-        this.domain.enter();
-    }
-    var threw = true;
-    try {
-        this.task.call();
-        threw = false;
-        // If the task throws an exception (presumably) Node.js restores the
-        // domain stack for the next event.
-        if (this.domain) {
-            this.domain.exit();
-        }
-    } finally {
-        // We use try/finally and a threw flag to avoid messing up stack traces
-        // when we catch and release errors.
-        if (threw) {
-            // In Node.js, uncaught exceptions are considered fatal errors.
-            // Re-throw them to interrupt flushing!
-            // Ensure that flushing continues if an uncaught exception is
-            // suppressed listening process.on("uncaughtException") or
-            // domain.on("error").
-            rawAsap.requestFlush();
-        }
-        // If the task threw an error, we do not want to exit the domain here.
-        // Exiting the domain would prevent the domain from catching the error.
-        this.task = null;
-        this.domain = null;
-        freeTasks.push(this);
-    }
-};
-
diff --git a/signaling_server/service/node_modules/express/node_modules/asap/browser-asap.js b/signaling_server/service/node_modules/express/node_modules/asap/browser-asap.js
deleted file mode 100644 (file)
index 805c982..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-"use strict";
-
-// rawAsap provides everything we need except exception management.
-var rawAsap = require("./raw");
-// RawTasks are recycled to reduce GC churn.
-var freeTasks = [];
-// We queue errors to ensure they are thrown in right order (FIFO).
-// Array-as-queue is good enough here, since we are just dealing with exceptions.
-var pendingErrors = [];
-var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);
-
-function throwFirstError() {
-    if (pendingErrors.length) {
-        throw pendingErrors.shift();
-    }
-}
-
-/**
- * Calls a task as soon as possible after returning, in its own event, with priority
- * over other events like animation, reflow, and repaint. An error thrown from an
- * event will not interrupt, nor even substantially slow down the processing of
- * other events, but will be rather postponed to a lower priority event.
- * @param {{call}} task A callable object, typically a function that takes no
- * arguments.
- */
-module.exports = asap;
-function asap(task) {
-    var rawTask;
-    if (freeTasks.length) {
-        rawTask = freeTasks.pop();
-    } else {
-        rawTask = new RawTask();
-    }
-    rawTask.task = task;
-    rawAsap(rawTask);
-}
-
-// We wrap tasks with recyclable task objects.  A task object implements
-// `call`, just like a function.
-function RawTask() {
-    this.task = null;
-}
-
-// The sole purpose of wrapping the task is to catch the exception and recycle
-// the task object after its single use.
-RawTask.prototype.call = function () {
-    try {
-        this.task.call();
-    } catch (error) {
-        if (asap.onerror) {
-            // This hook exists purely for testing purposes.
-            // Its name will be periodically randomized to break any code that
-            // depends on its existence.
-            asap.onerror(error);
-        } else {
-            // In a web browser, exceptions are not fatal. However, to avoid
-            // slowing down the queue of pending tasks, we rethrow the error in a
-            // lower priority turn.
-            pendingErrors.push(error);
-            requestErrorThrow();
-        }
-    } finally {
-        this.task = null;
-        freeTasks[freeTasks.length] = this;
-    }
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/asap/browser-raw.js b/signaling_server/service/node_modules/express/node_modules/asap/browser-raw.js
deleted file mode 100644 (file)
index 9cee7e3..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-"use strict";
-
-// Use the fastest means possible to execute a task in its own turn, with
-// priority over other events including IO, animation, reflow, and redraw
-// events in browsers.
-//
-// An exception thrown by a task will permanently interrupt the processing of
-// subsequent tasks. The higher level `asap` function ensures that if an
-// exception is thrown by a task, that the task queue will continue flushing as
-// soon as possible, but if you use `rawAsap` directly, you are responsible to
-// either ensure that no exceptions are thrown from your task, or to manually
-// call `rawAsap.requestFlush` if an exception is thrown.
-module.exports = rawAsap;
-function rawAsap(task) {
-    if (!queue.length) {
-        requestFlush();
-        flushing = true;
-    }
-    // Equivalent to push, but avoids a function call.
-    queue[queue.length] = task;
-}
-
-var queue = [];
-// Once a flush has been requested, no further calls to `requestFlush` are
-// necessary until the next `flush` completes.
-var flushing = false;
-// `requestFlush` is an implementation-specific method that attempts to kick
-// off a `flush` event as quickly as possible. `flush` will attempt to exhaust
-// the event queue before yielding to the browser's own event loop.
-var requestFlush;
-// The position of the next task to execute in the task queue. This is
-// preserved between calls to `flush` so that it can be resumed if
-// a task throws an exception.
-var index = 0;
-// If a task schedules additional tasks recursively, the task queue can grow
-// unbounded. To prevent memory exhaustion, the task queue will periodically
-// truncate already-completed tasks.
-var capacity = 1024;
-
-// The flush function processes all tasks that have been scheduled with
-// `rawAsap` unless and until one of those tasks throws an exception.
-// If a task throws an exception, `flush` ensures that its state will remain
-// consistent and will resume where it left off when called again.
-// However, `flush` does not make any arrangements to be called again if an
-// exception is thrown.
-function flush() {
-    while (index < queue.length) {
-        var currentIndex = index;
-        // Advance the index before calling the task. This ensures that we will
-        // begin flushing on the next task the task throws an error.
-        index = index + 1;
-        queue[currentIndex].call();
-        // Prevent leaking memory for long chains of recursive calls to `asap`.
-        // If we call `asap` within tasks scheduled by `asap`, the queue will
-        // grow, but to avoid an O(n) walk for every task we execute, we don't
-        // shift tasks off the queue after they have been executed.
-        // Instead, we periodically shift 1024 tasks off the queue.
-        if (index > capacity) {
-            // Manually shift all values starting at the index back to the
-            // beginning of the queue.
-            for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
-                queue[scan] = queue[scan + index];
-            }
-            queue.length -= index;
-            index = 0;
-        }
-    }
-    queue.length = 0;
-    index = 0;
-    flushing = false;
-}
-
-// `requestFlush` is implemented using a strategy based on data collected from
-// every available SauceLabs Selenium web driver worker at time of writing.
-// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593
-
-// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that
-// have WebKitMutationObserver but not un-prefixed MutationObserver.
-// Must use `global` or `self` instead of `window` to work in both frames and web
-// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.
-
-/* globals self */
-var scope = typeof global !== "undefined" ? global : self;
-var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;
-
-// MutationObservers are desirable because they have high priority and work
-// reliably everywhere they are implemented.
-// They are implemented in all modern browsers.
-//
-// - Android 4-4.3
-// - Chrome 26-34
-// - Firefox 14-29
-// - Internet Explorer 11
-// - iPad Safari 6-7.1
-// - iPhone Safari 7-7.1
-// - Safari 6-7
-if (typeof BrowserMutationObserver === "function") {
-    requestFlush = makeRequestCallFromMutationObserver(flush);
-
-// MessageChannels are desirable because they give direct access to the HTML
-// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera
-// 11-12, and in web workers in many engines.
-// Although message channels yield to any queued rendering and IO tasks, they
-// would be better than imposing the 4ms delay of timers.
-// However, they do not work reliably in Internet Explorer or Safari.
-
-// Internet Explorer 10 is the only browser that has setImmediate but does
-// not have MutationObservers.
-// Although setImmediate yields to the browser's renderer, it would be
-// preferrable to falling back to setTimeout since it does not have
-// the minimum 4ms penalty.
-// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and
-// Desktop to a lesser extent) that renders both setImmediate and
-// MessageChannel useless for the purposes of ASAP.
-// https://github.com/kriskowal/q/issues/396
-
-// Timers are implemented universally.
-// We fall back to timers in workers in most engines, and in foreground
-// contexts in the following browsers.
-// However, note that even this simple case requires nuances to operate in a
-// broad spectrum of browsers.
-//
-// - Firefox 3-13
-// - Internet Explorer 6-9
-// - iPad Safari 4.3
-// - Lynx 2.8.7
-} else {
-    requestFlush = makeRequestCallFromTimer(flush);
-}
-
-// `requestFlush` requests that the high priority event queue be flushed as
-// soon as possible.
-// This is useful to prevent an error thrown in a task from stalling the event
-// queue if the exception handled by Node.js’s
-// `process.on("uncaughtException")` or by a domain.
-rawAsap.requestFlush = requestFlush;
-
-// To request a high priority event, we induce a mutation observer by toggling
-// the text of a text node between "1" and "-1".
-function makeRequestCallFromMutationObserver(callback) {
-    var toggle = 1;
-    var observer = new BrowserMutationObserver(callback);
-    var node = document.createTextNode("");
-    observer.observe(node, {characterData: true});
-    return function requestCall() {
-        toggle = -toggle;
-        node.data = toggle;
-    };
-}
-
-// The message channel technique was discovered by Malte Ubl and was the
-// original foundation for this library.
-// http://www.nonblocking.io/2011/06/windownexttick.html
-
-// Safari 6.0.5 (at least) intermittently fails to create message ports on a
-// page's first load. Thankfully, this version of Safari supports
-// MutationObservers, so we don't need to fall back in that case.
-
-// function makeRequestCallFromMessageChannel(callback) {
-//     var channel = new MessageChannel();
-//     channel.port1.onmessage = callback;
-//     return function requestCall() {
-//         channel.port2.postMessage(0);
-//     };
-// }
-
-// For reasons explained above, we are also unable to use `setImmediate`
-// under any circumstances.
-// Even if we were, there is another bug in Internet Explorer 10.
-// It is not sufficient to assign `setImmediate` to `requestFlush` because
-// `setImmediate` must be called *by name* and therefore must be wrapped in a
-// closure.
-// Never forget.
-
-// function makeRequestCallFromSetImmediate(callback) {
-//     return function requestCall() {
-//         setImmediate(callback);
-//     };
-// }
-
-// Safari 6.0 has a problem where timers will get lost while the user is
-// scrolling. This problem does not impact ASAP because Safari 6.0 supports
-// mutation observers, so that implementation is used instead.
-// However, if we ever elect to use timers in Safari, the prevalent work-around
-// is to add a scroll event listener that calls for a flush.
-
-// `setTimeout` does not call the passed callback if the delay is less than
-// approximately 7 in web workers in Firefox 8 through 18, and sometimes not
-// even then.
-
-function makeRequestCallFromTimer(callback) {
-    return function requestCall() {
-        // We dispatch a timeout with a specified delay of 0 for engines that
-        // can reliably accommodate that request. This will usually be snapped
-        // to a 4 milisecond delay, but once we're flushing, there's no delay
-        // between events.
-        var timeoutHandle = setTimeout(handleTimer, 0);
-        // However, since this timer gets frequently dropped in Firefox
-        // workers, we enlist an interval handle that will try to fire
-        // an event 20 times per second until it succeeds.
-        var intervalHandle = setInterval(handleTimer, 50);
-
-        function handleTimer() {
-            // Whichever timer succeeds will cancel both timers and
-            // execute the callback.
-            clearTimeout(timeoutHandle);
-            clearInterval(intervalHandle);
-            callback();
-        }
-    };
-}
-
-// This is for `asap.js` only.
-// Its name will be periodically randomized to break any code that depends on
-// its existence.
-rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;
-
-// ASAP was originally a nextTick shim included in Q. This was factored out
-// into this ASAP package. It was later adapted to RSVP which made further
-// amendments. These decisions, particularly to marginalize MessageChannel and
-// to capture the MutationObserver implementation in a closure, were integrated
-// back into ASAP proper.
-// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js
diff --git a/signaling_server/service/node_modules/express/node_modules/asap/package.json b/signaling_server/service/node_modules/express/node_modules/asap/package.json
deleted file mode 100644 (file)
index ef438a6..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-{
-  "_from": "asap@~2.0.3",
-  "_id": "asap@2.0.6",
-  "_inBundle": false,
-  "_integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
-  "_location": "/asap",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "asap@~2.0.3",
-    "name": "asap",
-    "escapedName": "asap",
-    "rawSpec": "~2.0.3",
-    "saveSpec": null,
-    "fetchSpec": "~2.0.3"
-  },
-  "_requiredBy": [
-    "/promise"
-  ],
-  "_resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
-  "_shasum": "e50347611d7e690943208bbdafebcbc2fb866d46",
-  "_spec": "asap@~2.0.3",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/promise",
-  "browser": {
-    "./asap": "./browser-asap.js",
-    "./asap.js": "./browser-asap.js",
-    "./raw": "./browser-raw.js",
-    "./raw.js": "./browser-raw.js",
-    "./test/domain.js": "./test/browser-domain.js"
-  },
-  "bugs": {
-    "url": "https://github.com/kriskowal/asap/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "High-priority task queue for Node.js and browsers",
-  "devDependencies": {
-    "benchmark": "^1.0.0",
-    "events": "^1.0.1",
-    "jshint": "^2.5.1",
-    "knox": "^0.8.10",
-    "mr": "^2.0.5",
-    "opener": "^1.3.0",
-    "q": "^2.0.3",
-    "q-io": "^2.0.3",
-    "saucelabs": "^0.1.1",
-    "wd": "^0.2.21",
-    "weak-map": "^1.0.5"
-  },
-  "files": [
-    "raw.js",
-    "asap.js",
-    "browser-raw.js",
-    "browser-asap.js"
-  ],
-  "homepage": "https://github.com/kriskowal/asap#readme",
-  "keywords": [
-    "event",
-    "task",
-    "queue"
-  ],
-  "license": "MIT",
-  "main": "./asap.js",
-  "name": "asap",
-  "react-native": {
-    "domain": false
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/kriskowal/asap.git"
-  },
-  "scripts": {
-    "benchmarks": "node benchmarks",
-    "lint": "jshint raw.js asap.js browser-raw.js browser-asap.js $(find scripts -name '*.js' | grep -v gauntlet)",
-    "test": "npm run lint && npm run test-node",
-    "test-browser": "node scripts/publish-bundle.js test/asap-test.js | xargs opener",
-    "test-node": "node test/asap-test.js",
-    "test-publish": "node scripts/publish-bundle.js test/asap-test.js | pbcopy",
-    "test-saucelabs": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-spot-configurations.json",
-    "test-saucelabs-all": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-all-configurations.json",
-    "test-saucelabs-worker": "node scripts/saucelabs-worker-test.js scripts/saucelabs-spot-configurations.json",
-    "test-saucelabs-worker-all": "node scripts/saucelabs-worker-test.js scripts/saucelabs-all-configurations.json",
-    "test-travis": "npm run lint && npm run test-node && npm run test-saucelabs && npm run test-saucelabs-worker"
-  },
-  "version": "2.0.6"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/asap/raw.js b/signaling_server/service/node_modules/express/node_modules/asap/raw.js
deleted file mode 100644 (file)
index ae3b892..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-"use strict";
-
-var domain; // The domain module is executed on demand
-var hasSetImmediate = typeof setImmediate === "function";
-
-// Use the fastest means possible to execute a task in its own turn, with
-// priority over other events including network IO events in Node.js.
-//
-// An exception thrown by a task will permanently interrupt the processing of
-// subsequent tasks. The higher level `asap` function ensures that if an
-// exception is thrown by a task, that the task queue will continue flushing as
-// soon as possible, but if you use `rawAsap` directly, you are responsible to
-// either ensure that no exceptions are thrown from your task, or to manually
-// call `rawAsap.requestFlush` if an exception is thrown.
-module.exports = rawAsap;
-function rawAsap(task) {
-    if (!queue.length) {
-        requestFlush();
-        flushing = true;
-    }
-    // Avoids a function call
-    queue[queue.length] = task;
-}
-
-var queue = [];
-// Once a flush has been requested, no further calls to `requestFlush` are
-// necessary until the next `flush` completes.
-var flushing = false;
-// The position of the next task to execute in the task queue. This is
-// preserved between calls to `flush` so that it can be resumed if
-// a task throws an exception.
-var index = 0;
-// If a task schedules additional tasks recursively, the task queue can grow
-// unbounded. To prevent memory excaustion, the task queue will periodically
-// truncate already-completed tasks.
-var capacity = 1024;
-
-// The flush function processes all tasks that have been scheduled with
-// `rawAsap` unless and until one of those tasks throws an exception.
-// If a task throws an exception, `flush` ensures that its state will remain
-// consistent and will resume where it left off when called again.
-// However, `flush` does not make any arrangements to be called again if an
-// exception is thrown.
-function flush() {
-    while (index < queue.length) {
-        var currentIndex = index;
-        // Advance the index before calling the task. This ensures that we will
-        // begin flushing on the next task the task throws an error.
-        index = index + 1;
-        queue[currentIndex].call();
-        // Prevent leaking memory for long chains of recursive calls to `asap`.
-        // If we call `asap` within tasks scheduled by `asap`, the queue will
-        // grow, but to avoid an O(n) walk for every task we execute, we don't
-        // shift tasks off the queue after they have been executed.
-        // Instead, we periodically shift 1024 tasks off the queue.
-        if (index > capacity) {
-            // Manually shift all values starting at the index back to the
-            // beginning of the queue.
-            for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
-                queue[scan] = queue[scan + index];
-            }
-            queue.length -= index;
-            index = 0;
-        }
-    }
-    queue.length = 0;
-    index = 0;
-    flushing = false;
-}
-
-rawAsap.requestFlush = requestFlush;
-function requestFlush() {
-    // Ensure flushing is not bound to any domain.
-    // It is not sufficient to exit the domain, because domains exist on a stack.
-    // To execute code outside of any domain, the following dance is necessary.
-    var parentDomain = process.domain;
-    if (parentDomain) {
-        if (!domain) {
-            // Lazy execute the domain module.
-            // Only employed if the user elects to use domains.
-            domain = require("domain");
-        }
-        domain.active = process.domain = null;
-    }
-
-    // `setImmediate` is slower that `process.nextTick`, but `process.nextTick`
-    // cannot handle recursion.
-    // `requestFlush` will only be called recursively from `asap.js`, to resume
-    // flushing after an error is thrown into a domain.
-    // Conveniently, `setImmediate` was introduced in the same version
-    // `process.nextTick` started throwing recursion errors.
-    if (flushing && hasSetImmediate) {
-        setImmediate(flush);
-    } else {
-        process.nextTick(flush);
-    }
-
-    if (parentDomain) {
-        domain.active = process.domain = parentDomain;
-    }
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/package.json b/signaling_server/service/node_modules/express/node_modules/body-parser/node_modules/debug/package.json
deleted file mode 100644 (file)
index 0d0fe9a..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-  "_from": "debug@2.6.9",
-  "_id": "debug@2.6.9",
-  "_inBundle": false,
-  "_integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-  "_location": "/body-parser/debug",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "debug@2.6.9",
-    "name": "debug",
-    "escapedName": "debug",
-    "rawSpec": "2.6.9",
-    "saveSpec": null,
-    "fetchSpec": "2.6.9"
-  },
-  "_requiredBy": [
-    "/body-parser"
-  ],
-  "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-  "_shasum": "5d128515df134ff327e90a4c93f4e077a536341f",
-  "_spec": "debug@2.6.9",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/body-parser",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca"
-  },
-  "browser": "./src/browser.js",
-  "bugs": {
-    "url": "https://github.com/visionmedia/debug/issues"
-  },
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "debug/index.js": "browser.js",
-      "debug/debug.js": "debug.js"
-    }
-  },
-  "contributors": [
-    {
-      "name": "Nathan Rajlich",
-      "email": "nathan@tootallnate.net",
-      "url": "http://n8.io"
-    },
-    {
-      "name": "Andrew Rhyne",
-      "email": "rhyneandrew@gmail.com"
-    }
-  ],
-  "dependencies": {
-    "ms": "2.0.0"
-  },
-  "deprecated": false,
-  "description": "small debugging utility",
-  "devDependencies": {
-    "browserify": "9.0.3",
-    "chai": "^3.5.0",
-    "concurrently": "^3.1.0",
-    "coveralls": "^2.11.15",
-    "eslint": "^3.12.1",
-    "istanbul": "^0.4.5",
-    "karma": "^1.3.0",
-    "karma-chai": "^0.1.0",
-    "karma-mocha": "^1.3.0",
-    "karma-phantomjs-launcher": "^1.0.2",
-    "karma-sinon": "^1.0.5",
-    "mocha": "^3.2.0",
-    "mocha-lcov-reporter": "^1.2.0",
-    "rimraf": "^2.5.4",
-    "sinon": "^1.17.6",
-    "sinon-chai": "^2.8.0"
-  },
-  "homepage": "https://github.com/visionmedia/debug#readme",
-  "keywords": [
-    "debug",
-    "log",
-    "debugger"
-  ],
-  "license": "MIT",
-  "main": "./src/index.js",
-  "name": "debug",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/visionmedia/debug.git"
-  },
-  "version": "2.6.9"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/body-parser/package.json b/signaling_server/service/node_modules/express/node_modules/body-parser/package.json
deleted file mode 100644 (file)
index d341eb0..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "_from": "body-parser@1.19.0",
-  "_id": "body-parser@1.19.0",
-  "_inBundle": false,
-  "_integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
-  "_location": "/body-parser",
-  "_phantomChildren": {
-    "ms": "2.0.0"
-  },
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "body-parser@1.19.0",
-    "name": "body-parser",
-    "escapedName": "body-parser",
-    "rawSpec": "1.19.0",
-    "saveSpec": null,
-    "fetchSpec": "1.19.0"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
-  "_shasum": "96b2709e57c9c4e09a6fd66a8fd979844f69f08a",
-  "_spec": "body-parser@1.19.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/expressjs/body-parser/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "dependencies": {
-    "bytes": "3.1.0",
-    "content-type": "~1.0.4",
-    "debug": "2.6.9",
-    "depd": "~1.1.2",
-    "http-errors": "1.7.2",
-    "iconv-lite": "0.4.24",
-    "on-finished": "~2.3.0",
-    "qs": "6.7.0",
-    "raw-body": "2.4.0",
-    "type-is": "~1.6.17"
-  },
-  "deprecated": false,
-  "description": "Node.js body parsing middleware",
-  "devDependencies": {
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.2",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "istanbul": "0.4.5",
-    "methods": "1.1.2",
-    "mocha": "6.1.4",
-    "safe-buffer": "5.1.2",
-    "supertest": "4.0.2"
-  },
-  "engines": {
-    "node": ">= 0.8"
-  },
-  "files": [
-    "lib/",
-    "LICENSE",
-    "HISTORY.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/expressjs/body-parser#readme",
-  "license": "MIT",
-  "name": "body-parser",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/expressjs/body-parser.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/"
-  },
-  "version": "1.19.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/bytes/package.json b/signaling_server/service/node_modules/express/node_modules/bytes/package.json
deleted file mode 100644 (file)
index ba409bb..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "_from": "bytes@3.1.0",
-  "_id": "bytes@3.1.0",
-  "_inBundle": false,
-  "_integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
-  "_location": "/bytes",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "bytes@3.1.0",
-    "name": "bytes",
-    "escapedName": "bytes",
-    "rawSpec": "3.1.0",
-    "saveSpec": null,
-    "fetchSpec": "3.1.0"
-  },
-  "_requiredBy": [
-    "/body-parser",
-    "/raw-body"
-  ],
-  "_resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
-  "_shasum": "f6cf7933a360e0588fa9fde85651cdc7f805d1f6",
-  "_spec": "bytes@3.1.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/body-parser",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca",
-    "url": "http://tjholowaychuk.com"
-  },
-  "bugs": {
-    "url": "https://github.com/visionmedia/bytes.js/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Jed Watson",
-      "email": "jed.watson@me.com"
-    },
-    {
-      "name": "Théo FIDRY",
-      "email": "theo.fidry@gmail.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "Utility to parse a string bytes to bytes and vice-versa",
-  "devDependencies": {
-    "eslint": "5.12.1",
-    "mocha": "5.2.0",
-    "nyc": "13.1.0"
-  },
-  "engines": {
-    "node": ">= 0.8"
-  },
-  "files": [
-    "History.md",
-    "LICENSE",
-    "Readme.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/visionmedia/bytes.js#readme",
-  "keywords": [
-    "byte",
-    "bytes",
-    "utility",
-    "parse",
-    "parser",
-    "convert",
-    "converter"
-  ],
-  "license": "MIT",
-  "name": "bytes",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/visionmedia/bytes.js.git"
-  },
-  "scripts": {
-    "lint": "eslint .",
-    "test": "mocha --check-leaks --reporter spec",
-    "test-ci": "nyc --reporter=text npm test",
-    "test-cov": "nyc --reporter=html --reporter=text npm test"
-  },
-  "version": "3.1.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/content-disposition/package.json b/signaling_server/service/node_modules/express/node_modules/content-disposition/package.json
deleted file mode 100644 (file)
index d81952c..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "_from": "content-disposition@0.5.3",
-  "_id": "content-disposition@0.5.3",
-  "_inBundle": false,
-  "_integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
-  "_location": "/content-disposition",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "content-disposition@0.5.3",
-    "name": "content-disposition",
-    "escapedName": "content-disposition",
-    "rawSpec": "0.5.3",
-    "saveSpec": null,
-    "fetchSpec": "0.5.3"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
-  "_shasum": "e130caf7e7279087c5616c2007d0485698984fbd",
-  "_spec": "content-disposition@0.5.3",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/content-disposition/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "safe-buffer": "5.1.2"
-  },
-  "deprecated": false,
-  "description": "Create and parse Content-Disposition header",
-  "devDependencies": {
-    "deep-equal": "1.0.1",
-    "eslint": "5.10.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.14.0",
-    "eslint-plugin-markdown": "1.0.0-rc.1",
-    "eslint-plugin-node": "7.0.1",
-    "eslint-plugin-promise": "4.0.1",
-    "eslint-plugin-standard": "4.0.0",
-    "istanbul": "0.4.5",
-    "mocha": "5.2.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/content-disposition#readme",
-  "keywords": [
-    "content-disposition",
-    "http",
-    "rfc6266",
-    "res"
-  ],
-  "license": "MIT",
-  "name": "content-disposition",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/content-disposition.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "0.5.3"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/content-type/package.json b/signaling_server/service/node_modules/express/node_modules/content-type/package.json
deleted file mode 100644 (file)
index b710985..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "_from": "content-type@~1.0.4",
-  "_id": "content-type@1.0.4",
-  "_inBundle": false,
-  "_integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
-  "_location": "/content-type",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "content-type@~1.0.4",
-    "name": "content-type",
-    "escapedName": "content-type",
-    "rawSpec": "~1.0.4",
-    "saveSpec": null,
-    "fetchSpec": "~1.0.4"
-  },
-  "_requiredBy": [
-    "/body-parser",
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-  "_shasum": "e138cc75e040c727b1966fe5e5f8c9aee256fe3b",
-  "_spec": "content-type@~1.0.4",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/content-type/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Create and parse HTTP Content-Type header",
-  "devDependencies": {
-    "eslint": "3.19.0",
-    "eslint-config-standard": "10.2.1",
-    "eslint-plugin-import": "2.7.0",
-    "eslint-plugin-node": "5.1.1",
-    "eslint-plugin-promise": "3.5.0",
-    "eslint-plugin-standard": "3.0.1",
-    "istanbul": "0.4.5",
-    "mocha": "~1.21.5"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/content-type#readme",
-  "keywords": [
-    "content-type",
-    "http",
-    "req",
-    "res",
-    "rfc7231"
-  ],
-  "license": "MIT",
-  "name": "content-type",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/content-type.git"
-  },
-  "scripts": {
-    "lint": "eslint .",
-    "test": "mocha --reporter spec --check-leaks --bail test/",
-    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
-  },
-  "version": "1.0.4"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/cookie-signature/.npmignore b/signaling_server/service/node_modules/express/node_modules/cookie-signature/.npmignore
deleted file mode 100644 (file)
index f1250e5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-support
-test
-examples
-*.sock
diff --git a/signaling_server/service/node_modules/express/node_modules/cookie-signature/package.json b/signaling_server/service/node_modules/express/node_modules/cookie-signature/package.json
deleted file mode 100644 (file)
index 7be3323..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "_from": "cookie-signature@1.0.6",
-  "_id": "cookie-signature@1.0.6",
-  "_inBundle": false,
-  "_integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
-  "_location": "/cookie-signature",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "cookie-signature@1.0.6",
-    "name": "cookie-signature",
-    "escapedName": "cookie-signature",
-    "rawSpec": "1.0.6",
-    "saveSpec": null,
-    "fetchSpec": "1.0.6"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-  "_shasum": "e303a882b342cc3ee8ca513a79999734dab3ae2c",
-  "_spec": "cookie-signature@1.0.6",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@learnboost.com"
-  },
-  "bugs": {
-    "url": "https://github.com/visionmedia/node-cookie-signature/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "Sign and unsign cookies",
-  "devDependencies": {
-    "mocha": "*",
-    "should": "*"
-  },
-  "homepage": "https://github.com/visionmedia/node-cookie-signature#readme",
-  "keywords": [
-    "cookie",
-    "sign",
-    "unsign"
-  ],
-  "license": "MIT",
-  "main": "index",
-  "name": "cookie-signature",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/visionmedia/node-cookie-signature.git"
-  },
-  "scripts": {
-    "test": "mocha --require should --reporter spec"
-  },
-  "version": "1.0.6"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/cookie/package.json b/signaling_server/service/node_modules/express/node_modules/cookie/package.json
deleted file mode 100644 (file)
index a818b95..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "_from": "cookie@0.4.0",
-  "_id": "cookie@0.4.0",
-  "_inBundle": false,
-  "_integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
-  "_location": "/cookie",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "cookie@0.4.0",
-    "name": "cookie",
-    "escapedName": "cookie",
-    "rawSpec": "0.4.0",
-    "saveSpec": null,
-    "fetchSpec": "0.4.0"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
-  "_shasum": "beb437e7022b3b6d49019d088665303ebe9c14ba",
-  "_spec": "cookie@0.4.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Roman Shtylman",
-    "email": "shtylman@gmail.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/cookie/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "HTTP server cookie parsing and serialization",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "2.1.4",
-    "eslint": "5.16.0",
-    "eslint-plugin-markdown": "1.0.0",
-    "istanbul": "0.4.5",
-    "mocha": "6.1.4"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/cookie#readme",
-  "keywords": [
-    "cookie",
-    "cookies"
-  ],
-  "license": "MIT",
-  "name": "cookie",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/cookie.git"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js",
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "version": "node scripts/version-history.js && git add HISTORY.md"
-  },
-  "version": "0.4.0"
-}
index 53938af..248ea2c 100644 (file)
@@ -1,4 +1,10 @@
 {
+  "_args": [
+    [
+      "debug@2.6.9",
+      "/opt/source/offload.js"
+    ]
+  ],
   "_from": "debug@2.6.9",
   "_id": "debug@2.6.9",
   "_inBundle": false,
@@ -19,9 +25,8 @@
     "/express"
   ],
   "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-  "_shasum": "5d128515df134ff327e90a4c93f4e077a536341f",
-  "_spec": "debug@2.6.9",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
+  "_spec": "2.6.9",
+  "_where": "/opt/source/offload.js",
   "author": {
     "name": "TJ Holowaychuk",
     "email": "tj@vision-media.ca"
@@ -30,7 +35,6 @@
   "bugs": {
     "url": "https://github.com/visionmedia/debug/issues"
   },
-  "bundleDependencies": false,
   "component": {
     "scripts": {
       "debug/index.js": "browser.js",
@@ -51,7 +55,6 @@
   "dependencies": {
     "ms": "2.0.0"
   },
-  "deprecated": false,
   "description": "small debugging utility",
   "devDependencies": {
     "browserify": "9.0.3",
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/.npmignore b/signaling_server/service/node_modules/express/node_modules/deep-is/.npmignore
deleted file mode 100644 (file)
index 3c3629e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/.travis.yml b/signaling_server/service/node_modules/express/node_modules/deep-is/.travis.yml
deleted file mode 100644 (file)
index d523c5f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-language: node_js
-node_js:
-  - 0.4
-  - 0.6
-  - 0.8
-  - 0.10
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/LICENSE b/signaling_server/service/node_modules/express/node_modules/deep-is/LICENSE
deleted file mode 100644 (file)
index c38f840..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) 2012, 2013 Thorsten Lorenz <thlorenz@gmx.de>
-Copyright (c) 2012 James Halliday <mail@substack.net>
-Copyright (c) 2009 Thomas Robinson <280north.com>
-
-This software is released under the MIT license:
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/README.markdown b/signaling_server/service/node_modules/express/node_modules/deep-is/README.markdown
deleted file mode 100644 (file)
index eb69a83..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-deep-is
-==========
-
-Node's `assert.deepEqual() algorithm` as a standalone module. Exactly like
-[deep-equal](https://github.com/substack/node-deep-equal) except for the fact that `deepEqual(NaN, NaN) === true`.
-
-This module is around [5 times faster](https://gist.github.com/2790507)
-than wrapping `assert.deepEqual()` in a `try/catch`.
-
-[![browser support](http://ci.testling.com/thlorenz/deep-is.png)](http://ci.testling.com/thlorenz/deep-is)
-
-[![build status](https://secure.travis-ci.org/thlorenz/deep-is.png)](http://travis-ci.org/thlorenz/deep-is)
-
-example
-=======
-
-``` js
-var equal = require('deep-is');
-console.dir([
-    equal(
-        { a : [ 2, 3 ], b : [ 4 ] },
-        { a : [ 2, 3 ], b : [ 4 ] }
-    ),
-    equal(
-        { x : 5, y : [6] },
-        { x : 5, y : 6 }
-    )
-]);
-```
-
-methods
-=======
-
-var deepIs = require('deep-is')
-
-deepIs(a, b)
----------------
-
-Compare objects `a` and `b`, returning whether they are equal according to a
-recursive equality algorithm.
-
-install
-=======
-
-With [npm](http://npmjs.org) do:
-
-```
-npm install deep-is
-```
-
-test
-====
-
-With [npm](http://npmjs.org) do:
-
-```
-npm test
-```
-
-license
-=======
-
-Copyright (c) 2012, 2013 Thorsten Lorenz <thlorenz@gmx.de>
-Copyright (c) 2012 James Halliday <mail@substack.net>
-
-Derived largely from node's assert module, which has the copyright statement:
-
-Copyright (c) 2009 Thomas Robinson <280north.com>
-
-Released under the MIT license, see LICENSE for details.
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/example/cmp.js b/signaling_server/service/node_modules/express/node_modules/deep-is/example/cmp.js
deleted file mode 100644 (file)
index 67014b8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-var equal = require('../');
-console.dir([
-    equal(
-        { a : [ 2, 3 ], b : [ 4 ] },
-        { a : [ 2, 3 ], b : [ 4 ] }
-    ),
-    equal(
-        { x : 5, y : [6] },
-        { x : 5, y : 6 }
-    )
-]);
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/index.js b/signaling_server/service/node_modules/express/node_modules/deep-is/index.js
deleted file mode 100644 (file)
index 506fe27..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-var pSlice = Array.prototype.slice;
-var Object_keys = typeof Object.keys === 'function'
-    ? Object.keys
-    : function (obj) {
-        var keys = [];
-        for (var key in obj) keys.push(key);
-        return keys;
-    }
-;
-
-var deepEqual = module.exports = function (actual, expected) {
-  // enforce Object.is +0 !== -0
-  if (actual === 0 && expected === 0) {
-    return areZerosEqual(actual, expected);
-
-  // 7.1. All identical values are equivalent, as determined by ===.
-  } else if (actual === expected) {
-    return true;
-
-  } else if (actual instanceof Date && expected instanceof Date) {
-    return actual.getTime() === expected.getTime();
-
-  } else if (isNumberNaN(actual)) {
-    return isNumberNaN(expected);
-
-  // 7.3. Other pairs that do not both pass typeof value == 'object',
-  // equivalence is determined by ==.
-  } else if (typeof actual != 'object' && typeof expected != 'object') {
-    return actual == expected;
-
-  // 7.4. For all other Object pairs, including Array objects, equivalence is
-  // determined by having the same number of owned properties (as verified
-  // with Object.prototype.hasOwnProperty.call), the same set of keys
-  // (although not necessarily the same order), equivalent values for every
-  // corresponding key, and an identical 'prototype' property. Note: this
-  // accounts for both named and indexed properties on Arrays.
-  } else {
-    return objEquiv(actual, expected);
-  }
-};
-
-function isUndefinedOrNull(value) {
-  return value === null || value === undefined;
-}
-
-function isArguments(object) {
-  return Object.prototype.toString.call(object) == '[object Arguments]';
-}
-
-function isNumberNaN(value) {
-  // NaN === NaN -> false
-  return typeof value == 'number' && value !== value;
-}
-
-function areZerosEqual(zeroA, zeroB) {
-  // (1 / +0|0) -> Infinity, but (1 / -0) -> -Infinity and (Infinity !== -Infinity)
-  return (1 / zeroA) === (1 / zeroB);
-}
-
-function objEquiv(a, b) {
-  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
-    return false;
-
-  // an identical 'prototype' property.
-  if (a.prototype !== b.prototype) return false;
-  //~~~I've managed to break Object.keys through screwy arguments passing.
-  //   Converting to array solves the problem.
-  if (isArguments(a)) {
-    if (!isArguments(b)) {
-      return false;
-    }
-    a = pSlice.call(a);
-    b = pSlice.call(b);
-    return deepEqual(a, b);
-  }
-  try {
-    var ka = Object_keys(a),
-        kb = Object_keys(b),
-        key, i;
-  } catch (e) {//happens when one is a string literal and the other isn't
-    return false;
-  }
-  // having the same number of owned properties (keys incorporates
-  // hasOwnProperty)
-  if (ka.length != kb.length)
-    return false;
-  //the same set of keys (although not necessarily the same order),
-  ka.sort();
-  kb.sort();
-  //~~~cheap key test
-  for (i = ka.length - 1; i >= 0; i--) {
-    if (ka[i] != kb[i])
-      return false;
-  }
-  //equivalent values for every corresponding key, and
-  //~~~possibly expensive deep test
-  for (i = ka.length - 1; i >= 0; i--) {
-    key = ka[i];
-    if (!deepEqual(a[key], b[key])) return false;
-  }
-  return true;
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/package.json b/signaling_server/service/node_modules/express/node_modules/deep-is/package.json
deleted file mode 100644 (file)
index ae387b8..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-{
-  "_from": "deep-is@~0.1.2",
-  "_id": "deep-is@0.1.3",
-  "_inBundle": false,
-  "_integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
-  "_location": "/deep-is",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "deep-is@~0.1.2",
-    "name": "deep-is",
-    "escapedName": "deep-is",
-    "rawSpec": "~0.1.2",
-    "saveSpec": null,
-    "fetchSpec": "~0.1.2"
-  },
-  "_requiredBy": [
-    "/eslint/optionator",
-    "/grunt-eslint/optionator",
-    "/optionator"
-  ],
-  "_resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-  "_shasum": "b369d6fb5dbc13eecf524f91b070feedc357cf34",
-  "_spec": "deep-is@~0.1.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/optionator",
-  "author": {
-    "name": "Thorsten Lorenz",
-    "email": "thlorenz@gmx.de",
-    "url": "http://thlorenz.com"
-  },
-  "bugs": {
-    "url": "https://github.com/thlorenz/deep-is/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "node's assert.deepEqual algorithm except for NaN being equal to NaN",
-  "devDependencies": {
-    "tape": "~1.0.2"
-  },
-  "directories": {
-    "lib": ".",
-    "example": "example",
-    "test": "test"
-  },
-  "homepage": "https://github.com/thlorenz/deep-is#readme",
-  "keywords": [
-    "equality",
-    "equal",
-    "compare"
-  ],
-  "license": {
-    "type": "MIT",
-    "url": "https://github.com/thlorenz/deep-is/blob/master/LICENSE"
-  },
-  "main": "index.js",
-  "name": "deep-is",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/thlorenz/deep-is.git"
-  },
-  "scripts": {
-    "test": "tape test/*.js"
-  },
-  "testling": {
-    "files": "test/*.js",
-    "browsers": {
-      "ie": [
-        6,
-        7,
-        8,
-        9
-      ],
-      "ff": [
-        3.5,
-        10,
-        15
-      ],
-      "chrome": [
-        10,
-        22
-      ],
-      "safari": [
-        5.1
-      ],
-      "opera": [
-        12
-      ]
-    }
-  },
-  "version": "0.1.3"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/test/NaN.js b/signaling_server/service/node_modules/express/node_modules/deep-is/test/NaN.js
deleted file mode 100644 (file)
index ddaa5a7..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-var test = require('tape');
-var equal = require('../');
-
-test('NaN and 0 values', function (t) {
-    t.ok(equal(NaN, NaN));
-    t.notOk(equal(0, NaN));
-    t.ok(equal(0, 0));
-    t.notOk(equal(0, 1));
-    t.end();
-});
-
-
-test('nested NaN values', function (t) {
-    t.ok(equal([ NaN, 1, NaN ], [ NaN, 1, NaN ]));
-    t.end();
-});
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/test/cmp.js b/signaling_server/service/node_modules/express/node_modules/deep-is/test/cmp.js
deleted file mode 100644 (file)
index 3071013..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-var test = require('tape');
-var equal = require('../');
-
-test('equal', function (t) {
-    t.ok(equal(
-        { a : [ 2, 3 ], b : [ 4 ] },
-        { a : [ 2, 3 ], b : [ 4 ] }
-    ));
-    t.end();
-});
-
-test('not equal', function (t) {
-    t.notOk(equal(
-        { x : 5, y : [6] },
-        { x : 5, y : 6 }
-    ));
-    t.end();
-});
-
-test('nested nulls', function (t) {
-    t.ok(equal([ null, null, null ], [ null, null, null ]));
-    t.end();
-});
diff --git a/signaling_server/service/node_modules/express/node_modules/deep-is/test/neg-vs-pos-0.js b/signaling_server/service/node_modules/express/node_modules/deep-is/test/neg-vs-pos-0.js
deleted file mode 100644 (file)
index ac26130..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-var test = require('tape');
-var equal = require('../');
-
-test('0 values', function (t) {
-    t.ok(equal( 0,  0), ' 0 ===  0');
-    t.ok(equal( 0, +0), ' 0 === +0');
-    t.ok(equal(+0, +0), '+0 === +0');
-    t.ok(equal(-0, -0), '-0 === -0');
-
-    t.notOk(equal(-0,  0), '-0 !==  0');
-    t.notOk(equal(-0, +0), '-0 !== +0');
-
-    t.end();
-});
-
diff --git a/signaling_server/service/node_modules/express/node_modules/depd/package.json b/signaling_server/service/node_modules/express/node_modules/depd/package.json
deleted file mode 100644 (file)
index 1b81ca7..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "_from": "depd@~1.1.2",
-  "_id": "depd@1.1.2",
-  "_inBundle": false,
-  "_integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
-  "_location": "/depd",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "depd@~1.1.2",
-    "name": "depd",
-    "escapedName": "depd",
-    "rawSpec": "~1.1.2",
-    "saveSpec": null,
-    "fetchSpec": "~1.1.2"
-  },
-  "_requiredBy": [
-    "/body-parser",
-    "/express",
-    "/http-errors",
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-  "_shasum": "9bcd52e14c097763e749b274c4346ed2e560b5a9",
-  "_spec": "depd@~1.1.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "browser": "lib/browser/index.js",
-  "bugs": {
-    "url": "https://github.com/dougwilson/nodejs-depd/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Deprecate all the things",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "2.1.4",
-    "eslint": "3.19.0",
-    "eslint-config-standard": "7.1.0",
-    "eslint-plugin-markdown": "1.0.0-beta.7",
-    "eslint-plugin-promise": "3.6.0",
-    "eslint-plugin-standard": "3.0.1",
-    "istanbul": "0.4.5",
-    "mocha": "~1.21.5"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "lib/",
-    "History.md",
-    "LICENSE",
-    "index.js",
-    "Readme.md"
-  ],
-  "homepage": "https://github.com/dougwilson/nodejs-depd#readme",
-  "keywords": [
-    "deprecate",
-    "deprecated"
-  ],
-  "license": "MIT",
-  "name": "depd",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/dougwilson/nodejs-depd.git"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js",
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail test/",
-    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --no-exit test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/"
-  },
-  "version": "1.1.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/destroy/LICENSE b/signaling_server/service/node_modules/express/node_modules/destroy/LICENSE
deleted file mode 100644 (file)
index a7ae8ee..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-The MIT License (MIT)
-
-Copyright (c) 2014 Jonathan Ong me@jongleberry.com
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/destroy/package.json b/signaling_server/service/node_modules/express/node_modules/destroy/package.json
deleted file mode 100644 (file)
index f35585a..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-{
-  "_from": "destroy@~1.0.4",
-  "_id": "destroy@1.0.4",
-  "_inBundle": false,
-  "_integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
-  "_location": "/destroy",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "destroy@~1.0.4",
-    "name": "destroy",
-    "escapedName": "destroy",
-    "rawSpec": "~1.0.4",
-    "saveSpec": null,
-    "fetchSpec": "~1.0.4"
-  },
-  "_requiredBy": [
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
-  "_shasum": "978857442c44749e4206613e37946205826abd80",
-  "_spec": "destroy@~1.0.4",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/send",
-  "author": {
-    "name": "Jonathan Ong",
-    "email": "me@jongleberry.com",
-    "url": "http://jongleberry.com"
-  },
-  "bugs": {
-    "url": "https://github.com/stream-utils/destroy/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "destroy a stream if possible",
-  "devDependencies": {
-    "istanbul": "0.4.2",
-    "mocha": "2.3.4"
-  },
-  "files": [
-    "index.js",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/stream-utils/destroy#readme",
-  "keywords": [
-    "stream",
-    "streams",
-    "destroy",
-    "cleanup",
-    "leak",
-    "fd"
-  ],
-  "license": "MIT",
-  "name": "destroy",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/stream-utils/destroy.git"
-  },
-  "scripts": {
-    "test": "mocha --reporter spec",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot"
-  },
-  "version": "1.0.4"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/ee-first/package.json b/signaling_server/service/node_modules/express/node_modules/ee-first/package.json
deleted file mode 100644 (file)
index bd0541e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "_from": "ee-first@1.1.1",
-  "_id": "ee-first@1.1.1",
-  "_inBundle": false,
-  "_integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
-  "_location": "/ee-first",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "ee-first@1.1.1",
-    "name": "ee-first",
-    "escapedName": "ee-first",
-    "rawSpec": "1.1.1",
-    "saveSpec": null,
-    "fetchSpec": "1.1.1"
-  },
-  "_requiredBy": [
-    "/on-finished"
-  ],
-  "_resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-  "_shasum": "590c61156b0ae2f4f0255732a158b266bc56b21d",
-  "_spec": "ee-first@1.1.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/on-finished",
-  "author": {
-    "name": "Jonathan Ong",
-    "email": "me@jongleberry.com",
-    "url": "http://jongleberry.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jonathanong/ee-first/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "return the first event in a set of ee/event pairs",
-  "devDependencies": {
-    "istanbul": "0.3.9",
-    "mocha": "2.2.5"
-  },
-  "files": [
-    "index.js",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/jonathanong/ee-first#readme",
-  "license": "MIT",
-  "name": "ee-first",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jonathanong/ee-first.git"
-  },
-  "scripts": {
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "1.1.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/encodeurl/package.json b/signaling_server/service/node_modules/express/node_modules/encodeurl/package.json
deleted file mode 100644 (file)
index eb5a2a6..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "_from": "encodeurl@~1.0.2",
-  "_id": "encodeurl@1.0.2",
-  "_inBundle": false,
-  "_integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
-  "_location": "/encodeurl",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "encodeurl@~1.0.2",
-    "name": "encodeurl",
-    "escapedName": "encodeurl",
-    "rawSpec": "~1.0.2",
-    "saveSpec": null,
-    "fetchSpec": "~1.0.2"
-  },
-  "_requiredBy": [
-    "/express",
-    "/finalhandler",
-    "/send",
-    "/serve-static"
-  ],
-  "_resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-  "_shasum": "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59",
-  "_spec": "encodeurl@~1.0.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/pillarjs/encodeurl/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences",
-  "devDependencies": {
-    "eslint": "3.19.0",
-    "eslint-config-standard": "10.2.1",
-    "eslint-plugin-import": "2.8.0",
-    "eslint-plugin-node": "5.2.1",
-    "eslint-plugin-promise": "3.6.0",
-    "eslint-plugin-standard": "3.0.1",
-    "istanbul": "0.4.5",
-    "mocha": "2.5.3"
-  },
-  "engines": {
-    "node": ">= 0.8"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/pillarjs/encodeurl#readme",
-  "keywords": [
-    "encode",
-    "encodeurl",
-    "url"
-  ],
-  "license": "MIT",
-  "name": "encodeurl",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/pillarjs/encodeurl.git"
-  },
-  "scripts": {
-    "lint": "eslint .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "1.0.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/escape-html/package.json b/signaling_server/service/node_modules/express/node_modules/escape-html/package.json
deleted file mode 100644 (file)
index 70d8e7c..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "_from": "escape-html@~1.0.3",
-  "_id": "escape-html@1.0.3",
-  "_inBundle": false,
-  "_integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
-  "_location": "/escape-html",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "escape-html@~1.0.3",
-    "name": "escape-html",
-    "escapedName": "escape-html",
-    "rawSpec": "~1.0.3",
-    "saveSpec": null,
-    "fetchSpec": "~1.0.3"
-  },
-  "_requiredBy": [
-    "/express",
-    "/finalhandler",
-    "/send",
-    "/serve-static"
-  ],
-  "_resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-  "_shasum": "0258eae4d3d0c0974de1c169188ef0051d1d1988",
-  "_spec": "escape-html@~1.0.3",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/component/escape-html/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Escape string for use in HTML",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "1.0.0"
-  },
-  "files": [
-    "LICENSE",
-    "Readme.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/component/escape-html#readme",
-  "keywords": [
-    "escape",
-    "html",
-    "utility"
-  ],
-  "license": "MIT",
-  "name": "escape-html",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/component/escape-html.git"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js"
-  },
-  "version": "1.0.3"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/etag/package.json b/signaling_server/service/node_modules/express/node_modules/etag/package.json
deleted file mode 100644 (file)
index ab383ce..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "_from": "etag@~1.8.1",
-  "_id": "etag@1.8.1",
-  "_inBundle": false,
-  "_integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
-  "_location": "/etag",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "etag@~1.8.1",
-    "name": "etag",
-    "escapedName": "etag",
-    "rawSpec": "~1.8.1",
-    "saveSpec": null,
-    "fetchSpec": "~1.8.1"
-  },
-  "_requiredBy": [
-    "/express",
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-  "_shasum": "41ae2eeb65efa62268aebfea83ac7d79299b0887",
-  "_spec": "etag@~1.8.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/jshttp/etag/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "David Björklund",
-      "email": "david.bjorklund@gmail.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "Create simple HTTP ETags",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "2.1.4",
-    "eslint": "3.19.0",
-    "eslint-config-standard": "10.2.1",
-    "eslint-plugin-import": "2.7.0",
-    "eslint-plugin-markdown": "1.0.0-beta.6",
-    "eslint-plugin-node": "5.1.1",
-    "eslint-plugin-promise": "3.5.0",
-    "eslint-plugin-standard": "3.0.1",
-    "istanbul": "0.4.5",
-    "mocha": "1.21.5",
-    "safe-buffer": "5.1.1",
-    "seedrandom": "2.4.3"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/etag#readme",
-  "keywords": [
-    "etag",
-    "http",
-    "res"
-  ],
-  "license": "MIT",
-  "name": "etag",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/etag.git"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js",
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "1.8.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/fast-levenshtein/LICENSE.md b/signaling_server/service/node_modules/express/node_modules/fast-levenshtein/LICENSE.md
deleted file mode 100644 (file)
index 6212406..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-(MIT License)
-
-Copyright (c) 2013 [Ramesh Nair](http://www.hiddentao.com/)
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/signaling_server/service/node_modules/express/node_modules/fast-levenshtein/README.md b/signaling_server/service/node_modules/express/node_modules/fast-levenshtein/README.md
deleted file mode 100644 (file)
index 2a917a7..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-# fast-levenshtein - Levenshtein algorithm in Javascript
-
-[![Build Status](https://secure.travis-ci.org/hiddentao/fast-levenshtein.png)](http://travis-ci.org/hiddentao/fast-levenshtein)
-
-An efficient Javascript implementation of the [Levenshtein algorithm](http://en.wikipedia.org/wiki/Levenshtein_distance) with asynchronous callback support.
-
-## Features
-
-* Works in node.js and in the browser.
-* Better performance than other implementations by not needing to store the whole matrix ([more info](http://www.codeproject.com/Articles/13525/Fast-memory-efficient-Levenshtein-algorithm)).
-* Provides synchronous and asynchronous versions of the algorithm.
-* Asynchronous version is almost as fast as the synchronous version for small strings and can also provide progress updates.
-* Comprehensive test suite and performance benchmark.
-* Small: <1 KB minified and gzipped
-
-## Installation
-
-### node.js
-
-Install using [npm](http://npmjs.org/):
-
-```bash
-$ npm install fast-levenshtein
-```
-
-### Browser
-
-Using bower:
-
-```bash
-$ bower install fast-levenshtein
-```
-
-If you are not using any module loader system then the API will then be accessible via the `window.Levenshtein` object.
-
-## Examples
-
-**Synchronous**
-
-```javascript
-var levenshtein = require('fast-levenshtein');
-
-var distance = levenshtein.get('back', 'book');   // 2
-var distance = levenshtein.get('我愛你', '我叫你');   // 1
-```
-
-**Asynchronous**
-
-```javascript
-var levenshtein = require('fast-levenshtein');
-
-levenshtein.getAsync('back', 'book', function (err, distance) {
-  // err is null unless an error was thrown
-  // distance equals 2
-});
-```
-
-**Asynchronous with progress updates**
-
-```javascript
-var levenshtein = require('fast-levenshtein');
-
-var hugeText1 = fs.readFileSync(...);
-var hugeText2 = fs.readFileSync(...);
-
-levenshtein.getAsync(hugeText1, hugeText2, function (err, distance) {
-  // process the results as normal
-}, {
-  progress: function(percentComplete) {
-    console.log(percentComplete + ' % completed so far...');
-  }
-);
-```
-
-## Building and Testing
-
-To build the code and run the tests:
-
-```bash
-$ npm install -g grunt-cli
-$ npm install
-$ npm run build
-```
-
-## Performance
-
-_Thanks to [Titus Wormer](https://github.com/wooorm) for [encouraging me](https://github.com/hiddentao/fast-levenshtein/issues/1) to do this._
-
-Benchmarked against other node.js levenshtein distance modules (on Macbook Air 2012, Core i7, 8GB RAM):
-
-```bash
-Running suite Implementation comparison [benchmark/speed.js]...
->> levenshtein-edit-distance x 234 ops/sec ±3.02% (73 runs sampled)
->> levenshtein-component x 422 ops/sec ±4.38% (83 runs sampled)
->> levenshtein-deltas x 283 ops/sec ±3.83% (78 runs sampled)
->> natural x 255 ops/sec ±0.76% (88 runs sampled)
->> levenshtein x 180 ops/sec ±3.55% (86 runs sampled)
->> fast-levenshtein x 1,792 ops/sec ±2.72% (95 runs sampled)
-Benchmark done.
-Fastest test is fast-levenshtein at 4.2x faster than levenshtein-component
-```
-
-You can run this benchmark yourself by doing:
-
-```bash
-$ npm install -g grunt-cli
-$ npm install
-$ npm run build
-$ npm run benchmark
-```
-
-## Contributing
-
-If you wish to submit a pull request please update and/or create new tests for any changes you make and ensure the grunt build passes.
-
-See [CONTRIBUTING.md](https://github.com/hiddentao/fast-levenshtein/blob/master/CONTRIBUTING.md) for details.
-
-## License
-
-MIT - see [LICENSE.md](https://github.com/hiddentao/fast-levenshtein/blob/master/LICENSE.md)
diff --git a/signaling_server/service/node_modules/express/node_modules/fast-levenshtein/levenshtein.js b/signaling_server/service/node_modules/express/node_modules/fast-levenshtein/levenshtein.js
deleted file mode 100644 (file)
index 0028f40..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-(function() {
-  'use strict';
-
-  /**
-   * Extend an Object with another Object's properties.
-   *
-   * The source objects are specified as additional arguments.
-   *
-   * @param dst Object the object to extend.
-   *
-   * @return Object the final object.
-   */
-  var _extend = function(dst) {
-    var sources = Array.prototype.slice.call(arguments, 1);
-    for (var i=0; i<sources.length; ++i) {
-      var src = sources[i];
-      for (var p in src) {
-        if (src.hasOwnProperty(p)) dst[p] = src[p];
-      }
-    }
-    return dst;
-  };
-
-  /**
-   * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
-   */
-  var Levenshtein = {
-    /**
-     * Calculate levenshtein distance of the two strings.
-     *
-     * @param str1 String the first string.
-     * @param str2 String the second string.
-     * @return Integer the levenshtein distance (0 and above).
-     */
-    get: function(str1, str2) {
-      // base cases
-      if (str1 === str2) return 0;
-      if (str1.length === 0) return str2.length;
-      if (str2.length === 0) return str1.length;
-
-      // two rows
-      var prevRow  = new Array(str2.length + 1),
-          curCol, nextCol, i, j, tmp;
-
-      // initialise previous row
-      for (i=0; i<prevRow.length; ++i) {
-        prevRow[i] = i;
-      }
-
-      // calculate current row distance from previous row
-      for (i=0; i<str1.length; ++i) {
-        nextCol = i + 1;
-
-        for (j=0; j<str2.length; ++j) {
-          curCol = nextCol;
-
-          // substution
-          nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
-          // insertion
-          tmp = curCol + 1;
-          if (nextCol > tmp) {
-            nextCol = tmp;
-          }
-          // deletion
-          tmp = prevRow[j + 1] + 1;
-          if (nextCol > tmp) {
-            nextCol = tmp;
-          }
-
-          // copy current col value into previous (in preparation for next iteration)
-          prevRow[j] = curCol;
-        }
-
-        // copy last col value into previous (in preparation for next iteration)
-        prevRow[j] = nextCol;
-      }
-
-      return nextCol;
-    },
-
-    /**
-     * Asynchronously calculate levenshtein distance of the two strings.
-     *
-     * @param str1 String the first string.
-     * @param str2 String the second string.
-     * @param cb Function callback function with signature: function(Error err, int distance)
-     * @param [options] Object additional options.
-     * @param [options.progress] Function progress callback with signature: function(percentComplete)
-     */
-    getAsync: function(str1, str2, cb, options) {
-      options = _extend({}, {
-        progress: null
-      }, options);
-
-      // base cases
-      if (str1 === str2) return cb(null, 0);
-      if (str1.length === 0) return cb(null, str2.length);
-      if (str2.length === 0) return cb(null, str1.length);
-
-      // two rows
-      var prevRow  = new Array(str2.length + 1),
-          curCol, nextCol,
-          i, j, tmp,
-          startTime, currentTime;
-
-      // initialise previous row
-      for (i=0; i<prevRow.length; ++i) {
-        prevRow[i] = i;
-      }
-
-      nextCol = 1;
-      i = 0;
-      j = -1;
-
-      var __calculate = function() {
-        // reset timer
-        startTime = new Date().valueOf();
-        currentTime = startTime;
-
-        // keep going until one second has elapsed
-        while (currentTime - startTime < 1000) {
-          // reached end of current row?
-          if (str2.length <= (++j)) {
-            // copy current into previous (in preparation for next iteration)
-            prevRow[j] = nextCol;
-
-            // if already done all chars
-            if (str1.length <= (++i)) {
-              return cb(null, nextCol);
-            }
-            // else if we have more left to do
-            else {
-              nextCol = i + 1;
-              j = 0;
-            }
-          }
-
-          // calculation
-          curCol = nextCol;
-
-          // substution
-          nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
-          // insertion
-          tmp = curCol + 1;
-          if (nextCol > tmp) {
-            nextCol = tmp;
-          }
-          // deletion
-          tmp = prevRow[j + 1] + 1;
-          if (nextCol > tmp) {
-            nextCol = tmp;
-          }
-
-          // copy current into previous (in preparation for next iteration)
-          prevRow[j] = curCol;
-
-          // get current time
-          currentTime = new Date().valueOf();
-        }
-
-        // send a progress update?
-        if (null !== options.progress) {
-          try {
-            options.progress.call(null, (i * 100.0/ str1.length));
-          } catch (err) {
-            return cb('Progress callback: ' + err.toString());
-          }
-        }
-
-        // next iteration
-        setTimeout(__calculate(), 0);
-      };
-
-      __calculate();
-    }
-
-  };
-
-  // amd
-  if (typeof define !== "undefined" && define !== null && define.amd) {
-    define(function() {
-      return Levenshtein;
-    });
-  }
-  // commonjs
-  else if (typeof module !== "undefined" && module !== null) {
-    module.exports = Levenshtein;
-  }
-  // web worker
-  else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
-    self.Levenshtein = Levenshtein;
-  }
-  // browser main thread
-  else if (typeof window !== "undefined" && window !== null) {
-    window.Levenshtein = Levenshtein;
-  }
-}());
-
diff --git a/signaling_server/service/node_modules/express/node_modules/fast-levenshtein/package.json b/signaling_server/service/node_modules/express/node_modules/fast-levenshtein/package.json
deleted file mode 100644 (file)
index ec5fcf6..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "_from": "fast-levenshtein@~1.0.0",
-  "_id": "fast-levenshtein@1.0.7",
-  "_inBundle": false,
-  "_integrity": "sha1-AXjc3uAjuSkFGTrwlZ6KdjnP3Lk=",
-  "_location": "/fast-levenshtein",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "fast-levenshtein@~1.0.0",
-    "name": "fast-levenshtein",
-    "escapedName": "fast-levenshtein",
-    "rawSpec": "~1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "~1.0.0"
-  },
-  "_requiredBy": [
-    "/grunt-eslint/optionator",
-    "/optionator"
-  ],
-  "_resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz",
-  "_shasum": "0178dcdee023b92905193af0959e8a7639cfdcb9",
-  "_spec": "fast-levenshtein@~1.0.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/optionator",
-  "author": {
-    "name": "Ramesh Nair",
-    "email": "ram@hiddentao.com",
-    "url": "http://www.hiddentao.com/"
-  },
-  "bugs": {
-    "url": "https://github.com/hiddentao/fast-levenshtein/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Efficient implementation of Levenshtein algorithm with asynchronous callback support",
-  "devDependencies": {
-    "chai": "~1.5.0",
-    "grunt": "~0.4.1",
-    "grunt-benchmark": "~0.2.0",
-    "grunt-contrib-jshint": "~0.4.3",
-    "grunt-contrib-uglify": "~0.2.0",
-    "grunt-mocha-test": "~0.2.2",
-    "grunt-npm-install": "~0.1.0",
-    "load-grunt-tasks": "~0.6.0",
-    "lodash": "~1.2.0",
-    "mocha": "~1.9.0"
-  },
-  "files": [
-    "levenshtein.js"
-  ],
-  "homepage": "https://github.com/hiddentao/fast-levenshtein#readme",
-  "keywords": [
-    "levenshtein",
-    "distance",
-    "string"
-  ],
-  "license": "MIT",
-  "main": "levenshtein.js",
-  "name": "fast-levenshtein",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/hiddentao/fast-levenshtein.git"
-  },
-  "scripts": {
-    "benchmark": "grunt benchmark",
-    "build": "grunt build"
-  },
-  "version": "1.0.7"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/package.json b/signaling_server/service/node_modules/express/node_modules/finalhandler/node_modules/debug/package.json
deleted file mode 100644 (file)
index 1f7e10a..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-  "_from": "debug@2.6.9",
-  "_id": "debug@2.6.9",
-  "_inBundle": false,
-  "_integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-  "_location": "/finalhandler/debug",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "debug@2.6.9",
-    "name": "debug",
-    "escapedName": "debug",
-    "rawSpec": "2.6.9",
-    "saveSpec": null,
-    "fetchSpec": "2.6.9"
-  },
-  "_requiredBy": [
-    "/finalhandler"
-  ],
-  "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-  "_shasum": "5d128515df134ff327e90a4c93f4e077a536341f",
-  "_spec": "debug@2.6.9",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/finalhandler",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca"
-  },
-  "browser": "./src/browser.js",
-  "bugs": {
-    "url": "https://github.com/visionmedia/debug/issues"
-  },
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "debug/index.js": "browser.js",
-      "debug/debug.js": "debug.js"
-    }
-  },
-  "contributors": [
-    {
-      "name": "Nathan Rajlich",
-      "email": "nathan@tootallnate.net",
-      "url": "http://n8.io"
-    },
-    {
-      "name": "Andrew Rhyne",
-      "email": "rhyneandrew@gmail.com"
-    }
-  ],
-  "dependencies": {
-    "ms": "2.0.0"
-  },
-  "deprecated": false,
-  "description": "small debugging utility",
-  "devDependencies": {
-    "browserify": "9.0.3",
-    "chai": "^3.5.0",
-    "concurrently": "^3.1.0",
-    "coveralls": "^2.11.15",
-    "eslint": "^3.12.1",
-    "istanbul": "^0.4.5",
-    "karma": "^1.3.0",
-    "karma-chai": "^0.1.0",
-    "karma-mocha": "^1.3.0",
-    "karma-phantomjs-launcher": "^1.0.2",
-    "karma-sinon": "^1.0.5",
-    "mocha": "^3.2.0",
-    "mocha-lcov-reporter": "^1.2.0",
-    "rimraf": "^2.5.4",
-    "sinon": "^1.17.6",
-    "sinon-chai": "^2.8.0"
-  },
-  "homepage": "https://github.com/visionmedia/debug#readme",
-  "keywords": [
-    "debug",
-    "log",
-    "debugger"
-  ],
-  "license": "MIT",
-  "main": "./src/index.js",
-  "name": "debug",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/visionmedia/debug.git"
-  },
-  "version": "2.6.9"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/finalhandler/package.json b/signaling_server/service/node_modules/express/node_modules/finalhandler/package.json
deleted file mode 100644 (file)
index d3cc5f3..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "_from": "finalhandler@~1.1.2",
-  "_id": "finalhandler@1.1.2",
-  "_inBundle": false,
-  "_integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
-  "_location": "/finalhandler",
-  "_phantomChildren": {
-    "ms": "2.0.0"
-  },
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "finalhandler@~1.1.2",
-    "name": "finalhandler",
-    "escapedName": "finalhandler",
-    "rawSpec": "~1.1.2",
-    "saveSpec": null,
-    "fetchSpec": "~1.1.2"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
-  "_shasum": "b7e7d000ffd11938d0fdb053506f6ebabe9f587d",
-  "_spec": "finalhandler@~1.1.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "bugs": {
-    "url": "https://github.com/pillarjs/finalhandler/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "debug": "2.6.9",
-    "encodeurl": "~1.0.2",
-    "escape-html": "~1.0.3",
-    "on-finished": "~2.3.0",
-    "parseurl": "~1.3.3",
-    "statuses": "~1.5.0",
-    "unpipe": "~1.0.0"
-  },
-  "deprecated": false,
-  "description": "Node.js final http responder",
-  "devDependencies": {
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.2",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "istanbul": "0.4.5",
-    "mocha": "6.1.4",
-    "readable-stream": "2.3.6",
-    "safe-buffer": "5.1.2",
-    "supertest": "4.0.2"
-  },
-  "engines": {
-    "node": ">= 0.8"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/pillarjs/finalhandler#readme",
-  "license": "MIT",
-  "name": "finalhandler",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/pillarjs/finalhandler.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
-  },
-  "version": "1.1.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/forwarded/package.json b/signaling_server/service/node_modules/express/node_modules/forwarded/package.json
deleted file mode 100644 (file)
index 47bca3e..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "_from": "forwarded@~0.1.2",
-  "_id": "forwarded@0.1.2",
-  "_inBundle": false,
-  "_integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
-  "_location": "/forwarded",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "forwarded@~0.1.2",
-    "name": "forwarded",
-    "escapedName": "forwarded",
-    "rawSpec": "~0.1.2",
-    "saveSpec": null,
-    "fetchSpec": "~0.1.2"
-  },
-  "_requiredBy": [
-    "/proxy-addr"
-  ],
-  "_resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
-  "_shasum": "98c23dab1175657b8c0573e8ceccd91b0ff18c84",
-  "_spec": "forwarded@~0.1.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/proxy-addr",
-  "bugs": {
-    "url": "https://github.com/jshttp/forwarded/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "Parse HTTP X-Forwarded-For header",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "2.1.4",
-    "eslint": "3.19.0",
-    "eslint-config-standard": "10.2.1",
-    "eslint-plugin-import": "2.7.0",
-    "eslint-plugin-node": "5.1.1",
-    "eslint-plugin-promise": "3.5.0",
-    "eslint-plugin-standard": "3.0.1",
-    "istanbul": "0.4.5",
-    "mocha": "1.21.5"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/forwarded#readme",
-  "keywords": [
-    "x-forwarded-for",
-    "http",
-    "req"
-  ],
-  "license": "MIT",
-  "name": "forwarded",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/forwarded.git"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js",
-    "lint": "eslint .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "0.1.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/fresh/package.json b/signaling_server/service/node_modules/express/node_modules/fresh/package.json
deleted file mode 100644 (file)
index d6ecc38..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-{
-  "_from": "fresh@0.5.2",
-  "_id": "fresh@0.5.2",
-  "_inBundle": false,
-  "_integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
-  "_location": "/fresh",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "fresh@0.5.2",
-    "name": "fresh",
-    "escapedName": "fresh",
-    "rawSpec": "0.5.2",
-    "saveSpec": null,
-    "fetchSpec": "0.5.2"
-  },
-  "_requiredBy": [
-    "/express",
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-  "_shasum": "3d8cadd90d976569fa835ab1f8e4b23a105605a7",
-  "_spec": "fresh@0.5.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca",
-    "url": "http://tjholowaychuk.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/fresh/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "HTTP response freshness testing",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "2.1.4",
-    "eslint": "3.19.0",
-    "eslint-config-standard": "10.2.1",
-    "eslint-plugin-import": "2.7.0",
-    "eslint-plugin-markdown": "1.0.0-beta.6",
-    "eslint-plugin-node": "5.1.1",
-    "eslint-plugin-promise": "3.5.0",
-    "eslint-plugin-standard": "3.0.1",
-    "istanbul": "0.4.5",
-    "mocha": "1.21.5"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/fresh#readme",
-  "keywords": [
-    "fresh",
-    "http",
-    "conditional",
-    "cache"
-  ],
-  "license": "MIT",
-  "name": "fresh",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/fresh.git"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js",
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "0.5.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/http-errors/package.json b/signaling_server/service/node_modules/express/node_modules/http-errors/package.json
deleted file mode 100644 (file)
index 4f50978..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "_from": "http-errors@1.7.2",
-  "_id": "http-errors@1.7.2",
-  "_inBundle": false,
-  "_integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
-  "_location": "/http-errors",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "http-errors@1.7.2",
-    "name": "http-errors",
-    "escapedName": "http-errors",
-    "rawSpec": "1.7.2",
-    "saveSpec": null,
-    "fetchSpec": "1.7.2"
-  },
-  "_requiredBy": [
-    "/body-parser",
-    "/raw-body",
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
-  "_shasum": "4f5029cf13239f31036e5b2e55292bcfbcc85c8f",
-  "_spec": "http-errors@1.7.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/body-parser",
-  "author": {
-    "name": "Jonathan Ong",
-    "email": "me@jongleberry.com",
-    "url": "http://jongleberry.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/http-errors/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Alan Plum",
-      "email": "me@pluma.io"
-    },
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    }
-  ],
-  "dependencies": {
-    "depd": "~1.1.2",
-    "inherits": "2.0.3",
-    "setprototypeof": "1.1.1",
-    "statuses": ">= 1.5.0 < 2",
-    "toidentifier": "1.0.0"
-  },
-  "deprecated": false,
-  "description": "Create HTTP error objects",
-  "devDependencies": {
-    "eslint": "5.13.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.16.0",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "7.0.1",
-    "eslint-plugin-promise": "4.0.1",
-    "eslint-plugin-standard": "4.0.0",
-    "istanbul": "0.4.5",
-    "mocha": "5.2.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "index.js",
-    "HISTORY.md",
-    "LICENSE",
-    "README.md"
-  ],
-  "homepage": "https://github.com/jshttp/http-errors#readme",
-  "keywords": [
-    "http",
-    "error"
-  ],
-  "license": "MIT",
-  "name": "http-errors",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/http-errors.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md . && node ./scripts/lint-readme-list.js",
-    "test": "mocha --reporter spec --bail",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot"
-  },
-  "version": "1.7.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/iconv-lite/package.json b/signaling_server/service/node_modules/express/node_modules/iconv-lite/package.json
deleted file mode 100644 (file)
index e7cc3a6..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "_from": "iconv-lite@0.4.24",
-  "_id": "iconv-lite@0.4.24",
-  "_inBundle": false,
-  "_integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-  "_location": "/iconv-lite",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "iconv-lite@0.4.24",
-    "name": "iconv-lite",
-    "escapedName": "iconv-lite",
-    "rawSpec": "0.4.24",
-    "saveSpec": null,
-    "fetchSpec": "0.4.24"
-  },
-  "_requiredBy": [
-    "/body-parser",
-    "/grunt",
-    "/raw-body"
-  ],
-  "_resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-  "_shasum": "2022b4b25fbddc21d2f524974a474aafe733908b",
-  "_spec": "iconv-lite@0.4.24",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/body-parser",
-  "author": {
-    "name": "Alexander Shtuchkin",
-    "email": "ashtuchkin@gmail.com"
-  },
-  "browser": {
-    "./lib/extend-node": false,
-    "./lib/streams": false
-  },
-  "bugs": {
-    "url": "https://github.com/ashtuchkin/iconv-lite/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "safer-buffer": ">= 2.1.2 < 3"
-  },
-  "deprecated": false,
-  "description": "Convert character encodings in pure javascript.",
-  "devDependencies": {
-    "async": "*",
-    "errto": "*",
-    "iconv": "*",
-    "istanbul": "*",
-    "mocha": "^3.1.0",
-    "request": "~2.87.0",
-    "semver": "*",
-    "unorm": "*"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "homepage": "https://github.com/ashtuchkin/iconv-lite",
-  "keywords": [
-    "iconv",
-    "convert",
-    "charset",
-    "icu"
-  ],
-  "license": "MIT",
-  "main": "./lib/index.js",
-  "name": "iconv-lite",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/ashtuchkin/iconv-lite.git"
-  },
-  "scripts": {
-    "coverage": "istanbul cover _mocha -- --grep .",
-    "coverage-open": "open coverage/lcov-report/index.html",
-    "test": "mocha --reporter spec --grep ."
-  },
-  "typings": "./lib/index.d.ts",
-  "version": "0.4.24"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/inherits/package.json b/signaling_server/service/node_modules/express/node_modules/inherits/package.json
deleted file mode 100644 (file)
index f4a2d57..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-{
-  "_from": "inherits@2.0.3",
-  "_id": "inherits@2.0.3",
-  "_inBundle": false,
-  "_integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-  "_location": "/inherits",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "inherits@2.0.3",
-    "name": "inherits",
-    "escapedName": "inherits",
-    "rawSpec": "2.0.3",
-    "saveSpec": null,
-    "fetchSpec": "2.0.3"
-  },
-  "_requiredBy": [
-    "/are-we-there-yet/readable-stream",
-    "/block-stream",
-    "/browserify-aes",
-    "/chokidar",
-    "/concat-stream",
-    "/concat-stream/readable-stream",
-    "/eslint/glob",
-    "/flat-cache/glob",
-    "/fstream",
-    "/glob",
-    "/globule/glob",
-    "/grunt/glob",
-    "/grunt/rimraf/glob",
-    "/http-errors",
-    "/memory-fs/readable-stream",
-    "/mocha/glob",
-    "/node-gyp/glob",
-    "/node-libs-browser/readable-stream",
-    "/node-sass/glob",
-    "/readable-stream",
-    "/readdirp/readable-stream",
-    "/rimraf/glob",
-    "/sass-graph/glob",
-    "/shelljs/glob",
-    "/stream-browserify",
-    "/stream-browserify/readable-stream",
-    "/stream-http",
-    "/stream-http/readable-stream",
-    "/tar",
-    "/util",
-    "/webpack-load-plugins/glob"
-  ],
-  "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-  "_shasum": "633c2c83e3da42a502f52466022480f4208261de",
-  "_spec": "inherits@2.0.3",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/http-errors",
-  "browser": "./inherits_browser.js",
-  "bugs": {
-    "url": "https://github.com/isaacs/inherits/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
-  "devDependencies": {
-    "tap": "^7.1.0"
-  },
-  "files": [
-    "inherits.js",
-    "inherits_browser.js"
-  ],
-  "homepage": "https://github.com/isaacs/inherits#readme",
-  "keywords": [
-    "inheritance",
-    "class",
-    "klass",
-    "oop",
-    "object-oriented",
-    "inherits",
-    "browser",
-    "browserify"
-  ],
-  "license": "ISC",
-  "main": "./inherits.js",
-  "name": "inherits",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/inherits.git"
-  },
-  "scripts": {
-    "test": "node test"
-  },
-  "version": "2.0.3"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/ipaddr.js/README.md b/signaling_server/service/node_modules/express/node_modules/ipaddr.js/README.md
deleted file mode 100644 (file)
index 6876a3b..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-# ipaddr.js — an IPv6 and IPv4 address manipulation library [![Build Status](https://travis-ci.org/whitequark/ipaddr.js.svg)](https://travis-ci.org/whitequark/ipaddr.js)
-
-ipaddr.js is a small (1.9K minified and gzipped) library for manipulating
-IP addresses in JavaScript environments. It runs on both CommonJS runtimes
-(e.g. [nodejs]) and in a web browser.
-
-ipaddr.js allows you to verify and parse string representation of an IP
-address, match it against a CIDR range or range list, determine if it falls
-into some reserved ranges (examples include loopback and private ranges),
-and convert between IPv4 and IPv4-mapped IPv6 addresses.
-
-[nodejs]: http://nodejs.org
-
-## Installation
-
-`npm install ipaddr.js`
-
-or
-
-`bower install ipaddr.js`
-
-## API
-
-ipaddr.js defines one object in the global scope: `ipaddr`. In CommonJS,
-it is exported from the module:
-
-```js
-var ipaddr = require('ipaddr.js');
-```
-
-The API consists of several global methods and two classes: ipaddr.IPv6 and ipaddr.IPv4.
-
-### Global methods
-
-There are three global methods defined: `ipaddr.isValid`, `ipaddr.parse` and
-`ipaddr.process`. All of them receive a string as a single parameter.
-
-The `ipaddr.isValid` method returns `true` if the address is a valid IPv4 or
-IPv6 address, and `false` otherwise. It does not throw any exceptions.
-
-The `ipaddr.parse` method returns an object representing the IP address,
-or throws an `Error` if the passed string is not a valid representation of an
-IP address.
-
-The `ipaddr.process` method works just like the `ipaddr.parse` one, but it
-automatically converts IPv4-mapped IPv6 addresses to their IPv4 counterparts
-before returning. It is useful when you have a Node.js instance listening
-on an IPv6 socket, and the `net.ivp6.bindv6only` sysctl parameter (or its
-equivalent on non-Linux OS) is set to 0. In this case, you can accept IPv4
-connections on your IPv6-only socket, but the remote address will be mangled.
-Use `ipaddr.process` method to automatically demangle it.
-
-### Object representation
-
-Parsing methods return an object which descends from `ipaddr.IPv6` or
-`ipaddr.IPv4`. These objects share some properties, but most of them differ.
-
-#### Shared properties
-
-One can determine the type of address by calling `addr.kind()`. It will return
-either `"ipv6"` or `"ipv4"`.
-
-An address can be converted back to its string representation with `addr.toString()`.
-Note that this method:
- * does not return the original string used to create the object (in fact, there is
-   no way of getting that string)
- * returns a compact representation (when it is applicable)
-
-A `match(range, bits)` method can be used to check if the address falls into a
-certain CIDR range.
-Note that an address can be (obviously) matched only against an address of the same type.
-
-For example:
-
-```js
-var addr = ipaddr.parse("2001:db8:1234::1");
-var range = ipaddr.parse("2001:db8::");
-
-addr.match(range, 32); // => true
-```
-
-Alternatively, `match` can also be called as `match([range, bits])`. In this way,
-it can be used together with the `parseCIDR(string)` method, which parses an IP
-address together with a CIDR range.
-
-For example:
-
-```js
-var addr = ipaddr.parse("2001:db8:1234::1");
-
-addr.match(ipaddr.parseCIDR("2001:db8::/32")); // => true
-```
-
-A `range()` method returns one of predefined names for several special ranges defined
-by IP protocols. The exact names (and their respective CIDR ranges) can be looked up
-in the source: [IPv6 ranges] and [IPv4 ranges]. Some common ones include `"unicast"`
-(the default one) and `"reserved"`.
-
-You can match against your own range list by using
-`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with a mix of IPv6 or IPv4 addresses, and accepts a name-to-subnet map as the range list. For example:
-
-```js
-var rangeList = {
-  documentationOnly: [ ipaddr.parse('2001:db8::'), 32 ],
-  tunnelProviders: [
-    [ ipaddr.parse('2001:470::'), 32 ], // he.net
-    [ ipaddr.parse('2001:5c0::'), 32 ]  // freenet6
-  ]
-};
-ipaddr.subnetMatch(ipaddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => "tunnelProviders"
-```
-
-The addresses can be converted to their byte representation with `toByteArray()`.
-(Actually, JavaScript mostly does not know about byte buffers. They are emulated with
-arrays of numbers, each in range of 0..255.)
-
-```js
-var bytes = ipaddr.parse('2a00:1450:8007::68').toByteArray(); // ipv6.google.com
-bytes // => [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, <zeroes...>, 0x00, 0x68 ]
-```
-
-The `ipaddr.IPv4` and `ipaddr.IPv6` objects have some methods defined, too. All of them
-have the same interface for both protocols, and are similar to global methods.
-
-`ipaddr.IPvX.isValid(string)` can be used to check if the string is a valid address
-for particular protocol, and `ipaddr.IPvX.parse(string)` is the error-throwing parser.
-
-`ipaddr.IPvX.isValid(string)` uses the same format for parsing as the POSIX `inet_ntoa` function, which accepts unusual formats like `0xc0.168.1.1` or `0x10000000`. The function `ipaddr.IPv4.isValidFourPartDecimal(string)` validates the IPv4 address and also ensures that it is written in four-part decimal format.
-
-[IPv6 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L186
-[IPv4 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L71
-
-#### IPv6 properties
-
-Sometimes you will want to convert IPv6 not to a compact string representation (with
-the `::` substitution); the `toNormalizedString()` method will return an address where
-all zeroes are explicit.
-
-For example:
-
-```js
-var addr = ipaddr.parse("2001:0db8::0001");
-addr.toString(); // => "2001:db8::1"
-addr.toNormalizedString(); // => "2001:db8:0:0:0:0:0:1"
-```
-
-The `isIPv4MappedAddress()` method will return `true` if this address is an IPv4-mapped
-one, and `toIPv4Address()` will return an IPv4 object address.
-
-To access the underlying binary representation of the address, use `addr.parts`.
-
-```js
-var addr = ipaddr.parse("2001:db8:10::1234:DEAD");
-addr.parts // => [0x2001, 0xdb8, 0x10, 0, 0, 0, 0x1234, 0xdead]
-```
-
-A IPv6 zone index can be accessed via `addr.zoneId`:
-
-```js
-var addr = ipaddr.parse("2001:db8::%eth0");
-addr.zoneId // => 'eth0'
-```
-
-#### IPv4 properties
-
-`toIPv4MappedAddress()` will return a corresponding IPv4-mapped IPv6 address.
-
-To access the underlying representation of the address, use `addr.octets`.
-
-```js
-var addr = ipaddr.parse("192.168.1.1");
-addr.octets // => [192, 168, 1, 1]
-```
-
-`prefixLengthFromSubnetMask()` will return a CIDR prefix length for a valid IPv4 netmask or
-false if the netmask is not valid.
-
-```js
-ipaddr.IPv4.parse('255.255.255.240').prefixLengthFromSubnetMask() == 28
-ipaddr.IPv4.parse('255.192.164.0').prefixLengthFromSubnetMask()  == null
-```
-
-`subnetMaskFromPrefixLength()` will return an IPv4 netmask for a valid CIDR prefix length.
-
-```js
-ipaddr.IPv4.subnetMaskFromPrefixLength(24) == "255.255.255.0"
-ipaddr.IPv4.subnetMaskFromPrefixLength(29) == "255.255.255.248"
-```
-
-`broadcastAddressFromCIDR()` will return the broadcast address for a given IPv4 interface and netmask in CIDR notation.
-```js
-ipaddr.IPv4.broadcastAddressFromCIDR("172.0.0.1/24") == "172.0.0.255"
-```
-`networkAddressFromCIDR()` will return the network address for a given IPv4 interface and netmask in CIDR notation.
-```js
-ipaddr.IPv4.networkAddressFromCIDR("172.0.0.1/24") == "172.0.0.0"
-```
-
-#### Conversion
-
-IPv4 and IPv6 can be converted bidirectionally to and from network byte order (MSB) byte arrays.
-
-The `fromByteArray()` method will take an array and create an appropriate IPv4 or IPv6 object
-if the input satisfies the requirements. For IPv4 it has to be an array of four 8-bit values,
-while for IPv6 it has to be an array of sixteen 8-bit values.
-
-For example:
-```js
-var addr = ipaddr.fromByteArray([0x7f, 0, 0, 1]);
-addr.toString(); // => "127.0.0.1"
-```
-
-or
-
-```js
-var addr = ipaddr.fromByteArray([0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
-addr.toString(); // => "2001:db8::1"
-```
-
-Both objects also offer a `toByteArray()` method, which returns an array in network byte order (MSB).
-
-For example:
-```js
-var addr = ipaddr.parse("127.0.0.1");
-addr.toByteArray(); // => [0x7f, 0, 0, 1]
-```
-
-or
-
-```js
-var addr = ipaddr.parse("2001:db8::1");
-addr.toByteArray(); // => [0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
-```
diff --git a/signaling_server/service/node_modules/express/node_modules/ipaddr.js/lib/ipaddr.js.d.ts b/signaling_server/service/node_modules/express/node_modules/ipaddr.js/lib/ipaddr.js.d.ts
deleted file mode 100644 (file)
index ef01ac4..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-declare module "ipaddr.js" {
-
-    type IPv4Range = 'unicast' | 'unspecified' | 'broadcast' | 'multicast' | 'linkLocal' | 'loopback' | 'carrierGradeNat' | 'private' | 'reserved';
-    type IPv6Range = 'unicast' | 'unspecified' | 'linkLocal' | 'multicast' | 'loopback' | 'uniqueLocal' | 'ipv4Mapped' | 'rfc6145' | 'rfc6052' | '6to4' | 'teredo' | 'reserved';
-
-    interface RangeList<T> {
-        [name: string]: [T, number] | [T, number][];
-    }
-
-
-    // Common methods/properties for IPv4 and IPv6 classes.
-    class IP {
-
-        prefixLengthFromSubnetMask(): number | false;
-        toByteArray(): number[];
-        toNormalizedString(): string;
-        toString(): string;
-    }
-
-    namespace Address {
-
-        export function isValid(addr: string): boolean;
-        export function fromByteArray(bytes: number[]): IPv4 | IPv6;
-        export function parse(addr: string): IPv4 | IPv6;
-        export function parseCIDR(mask: string): [IPv4 | IPv6, number];
-        export function process(address: string): IPv4 | IPv6;
-        export function subnetMatch(addr: IPv4, rangeList: RangeList<IPv4>, defaultName?: string): string;
-        export function subnetMatch(addr: IPv6, rangeList: RangeList<IPv6>, defaultName?: string): string;
-
-        export class IPv4 extends IP {
-            static broadcastAddressFromCIDR(addr: string): IPv4;
-            static isIPv4(addr: string): boolean;
-            static isValidFourPartDecimal(addr: string): boolean;
-            static isValid(addr: string): boolean;
-            static networkAddressFromCIDR(addr: string): IPv4;
-            static parse(addr: string): IPv4;
-            static parseCIDR(addr: string): [IPv4, number];
-            static subnetMaskFromPrefixLength(prefix: number): IPv4;
-            constructor(octets: number[]);
-
-            kind(): 'ipv4';
-            match(addr: IPv4, bits: number): boolean;
-            match(mask: [IPv4, number]): boolean;
-            range(): IPv4Range;
-            subnetMatch(rangeList: RangeList<IPv4>, defaultName?: string): string;
-            toIPv4MappedAddress(): IPv6;
-        }
-
-        export class IPv6 extends IP {
-            static broadcastAddressFromCIDR(addr: string): IPv6;
-            static isIPv6(addr: string): boolean;
-            static isValid(addr: string): boolean;
-            static parse(addr: string): IPv6;
-            static parseCIDR(addr: string): [IPv6, number];
-            static subnetMaskFromPrefixLength(prefix: number): IPv6;
-            constructor(octets: number[]);
-
-            isIPv4MappedAddress(): boolean;
-            kind(): 'ipv6';
-            match(addr: IPv6, bits: number): boolean;
-            match(mask: [IPv6, number]): boolean;
-            range(): IPv6Range;
-            subnetMatch(rangeList: RangeList<IPv6>, defaultName?: string): string;
-            toIPv4Address(): IPv4;
-        }
-    }
-
-    export = Address;
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/ipaddr.js/package.json b/signaling_server/service/node_modules/express/node_modules/ipaddr.js/package.json
deleted file mode 100644 (file)
index ee06b8e..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "_from": "ipaddr.js@1.9.0",
-  "_id": "ipaddr.js@1.9.0",
-  "_inBundle": false,
-  "_integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
-  "_location": "/ipaddr.js",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "ipaddr.js@1.9.0",
-    "name": "ipaddr.js",
-    "escapedName": "ipaddr.js",
-    "rawSpec": "1.9.0",
-    "saveSpec": null,
-    "fetchSpec": "1.9.0"
-  },
-  "_requiredBy": [
-    "/native-dns-packet",
-    "/proxy-addr"
-  ],
-  "_resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
-  "_shasum": "37df74e430a0e47550fe54a2defe30d8acd95f65",
-  "_spec": "ipaddr.js@1.9.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/proxy-addr",
-  "author": {
-    "name": "whitequark",
-    "email": "whitequark@whitequark.org"
-  },
-  "bugs": {
-    "url": "https://github.com/whitequark/ipaddr.js/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "A library for manipulating IPv4 and IPv6 addresses in JavaScript.",
-  "devDependencies": {
-    "coffee-script": "~1.12.6",
-    "nodeunit": ">=0.8.2 <0.8.7",
-    "uglify-js": "~3.0.19"
-  },
-  "directories": {
-    "lib": "./lib"
-  },
-  "engines": {
-    "node": ">= 0.10"
-  },
-  "files": [
-    "lib/",
-    "ipaddr.min.js"
-  ],
-  "homepage": "https://github.com/whitequark/ipaddr.js#readme",
-  "keywords": [
-    "ip",
-    "ipv4",
-    "ipv6"
-  ],
-  "license": "MIT",
-  "main": "./lib/ipaddr.js",
-  "name": "ipaddr.js",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/whitequark/ipaddr.js.git"
-  },
-  "scripts": {
-    "test": "cake build test"
-  },
-  "types": "./lib/ipaddr.js.d.ts",
-  "version": "1.9.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/levn/LICENSE b/signaling_server/service/node_modules/express/node_modules/levn/LICENSE
deleted file mode 100644 (file)
index 525b118..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) George Zahariev
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/levn/README.md b/signaling_server/service/node_modules/express/node_modules/levn/README.md
deleted file mode 100644 (file)
index e55d943..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-# levn [![Build Status](https://travis-ci.org/gkz/levn.png)](https://travis-ci.org/gkz/levn) <a name="levn" />
-__Light ECMAScript (JavaScript) Value Notation__
-Levn is a library which allows you to parse a string into a JavaScript value based on an expected type. It is meant for short amounts of human entered data (eg. config files, command line arguments).
-
-Levn aims to concisely describe JavaScript values in text, and allow for the extraction and validation of those values. Levn uses [type-check](https://github.com/gkz/type-check) for its type format, and to validate the results. MIT license. Version 0.2.5.
-
-__How is this different than JSON?__ levn is meant to be written by humans only, is (due to the previous point) much more concise, can be validated against supplied types, has regex and date literals, and can easily be extended with custom types. On the other hand, it is probably slower and thus less efficient at transporting large amounts of data, which is fine since this is not its purpose.
-
-    npm install levn
-
-For updates on levn, [follow me on twitter](https://twitter.com/gkzahariev).
-
-
-## Quick Examples
-
-```js
-var parse = require('levn').parse;
-parse('Number', '2');      // 2
-parse('String', '2');      // '2'
-parse('String', 'levn');   // 'levn'
-parse('String', 'a b');    // 'a b'
-parse('Boolean', 'true');  // true
-
-parse('Date', '#2011-11-11#'); // (Date object)
-parse('Date', '2011-11-11');   // (Date object)
-parse('RegExp', '/[a-z]/gi');  // /[a-z]/gi
-parse('RegExp', 're');         // /re/
-
-parse('Number | String', 'str'); // 'str'
-parse('Number | String', '2');   // 2
-
-parse('[Number]', '[1,2,3]');                      // [1,2,3]
-parse('(String, Boolean)', '(hi, false)');         // ['hi', false]
-parse('{a: String, b: Number}', '{a: str, b: 2}'); // {a: 'str', b: 2}
-
-// at the top level, you can ommit surrounding delimiters
-parse('[Number]', '1,2,3');                      // [1,2,3]
-parse('(String, Boolean)', 'hi, false');         // ['hi', false]
-parse('{a: String, b: Number}', 'a: str, b: 2'); // {a: 'str', b: 2}
-
-// wildcard - auto choose type
-parse('*', '[hi,(null,[42]),{k: true}]'); // ['hi', [null, [42]], {k: true}]
-```
-## Usage
-
-`require('levn');` returns an object that exposes three properties. `VERSION` is the current version of the library as a string. `parse` and `parsedTypeParse` are functions.
-
-```js
-// parse(type, input, options);
-parse('[Number]', '1,2,3'); // [1, 2, 3]
-
-// parsedTypeParse(parsedType, input, options);
-var parsedType = require('type-check').parseType('[Number]');
-parsedTypeParse(parsedType, '1,2,3'); // [1, 2, 3]
-```
-
-### parse(type, input, options)
-
-`parse` casts the string `input` into a JavaScript value according to the specified `type` in the [type format](https://github.com/gkz/type-check#type-format) (and taking account the optional `options`) and returns the resulting JavaScript value.
-
-##### arguments
-* type - `String` - the type written in the [type format](https://github.com/gkz/type-check#type-format) which to check against
-* input - `String` - the value written in the [levn format](#levn-format)
-* options - `Maybe Object` - an optional parameter specifying additional [options](#options)
-
-##### returns
-`*` - the resulting JavaScript value
-
-##### example
-```js
-parse('[Number]', '1,2,3'); // [1, 2, 3]
-```
-
-### parsedTypeParse(parsedType, input, options)
-
-`parsedTypeParse` casts the string `input` into a JavaScript value according to the specified `type` which has already been parsed (and taking account the optional `options`) and returns the resulting JavaScript value. You can parse a type using the [type-check](https://github.com/gkz/type-check) library's `parseType` function.
-
-##### arguments
-* type - `Object` - the type in the parsed type format which to check against
-* input - `String` - the value written in the [levn format](#levn-format)
-* options - `Maybe Object` - an optional parameter specifying additional [options](#options)
-
-##### returns
-`*` - the resulting JavaScript value
-
-##### example
-```js
-var parsedType = require('type-check').parseType('[Number]');
-parsedTypeParse(parsedType, '1,2,3'); // [1, 2, 3]
-```
-
-## Levn Format
-
-Levn can use the type information you provide to choose the appropriate value to produce from the input. For the same input, it will choose a different output value depending on the type provided. For example, `parse('Number', '2')` will produce the number `2`, but `parse('String', '2')` will produce the string `"2"`.
-
-If you do not provide type information, and simply use `*`, levn will parse the input according the unambiguous "explicit" mode, which we will now detail - you can also set the `explicit` option to true manually in the [options](#options).
-
-* `"string"`, `'string'` are parsed as a String, eg. `"a msg"` is `"a msg"`
-* `#date#` is parsed as a Date, eg. `#2011-11-11#` is `new Date('2011-11-11')`
-* `/regexp/flags` is parsed as a RegExp, eg. `/re/gi` is `/re/gi`
-* `undefined`, `null`, `NaN`, `true`, and `false` are all their JavaScript equivalents
-* `[element1, element2, etc]` is an Array, and the casting procedure is recursively applied to each element. Eg. `[1,2,3]` is `[1,2,3]`.
-* `(element1, element2, etc)` is an tuple, and the casting procedure is recursively applied to each element. Eg. `(1, a)` is `(1, a)` (is `[1, 'a']`).
-* `{key1: val1, key2: val2, ...}` is an Object, and the casting procedure is recursively applied to each property. Eg. `{a: 1, b: 2}` is `{a: 1, b: 2}`.
-* Any test which does not fall under the above, and which does not contain special characters (`[``]``(``)``{``}``:``,`) is a string, eg. `$12- blah` is `"$12- blah"`.
-
-If you do provide type information, you can make your input more concise as the program already has some information about what it expects. Please see the [type format](https://github.com/gkz/type-check#type-format) section of [type-check](https://github.com/gkz/type-check) for more information about how to specify types. There are some rules about what levn can do with the information:
-
-* If a String is expected, and only a String, all characters of the input (including any special ones) will become part of the output. Eg. `[({})]` is `"[({})]"`, and `"hi"` is `'"hi"'`.
-* If a Date is expected, the surrounding `#` can be omitted from date literals. Eg. `2011-11-11` is `new Date('2011-11-11')`.
-* If a RegExp is expected, no flags need to be specified, and the regex is not using any of the special characters,the opening and closing `/` can be omitted - this will have the affect of setting the source of the regex to the input. Eg. `regex` is `/regex/`.
-* If an Array is expected, and it is the root node (at the top level), the opening `[` and closing `]` can be omitted. Eg. `1,2,3` is `[1,2,3]`.
-* If a tuple is expected, and it is the root node (at the top level), the opening `(` and closing `)` can be omitted. Eg. `1, a` is `(1, a)` (is `[1, 'a']`).
-* If an Object is expected, and it is the root node (at the top level), the opening `{` and closing `}` can be omitted. Eg `a: 1, b: 2` is `{a: 1, b: 2}`.
-
-If you list multiple types (eg. `Number | String`), it will first attempt to cast to the first type and then validate - if the validation fails it will move on to the next type and so forth, left to right. You must be careful as some types will succeed with any input, such as String. Thus put String at the end of your list. In non-explicit mode, Date and RegExp will succeed with a large variety of input - also be careful with these and list them near the end if not last in your list.
-
-Whitespace between special characters and elements is inconsequential.
-
-## Options
-
-Options is an object. It is an optional parameter to the `parse` and `parsedTypeParse` functions.
-
-### Explicit
-
-A `Boolean`. By default it is `false`.
-
-__Example:__
-
-```js
-parse('RegExp', 're', {explicit: false});          // /re/
-parse('RegExp', 're', {explicit: true});           // Error: ... does not type check...
-parse('RegExp | String', 're', {explicit: true});  // 're'
-```
-
-`explicit` sets whether to be in explicit mode or not. Using `*` automatically activates explicit mode. For more information, read the [levn format](#levn-format) section.
-
-### customTypes
-
-An `Object`. Empty `{}` by default.
-
-__Example:__
-
-```js
-var options = {
-  customTypes: {
-    Even: {
-      typeOf: 'Number',
-      validate: function (x) {
-        return x % 2 === 0;
-      },
-      cast: function (x) {
-        return {type: 'Just', value: parseInt(x)};
-      }
-    }
-  }
-}
-parse('Even', '2', options); // 2
-parse('Even', '3', options); // Error: Value: "3" does not type check...
-```
-
-__Another Example:__
-```js
-function Person(name, age){
-  this.name = name;
-  this.age = age;
-}
-var options = {
-  customTypes: {
-    Person: {
-      typeOf: 'Object',
-      validate: function (x) {
-        x instanceof Person;
-      },
-      cast: function (value, options, typesCast) {
-        var name, age;
-        if ({}.toString.call(value).slice(8, -1) !== 'Object') {
-          return {type: 'Nothing'};
-        }
-        name = typesCast(value.name, [{type: 'String'}], options);
-        age = typesCast(value.age, [{type: 'Numger'}], options);
-        return {type: 'Just', value: new Person(name, age)};
-    }
-  }
-}
-parse('Person', '{name: Laura, age: 25}', options); // Person {name: 'Laura', age: 25}
-```
-
-`customTypes` is an object whose keys are the name of the types, and whose values are an object with three properties, `typeOf`, `validate`, and `cast`. For more information about `typeOf` and `validate`, please see the [custom types](https://github.com/gkz/type-check#custom-types) section of type-check.
-
-`cast` is a function which receives three arguments, the value under question, options, and the typesCast function. In `cast`, attempt to cast the value into the specified type. If you are successful, return an object in the format `{type: 'Just', value: CAST-VALUE}`, if you know it won't work, return `{type: 'Nothing'}`.  You can use the `typesCast` function to cast any child values. Remember to pass `options` to it. In your function you can also check for `options.explicit` and act accordingly.
-
-## Technical About
-
-`levn` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [type-check](https://github.com/gkz/type-check) to both parse types and validate values. It also uses the [prelude.ls](http://preludels.com/) library.
diff --git a/signaling_server/service/node_modules/express/node_modules/levn/lib/cast.js b/signaling_server/service/node_modules/express/node_modules/levn/lib/cast.js
deleted file mode 100644 (file)
index 2a6816f..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var parsedTypeCheck, types, toString$ = {}.toString;
-  parsedTypeCheck = require('type-check').parsedTypeCheck;
-  types = {
-    '*': function(value, options){
-      switch (toString$.call(value).slice(8, -1)) {
-      case 'Array':
-        return typeCast(value, {
-          type: 'Array'
-        }, options);
-      case 'Object':
-        return typeCast(value, {
-          type: 'Object'
-        }, options);
-      default:
-        return {
-          type: 'Just',
-          value: typesCast(value, [
-            {
-              type: 'Undefined'
-            }, {
-              type: 'Null'
-            }, {
-              type: 'NaN'
-            }, {
-              type: 'Boolean'
-            }, {
-              type: 'Number'
-            }, {
-              type: 'Date'
-            }, {
-              type: 'RegExp'
-            }, {
-              type: 'Array'
-            }, {
-              type: 'Object'
-            }, {
-              type: 'String'
-            }
-          ], (options.explicit = true, options))
-        };
-      }
-    },
-    Undefined: function(it){
-      if (it === 'undefined' || it === void 8) {
-        return {
-          type: 'Just',
-          value: void 8
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    Null: function(it){
-      if (it === 'null') {
-        return {
-          type: 'Just',
-          value: null
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    NaN: function(it){
-      if (it === 'NaN') {
-        return {
-          type: 'Just',
-          value: NaN
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    Boolean: function(it){
-      if (it === 'true') {
-        return {
-          type: 'Just',
-          value: true
-        };
-      } else if (it === 'false') {
-        return {
-          type: 'Just',
-          value: false
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    Number: function(it){
-      return {
-        type: 'Just',
-        value: +it
-      };
-    },
-    Int: function(it){
-      return {
-        type: 'Just',
-        value: parseInt(it)
-      };
-    },
-    Float: function(it){
-      return {
-        type: 'Just',
-        value: parseFloat(it)
-      };
-    },
-    Date: function(value, options){
-      var that;
-      if (that = /^\#([\s\S]*)\#$/.exec(value)) {
-        return {
-          type: 'Just',
-          value: new Date(+that[1] || that[1])
-        };
-      } else if (options.explicit) {
-        return {
-          type: 'Nothing'
-        };
-      } else {
-        return {
-          type: 'Just',
-          value: new Date(+value || value)
-        };
-      }
-    },
-    RegExp: function(value, options){
-      var that;
-      if (that = /^\/([\s\S]*)\/([gimy]*)$/.exec(value)) {
-        return {
-          type: 'Just',
-          value: new RegExp(that[1], that[2])
-        };
-      } else if (options.explicit) {
-        return {
-          type: 'Nothing'
-        };
-      } else {
-        return {
-          type: 'Just',
-          value: new RegExp(value)
-        };
-      }
-    },
-    Array: function(value, options){
-      return castArray(value, {
-        of: [{
-          type: '*'
-        }]
-      }, options);
-    },
-    Object: function(value, options){
-      return castFields(value, {
-        of: {}
-      }, options);
-    },
-    String: function(it){
-      var that;
-      if (toString$.call(it).slice(8, -1) !== 'String') {
-        return {
-          type: 'Nothing'
-        };
-      }
-      if (that = it.match(/^'([\s\S]*)'$/)) {
-        return {
-          type: 'Just',
-          value: that[1].replace(/\\'/g, "'")
-        };
-      } else if (that = it.match(/^"([\s\S]*)"$/)) {
-        return {
-          type: 'Just',
-          value: that[1].replace(/\\"/g, '"')
-        };
-      } else {
-        return {
-          type: 'Just',
-          value: it
-        };
-      }
-    }
-  };
-  function castArray(node, type, options){
-    var typeOf, element;
-    if (toString$.call(node).slice(8, -1) !== 'Array') {
-      return {
-        type: 'Nothing'
-      };
-    }
-    typeOf = type.of;
-    return {
-      type: 'Just',
-      value: (function(){
-        var i$, ref$, len$, results$ = [];
-        for (i$ = 0, len$ = (ref$ = node).length; i$ < len$; ++i$) {
-          element = ref$[i$];
-          results$.push(typesCast(element, typeOf, options));
-        }
-        return results$;
-      }())
-    };
-  }
-  function castTuple(node, type, options){
-    var result, i, i$, ref$, len$, types, cast;
-    if (toString$.call(node).slice(8, -1) !== 'Array') {
-      return {
-        type: 'Nothing'
-      };
-    }
-    result = [];
-    i = 0;
-    for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {
-      types = ref$[i$];
-      cast = typesCast(node[i], types, options);
-      if (toString$.call(cast).slice(8, -1) !== 'Undefined') {
-        result.push(cast);
-      }
-      i++;
-    }
-    if (node.length <= i) {
-      return {
-        type: 'Just',
-        value: result
-      };
-    } else {
-      return {
-        type: 'Nothing'
-      };
-    }
-  }
-  function castFields(node, type, options){
-    var typeOf, key, value;
-    if (toString$.call(node).slice(8, -1) !== 'Object') {
-      return {
-        type: 'Nothing'
-      };
-    }
-    typeOf = type.of;
-    return {
-      type: 'Just',
-      value: (function(){
-        var ref$, results$ = {};
-        for (key in ref$ = node) {
-          value = ref$[key];
-          results$[typesCast(key, [{
-            type: 'String'
-          }], options)] = typesCast(value, typeOf[key] || [{
-            type: '*'
-          }], options);
-        }
-        return results$;
-      }())
-    };
-  }
-  function typeCast(node, typeObj, options){
-    var type, structure, castFunc, ref$;
-    type = typeObj.type, structure = typeObj.structure;
-    if (type) {
-      castFunc = ((ref$ = options.customTypes[type]) != null ? ref$.cast : void 8) || types[type];
-      if (!castFunc) {
-        throw new Error("Type not defined: " + type + ".");
-      }
-      return castFunc(node, options, typesCast);
-    } else {
-      switch (structure) {
-      case 'array':
-        return castArray(node, typeObj, options);
-      case 'tuple':
-        return castTuple(node, typeObj, options);
-      case 'fields':
-        return castFields(node, typeObj, options);
-      }
-    }
-  }
-  function typesCast(node, types, options){
-    var i$, len$, type, ref$, valueType, value;
-    for (i$ = 0, len$ = types.length; i$ < len$; ++i$) {
-      type = types[i$];
-      ref$ = typeCast(node, type, options), valueType = ref$.type, value = ref$.value;
-      if (valueType === 'Nothing') {
-        continue;
-      }
-      if (parsedTypeCheck([type], value, {
-        customTypes: options.customTypes
-      })) {
-        return value;
-      }
-    }
-    throw new Error("Value " + JSON.stringify(node) + " does not type check against " + JSON.stringify(types) + ".");
-  }
-  module.exports = typesCast;
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/levn/lib/coerce.js b/signaling_server/service/node_modules/express/node_modules/levn/lib/coerce.js
deleted file mode 100644 (file)
index 027b6da..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var parsedTypeCheck, types, toString$ = {}.toString;
-  parsedTypeCheck = require('type-check').parsedTypeCheck;
-  types = {
-    '*': function(it){
-      switch (toString$.call(it).slice(8, -1)) {
-      case 'Array':
-        return coerceType(it, {
-          type: 'Array'
-        });
-      case 'Object':
-        return coerceType(it, {
-          type: 'Object'
-        });
-      default:
-        return {
-          type: 'Just',
-          value: coerceTypes(it, [
-            {
-              type: 'Undefined'
-            }, {
-              type: 'Null'
-            }, {
-              type: 'NaN'
-            }, {
-              type: 'Boolean'
-            }, {
-              type: 'Number'
-            }, {
-              type: 'Date'
-            }, {
-              type: 'RegExp'
-            }, {
-              type: 'Array'
-            }, {
-              type: 'Object'
-            }, {
-              type: 'String'
-            }
-          ], {
-            explicit: true
-          })
-        };
-      }
-    },
-    Undefined: function(it){
-      if (it === 'undefined' || it === void 8) {
-        return {
-          type: 'Just',
-          value: void 8
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    Null: function(it){
-      if (it === 'null') {
-        return {
-          type: 'Just',
-          value: null
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    NaN: function(it){
-      if (it === 'NaN') {
-        return {
-          type: 'Just',
-          value: NaN
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    Boolean: function(it){
-      if (it === 'true') {
-        return {
-          type: 'Just',
-          value: true
-        };
-      } else if (it === 'false') {
-        return {
-          type: 'Just',
-          value: false
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    Number: function(it){
-      return {
-        type: 'Just',
-        value: +it
-      };
-    },
-    Int: function(it){
-      return {
-        type: 'Just',
-        value: parseInt(it)
-      };
-    },
-    Float: function(it){
-      return {
-        type: 'Just',
-        value: parseFloat(it)
-      };
-    },
-    Date: function(value, options){
-      var that;
-      if (that = /^\#(.*)\#$/.exec(value)) {
-        return {
-          type: 'Just',
-          value: new Date(+that[1] || that[1])
-        };
-      } else if (options.explicit) {
-        return {
-          type: 'Nothing'
-        };
-      } else {
-        return {
-          type: 'Just',
-          value: new Date(+value || value)
-        };
-      }
-    },
-    RegExp: function(value, options){
-      var that;
-      if (that = /^\/(.*)\/([gimy]*)$/.exec(value)) {
-        return {
-          type: 'Just',
-          value: new RegExp(that[1], that[2])
-        };
-      } else if (options.explicit) {
-        return {
-          type: 'Nothing'
-        };
-      } else {
-        return {
-          type: 'Just',
-          value: new RegExp(value)
-        };
-      }
-    },
-    Array: function(it){
-      return coerceArray(it, {
-        of: [{
-          type: '*'
-        }]
-      });
-    },
-    Object: function(it){
-      return coerceFields(it, {
-        of: {}
-      });
-    },
-    String: function(it){
-      var that;
-      if (toString$.call(it).slice(8, -1) !== 'String') {
-        return {
-          type: 'Nothing'
-        };
-      }
-      if (that = it.match(/^'(.*)'$/)) {
-        return {
-          type: 'Just',
-          value: that[1]
-        };
-      } else if (that = it.match(/^"(.*)"$/)) {
-        return {
-          type: 'Just',
-          value: that[1]
-        };
-      } else {
-        return {
-          type: 'Just',
-          value: it
-        };
-      }
-    }
-  };
-  function coerceArray(node, type){
-    var typeOf, element;
-    if (toString$.call(node).slice(8, -1) !== 'Array') {
-      return {
-        type: 'Nothing'
-      };
-    }
-    typeOf = type.of;
-    return {
-      type: 'Just',
-      value: (function(){
-        var i$, ref$, len$, results$ = [];
-        for (i$ = 0, len$ = (ref$ = node).length; i$ < len$; ++i$) {
-          element = ref$[i$];
-          results$.push(coerceTypes(element, typeOf));
-        }
-        return results$;
-      }())
-    };
-  }
-  function coerceTuple(node, type){
-    var result, i$, ref$, len$, i, types, that;
-    if (toString$.call(node).slice(8, -1) !== 'Array') {
-      return {
-        type: 'Nothing'
-      };
-    }
-    result = [];
-    for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {
-      i = i$;
-      types = ref$[i$];
-      if (that = coerceTypes(node[i], types)) {
-        result.push(that);
-      }
-    }
-    return {
-      type: 'Just',
-      value: result
-    };
-  }
-  function coerceFields(node, type){
-    var typeOf, key, value;
-    if (toString$.call(node).slice(8, -1) !== 'Object') {
-      return {
-        type: 'Nothing'
-      };
-    }
-    typeOf = type.of;
-    return {
-      type: 'Just',
-      value: (function(){
-        var ref$, results$ = {};
-        for (key in ref$ = node) {
-          value = ref$[key];
-          results$[key] = coerceTypes(value, typeOf[key] || [{
-            type: '*'
-          }]);
-        }
-        return results$;
-      }())
-    };
-  }
-  function coerceType(node, typeObj, options){
-    var type, structure, coerceFunc;
-    type = typeObj.type, structure = typeObj.structure;
-    if (type) {
-      coerceFunc = types[type];
-      return coerceFunc(node, options);
-    } else {
-      switch (structure) {
-      case 'array':
-        return coerceArray(node, typeObj);
-      case 'tuple':
-        return coerceTuple(node, typeObj);
-      case 'fields':
-        return coerceFields(node, typeObj);
-      }
-    }
-  }
-  function coerceTypes(node, types, options){
-    var i$, len$, type, ref$, valueType, value;
-    for (i$ = 0, len$ = types.length; i$ < len$; ++i$) {
-      type = types[i$];
-      ref$ = coerceType(node, type, options), valueType = ref$.type, value = ref$.value;
-      if (valueType === 'Nothing') {
-        continue;
-      }
-      if (parsedTypeCheck([type], value)) {
-        return value;
-      }
-    }
-    throw new Error("Value " + JSON.stringify(node) + " does not type check against " + JSON.stringify(types) + ".");
-  }
-  module.exports = coerceTypes;
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/levn/lib/index.js b/signaling_server/service/node_modules/express/node_modules/levn/lib/index.js
deleted file mode 100644 (file)
index 54b5769..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var parseString, cast, parseType, VERSION, parsedTypeParse, parse;
-  parseString = require('./parse-string');
-  cast = require('./cast');
-  parseType = require('type-check').parseType;
-  VERSION = '0.2.5';
-  parsedTypeParse = function(parsedType, string, options){
-    options == null && (options = {});
-    options.explicit == null && (options.explicit = false);
-    options.customTypes == null && (options.customTypes = {});
-    return cast(parseString(parsedType, string, options), parsedType, options);
-  };
-  parse = function(type, string, options){
-    return parsedTypeParse(parseType(type), string, options);
-  };
-  module.exports = {
-    VERSION: VERSION,
-    parse: parse,
-    parsedTypeParse: parsedTypeParse
-  };
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/levn/lib/parse-string.js b/signaling_server/service/node_modules/express/node_modules/levn/lib/parse-string.js
deleted file mode 100644 (file)
index 65ec755..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var reject, special, tokenRegex;
-  reject = require('prelude-ls').reject;
-  function consumeOp(tokens, op){
-    if (tokens[0] === op) {
-      return tokens.shift();
-    } else {
-      throw new Error("Expected '" + op + "', but got '" + tokens[0] + "' instead in " + JSON.stringify(tokens) + ".");
-    }
-  }
-  function maybeConsumeOp(tokens, op){
-    if (tokens[0] === op) {
-      return tokens.shift();
-    }
-  }
-  function consumeList(tokens, arg$, hasDelimiters){
-    var open, close, result, untilTest;
-    open = arg$[0], close = arg$[1];
-    if (hasDelimiters) {
-      consumeOp(tokens, open);
-    }
-    result = [];
-    untilTest = "," + (hasDelimiters ? close : '');
-    while (tokens.length && (hasDelimiters && tokens[0] !== close)) {
-      result.push(consumeElement(tokens, untilTest));
-      maybeConsumeOp(tokens, ',');
-    }
-    if (hasDelimiters) {
-      consumeOp(tokens, close);
-    }
-    return result;
-  }
-  function consumeArray(tokens, hasDelimiters){
-    return consumeList(tokens, ['[', ']'], hasDelimiters);
-  }
-  function consumeTuple(tokens, hasDelimiters){
-    return consumeList(tokens, ['(', ')'], hasDelimiters);
-  }
-  function consumeFields(tokens, hasDelimiters){
-    var result, untilTest, key;
-    if (hasDelimiters) {
-      consumeOp(tokens, '{');
-    }
-    result = {};
-    untilTest = "," + (hasDelimiters ? '}' : '');
-    while (tokens.length && (!hasDelimiters || tokens[0] !== '}')) {
-      key = consumeValue(tokens, ':');
-      consumeOp(tokens, ':');
-      result[key] = consumeElement(tokens, untilTest);
-      maybeConsumeOp(tokens, ',');
-    }
-    if (hasDelimiters) {
-      consumeOp(tokens, '}');
-    }
-    return result;
-  }
-  function consumeValue(tokens, untilTest){
-    var out;
-    untilTest == null && (untilTest = '');
-    out = '';
-    while (tokens.length && -1 === untilTest.indexOf(tokens[0])) {
-      out += tokens.shift();
-    }
-    return out;
-  }
-  function consumeElement(tokens, untilTest){
-    switch (tokens[0]) {
-    case '[':
-      return consumeArray(tokens, true);
-    case '(':
-      return consumeTuple(tokens, true);
-    case '{':
-      return consumeFields(tokens, true);
-    default:
-      return consumeValue(tokens, untilTest);
-    }
-  }
-  function consumeTopLevel(tokens, types, options){
-    var ref$, type, structure, origTokens, result, finalResult, x$, y$;
-    ref$ = types[0], type = ref$.type, structure = ref$.structure;
-    origTokens = tokens.concat();
-    if (!options.explicit && types.length === 1 && ((!type && structure) || (type === 'Array' || type === 'Object'))) {
-      result = structure === 'array' || type === 'Array'
-        ? consumeArray(tokens, tokens[0] === '[')
-        : structure === 'tuple'
-          ? consumeTuple(tokens, tokens[0] === '(')
-          : consumeFields(tokens, tokens[0] === '{');
-      finalResult = tokens.length ? consumeElement(structure === 'array' || type === 'Array'
-        ? (x$ = origTokens, x$.unshift('['), x$.push(']'), x$)
-        : (y$ = origTokens, y$.unshift('('), y$.push(')'), y$)) : result;
-    } else {
-      finalResult = consumeElement(tokens);
-    }
-    return finalResult;
-  }
-  special = /\[\]\(\)}{:,/.source;
-  tokenRegex = RegExp('("(?:\\\\"|[^"])*")|(\'(?:\\\\\'|[^\'])*\')|(/(?:\\\\/|[^/])*/[a-zA-Z]*)|(#.*#)|([' + special + '])|([^\\s' + special + '](?:\\s*[^\\s' + special + ']+)*)|\\s*');
-  module.exports = function(types, string, options){
-    var tokens, node;
-    options == null && (options = {});
-    if (!options.explicit && types.length === 1 && types[0].type === 'String') {
-      return "'" + string.replace(/\\'/g, "\\\\'") + "'";
-    }
-    tokens = reject(not$, string.split(tokenRegex));
-    node = consumeTopLevel(tokens, types, options);
-    if (!node) {
-      throw new Error("Error parsing '" + string + "'.");
-    }
-    return node;
-  };
-  function not$(x){ return !x; }
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/levn/lib/parse.js b/signaling_server/service/node_modules/express/node_modules/levn/lib/parse.js
deleted file mode 100644 (file)
index 2beff0f..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var reject, special, tokenRegex;
-  reject = require('prelude-ls').reject;
-  function consumeOp(tokens, op){
-    if (tokens[0] === op) {
-      return tokens.shift();
-    } else {
-      throw new Error("Expected '" + op + "', but got '" + tokens[0] + "' instead in " + JSON.stringify(tokens) + ".");
-    }
-  }
-  function maybeConsumeOp(tokens, op){
-    if (tokens[0] === op) {
-      return tokens.shift();
-    }
-  }
-  function consumeList(tokens, delimiters, hasDelimiters){
-    var result;
-    if (hasDelimiters) {
-      consumeOp(tokens, delimiters[0]);
-    }
-    result = [];
-    while (tokens.length && tokens[0] !== delimiters[1]) {
-      result.push(consumeElement(tokens));
-      maybeConsumeOp(tokens, ',');
-    }
-    if (hasDelimiters) {
-      consumeOp(tokens, delimiters[1]);
-    }
-    return result;
-  }
-  function consumeArray(tokens, hasDelimiters){
-    return consumeList(tokens, ['[', ']'], hasDelimiters);
-  }
-  function consumeTuple(tokens, hasDelimiters){
-    return consumeList(tokens, ['(', ')'], hasDelimiters);
-  }
-  function consumeFields(tokens, hasDelimiters){
-    var result, key;
-    if (hasDelimiters) {
-      consumeOp(tokens, '{');
-    }
-    result = {};
-    while (tokens.length && (!hasDelimiters || tokens[0] !== '}')) {
-      key = tokens.shift();
-      consumeOp(tokens, ':');
-      result[key] = consumeElement(tokens);
-      maybeConsumeOp(tokens, ',');
-    }
-    if (hasDelimiters) {
-      consumeOp(tokens, '}');
-    }
-    return result;
-  }
-  function consumeElement(tokens){
-    switch (tokens[0]) {
-    case '[':
-      return consumeArray(tokens, true);
-    case '(':
-      return consumeTuple(tokens, true);
-    case '{':
-      return consumeFields(tokens, true);
-    default:
-      return tokens.shift();
-    }
-  }
-  function consumeTopLevel(tokens, types){
-    var ref$, type, structure, origTokens, result, finalResult, x$, y$;
-    ref$ = types[0], type = ref$.type, structure = ref$.structure;
-    origTokens = tokens.concat();
-    if (types.length === 1 && (structure || (type === 'Array' || type === 'Object'))) {
-      result = structure === 'array' || type === 'Array'
-        ? consumeArray(tokens, tokens[0] === '[')
-        : structure === 'tuple'
-          ? consumeTuple(tokens, tokens[0] === '(')
-          : consumeFields(tokens, tokens[0] === '{');
-      finalResult = tokens.length ? consumeElement(structure === 'array' || type === 'Array'
-        ? (x$ = origTokens, x$.unshift('['), x$.push(']'), x$)
-        : (y$ = origTokens, y$.unshift('('), y$.push(')'), y$)) : result;
-    } else {
-      finalResult = consumeElement(tokens);
-    }
-    if (tokens.length && origTokens.length) {
-      throw new Error("Unable to parse " + JSON.stringify(origTokens) + " of type " + JSON.stringify(types) + ".");
-    } else {
-      return finalResult;
-    }
-  }
-  special = /\[\]\(\)}{:,/.source;
-  tokenRegex = RegExp('("(?:[^"]|\\\\")*")|(\'(?:[^\']|\\\\\')*\')|(#.*#)|(/(?:\\\\/|[^/])*/[gimy]*)|([' + special + '])|([^\\s' + special + ']+)|\\s*');
-  module.exports = function(string, types){
-    var tokens, node;
-    tokens = reject(function(it){
-      return !it || /^\s+$/.test(it);
-    }, string.split(tokenRegex));
-    node = consumeTopLevel(tokens, types);
-    if (!node) {
-      throw new Error("Error parsing '" + string + "'.");
-    }
-    return node;
-  };
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/levn/package.json b/signaling_server/service/node_modules/express/node_modules/levn/package.json
deleted file mode 100644 (file)
index fdaec31..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-{
-  "_from": "levn@~0.2.5",
-  "_id": "levn@0.2.5",
-  "_inBundle": false,
-  "_integrity": "sha1-uo0znQykphDjo/FFucr0iAcVUFQ=",
-  "_location": "/levn",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "levn@~0.2.5",
-    "name": "levn",
-    "escapedName": "levn",
-    "rawSpec": "~0.2.5",
-    "saveSpec": null,
-    "fetchSpec": "~0.2.5"
-  },
-  "_requiredBy": [
-    "/grunt-eslint/optionator",
-    "/optionator"
-  ],
-  "_resolved": "https://registry.npmjs.org/levn/-/levn-0.2.5.tgz",
-  "_shasum": "ba8d339d0ca4a610e3a3f145b9caf48807155054",
-  "_spec": "levn@~0.2.5",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/optionator",
-  "author": {
-    "name": "George Zahariev",
-    "email": "z@georgezahariev.com"
-  },
-  "bugs": {
-    "url": "https://github.com/gkz/levn/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "prelude-ls": "~1.1.0",
-    "type-check": "~0.3.1"
-  },
-  "deprecated": false,
-  "description": "Light ECMAScript (JavaScript) Value Notation - human written, concise, typed, flexible",
-  "devDependencies": {
-    "LiveScript": "~1.2.0",
-    "istanbul": "~0.1.43",
-    "mocha": "~1.8.2"
-  },
-  "engines": {
-    "node": ">= 0.8.0"
-  },
-  "files": [
-    "lib",
-    "README.md",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/gkz/levn",
-  "keywords": [
-    "levn",
-    "light",
-    "ecmascript",
-    "value",
-    "notation",
-    "json",
-    "typed",
-    "human",
-    "concise",
-    "typed",
-    "flexible"
-  ],
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "https://raw.github.com/gkz/levn/master/LICENSE"
-    }
-  ],
-  "main": "./lib/",
-  "name": "levn",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/gkz/levn.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "0.2.5"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/media-typer/package.json b/signaling_server/service/node_modules/express/node_modules/media-typer/package.json
deleted file mode 100644 (file)
index c239642..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "_from": "media-typer@0.3.0",
-  "_id": "media-typer@0.3.0",
-  "_inBundle": false,
-  "_integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
-  "_location": "/media-typer",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "media-typer@0.3.0",
-    "name": "media-typer",
-    "escapedName": "media-typer",
-    "rawSpec": "0.3.0",
-    "saveSpec": null,
-    "fetchSpec": "0.3.0"
-  },
-  "_requiredBy": [
-    "/type-is"
-  ],
-  "_resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-  "_shasum": "8710d7af0aa626f8fffa1ce00168545263255748",
-  "_spec": "media-typer@0.3.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/type-is",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/media-typer/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Simple RFC 6838 media type parser and formatter",
-  "devDependencies": {
-    "istanbul": "0.3.2",
-    "mocha": "~1.21.4",
-    "should": "~4.0.4"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/media-typer#readme",
-  "license": "MIT",
-  "name": "media-typer",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/media-typer.git"
-  },
-  "scripts": {
-    "test": "mocha --reporter spec --check-leaks --bail test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "0.3.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/merge-descriptors/package.json b/signaling_server/service/node_modules/express/node_modules/merge-descriptors/package.json
deleted file mode 100644 (file)
index adec6e6..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "_from": "merge-descriptors@1.0.1",
-  "_id": "merge-descriptors@1.0.1",
-  "_inBundle": false,
-  "_integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
-  "_location": "/merge-descriptors",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "merge-descriptors@1.0.1",
-    "name": "merge-descriptors",
-    "escapedName": "merge-descriptors",
-    "rawSpec": "1.0.1",
-    "saveSpec": null,
-    "fetchSpec": "1.0.1"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-  "_shasum": "b00aaa556dd8b44568150ec9d1b953f3f90cbb61",
-  "_spec": "merge-descriptors@1.0.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Jonathan Ong",
-    "email": "me@jongleberry.com",
-    "url": "http://jongleberry.com"
-  },
-  "bugs": {
-    "url": "https://github.com/component/merge-descriptors/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Mike Grabowski",
-      "email": "grabbou@gmail.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "Merge objects using descriptors",
-  "devDependencies": {
-    "istanbul": "0.4.1",
-    "mocha": "1.21.5"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/component/merge-descriptors#readme",
-  "license": "MIT",
-  "name": "merge-descriptors",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/component/merge-descriptors.git"
-  },
-  "scripts": {
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
-  },
-  "version": "1.0.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/methods/package.json b/signaling_server/service/node_modules/express/node_modules/methods/package.json
deleted file mode 100644 (file)
index 0195cf8..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "_from": "methods@~1.1.2",
-  "_id": "methods@1.1.2",
-  "_inBundle": false,
-  "_integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
-  "_location": "/methods",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "methods@~1.1.2",
-    "name": "methods",
-    "escapedName": "methods",
-    "rawSpec": "~1.1.2",
-    "saveSpec": null,
-    "fetchSpec": "~1.1.2"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-  "_shasum": "5529a4d67654134edcc5266656835b0f851afcee",
-  "_spec": "methods@~1.1.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "browser": {
-    "http": false
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/methods/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    },
-    {
-      "name": "TJ Holowaychuk",
-      "email": "tj@vision-media.ca",
-      "url": "http://tjholowaychuk.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "HTTP methods that node supports",
-  "devDependencies": {
-    "istanbul": "0.4.1",
-    "mocha": "1.21.5"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "index.js",
-    "HISTORY.md",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/jshttp/methods#readme",
-  "keywords": [
-    "http",
-    "methods"
-  ],
-  "license": "MIT",
-  "name": "methods",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/methods.git"
-  },
-  "scripts": {
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "1.1.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-db/HISTORY.md b/signaling_server/service/node_modules/express/node_modules/mime-db/HISTORY.md
deleted file mode 100644 (file)
index 8afff37..0000000
+++ /dev/null
@@ -1,439 +0,0 @@
-1.43.0 / 2020-01-05
-===================
-
-  * Add `application/x-keepass2` with extension `.kdbx`
-  * Add extension `.mxmf` to `audio/mobile-xmf`
-  * Add extensions from IANA for `application/*+xml` types
-  * Add new upstream MIME types
-
-1.42.0 / 2019-09-25
-===================
-
-  * Add `image/vnd.ms-dds` with extension `.dds`
-  * Add new upstream MIME types
-  * Remove compressible from `multipart/mixed`
-
-1.41.0 / 2019-08-30
-===================
-
-  * Add new upstream MIME types
-  * Add `application/toml` with extension `.toml`
-  * Mark `font/ttf` as compressible
-
-1.40.0 / 2019-04-20
-===================
-
-  * Add extensions from IANA for `model/*` types
-  * Add `text/mdx` with extension `.mdx`
-
-1.39.0 / 2019-04-04
-===================
-
-  * Add extensions `.siv` and `.sieve` to `application/sieve`
-  * Add new upstream MIME types
-
-1.38.0 / 2019-02-04
-===================
-
-  * Add extension `.nq` to `application/n-quads`
-  * Add extension `.nt` to `application/n-triples`
-  * Add new upstream MIME types
-  * Mark `text/less` as compressible
-
-1.37.0 / 2018-10-19
-===================
-
-  * Add extensions to HEIC image types
-  * Add new upstream MIME types
-
-1.36.0 / 2018-08-20
-===================
-
-  * Add Apple file extensions from IANA
-  * Add extensions from IANA for `image/*` types
-  * Add new upstream MIME types
-
-1.35.0 / 2018-07-15
-===================
-
-  * Add extension `.owl` to `application/rdf+xml`
-  * Add new upstream MIME types
-    - Removes extension `.woff` from `application/font-woff`
-
-1.34.0 / 2018-06-03
-===================
-
-  * Add extension `.csl` to `application/vnd.citationstyles.style+xml`
-  * Add extension `.es` to `application/ecmascript`
-  * Add new upstream MIME types
-  * Add `UTF-8` as default charset for `text/turtle`
-  * Mark all XML-derived types as compressible
-
-1.33.0 / 2018-02-15
-===================
-
-  * Add extensions from IANA for `message/*` types
-  * Add new upstream MIME types
-  * Fix some incorrect OOXML types
-  * Remove `application/font-woff2`
-
-1.32.0 / 2017-11-29
-===================
-
-  * Add new upstream MIME types
-  * Update `text/hjson` to registered `application/hjson`
-  * Add `text/shex` with extension `.shex`
-
-1.31.0 / 2017-10-25
-===================
-
-  * Add `application/raml+yaml` with extension `.raml`
-  * Add `application/wasm` with extension `.wasm`
-  * Add new `font` type from IANA
-  * Add new upstream font extensions
-  * Add new upstream MIME types
-  * Add extensions for JPEG-2000 images
-
-1.30.0 / 2017-08-27
-===================
-
-  * Add `application/vnd.ms-outlook`
-  * Add `application/x-arj`
-  * Add extension `.mjs` to `application/javascript`
-  * Add glTF types and extensions
-  * Add new upstream MIME types
-  * Add `text/x-org`
-  * Add VirtualBox MIME types
-  * Fix `source` records for `video/*` types that are IANA
-  * Update `font/opentype` to registered `font/otf`
-
-1.29.0 / 2017-07-10
-===================
-
-  * Add `application/fido.trusted-apps+json`
-  * Add extension `.wadl` to `application/vnd.sun.wadl+xml`
-  * Add new upstream MIME types
-  * Add `UTF-8` as default charset for `text/css`
-
-1.28.0 / 2017-05-14
-===================
-
-  * Add new upstream MIME types
-  * Add extension `.gz` to `application/gzip`
-  * Update extensions `.md` and `.markdown` to be `text/markdown`
-
-1.27.0 / 2017-03-16
-===================
-
-  * Add new upstream MIME types
-  * Add `image/apng` with extension `.apng`
-
-1.26.0 / 2017-01-14
-===================
-
-  * Add new upstream MIME types
-  * Add extension `.geojson` to `application/geo+json`
-
-1.25.0 / 2016-11-11
-===================
-
-  * Add new upstream MIME types
-
-1.24.0 / 2016-09-18
-===================
-
-  * Add `audio/mp3`
-  * Add new upstream MIME types
-
-1.23.0 / 2016-05-01
-===================
-
-  * Add new upstream MIME types
-  * Add extension `.3gpp` to `audio/3gpp`
-
-1.22.0 / 2016-02-15
-===================
-
-  * Add `text/slim`
-  * Add extension `.rng` to `application/xml`
-  * Add new upstream MIME types
-  * Fix extension of `application/dash+xml` to be `.mpd`
-  * Update primary extension to `.m4a` for `audio/mp4`
-
-1.21.0 / 2016-01-06
-===================
-
-  * Add Google document types
-  * Add new upstream MIME types
-
-1.20.0 / 2015-11-10
-===================
-
-  * Add `text/x-suse-ymp`
-  * Add new upstream MIME types
-
-1.19.0 / 2015-09-17
-===================
-
-  * Add `application/vnd.apple.pkpass`
-  * Add new upstream MIME types
-
-1.18.0 / 2015-09-03
-===================
-
-  * Add new upstream MIME types
-
-1.17.0 / 2015-08-13
-===================
-
-  * Add `application/x-msdos-program`
-  * Add `audio/g711-0`
-  * Add `image/vnd.mozilla.apng`
-  * Add extension `.exe` to `application/x-msdos-program`
-
-1.16.0 / 2015-07-29
-===================
-
-  * Add `application/vnd.uri-map`
-
-1.15.0 / 2015-07-13
-===================
-
-  * Add `application/x-httpd-php`
-
-1.14.0 / 2015-06-25
-===================
-
-  * Add `application/scim+json`
-  * Add `application/vnd.3gpp.ussd+xml`
-  * Add `application/vnd.biopax.rdf+xml`
-  * Add `text/x-processing`
-
-1.13.0 / 2015-06-07
-===================
-
-  * Add nginx as a source
-  * Add `application/x-cocoa`
-  * Add `application/x-java-archive-diff`
-  * Add `application/x-makeself`
-  * Add `application/x-perl`
-  * Add `application/x-pilot`
-  * Add `application/x-redhat-package-manager`
-  * Add `application/x-sea`
-  * Add `audio/x-m4a`
-  * Add `audio/x-realaudio`
-  * Add `image/x-jng`
-  * Add `text/mathml`
-
-1.12.0 / 2015-06-05
-===================
-
-  * Add `application/bdoc`
-  * Add `application/vnd.hyperdrive+json`
-  * Add `application/x-bdoc`
-  * Add extension `.rtf` to `text/rtf`
-
-1.11.0 / 2015-05-31
-===================
-
-  * Add `audio/wav`
-  * Add `audio/wave`
-  * Add extension `.litcoffee` to `text/coffeescript`
-  * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data`
-  * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install`
-
-1.10.0 / 2015-05-19
-===================
-
-  * Add `application/vnd.balsamiq.bmpr`
-  * Add `application/vnd.microsoft.portable-executable`
-  * Add `application/x-ns-proxy-autoconfig`
-
-1.9.1 / 2015-04-19
-==================
-
-  * Remove `.json` extension from `application/manifest+json`
-    - This is causing bugs downstream
-
-1.9.0 / 2015-04-19
-==================
-
-  * Add `application/manifest+json`
-  * Add `application/vnd.micro+json`
-  * Add `image/vnd.zbrush.pcx`
-  * Add `image/x-ms-bmp`
-
-1.8.0 / 2015-03-13
-==================
-
-  * Add `application/vnd.citationstyles.style+xml`
-  * Add `application/vnd.fastcopy-disk-image`
-  * Add `application/vnd.gov.sk.xmldatacontainer+xml`
-  * Add extension `.jsonld` to `application/ld+json`
-
-1.7.0 / 2015-02-08
-==================
-
-  * Add `application/vnd.gerber`
-  * Add `application/vnd.msa-disk-image`
-
-1.6.1 / 2015-02-05
-==================
-
-  * Community extensions ownership transferred from `node-mime`
-
-1.6.0 / 2015-01-29
-==================
-
-  * Add `application/jose`
-  * Add `application/jose+json`
-  * Add `application/json-seq`
-  * Add `application/jwk+json`
-  * Add `application/jwk-set+json`
-  * Add `application/jwt`
-  * Add `application/rdap+json`
-  * Add `application/vnd.gov.sk.e-form+xml`
-  * Add `application/vnd.ims.imsccv1p3`
-
-1.5.0 / 2014-12-30
-==================
-
-  * Add `application/vnd.oracle.resource+json`
-  * Fix various invalid MIME type entries
-    - `application/mbox+xml`
-    - `application/oscp-response`
-    - `application/vwg-multiplexed`
-    - `audio/g721`
-
-1.4.0 / 2014-12-21
-==================
-
-  * Add `application/vnd.ims.imsccv1p2`
-  * Fix various invalid MIME type entries
-    - `application/vnd-acucobol`
-    - `application/vnd-curl`
-    - `application/vnd-dart`
-    - `application/vnd-dxr`
-    - `application/vnd-fdf`
-    - `application/vnd-mif`
-    - `application/vnd-sema`
-    - `application/vnd-wap-wmlc`
-    - `application/vnd.adobe.flash-movie`
-    - `application/vnd.dece-zip`
-    - `application/vnd.dvb_service`
-    - `application/vnd.micrografx-igx`
-    - `application/vnd.sealed-doc`
-    - `application/vnd.sealed-eml`
-    - `application/vnd.sealed-mht`
-    - `application/vnd.sealed-ppt`
-    - `application/vnd.sealed-tiff`
-    - `application/vnd.sealed-xls`
-    - `application/vnd.sealedmedia.softseal-html`
-    - `application/vnd.sealedmedia.softseal-pdf`
-    - `application/vnd.wap-slc`
-    - `application/vnd.wap-wbxml`
-    - `audio/vnd.sealedmedia.softseal-mpeg`
-    - `image/vnd-djvu`
-    - `image/vnd-svf`
-    - `image/vnd-wap-wbmp`
-    - `image/vnd.sealed-png`
-    - `image/vnd.sealedmedia.softseal-gif`
-    - `image/vnd.sealedmedia.softseal-jpg`
-    - `model/vnd-dwf`
-    - `model/vnd.parasolid.transmit-binary`
-    - `model/vnd.parasolid.transmit-text`
-    - `text/vnd-a`
-    - `text/vnd-curl`
-    - `text/vnd.wap-wml`
-  * Remove example template MIME types
-    - `application/example`
-    - `audio/example`
-    - `image/example`
-    - `message/example`
-    - `model/example`
-    - `multipart/example`
-    - `text/example`
-    - `video/example`
-
-1.3.1 / 2014-12-16
-==================
-
-  * Fix missing extensions
-    - `application/json5`
-    - `text/hjson`
-
-1.3.0 / 2014-12-07
-==================
-
-  * Add `application/a2l`
-  * Add `application/aml`
-  * Add `application/atfx`
-  * Add `application/atxml`
-  * Add `application/cdfx+xml`
-  * Add `application/dii`
-  * Add `application/json5`
-  * Add `application/lxf`
-  * Add `application/mf4`
-  * Add `application/vnd.apache.thrift.compact`
-  * Add `application/vnd.apache.thrift.json`
-  * Add `application/vnd.coffeescript`
-  * Add `application/vnd.enphase.envoy`
-  * Add `application/vnd.ims.imsccv1p1`
-  * Add `text/csv-schema`
-  * Add `text/hjson`
-  * Add `text/markdown`
-  * Add `text/yaml`
-
-1.2.0 / 2014-11-09
-==================
-
-  * Add `application/cea`
-  * Add `application/dit`
-  * Add `application/vnd.gov.sk.e-form+zip`
-  * Add `application/vnd.tmd.mediaflex.api+xml`
-  * Type `application/epub+zip` is now IANA-registered
-
-1.1.2 / 2014-10-23
-==================
-
-  * Rebuild database for `application/x-www-form-urlencoded` change
-
-1.1.1 / 2014-10-20
-==================
-
-  * Mark `application/x-www-form-urlencoded` as compressible.
-
-1.1.0 / 2014-09-28
-==================
-
-  * Add `application/font-woff2`
-
-1.0.3 / 2014-09-25
-==================
-
-  * Fix engine requirement in package
-
-1.0.2 / 2014-09-25
-==================
-
-  * Add `application/coap-group+json`
-  * Add `application/dcd`
-  * Add `application/vnd.apache.thrift.binary`
-  * Add `image/vnd.tencent.tap`
-  * Mark all JSON-derived types as compressible
-  * Update `text/vtt` data
-
-1.0.1 / 2014-08-30
-==================
-
-  * Fix extension ordering
-
-1.0.0 / 2014-08-30
-==================
-
-  * Add `application/atf`
-  * Add `application/merge-patch+json`
-  * Add `multipart/x-mixed-replace`
-  * Add `source: 'apache'` metadata
-  * Add `source: 'iana'` metadata
-  * Remove badly-assumed charset data
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-db/README.md b/signaling_server/service/node_modules/express/node_modules/mime-db/README.md
deleted file mode 100644 (file)
index 68e3a1a..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-# mime-db
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Coverage Status][coveralls-image]][coveralls-url]
-
-This is a database of all mime types.
-It consists of a single, public JSON file and does not include any logic,
-allowing it to remain as un-opinionated as possible with an API.
-It aggregates data from the following sources:
-
-- http://www.iana.org/assignments/media-types/media-types.xhtml
-- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
-- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types
-
-## Installation
-
-```bash
-npm install mime-db
-```
-
-### Database Download
-
-If you're crazy enough to use this in the browser, you can just grab the
-JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to
-replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags)
-as the JSON format may change in the future.
-
-```
-https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json
-```
-
-## Usage
-
-```js
-var db = require('mime-db');
-
-// grab data on .js files
-var data = db['application/javascript'];
-```
-
-## Data Structure
-
-The JSON file is a map lookup for lowercased mime types.
-Each mime type has the following properties:
-
-- `.source` - where the mime type is defined.
-    If not set, it's probably a custom media type.
-    - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)
-    - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
-    - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)
-- `.extensions[]` - known extensions associated with this mime type.
-- `.compressible` - whether a file of this type can be gzipped.
-- `.charset` - the default charset associated with this type, if any.
-
-If unknown, every property could be `undefined`.
-
-## Contributing
-
-To edit the database, only make PRs against `src/custom.json` or
-`src/custom-suffix.json`.
-
-The `src/custom.json` file is a JSON object with the MIME type as the keys
-and the values being an object with the following keys:
-
-- `compressible` - leave out if you don't know, otherwise `true`/`false` to
-  indicate whether the data represented by the type is typically compressible.
-- `extensions` - include an array of file extensions that are associated with
-  the type.
-- `notes` - human-readable notes about the type, typically what the type is.
-- `sources` - include an array of URLs of where the MIME type and the associated
-  extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source);
-  links to type aggregating sites and Wikipedia are _not acceptable_.
-
-To update the build, run `npm run build`.
-
-### Adding Custom Media Types
-
-The best way to get new media types included in this library is to register
-them with the IANA. The community registration procedure is outlined in
-[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types
-registered with the IANA are automatically pulled into this library.
-
-If that is not possible / feasible, they can be added directly here as a
-"custom" type. To do this, it is required to have a primary source that
-definitively lists the media type. If an extension is going to be listed as
-associateed with this media type, the source must definitively link the
-media type and extension as well.
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master
-[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master
-[node-image]: https://badgen.net/npm/node/mime-db
-[node-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/mime-db
-[npm-url]: https://npmjs.org/package/mime-db
-[npm-version-image]: https://badgen.net/npm/v/mime-db
-[travis-image]: https://badgen.net/travis/jshttp/mime-db/master
-[travis-url]: https://travis-ci.org/jshttp/mime-db
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-db/db.json b/signaling_server/service/node_modules/express/node_modules/mime-db/db.json
deleted file mode 100644 (file)
index cfa3c63..0000000
+++ /dev/null
@@ -1,8060 +0,0 @@
-{
-  "application/1d-interleaved-parityfec": {
-    "source": "iana"
-  },
-  "application/3gpdash-qoe-report+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/3gpp-ims+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/a2l": {
-    "source": "iana"
-  },
-  "application/activemessage": {
-    "source": "iana"
-  },
-  "application/activity+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-costmap+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-costmapfilter+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-directory+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-endpointcost+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-endpointcostparams+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-endpointprop+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-endpointpropparams+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-error+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-networkmap+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-networkmapfilter+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/aml": {
-    "source": "iana"
-  },
-  "application/andrew-inset": {
-    "source": "iana",
-    "extensions": ["ez"]
-  },
-  "application/applefile": {
-    "source": "iana"
-  },
-  "application/applixware": {
-    "source": "apache",
-    "extensions": ["aw"]
-  },
-  "application/atf": {
-    "source": "iana"
-  },
-  "application/atfx": {
-    "source": "iana"
-  },
-  "application/atom+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["atom"]
-  },
-  "application/atomcat+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["atomcat"]
-  },
-  "application/atomdeleted+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["atomdeleted"]
-  },
-  "application/atomicmail": {
-    "source": "iana"
-  },
-  "application/atomsvc+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["atomsvc"]
-  },
-  "application/atsc-dwd+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dwd"]
-  },
-  "application/atsc-held+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["held"]
-  },
-  "application/atsc-rdt+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/atsc-rsat+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rsat"]
-  },
-  "application/atxml": {
-    "source": "iana"
-  },
-  "application/auth-policy+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/bacnet-xdd+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/batch-smtp": {
-    "source": "iana"
-  },
-  "application/bdoc": {
-    "compressible": false,
-    "extensions": ["bdoc"]
-  },
-  "application/beep+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/calendar+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/calendar+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xcs"]
-  },
-  "application/call-completion": {
-    "source": "iana"
-  },
-  "application/cals-1840": {
-    "source": "iana"
-  },
-  "application/cbor": {
-    "source": "iana"
-  },
-  "application/cbor-seq": {
-    "source": "iana"
-  },
-  "application/cccex": {
-    "source": "iana"
-  },
-  "application/ccmp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/ccxml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ccxml"]
-  },
-  "application/cdfx+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["cdfx"]
-  },
-  "application/cdmi-capability": {
-    "source": "iana",
-    "extensions": ["cdmia"]
-  },
-  "application/cdmi-container": {
-    "source": "iana",
-    "extensions": ["cdmic"]
-  },
-  "application/cdmi-domain": {
-    "source": "iana",
-    "extensions": ["cdmid"]
-  },
-  "application/cdmi-object": {
-    "source": "iana",
-    "extensions": ["cdmio"]
-  },
-  "application/cdmi-queue": {
-    "source": "iana",
-    "extensions": ["cdmiq"]
-  },
-  "application/cdni": {
-    "source": "iana"
-  },
-  "application/cea": {
-    "source": "iana"
-  },
-  "application/cea-2018+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cellml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cfw": {
-    "source": "iana"
-  },
-  "application/clue+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/clue_info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cms": {
-    "source": "iana"
-  },
-  "application/cnrp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/coap-group+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/coap-payload": {
-    "source": "iana"
-  },
-  "application/commonground": {
-    "source": "iana"
-  },
-  "application/conference-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cose": {
-    "source": "iana"
-  },
-  "application/cose-key": {
-    "source": "iana"
-  },
-  "application/cose-key-set": {
-    "source": "iana"
-  },
-  "application/cpl+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/csrattrs": {
-    "source": "iana"
-  },
-  "application/csta+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cstadata+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/csvm+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cu-seeme": {
-    "source": "apache",
-    "extensions": ["cu"]
-  },
-  "application/cwt": {
-    "source": "iana"
-  },
-  "application/cybercash": {
-    "source": "iana"
-  },
-  "application/dart": {
-    "compressible": true
-  },
-  "application/dash+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mpd"]
-  },
-  "application/dashdelta": {
-    "source": "iana"
-  },
-  "application/davmount+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["davmount"]
-  },
-  "application/dca-rft": {
-    "source": "iana"
-  },
-  "application/dcd": {
-    "source": "iana"
-  },
-  "application/dec-dx": {
-    "source": "iana"
-  },
-  "application/dialog-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dicom": {
-    "source": "iana"
-  },
-  "application/dicom+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dicom+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dii": {
-    "source": "iana"
-  },
-  "application/dit": {
-    "source": "iana"
-  },
-  "application/dns": {
-    "source": "iana"
-  },
-  "application/dns+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dns-message": {
-    "source": "iana"
-  },
-  "application/docbook+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["dbk"]
-  },
-  "application/dskpp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dssc+der": {
-    "source": "iana",
-    "extensions": ["dssc"]
-  },
-  "application/dssc+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdssc"]
-  },
-  "application/dvcs": {
-    "source": "iana"
-  },
-  "application/ecmascript": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ecma","es"]
-  },
-  "application/edi-consent": {
-    "source": "iana"
-  },
-  "application/edi-x12": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/edifact": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/efi": {
-    "source": "iana"
-  },
-  "application/emergencycalldata.comment+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.control+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.deviceinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.ecall.msd": {
-    "source": "iana"
-  },
-  "application/emergencycalldata.providerinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.serviceinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.subscriberinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.veds+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emma+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["emma"]
-  },
-  "application/emotionml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["emotionml"]
-  },
-  "application/encaprtp": {
-    "source": "iana"
-  },
-  "application/epp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/epub+zip": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["epub"]
-  },
-  "application/eshop": {
-    "source": "iana"
-  },
-  "application/exi": {
-    "source": "iana",
-    "extensions": ["exi"]
-  },
-  "application/expect-ct-report+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/fastinfoset": {
-    "source": "iana"
-  },
-  "application/fastsoap": {
-    "source": "iana"
-  },
-  "application/fdt+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["fdt"]
-  },
-  "application/fhir+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/fhir+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/fido.trusted-apps+json": {
-    "compressible": true
-  },
-  "application/fits": {
-    "source": "iana"
-  },
-  "application/flexfec": {
-    "source": "iana"
-  },
-  "application/font-sfnt": {
-    "source": "iana"
-  },
-  "application/font-tdpfr": {
-    "source": "iana",
-    "extensions": ["pfr"]
-  },
-  "application/font-woff": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/framework-attributes+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/geo+json": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["geojson"]
-  },
-  "application/geo+json-seq": {
-    "source": "iana"
-  },
-  "application/geopackage+sqlite3": {
-    "source": "iana"
-  },
-  "application/geoxacml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/gltf-buffer": {
-    "source": "iana"
-  },
-  "application/gml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["gml"]
-  },
-  "application/gpx+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["gpx"]
-  },
-  "application/gxf": {
-    "source": "apache",
-    "extensions": ["gxf"]
-  },
-  "application/gzip": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["gz"]
-  },
-  "application/h224": {
-    "source": "iana"
-  },
-  "application/held+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/hjson": {
-    "extensions": ["hjson"]
-  },
-  "application/http": {
-    "source": "iana"
-  },
-  "application/hyperstudio": {
-    "source": "iana",
-    "extensions": ["stk"]
-  },
-  "application/ibe-key-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/ibe-pkg-reply+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/ibe-pp-data": {
-    "source": "iana"
-  },
-  "application/iges": {
-    "source": "iana"
-  },
-  "application/im-iscomposing+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/index": {
-    "source": "iana"
-  },
-  "application/index.cmd": {
-    "source": "iana"
-  },
-  "application/index.obj": {
-    "source": "iana"
-  },
-  "application/index.response": {
-    "source": "iana"
-  },
-  "application/index.vnd": {
-    "source": "iana"
-  },
-  "application/inkml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ink","inkml"]
-  },
-  "application/iotp": {
-    "source": "iana"
-  },
-  "application/ipfix": {
-    "source": "iana",
-    "extensions": ["ipfix"]
-  },
-  "application/ipp": {
-    "source": "iana"
-  },
-  "application/isup": {
-    "source": "iana"
-  },
-  "application/its+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["its"]
-  },
-  "application/java-archive": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["jar","war","ear"]
-  },
-  "application/java-serialized-object": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["ser"]
-  },
-  "application/java-vm": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["class"]
-  },
-  "application/javascript": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["js","mjs"]
-  },
-  "application/jf2feed+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/jose": {
-    "source": "iana"
-  },
-  "application/jose+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/jrd+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/json": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["json","map"]
-  },
-  "application/json-patch+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/json-seq": {
-    "source": "iana"
-  },
-  "application/json5": {
-    "extensions": ["json5"]
-  },
-  "application/jsonml+json": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["jsonml"]
-  },
-  "application/jwk+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/jwk-set+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/jwt": {
-    "source": "iana"
-  },
-  "application/kpml-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/kpml-response+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/ld+json": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["jsonld"]
-  },
-  "application/lgr+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["lgr"]
-  },
-  "application/link-format": {
-    "source": "iana"
-  },
-  "application/load-control+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/lost+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["lostxml"]
-  },
-  "application/lostsync+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/lxf": {
-    "source": "iana"
-  },
-  "application/mac-binhex40": {
-    "source": "iana",
-    "extensions": ["hqx"]
-  },
-  "application/mac-compactpro": {
-    "source": "apache",
-    "extensions": ["cpt"]
-  },
-  "application/macwriteii": {
-    "source": "iana"
-  },
-  "application/mads+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mads"]
-  },
-  "application/manifest+json": {
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["webmanifest"]
-  },
-  "application/marc": {
-    "source": "iana",
-    "extensions": ["mrc"]
-  },
-  "application/marcxml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mrcx"]
-  },
-  "application/mathematica": {
-    "source": "iana",
-    "extensions": ["ma","nb","mb"]
-  },
-  "application/mathml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mathml"]
-  },
-  "application/mathml-content+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mathml-presentation+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-associated-procedure-description+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-deregister+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-envelope+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-msk+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-msk-response+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-protection-description+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-reception-report+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-register+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-register-response+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-schedule+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-user-service-description+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbox": {
-    "source": "iana",
-    "extensions": ["mbox"]
-  },
-  "application/media-policy-dataset+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/media_control+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mediaservercontrol+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mscml"]
-  },
-  "application/merge-patch+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/metalink+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["metalink"]
-  },
-  "application/metalink4+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["meta4"]
-  },
-  "application/mets+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mets"]
-  },
-  "application/mf4": {
-    "source": "iana"
-  },
-  "application/mikey": {
-    "source": "iana"
-  },
-  "application/mipc": {
-    "source": "iana"
-  },
-  "application/mmt-aei+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["maei"]
-  },
-  "application/mmt-usd+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["musd"]
-  },
-  "application/mods+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mods"]
-  },
-  "application/moss-keys": {
-    "source": "iana"
-  },
-  "application/moss-signature": {
-    "source": "iana"
-  },
-  "application/mosskey-data": {
-    "source": "iana"
-  },
-  "application/mosskey-request": {
-    "source": "iana"
-  },
-  "application/mp21": {
-    "source": "iana",
-    "extensions": ["m21","mp21"]
-  },
-  "application/mp4": {
-    "source": "iana",
-    "extensions": ["mp4s","m4p"]
-  },
-  "application/mpeg4-generic": {
-    "source": "iana"
-  },
-  "application/mpeg4-iod": {
-    "source": "iana"
-  },
-  "application/mpeg4-iod-xmt": {
-    "source": "iana"
-  },
-  "application/mrb-consumer+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdf"]
-  },
-  "application/mrb-publish+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdf"]
-  },
-  "application/msc-ivr+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/msc-mixer+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/msword": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["doc","dot"]
-  },
-  "application/mud+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/multipart-core": {
-    "source": "iana"
-  },
-  "application/mxf": {
-    "source": "iana",
-    "extensions": ["mxf"]
-  },
-  "application/n-quads": {
-    "source": "iana",
-    "extensions": ["nq"]
-  },
-  "application/n-triples": {
-    "source": "iana",
-    "extensions": ["nt"]
-  },
-  "application/nasdata": {
-    "source": "iana"
-  },
-  "application/news-checkgroups": {
-    "source": "iana"
-  },
-  "application/news-groupinfo": {
-    "source": "iana"
-  },
-  "application/news-transmission": {
-    "source": "iana"
-  },
-  "application/nlsml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/node": {
-    "source": "iana"
-  },
-  "application/nss": {
-    "source": "iana"
-  },
-  "application/ocsp-request": {
-    "source": "iana"
-  },
-  "application/ocsp-response": {
-    "source": "iana"
-  },
-  "application/octet-stream": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]
-  },
-  "application/oda": {
-    "source": "iana",
-    "extensions": ["oda"]
-  },
-  "application/odm+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/odx": {
-    "source": "iana"
-  },
-  "application/oebps-package+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["opf"]
-  },
-  "application/ogg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["ogx"]
-  },
-  "application/omdoc+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["omdoc"]
-  },
-  "application/onenote": {
-    "source": "apache",
-    "extensions": ["onetoc","onetoc2","onetmp","onepkg"]
-  },
-  "application/oscore": {
-    "source": "iana"
-  },
-  "application/oxps": {
-    "source": "iana",
-    "extensions": ["oxps"]
-  },
-  "application/p2p-overlay+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["relo"]
-  },
-  "application/parityfec": {
-    "source": "iana"
-  },
-  "application/passport": {
-    "source": "iana"
-  },
-  "application/patch-ops-error+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xer"]
-  },
-  "application/pdf": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["pdf"]
-  },
-  "application/pdx": {
-    "source": "iana"
-  },
-  "application/pem-certificate-chain": {
-    "source": "iana"
-  },
-  "application/pgp-encrypted": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["pgp"]
-  },
-  "application/pgp-keys": {
-    "source": "iana"
-  },
-  "application/pgp-signature": {
-    "source": "iana",
-    "extensions": ["asc","sig"]
-  },
-  "application/pics-rules": {
-    "source": "apache",
-    "extensions": ["prf"]
-  },
-  "application/pidf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/pidf-diff+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/pkcs10": {
-    "source": "iana",
-    "extensions": ["p10"]
-  },
-  "application/pkcs12": {
-    "source": "iana"
-  },
-  "application/pkcs7-mime": {
-    "source": "iana",
-    "extensions": ["p7m","p7c"]
-  },
-  "application/pkcs7-signature": {
-    "source": "iana",
-    "extensions": ["p7s"]
-  },
-  "application/pkcs8": {
-    "source": "iana",
-    "extensions": ["p8"]
-  },
-  "application/pkcs8-encrypted": {
-    "source": "iana"
-  },
-  "application/pkix-attr-cert": {
-    "source": "iana",
-    "extensions": ["ac"]
-  },
-  "application/pkix-cert": {
-    "source": "iana",
-    "extensions": ["cer"]
-  },
-  "application/pkix-crl": {
-    "source": "iana",
-    "extensions": ["crl"]
-  },
-  "application/pkix-pkipath": {
-    "source": "iana",
-    "extensions": ["pkipath"]
-  },
-  "application/pkixcmp": {
-    "source": "iana",
-    "extensions": ["pki"]
-  },
-  "application/pls+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["pls"]
-  },
-  "application/poc-settings+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/postscript": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ai","eps","ps"]
-  },
-  "application/ppsp-tracker+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/problem+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/problem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/provenance+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["provx"]
-  },
-  "application/prs.alvestrand.titrax-sheet": {
-    "source": "iana"
-  },
-  "application/prs.cww": {
-    "source": "iana",
-    "extensions": ["cww"]
-  },
-  "application/prs.hpub+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/prs.nprend": {
-    "source": "iana"
-  },
-  "application/prs.plucker": {
-    "source": "iana"
-  },
-  "application/prs.rdf-xml-crypt": {
-    "source": "iana"
-  },
-  "application/prs.xsf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/pskc+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["pskcxml"]
-  },
-  "application/qsig": {
-    "source": "iana"
-  },
-  "application/raml+yaml": {
-    "compressible": true,
-    "extensions": ["raml"]
-  },
-  "application/raptorfec": {
-    "source": "iana"
-  },
-  "application/rdap+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/rdf+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rdf","owl"]
-  },
-  "application/reginfo+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rif"]
-  },
-  "application/relax-ng-compact-syntax": {
-    "source": "iana",
-    "extensions": ["rnc"]
-  },
-  "application/remote-printing": {
-    "source": "iana"
-  },
-  "application/reputon+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/resource-lists+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rl"]
-  },
-  "application/resource-lists-diff+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rld"]
-  },
-  "application/rfc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/riscos": {
-    "source": "iana"
-  },
-  "application/rlmi+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/rls-services+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rs"]
-  },
-  "application/route-apd+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rapd"]
-  },
-  "application/route-s-tsid+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sls"]
-  },
-  "application/route-usd+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rusd"]
-  },
-  "application/rpki-ghostbusters": {
-    "source": "iana",
-    "extensions": ["gbr"]
-  },
-  "application/rpki-manifest": {
-    "source": "iana",
-    "extensions": ["mft"]
-  },
-  "application/rpki-publication": {
-    "source": "iana"
-  },
-  "application/rpki-roa": {
-    "source": "iana",
-    "extensions": ["roa"]
-  },
-  "application/rpki-updown": {
-    "source": "iana"
-  },
-  "application/rsd+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["rsd"]
-  },
-  "application/rss+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["rss"]
-  },
-  "application/rtf": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rtf"]
-  },
-  "application/rtploopback": {
-    "source": "iana"
-  },
-  "application/rtx": {
-    "source": "iana"
-  },
-  "application/samlassertion+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/samlmetadata+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sbml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sbml"]
-  },
-  "application/scaip+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/scim+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/scvp-cv-request": {
-    "source": "iana",
-    "extensions": ["scq"]
-  },
-  "application/scvp-cv-response": {
-    "source": "iana",
-    "extensions": ["scs"]
-  },
-  "application/scvp-vp-request": {
-    "source": "iana",
-    "extensions": ["spq"]
-  },
-  "application/scvp-vp-response": {
-    "source": "iana",
-    "extensions": ["spp"]
-  },
-  "application/sdp": {
-    "source": "iana",
-    "extensions": ["sdp"]
-  },
-  "application/secevent+jwt": {
-    "source": "iana"
-  },
-  "application/senml+cbor": {
-    "source": "iana"
-  },
-  "application/senml+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/senml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["senmlx"]
-  },
-  "application/senml-exi": {
-    "source": "iana"
-  },
-  "application/sensml+cbor": {
-    "source": "iana"
-  },
-  "application/sensml+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sensml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sensmlx"]
-  },
-  "application/sensml-exi": {
-    "source": "iana"
-  },
-  "application/sep+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sep-exi": {
-    "source": "iana"
-  },
-  "application/session-info": {
-    "source": "iana"
-  },
-  "application/set-payment": {
-    "source": "iana"
-  },
-  "application/set-payment-initiation": {
-    "source": "iana",
-    "extensions": ["setpay"]
-  },
-  "application/set-registration": {
-    "source": "iana"
-  },
-  "application/set-registration-initiation": {
-    "source": "iana",
-    "extensions": ["setreg"]
-  },
-  "application/sgml": {
-    "source": "iana"
-  },
-  "application/sgml-open-catalog": {
-    "source": "iana"
-  },
-  "application/shf+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["shf"]
-  },
-  "application/sieve": {
-    "source": "iana",
-    "extensions": ["siv","sieve"]
-  },
-  "application/simple-filter+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/simple-message-summary": {
-    "source": "iana"
-  },
-  "application/simplesymbolcontainer": {
-    "source": "iana"
-  },
-  "application/sipc": {
-    "source": "iana"
-  },
-  "application/slate": {
-    "source": "iana"
-  },
-  "application/smil": {
-    "source": "iana"
-  },
-  "application/smil+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["smi","smil"]
-  },
-  "application/smpte336m": {
-    "source": "iana"
-  },
-  "application/soap+fastinfoset": {
-    "source": "iana"
-  },
-  "application/soap+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sparql-query": {
-    "source": "iana",
-    "extensions": ["rq"]
-  },
-  "application/sparql-results+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["srx"]
-  },
-  "application/spirits-event+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sql": {
-    "source": "iana"
-  },
-  "application/srgs": {
-    "source": "iana",
-    "extensions": ["gram"]
-  },
-  "application/srgs+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["grxml"]
-  },
-  "application/sru+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sru"]
-  },
-  "application/ssdl+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["ssdl"]
-  },
-  "application/ssml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ssml"]
-  },
-  "application/stix+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/swid+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["swidtag"]
-  },
-  "application/tamp-apex-update": {
-    "source": "iana"
-  },
-  "application/tamp-apex-update-confirm": {
-    "source": "iana"
-  },
-  "application/tamp-community-update": {
-    "source": "iana"
-  },
-  "application/tamp-community-update-confirm": {
-    "source": "iana"
-  },
-  "application/tamp-error": {
-    "source": "iana"
-  },
-  "application/tamp-sequence-adjust": {
-    "source": "iana"
-  },
-  "application/tamp-sequence-adjust-confirm": {
-    "source": "iana"
-  },
-  "application/tamp-status-query": {
-    "source": "iana"
-  },
-  "application/tamp-status-response": {
-    "source": "iana"
-  },
-  "application/tamp-update": {
-    "source": "iana"
-  },
-  "application/tamp-update-confirm": {
-    "source": "iana"
-  },
-  "application/tar": {
-    "compressible": true
-  },
-  "application/taxii+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/tei+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["tei","teicorpus"]
-  },
-  "application/tetra_isi": {
-    "source": "iana"
-  },
-  "application/thraud+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["tfi"]
-  },
-  "application/timestamp-query": {
-    "source": "iana"
-  },
-  "application/timestamp-reply": {
-    "source": "iana"
-  },
-  "application/timestamped-data": {
-    "source": "iana",
-    "extensions": ["tsd"]
-  },
-  "application/tlsrpt+gzip": {
-    "source": "iana"
-  },
-  "application/tlsrpt+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/tnauthlist": {
-    "source": "iana"
-  },
-  "application/toml": {
-    "compressible": true,
-    "extensions": ["toml"]
-  },
-  "application/trickle-ice-sdpfrag": {
-    "source": "iana"
-  },
-  "application/trig": {
-    "source": "iana"
-  },
-  "application/ttml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ttml"]
-  },
-  "application/tve-trigger": {
-    "source": "iana"
-  },
-  "application/tzif": {
-    "source": "iana"
-  },
-  "application/tzif-leap": {
-    "source": "iana"
-  },
-  "application/ulpfec": {
-    "source": "iana"
-  },
-  "application/urc-grpsheet+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/urc-ressheet+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rsheet"]
-  },
-  "application/urc-targetdesc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/urc-uisocketdesc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vcard+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vcard+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vemmi": {
-    "source": "iana"
-  },
-  "application/vividence.scriptfile": {
-    "source": "apache"
-  },
-  "application/vnd.1000minds.decision-model+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["1km"]
-  },
-  "application/vnd.3gpp-prose+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp-prose-pc3ch+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp-v2x-local-service-information": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.access-transfer-events+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.bsf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.gmop+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mc-signalling-ear": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.mcdata-affiliation-command+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcdata-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcdata-payload": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.mcdata-service-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcdata-signalling": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.mcdata-ue-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcdata-user-profile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-affiliation-command+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-floor-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-location-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-service-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-signed+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-ue-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-ue-init-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-user-profile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-affiliation-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-location-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-service-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-transmission-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-ue-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-user-profile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mid-call+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.pic-bw-large": {
-    "source": "iana",
-    "extensions": ["plb"]
-  },
-  "application/vnd.3gpp.pic-bw-small": {
-    "source": "iana",
-    "extensions": ["psb"]
-  },
-  "application/vnd.3gpp.pic-bw-var": {
-    "source": "iana",
-    "extensions": ["pvb"]
-  },
-  "application/vnd.3gpp.sms": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.sms+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.srvcc-ext+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.srvcc-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.state-and-event-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.ussd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp2.bcmcsinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp2.sms": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp2.tcap": {
-    "source": "iana",
-    "extensions": ["tcap"]
-  },
-  "application/vnd.3lightssoftware.imagescal": {
-    "source": "iana"
-  },
-  "application/vnd.3m.post-it-notes": {
-    "source": "iana",
-    "extensions": ["pwn"]
-  },
-  "application/vnd.accpac.simply.aso": {
-    "source": "iana",
-    "extensions": ["aso"]
-  },
-  "application/vnd.accpac.simply.imp": {
-    "source": "iana",
-    "extensions": ["imp"]
-  },
-  "application/vnd.acucobol": {
-    "source": "iana",
-    "extensions": ["acu"]
-  },
-  "application/vnd.acucorp": {
-    "source": "iana",
-    "extensions": ["atc","acutc"]
-  },
-  "application/vnd.adobe.air-application-installer-package+zip": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["air"]
-  },
-  "application/vnd.adobe.flash.movie": {
-    "source": "iana"
-  },
-  "application/vnd.adobe.formscentral.fcdt": {
-    "source": "iana",
-    "extensions": ["fcdt"]
-  },
-  "application/vnd.adobe.fxp": {
-    "source": "iana",
-    "extensions": ["fxp","fxpl"]
-  },
-  "application/vnd.adobe.partial-upload": {
-    "source": "iana"
-  },
-  "application/vnd.adobe.xdp+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdp"]
-  },
-  "application/vnd.adobe.xfdf": {
-    "source": "iana",
-    "extensions": ["xfdf"]
-  },
-  "application/vnd.aether.imp": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.afplinedata": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.afplinedata-pagedef": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.foca-charset": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.foca-codedfont": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.foca-codepage": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-formdef": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-mediummap": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-objectcontainer": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-overlay": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-pagesegment": {
-    "source": "iana"
-  },
-  "application/vnd.ah-barcode": {
-    "source": "iana"
-  },
-  "application/vnd.ahead.space": {
-    "source": "iana",
-    "extensions": ["ahead"]
-  },
-  "application/vnd.airzip.filesecure.azf": {
-    "source": "iana",
-    "extensions": ["azf"]
-  },
-  "application/vnd.airzip.filesecure.azs": {
-    "source": "iana",
-    "extensions": ["azs"]
-  },
-  "application/vnd.amadeus+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.amazon.ebook": {
-    "source": "apache",
-    "extensions": ["azw"]
-  },
-  "application/vnd.amazon.mobi8-ebook": {
-    "source": "iana"
-  },
-  "application/vnd.americandynamics.acc": {
-    "source": "iana",
-    "extensions": ["acc"]
-  },
-  "application/vnd.amiga.ami": {
-    "source": "iana",
-    "extensions": ["ami"]
-  },
-  "application/vnd.amundsen.maze+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.android.ota": {
-    "source": "iana"
-  },
-  "application/vnd.android.package-archive": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["apk"]
-  },
-  "application/vnd.anki": {
-    "source": "iana"
-  },
-  "application/vnd.anser-web-certificate-issue-initiation": {
-    "source": "iana",
-    "extensions": ["cii"]
-  },
-  "application/vnd.anser-web-funds-transfer-initiation": {
-    "source": "apache",
-    "extensions": ["fti"]
-  },
-  "application/vnd.antix.game-component": {
-    "source": "iana",
-    "extensions": ["atx"]
-  },
-  "application/vnd.apache.thrift.binary": {
-    "source": "iana"
-  },
-  "application/vnd.apache.thrift.compact": {
-    "source": "iana"
-  },
-  "application/vnd.apache.thrift.json": {
-    "source": "iana"
-  },
-  "application/vnd.api+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.aplextor.warrp+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.apothekende.reservation+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.apple.installer+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mpkg"]
-  },
-  "application/vnd.apple.keynote": {
-    "source": "iana",
-    "extensions": ["keynote"]
-  },
-  "application/vnd.apple.mpegurl": {
-    "source": "iana",
-    "extensions": ["m3u8"]
-  },
-  "application/vnd.apple.numbers": {
-    "source": "iana",
-    "extensions": ["numbers"]
-  },
-  "application/vnd.apple.pages": {
-    "source": "iana",
-    "extensions": ["pages"]
-  },
-  "application/vnd.apple.pkpass": {
-    "compressible": false,
-    "extensions": ["pkpass"]
-  },
-  "application/vnd.arastra.swi": {
-    "source": "iana"
-  },
-  "application/vnd.aristanetworks.swi": {
-    "source": "iana",
-    "extensions": ["swi"]
-  },
-  "application/vnd.artisan+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.artsquare": {
-    "source": "iana"
-  },
-  "application/vnd.astraea-software.iota": {
-    "source": "iana",
-    "extensions": ["iota"]
-  },
-  "application/vnd.audiograph": {
-    "source": "iana",
-    "extensions": ["aep"]
-  },
-  "application/vnd.autopackage": {
-    "source": "iana"
-  },
-  "application/vnd.avalon+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.avistar+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.balsamiq.bmml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["bmml"]
-  },
-  "application/vnd.balsamiq.bmpr": {
-    "source": "iana"
-  },
-  "application/vnd.banana-accounting": {
-    "source": "iana"
-  },
-  "application/vnd.bbf.usp.error": {
-    "source": "iana"
-  },
-  "application/vnd.bbf.usp.msg": {
-    "source": "iana"
-  },
-  "application/vnd.bbf.usp.msg+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.bekitzur-stech+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.bint.med-content": {
-    "source": "iana"
-  },
-  "application/vnd.biopax.rdf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.blink-idb-value-wrapper": {
-    "source": "iana"
-  },
-  "application/vnd.blueice.multipass": {
-    "source": "iana",
-    "extensions": ["mpm"]
-  },
-  "application/vnd.bluetooth.ep.oob": {
-    "source": "iana"
-  },
-  "application/vnd.bluetooth.le.oob": {
-    "source": "iana"
-  },
-  "application/vnd.bmi": {
-    "source": "iana",
-    "extensions": ["bmi"]
-  },
-  "application/vnd.bpf": {
-    "source": "iana"
-  },
-  "application/vnd.bpf3": {
-    "source": "iana"
-  },
-  "application/vnd.businessobjects": {
-    "source": "iana",
-    "extensions": ["rep"]
-  },
-  "application/vnd.byu.uapi+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cab-jscript": {
-    "source": "iana"
-  },
-  "application/vnd.canon-cpdl": {
-    "source": "iana"
-  },
-  "application/vnd.canon-lips": {
-    "source": "iana"
-  },
-  "application/vnd.capasystems-pg+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cendio.thinlinc.clientconf": {
-    "source": "iana"
-  },
-  "application/vnd.century-systems.tcp_stream": {
-    "source": "iana"
-  },
-  "application/vnd.chemdraw+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["cdxml"]
-  },
-  "application/vnd.chess-pgn": {
-    "source": "iana"
-  },
-  "application/vnd.chipnuts.karaoke-mmd": {
-    "source": "iana",
-    "extensions": ["mmd"]
-  },
-  "application/vnd.ciedi": {
-    "source": "iana"
-  },
-  "application/vnd.cinderella": {
-    "source": "iana",
-    "extensions": ["cdy"]
-  },
-  "application/vnd.cirpack.isdn-ext": {
-    "source": "iana"
-  },
-  "application/vnd.citationstyles.style+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["csl"]
-  },
-  "application/vnd.claymore": {
-    "source": "iana",
-    "extensions": ["cla"]
-  },
-  "application/vnd.cloanto.rp9": {
-    "source": "iana",
-    "extensions": ["rp9"]
-  },
-  "application/vnd.clonk.c4group": {
-    "source": "iana",
-    "extensions": ["c4g","c4d","c4f","c4p","c4u"]
-  },
-  "application/vnd.cluetrust.cartomobile-config": {
-    "source": "iana",
-    "extensions": ["c11amc"]
-  },
-  "application/vnd.cluetrust.cartomobile-config-pkg": {
-    "source": "iana",
-    "extensions": ["c11amz"]
-  },
-  "application/vnd.coffeescript": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.document": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.document-template": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.presentation": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.presentation-template": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.spreadsheet": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.spreadsheet-template": {
-    "source": "iana"
-  },
-  "application/vnd.collection+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.collection.doc+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.collection.next+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.comicbook+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.comicbook-rar": {
-    "source": "iana"
-  },
-  "application/vnd.commerce-battelle": {
-    "source": "iana"
-  },
-  "application/vnd.commonspace": {
-    "source": "iana",
-    "extensions": ["csp"]
-  },
-  "application/vnd.contact.cmsg": {
-    "source": "iana",
-    "extensions": ["cdbcmsg"]
-  },
-  "application/vnd.coreos.ignition+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cosmocaller": {
-    "source": "iana",
-    "extensions": ["cmc"]
-  },
-  "application/vnd.crick.clicker": {
-    "source": "iana",
-    "extensions": ["clkx"]
-  },
-  "application/vnd.crick.clicker.keyboard": {
-    "source": "iana",
-    "extensions": ["clkk"]
-  },
-  "application/vnd.crick.clicker.palette": {
-    "source": "iana",
-    "extensions": ["clkp"]
-  },
-  "application/vnd.crick.clicker.template": {
-    "source": "iana",
-    "extensions": ["clkt"]
-  },
-  "application/vnd.crick.clicker.wordbank": {
-    "source": "iana",
-    "extensions": ["clkw"]
-  },
-  "application/vnd.criticaltools.wbs+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["wbs"]
-  },
-  "application/vnd.cryptii.pipe+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.crypto-shade-file": {
-    "source": "iana"
-  },
-  "application/vnd.ctc-posml": {
-    "source": "iana",
-    "extensions": ["pml"]
-  },
-  "application/vnd.ctct.ws+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cups-pdf": {
-    "source": "iana"
-  },
-  "application/vnd.cups-postscript": {
-    "source": "iana"
-  },
-  "application/vnd.cups-ppd": {
-    "source": "iana",
-    "extensions": ["ppd"]
-  },
-  "application/vnd.cups-raster": {
-    "source": "iana"
-  },
-  "application/vnd.cups-raw": {
-    "source": "iana"
-  },
-  "application/vnd.curl": {
-    "source": "iana"
-  },
-  "application/vnd.curl.car": {
-    "source": "apache",
-    "extensions": ["car"]
-  },
-  "application/vnd.curl.pcurl": {
-    "source": "apache",
-    "extensions": ["pcurl"]
-  },
-  "application/vnd.cyan.dean.root+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cybank": {
-    "source": "iana"
-  },
-  "application/vnd.d2l.coursepackage1p0+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.dart": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dart"]
-  },
-  "application/vnd.data-vision.rdz": {
-    "source": "iana",
-    "extensions": ["rdz"]
-  },
-  "application/vnd.datapackage+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dataresource+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.debian.binary-package": {
-    "source": "iana"
-  },
-  "application/vnd.dece.data": {
-    "source": "iana",
-    "extensions": ["uvf","uvvf","uvd","uvvd"]
-  },
-  "application/vnd.dece.ttml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["uvt","uvvt"]
-  },
-  "application/vnd.dece.unspecified": {
-    "source": "iana",
-    "extensions": ["uvx","uvvx"]
-  },
-  "application/vnd.dece.zip": {
-    "source": "iana",
-    "extensions": ["uvz","uvvz"]
-  },
-  "application/vnd.denovo.fcselayout-link": {
-    "source": "iana",
-    "extensions": ["fe_launch"]
-  },
-  "application/vnd.desmume.movie": {
-    "source": "iana"
-  },
-  "application/vnd.dir-bi.plate-dl-nosuffix": {
-    "source": "iana"
-  },
-  "application/vnd.dm.delegation+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dna": {
-    "source": "iana",
-    "extensions": ["dna"]
-  },
-  "application/vnd.document+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dolby.mlp": {
-    "source": "apache",
-    "extensions": ["mlp"]
-  },
-  "application/vnd.dolby.mobile.1": {
-    "source": "iana"
-  },
-  "application/vnd.dolby.mobile.2": {
-    "source": "iana"
-  },
-  "application/vnd.doremir.scorecloud-binary-document": {
-    "source": "iana"
-  },
-  "application/vnd.dpgraph": {
-    "source": "iana",
-    "extensions": ["dpg"]
-  },
-  "application/vnd.dreamfactory": {
-    "source": "iana",
-    "extensions": ["dfac"]
-  },
-  "application/vnd.drive+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ds-keypoint": {
-    "source": "apache",
-    "extensions": ["kpxx"]
-  },
-  "application/vnd.dtg.local": {
-    "source": "iana"
-  },
-  "application/vnd.dtg.local.flash": {
-    "source": "iana"
-  },
-  "application/vnd.dtg.local.html": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ait": {
-    "source": "iana",
-    "extensions": ["ait"]
-  },
-  "application/vnd.dvb.dvbj": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.esgcontainer": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcdftnotifaccess": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcesgaccess": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcesgaccess2": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcesgpdd": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcroaming": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.iptv.alfec-base": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.iptv.alfec-enhancement": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.notif-aggregate-root+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-container+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-generic+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-ia-msglist+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-ia-registration-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-ia-registration-response+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-init+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.pfr": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.service": {
-    "source": "iana",
-    "extensions": ["svc"]
-  },
-  "application/vnd.dxr": {
-    "source": "iana"
-  },
-  "application/vnd.dynageo": {
-    "source": "iana",
-    "extensions": ["geo"]
-  },
-  "application/vnd.dzr": {
-    "source": "iana"
-  },
-  "application/vnd.easykaraoke.cdgdownload": {
-    "source": "iana"
-  },
-  "application/vnd.ecdis-update": {
-    "source": "iana"
-  },
-  "application/vnd.ecip.rlp": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.chart": {
-    "source": "iana",
-    "extensions": ["mag"]
-  },
-  "application/vnd.ecowin.filerequest": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.fileupdate": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.series": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.seriesrequest": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.seriesupdate": {
-    "source": "iana"
-  },
-  "application/vnd.efi.img": {
-    "source": "iana"
-  },
-  "application/vnd.efi.iso": {
-    "source": "iana"
-  },
-  "application/vnd.emclient.accessrequest+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.enliven": {
-    "source": "iana",
-    "extensions": ["nml"]
-  },
-  "application/vnd.enphase.envoy": {
-    "source": "iana"
-  },
-  "application/vnd.eprints.data+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.epson.esf": {
-    "source": "iana",
-    "extensions": ["esf"]
-  },
-  "application/vnd.epson.msf": {
-    "source": "iana",
-    "extensions": ["msf"]
-  },
-  "application/vnd.epson.quickanime": {
-    "source": "iana",
-    "extensions": ["qam"]
-  },
-  "application/vnd.epson.salt": {
-    "source": "iana",
-    "extensions": ["slt"]
-  },
-  "application/vnd.epson.ssf": {
-    "source": "iana",
-    "extensions": ["ssf"]
-  },
-  "application/vnd.ericsson.quickcall": {
-    "source": "iana"
-  },
-  "application/vnd.espass-espass+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.eszigno3+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["es3","et3"]
-  },
-  "application/vnd.etsi.aoc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.asic-e+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.etsi.asic-s+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.etsi.cug+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvcommand+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvdiscovery+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvprofile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvsad-bc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvsad-cod+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvsad-npvr+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvservice+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvsync+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvueprofile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.mcid+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.mheg5": {
-    "source": "iana"
-  },
-  "application/vnd.etsi.overload-control-policy-dataset+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.pstn+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.sci+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.simservs+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.timestamp-token": {
-    "source": "iana"
-  },
-  "application/vnd.etsi.tsl+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.tsl.der": {
-    "source": "iana"
-  },
-  "application/vnd.eudora.data": {
-    "source": "iana"
-  },
-  "application/vnd.evolv.ecig.profile": {
-    "source": "iana"
-  },
-  "application/vnd.evolv.ecig.settings": {
-    "source": "iana"
-  },
-  "application/vnd.evolv.ecig.theme": {
-    "source": "iana"
-  },
-  "application/vnd.exstream-empower+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.exstream-package": {
-    "source": "iana"
-  },
-  "application/vnd.ezpix-album": {
-    "source": "iana",
-    "extensions": ["ez2"]
-  },
-  "application/vnd.ezpix-package": {
-    "source": "iana",
-    "extensions": ["ez3"]
-  },
-  "application/vnd.f-secure.mobile": {
-    "source": "iana"
-  },
-  "application/vnd.fastcopy-disk-image": {
-    "source": "iana"
-  },
-  "application/vnd.fdf": {
-    "source": "iana",
-    "extensions": ["fdf"]
-  },
-  "application/vnd.fdsn.mseed": {
-    "source": "iana",
-    "extensions": ["mseed"]
-  },
-  "application/vnd.fdsn.seed": {
-    "source": "iana",
-    "extensions": ["seed","dataless"]
-  },
-  "application/vnd.ffsns": {
-    "source": "iana"
-  },
-  "application/vnd.ficlab.flb+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.filmit.zfc": {
-    "source": "iana"
-  },
-  "application/vnd.fints": {
-    "source": "iana"
-  },
-  "application/vnd.firemonkeys.cloudcell": {
-    "source": "iana"
-  },
-  "application/vnd.flographit": {
-    "source": "iana",
-    "extensions": ["gph"]
-  },
-  "application/vnd.fluxtime.clip": {
-    "source": "iana",
-    "extensions": ["ftc"]
-  },
-  "application/vnd.font-fontforge-sfd": {
-    "source": "iana"
-  },
-  "application/vnd.framemaker": {
-    "source": "iana",
-    "extensions": ["fm","frame","maker","book"]
-  },
-  "application/vnd.frogans.fnc": {
-    "source": "iana",
-    "extensions": ["fnc"]
-  },
-  "application/vnd.frogans.ltf": {
-    "source": "iana",
-    "extensions": ["ltf"]
-  },
-  "application/vnd.fsc.weblaunch": {
-    "source": "iana",
-    "extensions": ["fsc"]
-  },
-  "application/vnd.fujitsu.oasys": {
-    "source": "iana",
-    "extensions": ["oas"]
-  },
-  "application/vnd.fujitsu.oasys2": {
-    "source": "iana",
-    "extensions": ["oa2"]
-  },
-  "application/vnd.fujitsu.oasys3": {
-    "source": "iana",
-    "extensions": ["oa3"]
-  },
-  "application/vnd.fujitsu.oasysgp": {
-    "source": "iana",
-    "extensions": ["fg5"]
-  },
-  "application/vnd.fujitsu.oasysprs": {
-    "source": "iana",
-    "extensions": ["bh2"]
-  },
-  "application/vnd.fujixerox.art-ex": {
-    "source": "iana"
-  },
-  "application/vnd.fujixerox.art4": {
-    "source": "iana"
-  },
-  "application/vnd.fujixerox.ddd": {
-    "source": "iana",
-    "extensions": ["ddd"]
-  },
-  "application/vnd.fujixerox.docuworks": {
-    "source": "iana",
-    "extensions": ["xdw"]
-  },
-  "application/vnd.fujixerox.docuworks.binder": {
-    "source": "iana",
-    "extensions": ["xbd"]
-  },
-  "application/vnd.fujixerox.docuworks.container": {
-    "source": "iana"
-  },
-  "application/vnd.fujixerox.hbpl": {
-    "source": "iana"
-  },
-  "application/vnd.fut-misnet": {
-    "source": "iana"
-  },
-  "application/vnd.futoin+cbor": {
-    "source": "iana"
-  },
-  "application/vnd.futoin+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.fuzzysheet": {
-    "source": "iana",
-    "extensions": ["fzs"]
-  },
-  "application/vnd.genomatix.tuxedo": {
-    "source": "iana",
-    "extensions": ["txd"]
-  },
-  "application/vnd.gentics.grd+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.geo+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.geocube+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.geogebra.file": {
-    "source": "iana",
-    "extensions": ["ggb"]
-  },
-  "application/vnd.geogebra.tool": {
-    "source": "iana",
-    "extensions": ["ggt"]
-  },
-  "application/vnd.geometry-explorer": {
-    "source": "iana",
-    "extensions": ["gex","gre"]
-  },
-  "application/vnd.geonext": {
-    "source": "iana",
-    "extensions": ["gxt"]
-  },
-  "application/vnd.geoplan": {
-    "source": "iana",
-    "extensions": ["g2w"]
-  },
-  "application/vnd.geospace": {
-    "source": "iana",
-    "extensions": ["g3w"]
-  },
-  "application/vnd.gerber": {
-    "source": "iana"
-  },
-  "application/vnd.globalplatform.card-content-mgt": {
-    "source": "iana"
-  },
-  "application/vnd.globalplatform.card-content-mgt-response": {
-    "source": "iana"
-  },
-  "application/vnd.gmx": {
-    "source": "iana",
-    "extensions": ["gmx"]
-  },
-  "application/vnd.google-apps.document": {
-    "compressible": false,
-    "extensions": ["gdoc"]
-  },
-  "application/vnd.google-apps.presentation": {
-    "compressible": false,
-    "extensions": ["gslides"]
-  },
-  "application/vnd.google-apps.spreadsheet": {
-    "compressible": false,
-    "extensions": ["gsheet"]
-  },
-  "application/vnd.google-earth.kml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["kml"]
-  },
-  "application/vnd.google-earth.kmz": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["kmz"]
-  },
-  "application/vnd.gov.sk.e-form+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.gov.sk.e-form+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.gov.sk.xmldatacontainer+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.grafeq": {
-    "source": "iana",
-    "extensions": ["gqf","gqs"]
-  },
-  "application/vnd.gridmp": {
-    "source": "iana"
-  },
-  "application/vnd.groove-account": {
-    "source": "iana",
-    "extensions": ["gac"]
-  },
-  "application/vnd.groove-help": {
-    "source": "iana",
-    "extensions": ["ghf"]
-  },
-  "application/vnd.groove-identity-message": {
-    "source": "iana",
-    "extensions": ["gim"]
-  },
-  "application/vnd.groove-injector": {
-    "source": "iana",
-    "extensions": ["grv"]
-  },
-  "application/vnd.groove-tool-message": {
-    "source": "iana",
-    "extensions": ["gtm"]
-  },
-  "application/vnd.groove-tool-template": {
-    "source": "iana",
-    "extensions": ["tpl"]
-  },
-  "application/vnd.groove-vcard": {
-    "source": "iana",
-    "extensions": ["vcg"]
-  },
-  "application/vnd.hal+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hal+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["hal"]
-  },
-  "application/vnd.handheld-entertainment+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["zmm"]
-  },
-  "application/vnd.hbci": {
-    "source": "iana",
-    "extensions": ["hbci"]
-  },
-  "application/vnd.hc+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hcl-bireports": {
-    "source": "iana"
-  },
-  "application/vnd.hdt": {
-    "source": "iana"
-  },
-  "application/vnd.heroku+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hhe.lesson-player": {
-    "source": "iana",
-    "extensions": ["les"]
-  },
-  "application/vnd.hp-hpgl": {
-    "source": "iana",
-    "extensions": ["hpgl"]
-  },
-  "application/vnd.hp-hpid": {
-    "source": "iana",
-    "extensions": ["hpid"]
-  },
-  "application/vnd.hp-hps": {
-    "source": "iana",
-    "extensions": ["hps"]
-  },
-  "application/vnd.hp-jlyt": {
-    "source": "iana",
-    "extensions": ["jlt"]
-  },
-  "application/vnd.hp-pcl": {
-    "source": "iana",
-    "extensions": ["pcl"]
-  },
-  "application/vnd.hp-pclxl": {
-    "source": "iana",
-    "extensions": ["pclxl"]
-  },
-  "application/vnd.httphone": {
-    "source": "iana"
-  },
-  "application/vnd.hydrostatix.sof-data": {
-    "source": "iana",
-    "extensions": ["sfd-hdstx"]
-  },
-  "application/vnd.hyper+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hyper-item+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hyperdrive+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hzn-3d-crossword": {
-    "source": "iana"
-  },
-  "application/vnd.ibm.afplinedata": {
-    "source": "iana"
-  },
-  "application/vnd.ibm.electronic-media": {
-    "source": "iana"
-  },
-  "application/vnd.ibm.minipay": {
-    "source": "iana",
-    "extensions": ["mpy"]
-  },
-  "application/vnd.ibm.modcap": {
-    "source": "iana",
-    "extensions": ["afp","listafp","list3820"]
-  },
-  "application/vnd.ibm.rights-management": {
-    "source": "iana",
-    "extensions": ["irm"]
-  },
-  "application/vnd.ibm.secure-container": {
-    "source": "iana",
-    "extensions": ["sc"]
-  },
-  "application/vnd.iccprofile": {
-    "source": "iana",
-    "extensions": ["icc","icm"]
-  },
-  "application/vnd.ieee.1905": {
-    "source": "iana"
-  },
-  "application/vnd.igloader": {
-    "source": "iana",
-    "extensions": ["igl"]
-  },
-  "application/vnd.imagemeter.folder+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.imagemeter.image+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.immervision-ivp": {
-    "source": "iana",
-    "extensions": ["ivp"]
-  },
-  "application/vnd.immervision-ivu": {
-    "source": "iana",
-    "extensions": ["ivu"]
-  },
-  "application/vnd.ims.imsccv1p1": {
-    "source": "iana"
-  },
-  "application/vnd.ims.imsccv1p2": {
-    "source": "iana"
-  },
-  "application/vnd.ims.imsccv1p3": {
-    "source": "iana"
-  },
-  "application/vnd.ims.lis.v2.result+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolproxy+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolproxy.id+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolsettings+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolsettings.simple+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.informedcontrol.rms+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.informix-visionary": {
-    "source": "iana"
-  },
-  "application/vnd.infotech.project": {
-    "source": "iana"
-  },
-  "application/vnd.infotech.project+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.innopath.wamp.notification": {
-    "source": "iana"
-  },
-  "application/vnd.insors.igm": {
-    "source": "iana",
-    "extensions": ["igm"]
-  },
-  "application/vnd.intercon.formnet": {
-    "source": "iana",
-    "extensions": ["xpw","xpx"]
-  },
-  "application/vnd.intergeo": {
-    "source": "iana",
-    "extensions": ["i2g"]
-  },
-  "application/vnd.intertrust.digibox": {
-    "source": "iana"
-  },
-  "application/vnd.intertrust.nncp": {
-    "source": "iana"
-  },
-  "application/vnd.intu.qbo": {
-    "source": "iana",
-    "extensions": ["qbo"]
-  },
-  "application/vnd.intu.qfx": {
-    "source": "iana",
-    "extensions": ["qfx"]
-  },
-  "application/vnd.iptc.g2.catalogitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.conceptitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.knowledgeitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.newsitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.newsmessage+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.packageitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.planningitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ipunplugged.rcprofile": {
-    "source": "iana",
-    "extensions": ["rcprofile"]
-  },
-  "application/vnd.irepository.package+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["irp"]
-  },
-  "application/vnd.is-xpr": {
-    "source": "iana",
-    "extensions": ["xpr"]
-  },
-  "application/vnd.isac.fcs": {
-    "source": "iana",
-    "extensions": ["fcs"]
-  },
-  "application/vnd.iso11783-10+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.jam": {
-    "source": "iana",
-    "extensions": ["jam"]
-  },
-  "application/vnd.japannet-directory-service": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-jpnstore-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-payment-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-registration": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-registration-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-setstore-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-verification": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-verification-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.jcp.javame.midlet-rms": {
-    "source": "iana",
-    "extensions": ["rms"]
-  },
-  "application/vnd.jisp": {
-    "source": "iana",
-    "extensions": ["jisp"]
-  },
-  "application/vnd.joost.joda-archive": {
-    "source": "iana",
-    "extensions": ["joda"]
-  },
-  "application/vnd.jsk.isdn-ngn": {
-    "source": "iana"
-  },
-  "application/vnd.kahootz": {
-    "source": "iana",
-    "extensions": ["ktz","ktr"]
-  },
-  "application/vnd.kde.karbon": {
-    "source": "iana",
-    "extensions": ["karbon"]
-  },
-  "application/vnd.kde.kchart": {
-    "source": "iana",
-    "extensions": ["chrt"]
-  },
-  "application/vnd.kde.kformula": {
-    "source": "iana",
-    "extensions": ["kfo"]
-  },
-  "application/vnd.kde.kivio": {
-    "source": "iana",
-    "extensions": ["flw"]
-  },
-  "application/vnd.kde.kontour": {
-    "source": "iana",
-    "extensions": ["kon"]
-  },
-  "application/vnd.kde.kpresenter": {
-    "source": "iana",
-    "extensions": ["kpr","kpt"]
-  },
-  "application/vnd.kde.kspread": {
-    "source": "iana",
-    "extensions": ["ksp"]
-  },
-  "application/vnd.kde.kword": {
-    "source": "iana",
-    "extensions": ["kwd","kwt"]
-  },
-  "application/vnd.kenameaapp": {
-    "source": "iana",
-    "extensions": ["htke"]
-  },
-  "application/vnd.kidspiration": {
-    "source": "iana",
-    "extensions": ["kia"]
-  },
-  "application/vnd.kinar": {
-    "source": "iana",
-    "extensions": ["kne","knp"]
-  },
-  "application/vnd.koan": {
-    "source": "iana",
-    "extensions": ["skp","skd","skt","skm"]
-  },
-  "application/vnd.kodak-descriptor": {
-    "source": "iana",
-    "extensions": ["sse"]
-  },
-  "application/vnd.las": {
-    "source": "iana"
-  },
-  "application/vnd.las.las+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.las.las+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["lasxml"]
-  },
-  "application/vnd.laszip": {
-    "source": "iana"
-  },
-  "application/vnd.leap+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.liberty-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.llamagraphics.life-balance.desktop": {
-    "source": "iana",
-    "extensions": ["lbd"]
-  },
-  "application/vnd.llamagraphics.life-balance.exchange+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["lbe"]
-  },
-  "application/vnd.logipipe.circuit+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.loom": {
-    "source": "iana"
-  },
-  "application/vnd.lotus-1-2-3": {
-    "source": "iana",
-    "extensions": ["123"]
-  },
-  "application/vnd.lotus-approach": {
-    "source": "iana",
-    "extensions": ["apr"]
-  },
-  "application/vnd.lotus-freelance": {
-    "source": "iana",
-    "extensions": ["pre"]
-  },
-  "application/vnd.lotus-notes": {
-    "source": "iana",
-    "extensions": ["nsf"]
-  },
-  "application/vnd.lotus-organizer": {
-    "source": "iana",
-    "extensions": ["org"]
-  },
-  "application/vnd.lotus-screencam": {
-    "source": "iana",
-    "extensions": ["scm"]
-  },
-  "application/vnd.lotus-wordpro": {
-    "source": "iana",
-    "extensions": ["lwp"]
-  },
-  "application/vnd.macports.portpkg": {
-    "source": "iana",
-    "extensions": ["portpkg"]
-  },
-  "application/vnd.mapbox-vector-tile": {
-    "source": "iana"
-  },
-  "application/vnd.marlin.drm.actiontoken+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.marlin.drm.conftoken+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.marlin.drm.license+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.marlin.drm.mdcf": {
-    "source": "iana"
-  },
-  "application/vnd.mason+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.maxmind.maxmind-db": {
-    "source": "iana"
-  },
-  "application/vnd.mcd": {
-    "source": "iana",
-    "extensions": ["mcd"]
-  },
-  "application/vnd.medcalcdata": {
-    "source": "iana",
-    "extensions": ["mc1"]
-  },
-  "application/vnd.mediastation.cdkey": {
-    "source": "iana",
-    "extensions": ["cdkey"]
-  },
-  "application/vnd.meridian-slingshot": {
-    "source": "iana"
-  },
-  "application/vnd.mfer": {
-    "source": "iana",
-    "extensions": ["mwf"]
-  },
-  "application/vnd.mfmp": {
-    "source": "iana",
-    "extensions": ["mfm"]
-  },
-  "application/vnd.micro+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.micrografx.flo": {
-    "source": "iana",
-    "extensions": ["flo"]
-  },
-  "application/vnd.micrografx.igx": {
-    "source": "iana",
-    "extensions": ["igx"]
-  },
-  "application/vnd.microsoft.portable-executable": {
-    "source": "iana"
-  },
-  "application/vnd.microsoft.windows.thumbnail-cache": {
-    "source": "iana"
-  },
-  "application/vnd.miele+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.mif": {
-    "source": "iana",
-    "extensions": ["mif"]
-  },
-  "application/vnd.minisoft-hp3000-save": {
-    "source": "iana"
-  },
-  "application/vnd.mitsubishi.misty-guard.trustweb": {
-    "source": "iana"
-  },
-  "application/vnd.mobius.daf": {
-    "source": "iana",
-    "extensions": ["daf"]
-  },
-  "application/vnd.mobius.dis": {
-    "source": "iana",
-    "extensions": ["dis"]
-  },
-  "application/vnd.mobius.mbk": {
-    "source": "iana",
-    "extensions": ["mbk"]
-  },
-  "application/vnd.mobius.mqy": {
-    "source": "iana",
-    "extensions": ["mqy"]
-  },
-  "application/vnd.mobius.msl": {
-    "source": "iana",
-    "extensions": ["msl"]
-  },
-  "application/vnd.mobius.plc": {
-    "source": "iana",
-    "extensions": ["plc"]
-  },
-  "application/vnd.mobius.txf": {
-    "source": "iana",
-    "extensions": ["txf"]
-  },
-  "application/vnd.mophun.application": {
-    "source": "iana",
-    "extensions": ["mpn"]
-  },
-  "application/vnd.mophun.certificate": {
-    "source": "iana",
-    "extensions": ["mpc"]
-  },
-  "application/vnd.motorola.flexsuite": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.adsi": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.fis": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.gotap": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.kmr": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.ttc": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.wem": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.iprm": {
-    "source": "iana"
-  },
-  "application/vnd.mozilla.xul+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xul"]
-  },
-  "application/vnd.ms-3mfdocument": {
-    "source": "iana"
-  },
-  "application/vnd.ms-artgalry": {
-    "source": "iana",
-    "extensions": ["cil"]
-  },
-  "application/vnd.ms-asf": {
-    "source": "iana"
-  },
-  "application/vnd.ms-cab-compressed": {
-    "source": "iana",
-    "extensions": ["cab"]
-  },
-  "application/vnd.ms-color.iccprofile": {
-    "source": "apache"
-  },
-  "application/vnd.ms-excel": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["xls","xlm","xla","xlc","xlt","xlw"]
-  },
-  "application/vnd.ms-excel.addin.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["xlam"]
-  },
-  "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["xlsb"]
-  },
-  "application/vnd.ms-excel.sheet.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["xlsm"]
-  },
-  "application/vnd.ms-excel.template.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["xltm"]
-  },
-  "application/vnd.ms-fontobject": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["eot"]
-  },
-  "application/vnd.ms-htmlhelp": {
-    "source": "iana",
-    "extensions": ["chm"]
-  },
-  "application/vnd.ms-ims": {
-    "source": "iana",
-    "extensions": ["ims"]
-  },
-  "application/vnd.ms-lrm": {
-    "source": "iana",
-    "extensions": ["lrm"]
-  },
-  "application/vnd.ms-office.activex+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ms-officetheme": {
-    "source": "iana",
-    "extensions": ["thmx"]
-  },
-  "application/vnd.ms-opentype": {
-    "source": "apache",
-    "compressible": true
-  },
-  "application/vnd.ms-outlook": {
-    "compressible": false,
-    "extensions": ["msg"]
-  },
-  "application/vnd.ms-package.obfuscated-opentype": {
-    "source": "apache"
-  },
-  "application/vnd.ms-pki.seccat": {
-    "source": "apache",
-    "extensions": ["cat"]
-  },
-  "application/vnd.ms-pki.stl": {
-    "source": "apache",
-    "extensions": ["stl"]
-  },
-  "application/vnd.ms-playready.initiator+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ms-powerpoint": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["ppt","pps","pot"]
-  },
-  "application/vnd.ms-powerpoint.addin.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["ppam"]
-  },
-  "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["pptm"]
-  },
-  "application/vnd.ms-powerpoint.slide.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["sldm"]
-  },
-  "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["ppsm"]
-  },
-  "application/vnd.ms-powerpoint.template.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["potm"]
-  },
-  "application/vnd.ms-printdevicecapabilities+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ms-printing.printticket+xml": {
-    "source": "apache",
-    "compressible": true
-  },
-  "application/vnd.ms-printschematicket+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ms-project": {
-    "source": "iana",
-    "extensions": ["mpp","mpt"]
-  },
-  "application/vnd.ms-tnef": {
-    "source": "iana"
-  },
-  "application/vnd.ms-windows.devicepairing": {
-    "source": "iana"
-  },
-  "application/vnd.ms-windows.nwprinting.oob": {
-    "source": "iana"
-  },
-  "application/vnd.ms-windows.printerpairing": {
-    "source": "iana"
-  },
-  "application/vnd.ms-windows.wsd.oob": {
-    "source": "iana"
-  },
-  "application/vnd.ms-wmdrm.lic-chlg-req": {
-    "source": "iana"
-  },
-  "application/vnd.ms-wmdrm.lic-resp": {
-    "source": "iana"
-  },
-  "application/vnd.ms-wmdrm.meter-chlg-req": {
-    "source": "iana"
-  },
-  "application/vnd.ms-wmdrm.meter-resp": {
-    "source": "iana"
-  },
-  "application/vnd.ms-word.document.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["docm"]
-  },
-  "application/vnd.ms-word.template.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["dotm"]
-  },
-  "application/vnd.ms-works": {
-    "source": "iana",
-    "extensions": ["wps","wks","wcm","wdb"]
-  },
-  "application/vnd.ms-wpl": {
-    "source": "iana",
-    "extensions": ["wpl"]
-  },
-  "application/vnd.ms-xpsdocument": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["xps"]
-  },
-  "application/vnd.msa-disk-image": {
-    "source": "iana"
-  },
-  "application/vnd.mseq": {
-    "source": "iana",
-    "extensions": ["mseq"]
-  },
-  "application/vnd.msign": {
-    "source": "iana"
-  },
-  "application/vnd.multiad.creator": {
-    "source": "iana"
-  },
-  "application/vnd.multiad.creator.cif": {
-    "source": "iana"
-  },
-  "application/vnd.music-niff": {
-    "source": "iana"
-  },
-  "application/vnd.musician": {
-    "source": "iana",
-    "extensions": ["mus"]
-  },
-  "application/vnd.muvee.style": {
-    "source": "iana",
-    "extensions": ["msty"]
-  },
-  "application/vnd.mynfc": {
-    "source": "iana",
-    "extensions": ["taglet"]
-  },
-  "application/vnd.ncd.control": {
-    "source": "iana"
-  },
-  "application/vnd.ncd.reference": {
-    "source": "iana"
-  },
-  "application/vnd.nearst.inv+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nervana": {
-    "source": "iana"
-  },
-  "application/vnd.netfpx": {
-    "source": "iana"
-  },
-  "application/vnd.neurolanguage.nlu": {
-    "source": "iana",
-    "extensions": ["nlu"]
-  },
-  "application/vnd.nimn": {
-    "source": "iana"
-  },
-  "application/vnd.nintendo.nitro.rom": {
-    "source": "iana"
-  },
-  "application/vnd.nintendo.snes.rom": {
-    "source": "iana"
-  },
-  "application/vnd.nitf": {
-    "source": "iana",
-    "extensions": ["ntf","nitf"]
-  },
-  "application/vnd.noblenet-directory": {
-    "source": "iana",
-    "extensions": ["nnd"]
-  },
-  "application/vnd.noblenet-sealer": {
-    "source": "iana",
-    "extensions": ["nns"]
-  },
-  "application/vnd.noblenet-web": {
-    "source": "iana",
-    "extensions": ["nnw"]
-  },
-  "application/vnd.nokia.catalogs": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.conml+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.conml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.iptv.config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.isds-radio-presets": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.landmark+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.landmark+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.landmarkcollection+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.n-gage.ac+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ac"]
-  },
-  "application/vnd.nokia.n-gage.data": {
-    "source": "iana",
-    "extensions": ["ngdat"]
-  },
-  "application/vnd.nokia.n-gage.symbian.install": {
-    "source": "iana",
-    "extensions": ["n-gage"]
-  },
-  "application/vnd.nokia.ncd": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.pcd+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.pcd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.radio-preset": {
-    "source": "iana",
-    "extensions": ["rpst"]
-  },
-  "application/vnd.nokia.radio-presets": {
-    "source": "iana",
-    "extensions": ["rpss"]
-  },
-  "application/vnd.novadigm.edm": {
-    "source": "iana",
-    "extensions": ["edm"]
-  },
-  "application/vnd.novadigm.edx": {
-    "source": "iana",
-    "extensions": ["edx"]
-  },
-  "application/vnd.novadigm.ext": {
-    "source": "iana",
-    "extensions": ["ext"]
-  },
-  "application/vnd.ntt-local.content-share": {
-    "source": "iana"
-  },
-  "application/vnd.ntt-local.file-transfer": {
-    "source": "iana"
-  },
-  "application/vnd.ntt-local.ogw_remote-access": {
-    "source": "iana"
-  },
-  "application/vnd.ntt-local.sip-ta_remote": {
-    "source": "iana"
-  },
-  "application/vnd.ntt-local.sip-ta_tcp_stream": {
-    "source": "iana"
-  },
-  "application/vnd.oasis.opendocument.chart": {
-    "source": "iana",
-    "extensions": ["odc"]
-  },
-  "application/vnd.oasis.opendocument.chart-template": {
-    "source": "iana",
-    "extensions": ["otc"]
-  },
-  "application/vnd.oasis.opendocument.database": {
-    "source": "iana",
-    "extensions": ["odb"]
-  },
-  "application/vnd.oasis.opendocument.formula": {
-    "source": "iana",
-    "extensions": ["odf"]
-  },
-  "application/vnd.oasis.opendocument.formula-template": {
-    "source": "iana",
-    "extensions": ["odft"]
-  },
-  "application/vnd.oasis.opendocument.graphics": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["odg"]
-  },
-  "application/vnd.oasis.opendocument.graphics-template": {
-    "source": "iana",
-    "extensions": ["otg"]
-  },
-  "application/vnd.oasis.opendocument.image": {
-    "source": "iana",
-    "extensions": ["odi"]
-  },
-  "application/vnd.oasis.opendocument.image-template": {
-    "source": "iana",
-    "extensions": ["oti"]
-  },
-  "application/vnd.oasis.opendocument.presentation": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["odp"]
-  },
-  "application/vnd.oasis.opendocument.presentation-template": {
-    "source": "iana",
-    "extensions": ["otp"]
-  },
-  "application/vnd.oasis.opendocument.spreadsheet": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["ods"]
-  },
-  "application/vnd.oasis.opendocument.spreadsheet-template": {
-    "source": "iana",
-    "extensions": ["ots"]
-  },
-  "application/vnd.oasis.opendocument.text": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["odt"]
-  },
-  "application/vnd.oasis.opendocument.text-master": {
-    "source": "iana",
-    "extensions": ["odm"]
-  },
-  "application/vnd.oasis.opendocument.text-template": {
-    "source": "iana",
-    "extensions": ["ott"]
-  },
-  "application/vnd.oasis.opendocument.text-web": {
-    "source": "iana",
-    "extensions": ["oth"]
-  },
-  "application/vnd.obn": {
-    "source": "iana"
-  },
-  "application/vnd.ocf+cbor": {
-    "source": "iana"
-  },
-  "application/vnd.oftn.l10n+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.contentaccessdownload+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.contentaccessstreaming+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.cspg-hexbinary": {
-    "source": "iana"
-  },
-  "application/vnd.oipf.dae.svg+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.dae.xhtml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.mippvcontrolmessage+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.pae.gem": {
-    "source": "iana"
-  },
-  "application/vnd.oipf.spdiscovery+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.spdlist+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.ueprofile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.userprofile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.olpc-sugar": {
-    "source": "iana",
-    "extensions": ["xo"]
-  },
-  "application/vnd.oma-scws-config": {
-    "source": "iana"
-  },
-  "application/vnd.oma-scws-http-request": {
-    "source": "iana"
-  },
-  "application/vnd.oma-scws-http-response": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.drm-trigger+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.imd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.ltkm": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.notification+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.provisioningtrigger": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.sgboot": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.sgdd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.sgdu": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.simple-symbol-container": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.smartcard-trigger+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.sprov+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.stkm": {
-    "source": "iana"
-  },
-  "application/vnd.oma.cab-address-book+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.cab-feature-handler+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.cab-pcc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.cab-subs-invite+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.cab-user-prefs+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.dcd": {
-    "source": "iana"
-  },
-  "application/vnd.oma.dcdc": {
-    "source": "iana"
-  },
-  "application/vnd.oma.dd2+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dd2"]
-  },
-  "application/vnd.oma.drm.risd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.group-usage-list+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.lwm2m+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.lwm2m+tlv": {
-    "source": "iana"
-  },
-  "application/vnd.oma.pal+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.detailed-progress-report+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.final-report+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.groups+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.invocation-descriptor+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.optimized-progress-report+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.push": {
-    "source": "iana"
-  },
-  "application/vnd.oma.scidm.messages+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.xcap-directory+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.omads-email+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.omads-file+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.omads-folder+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.omaloc-supl-init": {
-    "source": "iana"
-  },
-  "application/vnd.onepager": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertamp": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertamx": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertat": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertatp": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertatx": {
-    "source": "iana"
-  },
-  "application/vnd.openblox.game+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["obgx"]
-  },
-  "application/vnd.openblox.game-binary": {
-    "source": "iana"
-  },
-  "application/vnd.openeye.oeb": {
-    "source": "iana"
-  },
-  "application/vnd.openofficeorg.extension": {
-    "source": "apache",
-    "extensions": ["oxt"]
-  },
-  "application/vnd.openstreetmap.data+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["osm"]
-  },
-  "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawing+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["pptx"]
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slide": {
-    "source": "iana",
-    "extensions": ["sldx"]
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
-    "source": "iana",
-    "extensions": ["ppsx"]
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.template": {
-    "source": "iana",
-    "extensions": ["potx"]
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["xlsx"]
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
-    "source": "iana",
-    "extensions": ["xltx"]
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.theme+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.vmldrawing": {
-    "source": "iana"
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["docx"]
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
-    "source": "iana",
-    "extensions": ["dotx"]
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-package.core-properties+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-package.relationships+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oracle.resource+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.orange.indata": {
-    "source": "iana"
-  },
-  "application/vnd.osa.netdeploy": {
-    "source": "iana"
-  },
-  "application/vnd.osgeo.mapguide.package": {
-    "source": "iana",
-    "extensions": ["mgp"]
-  },
-  "application/vnd.osgi.bundle": {
-    "source": "iana"
-  },
-  "application/vnd.osgi.dp": {
-    "source": "iana",
-    "extensions": ["dp"]
-  },
-  "application/vnd.osgi.subsystem": {
-    "source": "iana",
-    "extensions": ["esa"]
-  },
-  "application/vnd.otps.ct-kip+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oxli.countgraph": {
-    "source": "iana"
-  },
-  "application/vnd.pagerduty+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.palm": {
-    "source": "iana",
-    "extensions": ["pdb","pqa","oprc"]
-  },
-  "application/vnd.panoply": {
-    "source": "iana"
-  },
-  "application/vnd.paos.xml": {
-    "source": "iana"
-  },
-  "application/vnd.patentdive": {
-    "source": "iana"
-  },
-  "application/vnd.patientecommsdoc": {
-    "source": "iana"
-  },
-  "application/vnd.pawaafile": {
-    "source": "iana",
-    "extensions": ["paw"]
-  },
-  "application/vnd.pcos": {
-    "source": "iana"
-  },
-  "application/vnd.pg.format": {
-    "source": "iana",
-    "extensions": ["str"]
-  },
-  "application/vnd.pg.osasli": {
-    "source": "iana",
-    "extensions": ["ei6"]
-  },
-  "application/vnd.piaccess.application-licence": {
-    "source": "iana"
-  },
-  "application/vnd.picsel": {
-    "source": "iana",
-    "extensions": ["efif"]
-  },
-  "application/vnd.pmi.widget": {
-    "source": "iana",
-    "extensions": ["wg"]
-  },
-  "application/vnd.poc.group-advertisement+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.pocketlearn": {
-    "source": "iana",
-    "extensions": ["plf"]
-  },
-  "application/vnd.powerbuilder6": {
-    "source": "iana",
-    "extensions": ["pbd"]
-  },
-  "application/vnd.powerbuilder6-s": {
-    "source": "iana"
-  },
-  "application/vnd.powerbuilder7": {
-    "source": "iana"
-  },
-  "application/vnd.powerbuilder7-s": {
-    "source": "iana"
-  },
-  "application/vnd.powerbuilder75": {
-    "source": "iana"
-  },
-  "application/vnd.powerbuilder75-s": {
-    "source": "iana"
-  },
-  "application/vnd.preminet": {
-    "source": "iana"
-  },
-  "application/vnd.previewsystems.box": {
-    "source": "iana",
-    "extensions": ["box"]
-  },
-  "application/vnd.proteus.magazine": {
-    "source": "iana",
-    "extensions": ["mgz"]
-  },
-  "application/vnd.psfs": {
-    "source": "iana"
-  },
-  "application/vnd.publishare-delta-tree": {
-    "source": "iana",
-    "extensions": ["qps"]
-  },
-  "application/vnd.pvi.ptid1": {
-    "source": "iana",
-    "extensions": ["ptid"]
-  },
-  "application/vnd.pwg-multiplexed": {
-    "source": "iana"
-  },
-  "application/vnd.pwg-xhtml-print+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.qualcomm.brew-app-res": {
-    "source": "iana"
-  },
-  "application/vnd.quarantainenet": {
-    "source": "iana"
-  },
-  "application/vnd.quark.quarkxpress": {
-    "source": "iana",
-    "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"]
-  },
-  "application/vnd.quobject-quoxdocument": {
-    "source": "iana"
-  },
-  "application/vnd.radisys.moml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit-conf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit-conn+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit-dialog+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit-stream+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-conf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-base+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-fax-detect+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-group+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-speech+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-transform+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.rainstor.data": {
-    "source": "iana"
-  },
-  "application/vnd.rapid": {
-    "source": "iana"
-  },
-  "application/vnd.rar": {
-    "source": "iana"
-  },
-  "application/vnd.realvnc.bed": {
-    "source": "iana",
-    "extensions": ["bed"]
-  },
-  "application/vnd.recordare.musicxml": {
-    "source": "iana",
-    "extensions": ["mxl"]
-  },
-  "application/vnd.recordare.musicxml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["musicxml"]
-  },
-  "application/vnd.renlearn.rlprint": {
-    "source": "iana"
-  },
-  "application/vnd.restful+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.rig.cryptonote": {
-    "source": "iana",
-    "extensions": ["cryptonote"]
-  },
-  "application/vnd.rim.cod": {
-    "source": "apache",
-    "extensions": ["cod"]
-  },
-  "application/vnd.rn-realmedia": {
-    "source": "apache",
-    "extensions": ["rm"]
-  },
-  "application/vnd.rn-realmedia-vbr": {
-    "source": "apache",
-    "extensions": ["rmvb"]
-  },
-  "application/vnd.route66.link66+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["link66"]
-  },
-  "application/vnd.rs-274x": {
-    "source": "iana"
-  },
-  "application/vnd.ruckus.download": {
-    "source": "iana"
-  },
-  "application/vnd.s3sms": {
-    "source": "iana"
-  },
-  "application/vnd.sailingtracker.track": {
-    "source": "iana",
-    "extensions": ["st"]
-  },
-  "application/vnd.sbm.cid": {
-    "source": "iana"
-  },
-  "application/vnd.sbm.mid2": {
-    "source": "iana"
-  },
-  "application/vnd.scribus": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.3df": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.csf": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.doc": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.eml": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.mht": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.net": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.ppt": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.tiff": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.xls": {
-    "source": "iana"
-  },
-  "application/vnd.sealedmedia.softseal.html": {
-    "source": "iana"
-  },
-  "application/vnd.sealedmedia.softseal.pdf": {
-    "source": "iana"
-  },
-  "application/vnd.seemail": {
-    "source": "iana",
-    "extensions": ["see"]
-  },
-  "application/vnd.sema": {
-    "source": "iana",
-    "extensions": ["sema"]
-  },
-  "application/vnd.semd": {
-    "source": "iana",
-    "extensions": ["semd"]
-  },
-  "application/vnd.semf": {
-    "source": "iana",
-    "extensions": ["semf"]
-  },
-  "application/vnd.shade-save-file": {
-    "source": "iana"
-  },
-  "application/vnd.shana.informed.formdata": {
-    "source": "iana",
-    "extensions": ["ifm"]
-  },
-  "application/vnd.shana.informed.formtemplate": {
-    "source": "iana",
-    "extensions": ["itp"]
-  },
-  "application/vnd.shana.informed.interchange": {
-    "source": "iana",
-    "extensions": ["iif"]
-  },
-  "application/vnd.shana.informed.package": {
-    "source": "iana",
-    "extensions": ["ipk"]
-  },
-  "application/vnd.shootproof+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.shopkick+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.sigrok.session": {
-    "source": "iana"
-  },
-  "application/vnd.simtech-mindmapper": {
-    "source": "iana",
-    "extensions": ["twd","twds"]
-  },
-  "application/vnd.siren+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.smaf": {
-    "source": "iana",
-    "extensions": ["mmf"]
-  },
-  "application/vnd.smart.notebook": {
-    "source": "iana"
-  },
-  "application/vnd.smart.teacher": {
-    "source": "iana",
-    "extensions": ["teacher"]
-  },
-  "application/vnd.software602.filler.form+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["fo"]
-  },
-  "application/vnd.software602.filler.form-xml-zip": {
-    "source": "iana"
-  },
-  "application/vnd.solent.sdkm+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sdkm","sdkd"]
-  },
-  "application/vnd.spotfire.dxp": {
-    "source": "iana",
-    "extensions": ["dxp"]
-  },
-  "application/vnd.spotfire.sfs": {
-    "source": "iana",
-    "extensions": ["sfs"]
-  },
-  "application/vnd.sqlite3": {
-    "source": "iana"
-  },
-  "application/vnd.sss-cod": {
-    "source": "iana"
-  },
-  "application/vnd.sss-dtf": {
-    "source": "iana"
-  },
-  "application/vnd.sss-ntf": {
-    "source": "iana"
-  },
-  "application/vnd.stardivision.calc": {
-    "source": "apache",
-    "extensions": ["sdc"]
-  },
-  "application/vnd.stardivision.draw": {
-    "source": "apache",
-    "extensions": ["sda"]
-  },
-  "application/vnd.stardivision.impress": {
-    "source": "apache",
-    "extensions": ["sdd"]
-  },
-  "application/vnd.stardivision.math": {
-    "source": "apache",
-    "extensions": ["smf"]
-  },
-  "application/vnd.stardivision.writer": {
-    "source": "apache",
-    "extensions": ["sdw","vor"]
-  },
-  "application/vnd.stardivision.writer-global": {
-    "source": "apache",
-    "extensions": ["sgl"]
-  },
-  "application/vnd.stepmania.package": {
-    "source": "iana",
-    "extensions": ["smzip"]
-  },
-  "application/vnd.stepmania.stepchart": {
-    "source": "iana",
-    "extensions": ["sm"]
-  },
-  "application/vnd.street-stream": {
-    "source": "iana"
-  },
-  "application/vnd.sun.wadl+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["wadl"]
-  },
-  "application/vnd.sun.xml.calc": {
-    "source": "apache",
-    "extensions": ["sxc"]
-  },
-  "application/vnd.sun.xml.calc.template": {
-    "source": "apache",
-    "extensions": ["stc"]
-  },
-  "application/vnd.sun.xml.draw": {
-    "source": "apache",
-    "extensions": ["sxd"]
-  },
-  "application/vnd.sun.xml.draw.template": {
-    "source": "apache",
-    "extensions": ["std"]
-  },
-  "application/vnd.sun.xml.impress": {
-    "source": "apache",
-    "extensions": ["sxi"]
-  },
-  "application/vnd.sun.xml.impress.template": {
-    "source": "apache",
-    "extensions": ["sti"]
-  },
-  "application/vnd.sun.xml.math": {
-    "source": "apache",
-    "extensions": ["sxm"]
-  },
-  "application/vnd.sun.xml.writer": {
-    "source": "apache",
-    "extensions": ["sxw"]
-  },
-  "application/vnd.sun.xml.writer.global": {
-    "source": "apache",
-    "extensions": ["sxg"]
-  },
-  "application/vnd.sun.xml.writer.template": {
-    "source": "apache",
-    "extensions": ["stw"]
-  },
-  "application/vnd.sus-calendar": {
-    "source": "iana",
-    "extensions": ["sus","susp"]
-  },
-  "application/vnd.svd": {
-    "source": "iana",
-    "extensions": ["svd"]
-  },
-  "application/vnd.swiftview-ics": {
-    "source": "iana"
-  },
-  "application/vnd.symbian.install": {
-    "source": "apache",
-    "extensions": ["sis","sisx"]
-  },
-  "application/vnd.syncml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xsm"]
-  },
-  "application/vnd.syncml.dm+wbxml": {
-    "source": "iana",
-    "extensions": ["bdm"]
-  },
-  "application/vnd.syncml.dm+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdm"]
-  },
-  "application/vnd.syncml.dm.notification": {
-    "source": "iana"
-  },
-  "application/vnd.syncml.dmddf+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.syncml.dmddf+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ddf"]
-  },
-  "application/vnd.syncml.dmtnds+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.syncml.dmtnds+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.syncml.ds.notification": {
-    "source": "iana"
-  },
-  "application/vnd.tableschema+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.tao.intent-module-archive": {
-    "source": "iana",
-    "extensions": ["tao"]
-  },
-  "application/vnd.tcpdump.pcap": {
-    "source": "iana",
-    "extensions": ["pcap","cap","dmp"]
-  },
-  "application/vnd.think-cell.ppttc+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.tmd.mediaflex.api+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.tml": {
-    "source": "iana"
-  },
-  "application/vnd.tmobile-livetv": {
-    "source": "iana",
-    "extensions": ["tmo"]
-  },
-  "application/vnd.tri.onesource": {
-    "source": "iana"
-  },
-  "application/vnd.trid.tpt": {
-    "source": "iana",
-    "extensions": ["tpt"]
-  },
-  "application/vnd.triscape.mxs": {
-    "source": "iana",
-    "extensions": ["mxs"]
-  },
-  "application/vnd.trueapp": {
-    "source": "iana",
-    "extensions": ["tra"]
-  },
-  "application/vnd.truedoc": {
-    "source": "iana"
-  },
-  "application/vnd.ubisoft.webplayer": {
-    "source": "iana"
-  },
-  "application/vnd.ufdl": {
-    "source": "iana",
-    "extensions": ["ufd","ufdl"]
-  },
-  "application/vnd.uiq.theme": {
-    "source": "iana",
-    "extensions": ["utz"]
-  },
-  "application/vnd.umajin": {
-    "source": "iana",
-    "extensions": ["umj"]
-  },
-  "application/vnd.unity": {
-    "source": "iana",
-    "extensions": ["unityweb"]
-  },
-  "application/vnd.uoml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["uoml"]
-  },
-  "application/vnd.uplanet.alert": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.alert-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.bearer-choice": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.bearer-choice-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.cacheop": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.cacheop-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.channel": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.channel-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.list": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.list-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.listcmd": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.listcmd-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.signal": {
-    "source": "iana"
-  },
-  "application/vnd.uri-map": {
-    "source": "iana"
-  },
-  "application/vnd.valve.source.material": {
-    "source": "iana"
-  },
-  "application/vnd.vcx": {
-    "source": "iana",
-    "extensions": ["vcx"]
-  },
-  "application/vnd.vd-study": {
-    "source": "iana"
-  },
-  "application/vnd.vectorworks": {
-    "source": "iana"
-  },
-  "application/vnd.vel+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.verimatrix.vcas": {
-    "source": "iana"
-  },
-  "application/vnd.veryant.thin": {
-    "source": "iana"
-  },
-  "application/vnd.ves.encrypted": {
-    "source": "iana"
-  },
-  "application/vnd.vidsoft.vidconference": {
-    "source": "iana"
-  },
-  "application/vnd.visio": {
-    "source": "iana",
-    "extensions": ["vsd","vst","vss","vsw"]
-  },
-  "application/vnd.visionary": {
-    "source": "iana",
-    "extensions": ["vis"]
-  },
-  "application/vnd.vividence.scriptfile": {
-    "source": "iana"
-  },
-  "application/vnd.vsf": {
-    "source": "iana",
-    "extensions": ["vsf"]
-  },
-  "application/vnd.wap.sic": {
-    "source": "iana"
-  },
-  "application/vnd.wap.slc": {
-    "source": "iana"
-  },
-  "application/vnd.wap.wbxml": {
-    "source": "iana",
-    "extensions": ["wbxml"]
-  },
-  "application/vnd.wap.wmlc": {
-    "source": "iana",
-    "extensions": ["wmlc"]
-  },
-  "application/vnd.wap.wmlscriptc": {
-    "source": "iana",
-    "extensions": ["wmlsc"]
-  },
-  "application/vnd.webturbo": {
-    "source": "iana",
-    "extensions": ["wtb"]
-  },
-  "application/vnd.wfa.p2p": {
-    "source": "iana"
-  },
-  "application/vnd.wfa.wsc": {
-    "source": "iana"
-  },
-  "application/vnd.windows.devicepairing": {
-    "source": "iana"
-  },
-  "application/vnd.wmc": {
-    "source": "iana"
-  },
-  "application/vnd.wmf.bootstrap": {
-    "source": "iana"
-  },
-  "application/vnd.wolfram.mathematica": {
-    "source": "iana"
-  },
-  "application/vnd.wolfram.mathematica.package": {
-    "source": "iana"
-  },
-  "application/vnd.wolfram.player": {
-    "source": "iana",
-    "extensions": ["nbp"]
-  },
-  "application/vnd.wordperfect": {
-    "source": "iana",
-    "extensions": ["wpd"]
-  },
-  "application/vnd.wqd": {
-    "source": "iana",
-    "extensions": ["wqd"]
-  },
-  "application/vnd.wrq-hp3000-labelled": {
-    "source": "iana"
-  },
-  "application/vnd.wt.stf": {
-    "source": "iana",
-    "extensions": ["stf"]
-  },
-  "application/vnd.wv.csp+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.wv.csp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.wv.ssp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.xacml+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.xara": {
-    "source": "iana",
-    "extensions": ["xar"]
-  },
-  "application/vnd.xfdl": {
-    "source": "iana",
-    "extensions": ["xfdl"]
-  },
-  "application/vnd.xfdl.webform": {
-    "source": "iana"
-  },
-  "application/vnd.xmi+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.xmpie.cpkg": {
-    "source": "iana"
-  },
-  "application/vnd.xmpie.dpkg": {
-    "source": "iana"
-  },
-  "application/vnd.xmpie.plan": {
-    "source": "iana"
-  },
-  "application/vnd.xmpie.ppkg": {
-    "source": "iana"
-  },
-  "application/vnd.xmpie.xlim": {
-    "source": "iana"
-  },
-  "application/vnd.yamaha.hv-dic": {
-    "source": "iana",
-    "extensions": ["hvd"]
-  },
-  "application/vnd.yamaha.hv-script": {
-    "source": "iana",
-    "extensions": ["hvs"]
-  },
-  "application/vnd.yamaha.hv-voice": {
-    "source": "iana",
-    "extensions": ["hvp"]
-  },
-  "application/vnd.yamaha.openscoreformat": {
-    "source": "iana",
-    "extensions": ["osf"]
-  },
-  "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["osfpvg"]
-  },
-  "application/vnd.yamaha.remote-setup": {
-    "source": "iana"
-  },
-  "application/vnd.yamaha.smaf-audio": {
-    "source": "iana",
-    "extensions": ["saf"]
-  },
-  "application/vnd.yamaha.smaf-phrase": {
-    "source": "iana",
-    "extensions": ["spf"]
-  },
-  "application/vnd.yamaha.through-ngn": {
-    "source": "iana"
-  },
-  "application/vnd.yamaha.tunnel-udpencap": {
-    "source": "iana"
-  },
-  "application/vnd.yaoweme": {
-    "source": "iana"
-  },
-  "application/vnd.yellowriver-custom-menu": {
-    "source": "iana",
-    "extensions": ["cmp"]
-  },
-  "application/vnd.youtube.yt": {
-    "source": "iana"
-  },
-  "application/vnd.zul": {
-    "source": "iana",
-    "extensions": ["zir","zirz"]
-  },
-  "application/vnd.zzazz.deck+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["zaz"]
-  },
-  "application/voicexml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["vxml"]
-  },
-  "application/voucher-cms+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vq-rtcpxr": {
-    "source": "iana"
-  },
-  "application/wasm": {
-    "compressible": true,
-    "extensions": ["wasm"]
-  },
-  "application/watcherinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/webpush-options+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/whoispp-query": {
-    "source": "iana"
-  },
-  "application/whoispp-response": {
-    "source": "iana"
-  },
-  "application/widget": {
-    "source": "iana",
-    "extensions": ["wgt"]
-  },
-  "application/winhlp": {
-    "source": "apache",
-    "extensions": ["hlp"]
-  },
-  "application/wita": {
-    "source": "iana"
-  },
-  "application/wordperfect5.1": {
-    "source": "iana"
-  },
-  "application/wsdl+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["wsdl"]
-  },
-  "application/wspolicy+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["wspolicy"]
-  },
-  "application/x-7z-compressed": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["7z"]
-  },
-  "application/x-abiword": {
-    "source": "apache",
-    "extensions": ["abw"]
-  },
-  "application/x-ace-compressed": {
-    "source": "apache",
-    "extensions": ["ace"]
-  },
-  "application/x-amf": {
-    "source": "apache"
-  },
-  "application/x-apple-diskimage": {
-    "source": "apache",
-    "extensions": ["dmg"]
-  },
-  "application/x-arj": {
-    "compressible": false,
-    "extensions": ["arj"]
-  },
-  "application/x-authorware-bin": {
-    "source": "apache",
-    "extensions": ["aab","x32","u32","vox"]
-  },
-  "application/x-authorware-map": {
-    "source": "apache",
-    "extensions": ["aam"]
-  },
-  "application/x-authorware-seg": {
-    "source": "apache",
-    "extensions": ["aas"]
-  },
-  "application/x-bcpio": {
-    "source": "apache",
-    "extensions": ["bcpio"]
-  },
-  "application/x-bdoc": {
-    "compressible": false,
-    "extensions": ["bdoc"]
-  },
-  "application/x-bittorrent": {
-    "source": "apache",
-    "extensions": ["torrent"]
-  },
-  "application/x-blorb": {
-    "source": "apache",
-    "extensions": ["blb","blorb"]
-  },
-  "application/x-bzip": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["bz"]
-  },
-  "application/x-bzip2": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["bz2","boz"]
-  },
-  "application/x-cbr": {
-    "source": "apache",
-    "extensions": ["cbr","cba","cbt","cbz","cb7"]
-  },
-  "application/x-cdlink": {
-    "source": "apache",
-    "extensions": ["vcd"]
-  },
-  "application/x-cfs-compressed": {
-    "source": "apache",
-    "extensions": ["cfs"]
-  },
-  "application/x-chat": {
-    "source": "apache",
-    "extensions": ["chat"]
-  },
-  "application/x-chess-pgn": {
-    "source": "apache",
-    "extensions": ["pgn"]
-  },
-  "application/x-chrome-extension": {
-    "extensions": ["crx"]
-  },
-  "application/x-cocoa": {
-    "source": "nginx",
-    "extensions": ["cco"]
-  },
-  "application/x-compress": {
-    "source": "apache"
-  },
-  "application/x-conference": {
-    "source": "apache",
-    "extensions": ["nsc"]
-  },
-  "application/x-cpio": {
-    "source": "apache",
-    "extensions": ["cpio"]
-  },
-  "application/x-csh": {
-    "source": "apache",
-    "extensions": ["csh"]
-  },
-  "application/x-deb": {
-    "compressible": false
-  },
-  "application/x-debian-package": {
-    "source": "apache",
-    "extensions": ["deb","udeb"]
-  },
-  "application/x-dgc-compressed": {
-    "source": "apache",
-    "extensions": ["dgc"]
-  },
-  "application/x-director": {
-    "source": "apache",
-    "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]
-  },
-  "application/x-doom": {
-    "source": "apache",
-    "extensions": ["wad"]
-  },
-  "application/x-dtbncx+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["ncx"]
-  },
-  "application/x-dtbook+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["dtb"]
-  },
-  "application/x-dtbresource+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["res"]
-  },
-  "application/x-dvi": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["dvi"]
-  },
-  "application/x-envoy": {
-    "source": "apache",
-    "extensions": ["evy"]
-  },
-  "application/x-eva": {
-    "source": "apache",
-    "extensions": ["eva"]
-  },
-  "application/x-font-bdf": {
-    "source": "apache",
-    "extensions": ["bdf"]
-  },
-  "application/x-font-dos": {
-    "source": "apache"
-  },
-  "application/x-font-framemaker": {
-    "source": "apache"
-  },
-  "application/x-font-ghostscript": {
-    "source": "apache",
-    "extensions": ["gsf"]
-  },
-  "application/x-font-libgrx": {
-    "source": "apache"
-  },
-  "application/x-font-linux-psf": {
-    "source": "apache",
-    "extensions": ["psf"]
-  },
-  "application/x-font-pcf": {
-    "source": "apache",
-    "extensions": ["pcf"]
-  },
-  "application/x-font-snf": {
-    "source": "apache",
-    "extensions": ["snf"]
-  },
-  "application/x-font-speedo": {
-    "source": "apache"
-  },
-  "application/x-font-sunos-news": {
-    "source": "apache"
-  },
-  "application/x-font-type1": {
-    "source": "apache",
-    "extensions": ["pfa","pfb","pfm","afm"]
-  },
-  "application/x-font-vfont": {
-    "source": "apache"
-  },
-  "application/x-freearc": {
-    "source": "apache",
-    "extensions": ["arc"]
-  },
-  "application/x-futuresplash": {
-    "source": "apache",
-    "extensions": ["spl"]
-  },
-  "application/x-gca-compressed": {
-    "source": "apache",
-    "extensions": ["gca"]
-  },
-  "application/x-glulx": {
-    "source": "apache",
-    "extensions": ["ulx"]
-  },
-  "application/x-gnumeric": {
-    "source": "apache",
-    "extensions": ["gnumeric"]
-  },
-  "application/x-gramps-xml": {
-    "source": "apache",
-    "extensions": ["gramps"]
-  },
-  "application/x-gtar": {
-    "source": "apache",
-    "extensions": ["gtar"]
-  },
-  "application/x-gzip": {
-    "source": "apache"
-  },
-  "application/x-hdf": {
-    "source": "apache",
-    "extensions": ["hdf"]
-  },
-  "application/x-httpd-php": {
-    "compressible": true,
-    "extensions": ["php"]
-  },
-  "application/x-install-instructions": {
-    "source": "apache",
-    "extensions": ["install"]
-  },
-  "application/x-iso9660-image": {
-    "source": "apache",
-    "extensions": ["iso"]
-  },
-  "application/x-java-archive-diff": {
-    "source": "nginx",
-    "extensions": ["jardiff"]
-  },
-  "application/x-java-jnlp-file": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["jnlp"]
-  },
-  "application/x-javascript": {
-    "compressible": true
-  },
-  "application/x-keepass2": {
-    "extensions": ["kdbx"]
-  },
-  "application/x-latex": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["latex"]
-  },
-  "application/x-lua-bytecode": {
-    "extensions": ["luac"]
-  },
-  "application/x-lzh-compressed": {
-    "source": "apache",
-    "extensions": ["lzh","lha"]
-  },
-  "application/x-makeself": {
-    "source": "nginx",
-    "extensions": ["run"]
-  },
-  "application/x-mie": {
-    "source": "apache",
-    "extensions": ["mie"]
-  },
-  "application/x-mobipocket-ebook": {
-    "source": "apache",
-    "extensions": ["prc","mobi"]
-  },
-  "application/x-mpegurl": {
-    "compressible": false
-  },
-  "application/x-ms-application": {
-    "source": "apache",
-    "extensions": ["application"]
-  },
-  "application/x-ms-shortcut": {
-    "source": "apache",
-    "extensions": ["lnk"]
-  },
-  "application/x-ms-wmd": {
-    "source": "apache",
-    "extensions": ["wmd"]
-  },
-  "application/x-ms-wmz": {
-    "source": "apache",
-    "extensions": ["wmz"]
-  },
-  "application/x-ms-xbap": {
-    "source": "apache",
-    "extensions": ["xbap"]
-  },
-  "application/x-msaccess": {
-    "source": "apache",
-    "extensions": ["mdb"]
-  },
-  "application/x-msbinder": {
-    "source": "apache",
-    "extensions": ["obd"]
-  },
-  "application/x-mscardfile": {
-    "source": "apache",
-    "extensions": ["crd"]
-  },
-  "application/x-msclip": {
-    "source": "apache",
-    "extensions": ["clp"]
-  },
-  "application/x-msdos-program": {
-    "extensions": ["exe"]
-  },
-  "application/x-msdownload": {
-    "source": "apache",
-    "extensions": ["exe","dll","com","bat","msi"]
-  },
-  "application/x-msmediaview": {
-    "source": "apache",
-    "extensions": ["mvb","m13","m14"]
-  },
-  "application/x-msmetafile": {
-    "source": "apache",
-    "extensions": ["wmf","wmz","emf","emz"]
-  },
-  "application/x-msmoney": {
-    "source": "apache",
-    "extensions": ["mny"]
-  },
-  "application/x-mspublisher": {
-    "source": "apache",
-    "extensions": ["pub"]
-  },
-  "application/x-msschedule": {
-    "source": "apache",
-    "extensions": ["scd"]
-  },
-  "application/x-msterminal": {
-    "source": "apache",
-    "extensions": ["trm"]
-  },
-  "application/x-mswrite": {
-    "source": "apache",
-    "extensions": ["wri"]
-  },
-  "application/x-netcdf": {
-    "source": "apache",
-    "extensions": ["nc","cdf"]
-  },
-  "application/x-ns-proxy-autoconfig": {
-    "compressible": true,
-    "extensions": ["pac"]
-  },
-  "application/x-nzb": {
-    "source": "apache",
-    "extensions": ["nzb"]
-  },
-  "application/x-perl": {
-    "source": "nginx",
-    "extensions": ["pl","pm"]
-  },
-  "application/x-pilot": {
-    "source": "nginx",
-    "extensions": ["prc","pdb"]
-  },
-  "application/x-pkcs12": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["p12","pfx"]
-  },
-  "application/x-pkcs7-certificates": {
-    "source": "apache",
-    "extensions": ["p7b","spc"]
-  },
-  "application/x-pkcs7-certreqresp": {
-    "source": "apache",
-    "extensions": ["p7r"]
-  },
-  "application/x-rar-compressed": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["rar"]
-  },
-  "application/x-redhat-package-manager": {
-    "source": "nginx",
-    "extensions": ["rpm"]
-  },
-  "application/x-research-info-systems": {
-    "source": "apache",
-    "extensions": ["ris"]
-  },
-  "application/x-sea": {
-    "source": "nginx",
-    "extensions": ["sea"]
-  },
-  "application/x-sh": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["sh"]
-  },
-  "application/x-shar": {
-    "source": "apache",
-    "extensions": ["shar"]
-  },
-  "application/x-shockwave-flash": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["swf"]
-  },
-  "application/x-silverlight-app": {
-    "source": "apache",
-    "extensions": ["xap"]
-  },
-  "application/x-sql": {
-    "source": "apache",
-    "extensions": ["sql"]
-  },
-  "application/x-stuffit": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["sit"]
-  },
-  "application/x-stuffitx": {
-    "source": "apache",
-    "extensions": ["sitx"]
-  },
-  "application/x-subrip": {
-    "source": "apache",
-    "extensions": ["srt"]
-  },
-  "application/x-sv4cpio": {
-    "source": "apache",
-    "extensions": ["sv4cpio"]
-  },
-  "application/x-sv4crc": {
-    "source": "apache",
-    "extensions": ["sv4crc"]
-  },
-  "application/x-t3vm-image": {
-    "source": "apache",
-    "extensions": ["t3"]
-  },
-  "application/x-tads": {
-    "source": "apache",
-    "extensions": ["gam"]
-  },
-  "application/x-tar": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["tar"]
-  },
-  "application/x-tcl": {
-    "source": "apache",
-    "extensions": ["tcl","tk"]
-  },
-  "application/x-tex": {
-    "source": "apache",
-    "extensions": ["tex"]
-  },
-  "application/x-tex-tfm": {
-    "source": "apache",
-    "extensions": ["tfm"]
-  },
-  "application/x-texinfo": {
-    "source": "apache",
-    "extensions": ["texinfo","texi"]
-  },
-  "application/x-tgif": {
-    "source": "apache",
-    "extensions": ["obj"]
-  },
-  "application/x-ustar": {
-    "source": "apache",
-    "extensions": ["ustar"]
-  },
-  "application/x-virtualbox-hdd": {
-    "compressible": true,
-    "extensions": ["hdd"]
-  },
-  "application/x-virtualbox-ova": {
-    "compressible": true,
-    "extensions": ["ova"]
-  },
-  "application/x-virtualbox-ovf": {
-    "compressible": true,
-    "extensions": ["ovf"]
-  },
-  "application/x-virtualbox-vbox": {
-    "compressible": true,
-    "extensions": ["vbox"]
-  },
-  "application/x-virtualbox-vbox-extpack": {
-    "compressible": false,
-    "extensions": ["vbox-extpack"]
-  },
-  "application/x-virtualbox-vdi": {
-    "compressible": true,
-    "extensions": ["vdi"]
-  },
-  "application/x-virtualbox-vhd": {
-    "compressible": true,
-    "extensions": ["vhd"]
-  },
-  "application/x-virtualbox-vmdk": {
-    "compressible": true,
-    "extensions": ["vmdk"]
-  },
-  "application/x-wais-source": {
-    "source": "apache",
-    "extensions": ["src"]
-  },
-  "application/x-web-app-manifest+json": {
-    "compressible": true,
-    "extensions": ["webapp"]
-  },
-  "application/x-www-form-urlencoded": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/x-x509-ca-cert": {
-    "source": "apache",
-    "extensions": ["der","crt","pem"]
-  },
-  "application/x-xfig": {
-    "source": "apache",
-    "extensions": ["fig"]
-  },
-  "application/x-xliff+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["xlf"]
-  },
-  "application/x-xpinstall": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["xpi"]
-  },
-  "application/x-xz": {
-    "source": "apache",
-    "extensions": ["xz"]
-  },
-  "application/x-zmachine": {
-    "source": "apache",
-    "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"]
-  },
-  "application/x400-bp": {
-    "source": "iana"
-  },
-  "application/xacml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xaml+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["xaml"]
-  },
-  "application/xcap-att+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xav"]
-  },
-  "application/xcap-caps+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xca"]
-  },
-  "application/xcap-diff+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdf"]
-  },
-  "application/xcap-el+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xel"]
-  },
-  "application/xcap-error+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xer"]
-  },
-  "application/xcap-ns+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xns"]
-  },
-  "application/xcon-conference-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xcon-conference-info-diff+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xenc+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xenc"]
-  },
-  "application/xhtml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xhtml","xht"]
-  },
-  "application/xhtml-voice+xml": {
-    "source": "apache",
-    "compressible": true
-  },
-  "application/xliff+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xlf"]
-  },
-  "application/xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xml","xsl","xsd","rng"]
-  },
-  "application/xml-dtd": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dtd"]
-  },
-  "application/xml-external-parsed-entity": {
-    "source": "iana"
-  },
-  "application/xml-patch+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xmpp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xop+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xop"]
-  },
-  "application/xproc+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["xpl"]
-  },
-  "application/xslt+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xslt"]
-  },
-  "application/xspf+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["xspf"]
-  },
-  "application/xv+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mxml","xhvml","xvml","xvm"]
-  },
-  "application/yang": {
-    "source": "iana",
-    "extensions": ["yang"]
-  },
-  "application/yang-data+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/yang-data+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/yang-patch+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/yang-patch+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/yin+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["yin"]
-  },
-  "application/zip": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["zip"]
-  },
-  "application/zlib": {
-    "source": "iana"
-  },
-  "application/zstd": {
-    "source": "iana"
-  },
-  "audio/1d-interleaved-parityfec": {
-    "source": "iana"
-  },
-  "audio/32kadpcm": {
-    "source": "iana"
-  },
-  "audio/3gpp": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["3gpp"]
-  },
-  "audio/3gpp2": {
-    "source": "iana"
-  },
-  "audio/aac": {
-    "source": "iana"
-  },
-  "audio/ac3": {
-    "source": "iana"
-  },
-  "audio/adpcm": {
-    "source": "apache",
-    "extensions": ["adp"]
-  },
-  "audio/amr": {
-    "source": "iana"
-  },
-  "audio/amr-wb": {
-    "source": "iana"
-  },
-  "audio/amr-wb+": {
-    "source": "iana"
-  },
-  "audio/aptx": {
-    "source": "iana"
-  },
-  "audio/asc": {
-    "source": "iana"
-  },
-  "audio/atrac-advanced-lossless": {
-    "source": "iana"
-  },
-  "audio/atrac-x": {
-    "source": "iana"
-  },
-  "audio/atrac3": {
-    "source": "iana"
-  },
-  "audio/basic": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["au","snd"]
-  },
-  "audio/bv16": {
-    "source": "iana"
-  },
-  "audio/bv32": {
-    "source": "iana"
-  },
-  "audio/clearmode": {
-    "source": "iana"
-  },
-  "audio/cn": {
-    "source": "iana"
-  },
-  "audio/dat12": {
-    "source": "iana"
-  },
-  "audio/dls": {
-    "source": "iana"
-  },
-  "audio/dsr-es201108": {
-    "source": "iana"
-  },
-  "audio/dsr-es202050": {
-    "source": "iana"
-  },
-  "audio/dsr-es202211": {
-    "source": "iana"
-  },
-  "audio/dsr-es202212": {
-    "source": "iana"
-  },
-  "audio/dv": {
-    "source": "iana"
-  },
-  "audio/dvi4": {
-    "source": "iana"
-  },
-  "audio/eac3": {
-    "source": "iana"
-  },
-  "audio/encaprtp": {
-    "source": "iana"
-  },
-  "audio/evrc": {
-    "source": "iana"
-  },
-  "audio/evrc-qcp": {
-    "source": "iana"
-  },
-  "audio/evrc0": {
-    "source": "iana"
-  },
-  "audio/evrc1": {
-    "source": "iana"
-  },
-  "audio/evrcb": {
-    "source": "iana"
-  },
-  "audio/evrcb0": {
-    "source": "iana"
-  },
-  "audio/evrcb1": {
-    "source": "iana"
-  },
-  "audio/evrcnw": {
-    "source": "iana"
-  },
-  "audio/evrcnw0": {
-    "source": "iana"
-  },
-  "audio/evrcnw1": {
-    "source": "iana"
-  },
-  "audio/evrcwb": {
-    "source": "iana"
-  },
-  "audio/evrcwb0": {
-    "source": "iana"
-  },
-  "audio/evrcwb1": {
-    "source": "iana"
-  },
-  "audio/evs": {
-    "source": "iana"
-  },
-  "audio/flexfec": {
-    "source": "iana"
-  },
-  "audio/fwdred": {
-    "source": "iana"
-  },
-  "audio/g711-0": {
-    "source": "iana"
-  },
-  "audio/g719": {
-    "source": "iana"
-  },
-  "audio/g722": {
-    "source": "iana"
-  },
-  "audio/g7221": {
-    "source": "iana"
-  },
-  "audio/g723": {
-    "source": "iana"
-  },
-  "audio/g726-16": {
-    "source": "iana"
-  },
-  "audio/g726-24": {
-    "source": "iana"
-  },
-  "audio/g726-32": {
-    "source": "iana"
-  },
-  "audio/g726-40": {
-    "source": "iana"
-  },
-  "audio/g728": {
-    "source": "iana"
-  },
-  "audio/g729": {
-    "source": "iana"
-  },
-  "audio/g7291": {
-    "source": "iana"
-  },
-  "audio/g729d": {
-    "source": "iana"
-  },
-  "audio/g729e": {
-    "source": "iana"
-  },
-  "audio/gsm": {
-    "source": "iana"
-  },
-  "audio/gsm-efr": {
-    "source": "iana"
-  },
-  "audio/gsm-hr-08": {
-    "source": "iana"
-  },
-  "audio/ilbc": {
-    "source": "iana"
-  },
-  "audio/ip-mr_v2.5": {
-    "source": "iana"
-  },
-  "audio/isac": {
-    "source": "apache"
-  },
-  "audio/l16": {
-    "source": "iana"
-  },
-  "audio/l20": {
-    "source": "iana"
-  },
-  "audio/l24": {
-    "source": "iana",
-    "compressible": false
-  },
-  "audio/l8": {
-    "source": "iana"
-  },
-  "audio/lpc": {
-    "source": "iana"
-  },
-  "audio/melp": {
-    "source": "iana"
-  },
-  "audio/melp1200": {
-    "source": "iana"
-  },
-  "audio/melp2400": {
-    "source": "iana"
-  },
-  "audio/melp600": {
-    "source": "iana"
-  },
-  "audio/midi": {
-    "source": "apache",
-    "extensions": ["mid","midi","kar","rmi"]
-  },
-  "audio/mobile-xmf": {
-    "source": "iana",
-    "extensions": ["mxmf"]
-  },
-  "audio/mp3": {
-    "compressible": false,
-    "extensions": ["mp3"]
-  },
-  "audio/mp4": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["m4a","mp4a"]
-  },
-  "audio/mp4a-latm": {
-    "source": "iana"
-  },
-  "audio/mpa": {
-    "source": "iana"
-  },
-  "audio/mpa-robust": {
-    "source": "iana"
-  },
-  "audio/mpeg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"]
-  },
-  "audio/mpeg4-generic": {
-    "source": "iana"
-  },
-  "audio/musepack": {
-    "source": "apache"
-  },
-  "audio/ogg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["oga","ogg","spx"]
-  },
-  "audio/opus": {
-    "source": "iana"
-  },
-  "audio/parityfec": {
-    "source": "iana"
-  },
-  "audio/pcma": {
-    "source": "iana"
-  },
-  "audio/pcma-wb": {
-    "source": "iana"
-  },
-  "audio/pcmu": {
-    "source": "iana"
-  },
-  "audio/pcmu-wb": {
-    "source": "iana"
-  },
-  "audio/prs.sid": {
-    "source": "iana"
-  },
-  "audio/qcelp": {
-    "source": "iana"
-  },
-  "audio/raptorfec": {
-    "source": "iana"
-  },
-  "audio/red": {
-    "source": "iana"
-  },
-  "audio/rtp-enc-aescm128": {
-    "source": "iana"
-  },
-  "audio/rtp-midi": {
-    "source": "iana"
-  },
-  "audio/rtploopback": {
-    "source": "iana"
-  },
-  "audio/rtx": {
-    "source": "iana"
-  },
-  "audio/s3m": {
-    "source": "apache",
-    "extensions": ["s3m"]
-  },
-  "audio/silk": {
-    "source": "apache",
-    "extensions": ["sil"]
-  },
-  "audio/smv": {
-    "source": "iana"
-  },
-  "audio/smv-qcp": {
-    "source": "iana"
-  },
-  "audio/smv0": {
-    "source": "iana"
-  },
-  "audio/sp-midi": {
-    "source": "iana"
-  },
-  "audio/speex": {
-    "source": "iana"
-  },
-  "audio/t140c": {
-    "source": "iana"
-  },
-  "audio/t38": {
-    "source": "iana"
-  },
-  "audio/telephone-event": {
-    "source": "iana"
-  },
-  "audio/tetra_acelp": {
-    "source": "iana"
-  },
-  "audio/tone": {
-    "source": "iana"
-  },
-  "audio/uemclip": {
-    "source": "iana"
-  },
-  "audio/ulpfec": {
-    "source": "iana"
-  },
-  "audio/usac": {
-    "source": "iana"
-  },
-  "audio/vdvi": {
-    "source": "iana"
-  },
-  "audio/vmr-wb": {
-    "source": "iana"
-  },
-  "audio/vnd.3gpp.iufp": {
-    "source": "iana"
-  },
-  "audio/vnd.4sb": {
-    "source": "iana"
-  },
-  "audio/vnd.audiokoz": {
-    "source": "iana"
-  },
-  "audio/vnd.celp": {
-    "source": "iana"
-  },
-  "audio/vnd.cisco.nse": {
-    "source": "iana"
-  },
-  "audio/vnd.cmles.radio-events": {
-    "source": "iana"
-  },
-  "audio/vnd.cns.anp1": {
-    "source": "iana"
-  },
-  "audio/vnd.cns.inf1": {
-    "source": "iana"
-  },
-  "audio/vnd.dece.audio": {
-    "source": "iana",
-    "extensions": ["uva","uvva"]
-  },
-  "audio/vnd.digital-winds": {
-    "source": "iana",
-    "extensions": ["eol"]
-  },
-  "audio/vnd.dlna.adts": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.heaac.1": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.heaac.2": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.mlp": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.mps": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.pl2": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.pl2x": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.pl2z": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.pulse.1": {
-    "source": "iana"
-  },
-  "audio/vnd.dra": {
-    "source": "iana",
-    "extensions": ["dra"]
-  },
-  "audio/vnd.dts": {
-    "source": "iana",
-    "extensions": ["dts"]
-  },
-  "audio/vnd.dts.hd": {
-    "source": "iana",
-    "extensions": ["dtshd"]
-  },
-  "audio/vnd.dts.uhd": {
-    "source": "iana"
-  },
-  "audio/vnd.dvb.file": {
-    "source": "iana"
-  },
-  "audio/vnd.everad.plj": {
-    "source": "iana"
-  },
-  "audio/vnd.hns.audio": {
-    "source": "iana"
-  },
-  "audio/vnd.lucent.voice": {
-    "source": "iana",
-    "extensions": ["lvp"]
-  },
-  "audio/vnd.ms-playready.media.pya": {
-    "source": "iana",
-    "extensions": ["pya"]
-  },
-  "audio/vnd.nokia.mobile-xmf": {
-    "source": "iana"
-  },
-  "audio/vnd.nortel.vbk": {
-    "source": "iana"
-  },
-  "audio/vnd.nuera.ecelp4800": {
-    "source": "iana",
-    "extensions": ["ecelp4800"]
-  },
-  "audio/vnd.nuera.ecelp7470": {
-    "source": "iana",
-    "extensions": ["ecelp7470"]
-  },
-  "audio/vnd.nuera.ecelp9600": {
-    "source": "iana",
-    "extensions": ["ecelp9600"]
-  },
-  "audio/vnd.octel.sbc": {
-    "source": "iana"
-  },
-  "audio/vnd.presonus.multitrack": {
-    "source": "iana"
-  },
-  "audio/vnd.qcelp": {
-    "source": "iana"
-  },
-  "audio/vnd.rhetorex.32kadpcm": {
-    "source": "iana"
-  },
-  "audio/vnd.rip": {
-    "source": "iana",
-    "extensions": ["rip"]
-  },
-  "audio/vnd.rn-realaudio": {
-    "compressible": false
-  },
-  "audio/vnd.sealedmedia.softseal.mpeg": {
-    "source": "iana"
-  },
-  "audio/vnd.vmx.cvsd": {
-    "source": "iana"
-  },
-  "audio/vnd.wave": {
-    "compressible": false
-  },
-  "audio/vorbis": {
-    "source": "iana",
-    "compressible": false
-  },
-  "audio/vorbis-config": {
-    "source": "iana"
-  },
-  "audio/wav": {
-    "compressible": false,
-    "extensions": ["wav"]
-  },
-  "audio/wave": {
-    "compressible": false,
-    "extensions": ["wav"]
-  },
-  "audio/webm": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["weba"]
-  },
-  "audio/x-aac": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["aac"]
-  },
-  "audio/x-aiff": {
-    "source": "apache",
-    "extensions": ["aif","aiff","aifc"]
-  },
-  "audio/x-caf": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["caf"]
-  },
-  "audio/x-flac": {
-    "source": "apache",
-    "extensions": ["flac"]
-  },
-  "audio/x-m4a": {
-    "source": "nginx",
-    "extensions": ["m4a"]
-  },
-  "audio/x-matroska": {
-    "source": "apache",
-    "extensions": ["mka"]
-  },
-  "audio/x-mpegurl": {
-    "source": "apache",
-    "extensions": ["m3u"]
-  },
-  "audio/x-ms-wax": {
-    "source": "apache",
-    "extensions": ["wax"]
-  },
-  "audio/x-ms-wma": {
-    "source": "apache",
-    "extensions": ["wma"]
-  },
-  "audio/x-pn-realaudio": {
-    "source": "apache",
-    "extensions": ["ram","ra"]
-  },
-  "audio/x-pn-realaudio-plugin": {
-    "source": "apache",
-    "extensions": ["rmp"]
-  },
-  "audio/x-realaudio": {
-    "source": "nginx",
-    "extensions": ["ra"]
-  },
-  "audio/x-tta": {
-    "source": "apache"
-  },
-  "audio/x-wav": {
-    "source": "apache",
-    "extensions": ["wav"]
-  },
-  "audio/xm": {
-    "source": "apache",
-    "extensions": ["xm"]
-  },
-  "chemical/x-cdx": {
-    "source": "apache",
-    "extensions": ["cdx"]
-  },
-  "chemical/x-cif": {
-    "source": "apache",
-    "extensions": ["cif"]
-  },
-  "chemical/x-cmdf": {
-    "source": "apache",
-    "extensions": ["cmdf"]
-  },
-  "chemical/x-cml": {
-    "source": "apache",
-    "extensions": ["cml"]
-  },
-  "chemical/x-csml": {
-    "source": "apache",
-    "extensions": ["csml"]
-  },
-  "chemical/x-pdb": {
-    "source": "apache"
-  },
-  "chemical/x-xyz": {
-    "source": "apache",
-    "extensions": ["xyz"]
-  },
-  "font/collection": {
-    "source": "iana",
-    "extensions": ["ttc"]
-  },
-  "font/otf": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["otf"]
-  },
-  "font/sfnt": {
-    "source": "iana"
-  },
-  "font/ttf": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ttf"]
-  },
-  "font/woff": {
-    "source": "iana",
-    "extensions": ["woff"]
-  },
-  "font/woff2": {
-    "source": "iana",
-    "extensions": ["woff2"]
-  },
-  "image/aces": {
-    "source": "iana",
-    "extensions": ["exr"]
-  },
-  "image/apng": {
-    "compressible": false,
-    "extensions": ["apng"]
-  },
-  "image/avci": {
-    "source": "iana"
-  },
-  "image/avcs": {
-    "source": "iana"
-  },
-  "image/bmp": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["bmp"]
-  },
-  "image/cgm": {
-    "source": "iana",
-    "extensions": ["cgm"]
-  },
-  "image/dicom-rle": {
-    "source": "iana",
-    "extensions": ["drle"]
-  },
-  "image/emf": {
-    "source": "iana",
-    "extensions": ["emf"]
-  },
-  "image/fits": {
-    "source": "iana",
-    "extensions": ["fits"]
-  },
-  "image/g3fax": {
-    "source": "iana",
-    "extensions": ["g3"]
-  },
-  "image/gif": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["gif"]
-  },
-  "image/heic": {
-    "source": "iana",
-    "extensions": ["heic"]
-  },
-  "image/heic-sequence": {
-    "source": "iana",
-    "extensions": ["heics"]
-  },
-  "image/heif": {
-    "source": "iana",
-    "extensions": ["heif"]
-  },
-  "image/heif-sequence": {
-    "source": "iana",
-    "extensions": ["heifs"]
-  },
-  "image/hej2k": {
-    "source": "iana",
-    "extensions": ["hej2"]
-  },
-  "image/hsj2": {
-    "source": "iana",
-    "extensions": ["hsj2"]
-  },
-  "image/ief": {
-    "source": "iana",
-    "extensions": ["ief"]
-  },
-  "image/jls": {
-    "source": "iana",
-    "extensions": ["jls"]
-  },
-  "image/jp2": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["jp2","jpg2"]
-  },
-  "image/jpeg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["jpeg","jpg","jpe"]
-  },
-  "image/jph": {
-    "source": "iana",
-    "extensions": ["jph"]
-  },
-  "image/jphc": {
-    "source": "iana",
-    "extensions": ["jhc"]
-  },
-  "image/jpm": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["jpm"]
-  },
-  "image/jpx": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["jpx","jpf"]
-  },
-  "image/jxr": {
-    "source": "iana",
-    "extensions": ["jxr"]
-  },
-  "image/jxra": {
-    "source": "iana",
-    "extensions": ["jxra"]
-  },
-  "image/jxrs": {
-    "source": "iana",
-    "extensions": ["jxrs"]
-  },
-  "image/jxs": {
-    "source": "iana",
-    "extensions": ["jxs"]
-  },
-  "image/jxsc": {
-    "source": "iana",
-    "extensions": ["jxsc"]
-  },
-  "image/jxsi": {
-    "source": "iana",
-    "extensions": ["jxsi"]
-  },
-  "image/jxss": {
-    "source": "iana",
-    "extensions": ["jxss"]
-  },
-  "image/ktx": {
-    "source": "iana",
-    "extensions": ["ktx"]
-  },
-  "image/naplps": {
-    "source": "iana"
-  },
-  "image/pjpeg": {
-    "compressible": false
-  },
-  "image/png": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["png"]
-  },
-  "image/prs.btif": {
-    "source": "iana",
-    "extensions": ["btif"]
-  },
-  "image/prs.pti": {
-    "source": "iana",
-    "extensions": ["pti"]
-  },
-  "image/pwg-raster": {
-    "source": "iana"
-  },
-  "image/sgi": {
-    "source": "apache",
-    "extensions": ["sgi"]
-  },
-  "image/svg+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["svg","svgz"]
-  },
-  "image/t38": {
-    "source": "iana",
-    "extensions": ["t38"]
-  },
-  "image/tiff": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["tif","tiff"]
-  },
-  "image/tiff-fx": {
-    "source": "iana",
-    "extensions": ["tfx"]
-  },
-  "image/vnd.adobe.photoshop": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["psd"]
-  },
-  "image/vnd.airzip.accelerator.azv": {
-    "source": "iana",
-    "extensions": ["azv"]
-  },
-  "image/vnd.cns.inf2": {
-    "source": "iana"
-  },
-  "image/vnd.dece.graphic": {
-    "source": "iana",
-    "extensions": ["uvi","uvvi","uvg","uvvg"]
-  },
-  "image/vnd.djvu": {
-    "source": "iana",
-    "extensions": ["djvu","djv"]
-  },
-  "image/vnd.dvb.subtitle": {
-    "source": "iana",
-    "extensions": ["sub"]
-  },
-  "image/vnd.dwg": {
-    "source": "iana",
-    "extensions": ["dwg"]
-  },
-  "image/vnd.dxf": {
-    "source": "iana",
-    "extensions": ["dxf"]
-  },
-  "image/vnd.fastbidsheet": {
-    "source": "iana",
-    "extensions": ["fbs"]
-  },
-  "image/vnd.fpx": {
-    "source": "iana",
-    "extensions": ["fpx"]
-  },
-  "image/vnd.fst": {
-    "source": "iana",
-    "extensions": ["fst"]
-  },
-  "image/vnd.fujixerox.edmics-mmr": {
-    "source": "iana",
-    "extensions": ["mmr"]
-  },
-  "image/vnd.fujixerox.edmics-rlc": {
-    "source": "iana",
-    "extensions": ["rlc"]
-  },
-  "image/vnd.globalgraphics.pgb": {
-    "source": "iana"
-  },
-  "image/vnd.microsoft.icon": {
-    "source": "iana",
-    "extensions": ["ico"]
-  },
-  "image/vnd.mix": {
-    "source": "iana"
-  },
-  "image/vnd.mozilla.apng": {
-    "source": "iana"
-  },
-  "image/vnd.ms-dds": {
-    "extensions": ["dds"]
-  },
-  "image/vnd.ms-modi": {
-    "source": "iana",
-    "extensions": ["mdi"]
-  },
-  "image/vnd.ms-photo": {
-    "source": "apache",
-    "extensions": ["wdp"]
-  },
-  "image/vnd.net-fpx": {
-    "source": "iana",
-    "extensions": ["npx"]
-  },
-  "image/vnd.radiance": {
-    "source": "iana"
-  },
-  "image/vnd.sealed.png": {
-    "source": "iana"
-  },
-  "image/vnd.sealedmedia.softseal.gif": {
-    "source": "iana"
-  },
-  "image/vnd.sealedmedia.softseal.jpg": {
-    "source": "iana"
-  },
-  "image/vnd.svf": {
-    "source": "iana"
-  },
-  "image/vnd.tencent.tap": {
-    "source": "iana",
-    "extensions": ["tap"]
-  },
-  "image/vnd.valve.source.texture": {
-    "source": "iana",
-    "extensions": ["vtf"]
-  },
-  "image/vnd.wap.wbmp": {
-    "source": "iana",
-    "extensions": ["wbmp"]
-  },
-  "image/vnd.xiff": {
-    "source": "iana",
-    "extensions": ["xif"]
-  },
-  "image/vnd.zbrush.pcx": {
-    "source": "iana",
-    "extensions": ["pcx"]
-  },
-  "image/webp": {
-    "source": "apache",
-    "extensions": ["webp"]
-  },
-  "image/wmf": {
-    "source": "iana",
-    "extensions": ["wmf"]
-  },
-  "image/x-3ds": {
-    "source": "apache",
-    "extensions": ["3ds"]
-  },
-  "image/x-cmu-raster": {
-    "source": "apache",
-    "extensions": ["ras"]
-  },
-  "image/x-cmx": {
-    "source": "apache",
-    "extensions": ["cmx"]
-  },
-  "image/x-freehand": {
-    "source": "apache",
-    "extensions": ["fh","fhc","fh4","fh5","fh7"]
-  },
-  "image/x-icon": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["ico"]
-  },
-  "image/x-jng": {
-    "source": "nginx",
-    "extensions": ["jng"]
-  },
-  "image/x-mrsid-image": {
-    "source": "apache",
-    "extensions": ["sid"]
-  },
-  "image/x-ms-bmp": {
-    "source": "nginx",
-    "compressible": true,
-    "extensions": ["bmp"]
-  },
-  "image/x-pcx": {
-    "source": "apache",
-    "extensions": ["pcx"]
-  },
-  "image/x-pict": {
-    "source": "apache",
-    "extensions": ["pic","pct"]
-  },
-  "image/x-portable-anymap": {
-    "source": "apache",
-    "extensions": ["pnm"]
-  },
-  "image/x-portable-bitmap": {
-    "source": "apache",
-    "extensions": ["pbm"]
-  },
-  "image/x-portable-graymap": {
-    "source": "apache",
-    "extensions": ["pgm"]
-  },
-  "image/x-portable-pixmap": {
-    "source": "apache",
-    "extensions": ["ppm"]
-  },
-  "image/x-rgb": {
-    "source": "apache",
-    "extensions": ["rgb"]
-  },
-  "image/x-tga": {
-    "source": "apache",
-    "extensions": ["tga"]
-  },
-  "image/x-xbitmap": {
-    "source": "apache",
-    "extensions": ["xbm"]
-  },
-  "image/x-xcf": {
-    "compressible": false
-  },
-  "image/x-xpixmap": {
-    "source": "apache",
-    "extensions": ["xpm"]
-  },
-  "image/x-xwindowdump": {
-    "source": "apache",
-    "extensions": ["xwd"]
-  },
-  "message/cpim": {
-    "source": "iana"
-  },
-  "message/delivery-status": {
-    "source": "iana"
-  },
-  "message/disposition-notification": {
-    "source": "iana",
-    "extensions": [
-      "disposition-notification"
-    ]
-  },
-  "message/external-body": {
-    "source": "iana"
-  },
-  "message/feedback-report": {
-    "source": "iana"
-  },
-  "message/global": {
-    "source": "iana",
-    "extensions": ["u8msg"]
-  },
-  "message/global-delivery-status": {
-    "source": "iana",
-    "extensions": ["u8dsn"]
-  },
-  "message/global-disposition-notification": {
-    "source": "iana",
-    "extensions": ["u8mdn"]
-  },
-  "message/global-headers": {
-    "source": "iana",
-    "extensions": ["u8hdr"]
-  },
-  "message/http": {
-    "source": "iana",
-    "compressible": false
-  },
-  "message/imdn+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "message/news": {
-    "source": "iana"
-  },
-  "message/partial": {
-    "source": "iana",
-    "compressible": false
-  },
-  "message/rfc822": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["eml","mime"]
-  },
-  "message/s-http": {
-    "source": "iana"
-  },
-  "message/sip": {
-    "source": "iana"
-  },
-  "message/sipfrag": {
-    "source": "iana"
-  },
-  "message/tracking-status": {
-    "source": "iana"
-  },
-  "message/vnd.si.simp": {
-    "source": "iana"
-  },
-  "message/vnd.wfa.wsc": {
-    "source": "iana",
-    "extensions": ["wsc"]
-  },
-  "model/3mf": {
-    "source": "iana",
-    "extensions": ["3mf"]
-  },
-  "model/gltf+json": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["gltf"]
-  },
-  "model/gltf-binary": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["glb"]
-  },
-  "model/iges": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["igs","iges"]
-  },
-  "model/mesh": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["msh","mesh","silo"]
-  },
-  "model/stl": {
-    "source": "iana",
-    "extensions": ["stl"]
-  },
-  "model/vnd.collada+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dae"]
-  },
-  "model/vnd.dwf": {
-    "source": "iana",
-    "extensions": ["dwf"]
-  },
-  "model/vnd.flatland.3dml": {
-    "source": "iana"
-  },
-  "model/vnd.gdl": {
-    "source": "iana",
-    "extensions": ["gdl"]
-  },
-  "model/vnd.gs-gdl": {
-    "source": "apache"
-  },
-  "model/vnd.gs.gdl": {
-    "source": "iana"
-  },
-  "model/vnd.gtw": {
-    "source": "iana",
-    "extensions": ["gtw"]
-  },
-  "model/vnd.moml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "model/vnd.mts": {
-    "source": "iana",
-    "extensions": ["mts"]
-  },
-  "model/vnd.opengex": {
-    "source": "iana",
-    "extensions": ["ogex"]
-  },
-  "model/vnd.parasolid.transmit.binary": {
-    "source": "iana",
-    "extensions": ["x_b"]
-  },
-  "model/vnd.parasolid.transmit.text": {
-    "source": "iana",
-    "extensions": ["x_t"]
-  },
-  "model/vnd.rosette.annotated-data-model": {
-    "source": "iana"
-  },
-  "model/vnd.usdz+zip": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["usdz"]
-  },
-  "model/vnd.valve.source.compiled-map": {
-    "source": "iana",
-    "extensions": ["bsp"]
-  },
-  "model/vnd.vtu": {
-    "source": "iana",
-    "extensions": ["vtu"]
-  },
-  "model/vrml": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["wrl","vrml"]
-  },
-  "model/x3d+binary": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["x3db","x3dbz"]
-  },
-  "model/x3d+fastinfoset": {
-    "source": "iana",
-    "extensions": ["x3db"]
-  },
-  "model/x3d+vrml": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["x3dv","x3dvz"]
-  },
-  "model/x3d+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["x3d","x3dz"]
-  },
-  "model/x3d-vrml": {
-    "source": "iana",
-    "extensions": ["x3dv"]
-  },
-  "multipart/alternative": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/appledouble": {
-    "source": "iana"
-  },
-  "multipart/byteranges": {
-    "source": "iana"
-  },
-  "multipart/digest": {
-    "source": "iana"
-  },
-  "multipart/encrypted": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/form-data": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/header-set": {
-    "source": "iana"
-  },
-  "multipart/mixed": {
-    "source": "iana"
-  },
-  "multipart/multilingual": {
-    "source": "iana"
-  },
-  "multipart/parallel": {
-    "source": "iana"
-  },
-  "multipart/related": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/report": {
-    "source": "iana"
-  },
-  "multipart/signed": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/vnd.bint.med-plus": {
-    "source": "iana"
-  },
-  "multipart/voice-message": {
-    "source": "iana"
-  },
-  "multipart/x-mixed-replace": {
-    "source": "iana"
-  },
-  "text/1d-interleaved-parityfec": {
-    "source": "iana"
-  },
-  "text/cache-manifest": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["appcache","manifest"]
-  },
-  "text/calendar": {
-    "source": "iana",
-    "extensions": ["ics","ifb"]
-  },
-  "text/calender": {
-    "compressible": true
-  },
-  "text/cmd": {
-    "compressible": true
-  },
-  "text/coffeescript": {
-    "extensions": ["coffee","litcoffee"]
-  },
-  "text/css": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["css"]
-  },
-  "text/csv": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["csv"]
-  },
-  "text/csv-schema": {
-    "source": "iana"
-  },
-  "text/directory": {
-    "source": "iana"
-  },
-  "text/dns": {
-    "source": "iana"
-  },
-  "text/ecmascript": {
-    "source": "iana"
-  },
-  "text/encaprtp": {
-    "source": "iana"
-  },
-  "text/enriched": {
-    "source": "iana"
-  },
-  "text/flexfec": {
-    "source": "iana"
-  },
-  "text/fwdred": {
-    "source": "iana"
-  },
-  "text/grammar-ref-list": {
-    "source": "iana"
-  },
-  "text/html": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["html","htm","shtml"]
-  },
-  "text/jade": {
-    "extensions": ["jade"]
-  },
-  "text/javascript": {
-    "source": "iana",
-    "compressible": true
-  },
-  "text/jcr-cnd": {
-    "source": "iana"
-  },
-  "text/jsx": {
-    "compressible": true,
-    "extensions": ["jsx"]
-  },
-  "text/less": {
-    "compressible": true,
-    "extensions": ["less"]
-  },
-  "text/markdown": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["markdown","md"]
-  },
-  "text/mathml": {
-    "source": "nginx",
-    "extensions": ["mml"]
-  },
-  "text/mdx": {
-    "compressible": true,
-    "extensions": ["mdx"]
-  },
-  "text/mizar": {
-    "source": "iana"
-  },
-  "text/n3": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["n3"]
-  },
-  "text/parameters": {
-    "source": "iana"
-  },
-  "text/parityfec": {
-    "source": "iana"
-  },
-  "text/plain": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["txt","text","conf","def","list","log","in","ini"]
-  },
-  "text/provenance-notation": {
-    "source": "iana"
-  },
-  "text/prs.fallenstein.rst": {
-    "source": "iana"
-  },
-  "text/prs.lines.tag": {
-    "source": "iana",
-    "extensions": ["dsc"]
-  },
-  "text/prs.prop.logic": {
-    "source": "iana"
-  },
-  "text/raptorfec": {
-    "source": "iana"
-  },
-  "text/red": {
-    "source": "iana"
-  },
-  "text/rfc822-headers": {
-    "source": "iana"
-  },
-  "text/richtext": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rtx"]
-  },
-  "text/rtf": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rtf"]
-  },
-  "text/rtp-enc-aescm128": {
-    "source": "iana"
-  },
-  "text/rtploopback": {
-    "source": "iana"
-  },
-  "text/rtx": {
-    "source": "iana"
-  },
-  "text/sgml": {
-    "source": "iana",
-    "extensions": ["sgml","sgm"]
-  },
-  "text/shex": {
-    "extensions": ["shex"]
-  },
-  "text/slim": {
-    "extensions": ["slim","slm"]
-  },
-  "text/strings": {
-    "source": "iana"
-  },
-  "text/stylus": {
-    "extensions": ["stylus","styl"]
-  },
-  "text/t140": {
-    "source": "iana"
-  },
-  "text/tab-separated-values": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["tsv"]
-  },
-  "text/troff": {
-    "source": "iana",
-    "extensions": ["t","tr","roff","man","me","ms"]
-  },
-  "text/turtle": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "extensions": ["ttl"]
-  },
-  "text/ulpfec": {
-    "source": "iana"
-  },
-  "text/uri-list": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["uri","uris","urls"]
-  },
-  "text/vcard": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["vcard"]
-  },
-  "text/vnd.a": {
-    "source": "iana"
-  },
-  "text/vnd.abc": {
-    "source": "iana"
-  },
-  "text/vnd.ascii-art": {
-    "source": "iana"
-  },
-  "text/vnd.curl": {
-    "source": "iana",
-    "extensions": ["curl"]
-  },
-  "text/vnd.curl.dcurl": {
-    "source": "apache",
-    "extensions": ["dcurl"]
-  },
-  "text/vnd.curl.mcurl": {
-    "source": "apache",
-    "extensions": ["mcurl"]
-  },
-  "text/vnd.curl.scurl": {
-    "source": "apache",
-    "extensions": ["scurl"]
-  },
-  "text/vnd.debian.copyright": {
-    "source": "iana"
-  },
-  "text/vnd.dmclientscript": {
-    "source": "iana"
-  },
-  "text/vnd.dvb.subtitle": {
-    "source": "iana",
-    "extensions": ["sub"]
-  },
-  "text/vnd.esmertec.theme-descriptor": {
-    "source": "iana"
-  },
-  "text/vnd.ficlab.flt": {
-    "source": "iana"
-  },
-  "text/vnd.fly": {
-    "source": "iana",
-    "extensions": ["fly"]
-  },
-  "text/vnd.fmi.flexstor": {
-    "source": "iana",
-    "extensions": ["flx"]
-  },
-  "text/vnd.gml": {
-    "source": "iana"
-  },
-  "text/vnd.graphviz": {
-    "source": "iana",
-    "extensions": ["gv"]
-  },
-  "text/vnd.hgl": {
-    "source": "iana"
-  },
-  "text/vnd.in3d.3dml": {
-    "source": "iana",
-    "extensions": ["3dml"]
-  },
-  "text/vnd.in3d.spot": {
-    "source": "iana",
-    "extensions": ["spot"]
-  },
-  "text/vnd.iptc.newsml": {
-    "source": "iana"
-  },
-  "text/vnd.iptc.nitf": {
-    "source": "iana"
-  },
-  "text/vnd.latex-z": {
-    "source": "iana"
-  },
-  "text/vnd.motorola.reflex": {
-    "source": "iana"
-  },
-  "text/vnd.ms-mediapackage": {
-    "source": "iana"
-  },
-  "text/vnd.net2phone.commcenter.command": {
-    "source": "iana"
-  },
-  "text/vnd.radisys.msml-basic-layout": {
-    "source": "iana"
-  },
-  "text/vnd.senx.warpscript": {
-    "source": "iana"
-  },
-  "text/vnd.si.uricatalogue": {
-    "source": "iana"
-  },
-  "text/vnd.sosi": {
-    "source": "iana"
-  },
-  "text/vnd.sun.j2me.app-descriptor": {
-    "source": "iana",
-    "extensions": ["jad"]
-  },
-  "text/vnd.trolltech.linguist": {
-    "source": "iana"
-  },
-  "text/vnd.wap.si": {
-    "source": "iana"
-  },
-  "text/vnd.wap.sl": {
-    "source": "iana"
-  },
-  "text/vnd.wap.wml": {
-    "source": "iana",
-    "extensions": ["wml"]
-  },
-  "text/vnd.wap.wmlscript": {
-    "source": "iana",
-    "extensions": ["wmls"]
-  },
-  "text/vtt": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["vtt"]
-  },
-  "text/x-asm": {
-    "source": "apache",
-    "extensions": ["s","asm"]
-  },
-  "text/x-c": {
-    "source": "apache",
-    "extensions": ["c","cc","cxx","cpp","h","hh","dic"]
-  },
-  "text/x-component": {
-    "source": "nginx",
-    "extensions": ["htc"]
-  },
-  "text/x-fortran": {
-    "source": "apache",
-    "extensions": ["f","for","f77","f90"]
-  },
-  "text/x-gwt-rpc": {
-    "compressible": true
-  },
-  "text/x-handlebars-template": {
-    "extensions": ["hbs"]
-  },
-  "text/x-java-source": {
-    "source": "apache",
-    "extensions": ["java"]
-  },
-  "text/x-jquery-tmpl": {
-    "compressible": true
-  },
-  "text/x-lua": {
-    "extensions": ["lua"]
-  },
-  "text/x-markdown": {
-    "compressible": true,
-    "extensions": ["mkd"]
-  },
-  "text/x-nfo": {
-    "source": "apache",
-    "extensions": ["nfo"]
-  },
-  "text/x-opml": {
-    "source": "apache",
-    "extensions": ["opml"]
-  },
-  "text/x-org": {
-    "compressible": true,
-    "extensions": ["org"]
-  },
-  "text/x-pascal": {
-    "source": "apache",
-    "extensions": ["p","pas"]
-  },
-  "text/x-processing": {
-    "compressible": true,
-    "extensions": ["pde"]
-  },
-  "text/x-sass": {
-    "extensions": ["sass"]
-  },
-  "text/x-scss": {
-    "extensions": ["scss"]
-  },
-  "text/x-setext": {
-    "source": "apache",
-    "extensions": ["etx"]
-  },
-  "text/x-sfv": {
-    "source": "apache",
-    "extensions": ["sfv"]
-  },
-  "text/x-suse-ymp": {
-    "compressible": true,
-    "extensions": ["ymp"]
-  },
-  "text/x-uuencode": {
-    "source": "apache",
-    "extensions": ["uu"]
-  },
-  "text/x-vcalendar": {
-    "source": "apache",
-    "extensions": ["vcs"]
-  },
-  "text/x-vcard": {
-    "source": "apache",
-    "extensions": ["vcf"]
-  },
-  "text/xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xml"]
-  },
-  "text/xml-external-parsed-entity": {
-    "source": "iana"
-  },
-  "text/yaml": {
-    "extensions": ["yaml","yml"]
-  },
-  "video/1d-interleaved-parityfec": {
-    "source": "iana"
-  },
-  "video/3gpp": {
-    "source": "iana",
-    "extensions": ["3gp","3gpp"]
-  },
-  "video/3gpp-tt": {
-    "source": "iana"
-  },
-  "video/3gpp2": {
-    "source": "iana",
-    "extensions": ["3g2"]
-  },
-  "video/bmpeg": {
-    "source": "iana"
-  },
-  "video/bt656": {
-    "source": "iana"
-  },
-  "video/celb": {
-    "source": "iana"
-  },
-  "video/dv": {
-    "source": "iana"
-  },
-  "video/encaprtp": {
-    "source": "iana"
-  },
-  "video/flexfec": {
-    "source": "iana"
-  },
-  "video/h261": {
-    "source": "iana",
-    "extensions": ["h261"]
-  },
-  "video/h263": {
-    "source": "iana",
-    "extensions": ["h263"]
-  },
-  "video/h263-1998": {
-    "source": "iana"
-  },
-  "video/h263-2000": {
-    "source": "iana"
-  },
-  "video/h264": {
-    "source": "iana",
-    "extensions": ["h264"]
-  },
-  "video/h264-rcdo": {
-    "source": "iana"
-  },
-  "video/h264-svc": {
-    "source": "iana"
-  },
-  "video/h265": {
-    "source": "iana"
-  },
-  "video/iso.segment": {
-    "source": "iana"
-  },
-  "video/jpeg": {
-    "source": "iana",
-    "extensions": ["jpgv"]
-  },
-  "video/jpeg2000": {
-    "source": "iana"
-  },
-  "video/jpm": {
-    "source": "apache",
-    "extensions": ["jpm","jpgm"]
-  },
-  "video/mj2": {
-    "source": "iana",
-    "extensions": ["mj2","mjp2"]
-  },
-  "video/mp1s": {
-    "source": "iana"
-  },
-  "video/mp2p": {
-    "source": "iana"
-  },
-  "video/mp2t": {
-    "source": "iana",
-    "extensions": ["ts"]
-  },
-  "video/mp4": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["mp4","mp4v","mpg4"]
-  },
-  "video/mp4v-es": {
-    "source": "iana"
-  },
-  "video/mpeg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["mpeg","mpg","mpe","m1v","m2v"]
-  },
-  "video/mpeg4-generic": {
-    "source": "iana"
-  },
-  "video/mpv": {
-    "source": "iana"
-  },
-  "video/nv": {
-    "source": "iana"
-  },
-  "video/ogg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["ogv"]
-  },
-  "video/parityfec": {
-    "source": "iana"
-  },
-  "video/pointer": {
-    "source": "iana"
-  },
-  "video/quicktime": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["qt","mov"]
-  },
-  "video/raptorfec": {
-    "source": "iana"
-  },
-  "video/raw": {
-    "source": "iana"
-  },
-  "video/rtp-enc-aescm128": {
-    "source": "iana"
-  },
-  "video/rtploopback": {
-    "source": "iana"
-  },
-  "video/rtx": {
-    "source": "iana"
-  },
-  "video/smpte291": {
-    "source": "iana"
-  },
-  "video/smpte292m": {
-    "source": "iana"
-  },
-  "video/ulpfec": {
-    "source": "iana"
-  },
-  "video/vc1": {
-    "source": "iana"
-  },
-  "video/vc2": {
-    "source": "iana"
-  },
-  "video/vnd.cctv": {
-    "source": "iana"
-  },
-  "video/vnd.dece.hd": {
-    "source": "iana",
-    "extensions": ["uvh","uvvh"]
-  },
-  "video/vnd.dece.mobile": {
-    "source": "iana",
-    "extensions": ["uvm","uvvm"]
-  },
-  "video/vnd.dece.mp4": {
-    "source": "iana"
-  },
-  "video/vnd.dece.pd": {
-    "source": "iana",
-    "extensions": ["uvp","uvvp"]
-  },
-  "video/vnd.dece.sd": {
-    "source": "iana",
-    "extensions": ["uvs","uvvs"]
-  },
-  "video/vnd.dece.video": {
-    "source": "iana",
-    "extensions": ["uvv","uvvv"]
-  },
-  "video/vnd.directv.mpeg": {
-    "source": "iana"
-  },
-  "video/vnd.directv.mpeg-tts": {
-    "source": "iana"
-  },
-  "video/vnd.dlna.mpeg-tts": {
-    "source": "iana"
-  },
-  "video/vnd.dvb.file": {
-    "source": "iana",
-    "extensions": ["dvb"]
-  },
-  "video/vnd.fvt": {
-    "source": "iana",
-    "extensions": ["fvt"]
-  },
-  "video/vnd.hns.video": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.1dparityfec-1010": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.1dparityfec-2005": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.2dparityfec-1010": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.2dparityfec-2005": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.ttsavc": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.ttsmpeg2": {
-    "source": "iana"
-  },
-  "video/vnd.motorola.video": {
-    "source": "iana"
-  },
-  "video/vnd.motorola.videop": {
-    "source": "iana"
-  },
-  "video/vnd.mpegurl": {
-    "source": "iana",
-    "extensions": ["mxu","m4u"]
-  },
-  "video/vnd.ms-playready.media.pyv": {
-    "source": "iana",
-    "extensions": ["pyv"]
-  },
-  "video/vnd.nokia.interleaved-multimedia": {
-    "source": "iana"
-  },
-  "video/vnd.nokia.mp4vr": {
-    "source": "iana"
-  },
-  "video/vnd.nokia.videovoip": {
-    "source": "iana"
-  },
-  "video/vnd.objectvideo": {
-    "source": "iana"
-  },
-  "video/vnd.radgamettools.bink": {
-    "source": "iana"
-  },
-  "video/vnd.radgamettools.smacker": {
-    "source": "iana"
-  },
-  "video/vnd.sealed.mpeg1": {
-    "source": "iana"
-  },
-  "video/vnd.sealed.mpeg4": {
-    "source": "iana"
-  },
-  "video/vnd.sealed.swf": {
-    "source": "iana"
-  },
-  "video/vnd.sealedmedia.softseal.mov": {
-    "source": "iana"
-  },
-  "video/vnd.uvvu.mp4": {
-    "source": "iana",
-    "extensions": ["uvu","uvvu"]
-  },
-  "video/vnd.vivo": {
-    "source": "iana",
-    "extensions": ["viv"]
-  },
-  "video/vnd.youtube.yt": {
-    "source": "iana"
-  },
-  "video/vp8": {
-    "source": "iana"
-  },
-  "video/webm": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["webm"]
-  },
-  "video/x-f4v": {
-    "source": "apache",
-    "extensions": ["f4v"]
-  },
-  "video/x-fli": {
-    "source": "apache",
-    "extensions": ["fli"]
-  },
-  "video/x-flv": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["flv"]
-  },
-  "video/x-m4v": {
-    "source": "apache",
-    "extensions": ["m4v"]
-  },
-  "video/x-matroska": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["mkv","mk3d","mks"]
-  },
-  "video/x-mng": {
-    "source": "apache",
-    "extensions": ["mng"]
-  },
-  "video/x-ms-asf": {
-    "source": "apache",
-    "extensions": ["asf","asx"]
-  },
-  "video/x-ms-vob": {
-    "source": "apache",
-    "extensions": ["vob"]
-  },
-  "video/x-ms-wm": {
-    "source": "apache",
-    "extensions": ["wm"]
-  },
-  "video/x-ms-wmv": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["wmv"]
-  },
-  "video/x-ms-wmx": {
-    "source": "apache",
-    "extensions": ["wmx"]
-  },
-  "video/x-ms-wvx": {
-    "source": "apache",
-    "extensions": ["wvx"]
-  },
-  "video/x-msvideo": {
-    "source": "apache",
-    "extensions": ["avi"]
-  },
-  "video/x-sgi-movie": {
-    "source": "apache",
-    "extensions": ["movie"]
-  },
-  "video/x-smv": {
-    "source": "apache",
-    "extensions": ["smv"]
-  },
-  "x-conference/x-cooltalk": {
-    "source": "apache",
-    "extensions": ["ice"]
-  },
-  "x-shader/x-fragment": {
-    "compressible": true
-  },
-  "x-shader/x-vertex": {
-    "compressible": true
-  }
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-db/index.js b/signaling_server/service/node_modules/express/node_modules/mime-db/index.js
deleted file mode 100644 (file)
index 551031f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * mime-db
- * Copyright(c) 2014 Jonathan Ong
- * MIT Licensed
- */
-
-/**
- * Module exports.
- */
-
-module.exports = require('./db.json')
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-db/package.json b/signaling_server/service/node_modules/express/node_modules/mime-db/package.json
deleted file mode 100644 (file)
index 30a9ec1..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-{
-  "_from": "mime-db@1.43.0",
-  "_id": "mime-db@1.43.0",
-  "_inBundle": false,
-  "_integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==",
-  "_location": "/mime-db",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "mime-db@1.43.0",
-    "name": "mime-db",
-    "escapedName": "mime-db",
-    "rawSpec": "1.43.0",
-    "saveSpec": null,
-    "fetchSpec": "1.43.0"
-  },
-  "_requiredBy": [
-    "/mime-types"
-  ],
-  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
-  "_shasum": "0a12e0502650e473d735535050e7c8f4eb4fae58",
-  "_spec": "mime-db@1.43.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/mime-types",
-  "bugs": {
-    "url": "https://github.com/jshttp/mime-db/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    },
-    {
-      "name": "Robert Kieffer",
-      "email": "robert@broofa.com",
-      "url": "http://github.com/broofa"
-    }
-  ],
-  "deprecated": false,
-  "description": "Media Type Database",
-  "devDependencies": {
-    "bluebird": "3.7.2",
-    "co": "4.6.0",
-    "cogent": "1.0.1",
-    "csv-parse": "4.8.3",
-    "eslint": "6.8.0",
-    "eslint-config-standard": "14.1.0",
-    "eslint-plugin-import": "2.19.1",
-    "eslint-plugin-node": "11.0.0",
-    "eslint-plugin-promise": "4.2.1",
-    "eslint-plugin-standard": "4.0.1",
-    "gnode": "0.1.2",
-    "mocha": "7.0.0",
-    "nyc": "15.0.0",
-    "raw-body": "2.4.1",
-    "stream-to-array": "2.3.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "db.json",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/mime-db#readme",
-  "keywords": [
-    "mime",
-    "db",
-    "type",
-    "types",
-    "database",
-    "charset",
-    "charsets"
-  ],
-  "license": "MIT",
-  "name": "mime-db",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/mime-db.git"
-  },
-  "scripts": {
-    "build": "node scripts/build",
-    "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx",
-    "lint": "eslint .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test",
-    "update": "npm run fetch && npm run build",
-    "version": "node scripts/version-history.js && git add HISTORY.md"
-  },
-  "version": "1.43.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-types/HISTORY.md b/signaling_server/service/node_modules/express/node_modules/mime-types/HISTORY.md
deleted file mode 100644 (file)
index db3b311..0000000
+++ /dev/null
@@ -1,325 +0,0 @@
-2.1.26 / 2020-01-05
-===================
-
-  * deps: mime-db@1.43.0
-    - Add `application/x-keepass2` with extension `.kdbx`
-    - Add extension `.mxmf` to `audio/mobile-xmf`
-    - Add extensions from IANA for `application/*+xml` types
-    - Add new upstream MIME types
-
-2.1.25 / 2019-11-12
-===================
-
-  * deps: mime-db@1.42.0
-    - Add new upstream MIME types
-    - Add `application/toml` with extension `.toml`
-    - Add `image/vnd.ms-dds` with extension `.dds`
-
-2.1.24 / 2019-04-20
-===================
-
-  * deps: mime-db@1.40.0
-    - Add extensions from IANA for `model/*` types
-    - Add `text/mdx` with extension `.mdx`
-
-2.1.23 / 2019-04-17
-===================
-
-  * deps: mime-db@~1.39.0
-    - Add extensions `.siv` and `.sieve` to `application/sieve`
-    - Add new upstream MIME types
-
-2.1.22 / 2019-02-14
-===================
-
-  * deps: mime-db@~1.38.0
-    - Add extension `.nq` to `application/n-quads`
-    - Add extension `.nt` to `application/n-triples`
-    - Add new upstream MIME types
-    - Mark `text/less` as compressible
-
-2.1.21 / 2018-10-19
-===================
-
-  * deps: mime-db@~1.37.0
-    - Add extensions to HEIC image types
-    - Add new upstream MIME types
-
-2.1.20 / 2018-08-26
-===================
-
-  * deps: mime-db@~1.36.0
-    - Add Apple file extensions from IANA
-    - Add extensions from IANA for `image/*` types
-    - Add new upstream MIME types
-
-2.1.19 / 2018-07-17
-===================
-
-  * deps: mime-db@~1.35.0
-    - Add extension `.csl` to `application/vnd.citationstyles.style+xml`
-    - Add extension `.es` to `application/ecmascript`
-    - Add extension `.owl` to `application/rdf+xml`
-    - Add new upstream MIME types
-    - Add UTF-8 as default charset for `text/turtle`
-
-2.1.18 / 2018-02-16
-===================
-
-  * deps: mime-db@~1.33.0
-    - Add `application/raml+yaml` with extension `.raml`
-    - Add `application/wasm` with extension `.wasm`
-    - Add `text/shex` with extension `.shex`
-    - Add extensions for JPEG-2000 images
-    - Add extensions from IANA for `message/*` types
-    - Add new upstream MIME types
-    - Update font MIME types
-    - Update `text/hjson` to registered `application/hjson`
-
-2.1.17 / 2017-09-01
-===================
-
-  * deps: mime-db@~1.30.0
-    - Add `application/vnd.ms-outlook`
-    - Add `application/x-arj`
-    - Add extension `.mjs` to `application/javascript`
-    - Add glTF types and extensions
-    - Add new upstream MIME types
-    - Add `text/x-org`
-    - Add VirtualBox MIME types
-    - Fix `source` records for `video/*` types that are IANA
-    - Update `font/opentype` to registered `font/otf`
-
-2.1.16 / 2017-07-24
-===================
-
-  * deps: mime-db@~1.29.0
-    - Add `application/fido.trusted-apps+json`
-    - Add extension `.wadl` to `application/vnd.sun.wadl+xml`
-    - Add extension `.gz` to `application/gzip`
-    - Add new upstream MIME types
-    - Update extensions `.md` and `.markdown` to be `text/markdown`
-
-2.1.15 / 2017-03-23
-===================
-
-  * deps: mime-db@~1.27.0
-    - Add new mime types
-    - Add `image/apng`
-
-2.1.14 / 2017-01-14
-===================
-
-  * deps: mime-db@~1.26.0
-    - Add new mime types
-
-2.1.13 / 2016-11-18
-===================
-
-  * deps: mime-db@~1.25.0
-    - Add new mime types
-
-2.1.12 / 2016-09-18
-===================
-
-  * deps: mime-db@~1.24.0
-    - Add new mime types
-    - Add `audio/mp3`
-
-2.1.11 / 2016-05-01
-===================
-
-  * deps: mime-db@~1.23.0
-    - Add new mime types
-
-2.1.10 / 2016-02-15
-===================
-
-  * deps: mime-db@~1.22.0
-    - Add new mime types
-    - Fix extension of `application/dash+xml`
-    - Update primary extension for `audio/mp4`
-
-2.1.9 / 2016-01-06
-==================
-
-  * deps: mime-db@~1.21.0
-    - Add new mime types
-
-2.1.8 / 2015-11-30
-==================
-
-  * deps: mime-db@~1.20.0
-    - Add new mime types
-
-2.1.7 / 2015-09-20
-==================
-
-  * deps: mime-db@~1.19.0
-    - Add new mime types
-
-2.1.6 / 2015-09-03
-==================
-
-  * deps: mime-db@~1.18.0
-    - Add new mime types
-
-2.1.5 / 2015-08-20
-==================
-
-  * deps: mime-db@~1.17.0
-    - Add new mime types
-
-2.1.4 / 2015-07-30
-==================
-
-  * deps: mime-db@~1.16.0
-    - Add new mime types
-
-2.1.3 / 2015-07-13
-==================
-
-  * deps: mime-db@~1.15.0
-    - Add new mime types
-
-2.1.2 / 2015-06-25
-==================
-
-  * deps: mime-db@~1.14.0
-    - Add new mime types
-
-2.1.1 / 2015-06-08
-==================
-
-  * perf: fix deopt during mapping
-
-2.1.0 / 2015-06-07
-==================
-
-  * Fix incorrectly treating extension-less file name as extension
-    - i.e. `'path/to/json'` will no longer return `application/json`
-  * Fix `.charset(type)` to accept parameters
-  * Fix `.charset(type)` to match case-insensitive
-  * Improve generation of extension to MIME mapping
-  * Refactor internals for readability and no argument reassignment
-  * Prefer `application/*` MIME types from the same source
-  * Prefer any type over `application/octet-stream`
-  * deps: mime-db@~1.13.0
-    - Add nginx as a source
-    - Add new mime types
-
-2.0.14 / 2015-06-06
-===================
-
-  * deps: mime-db@~1.12.0
-    - Add new mime types
-
-2.0.13 / 2015-05-31
-===================
-
-  * deps: mime-db@~1.11.0
-    - Add new mime types
-
-2.0.12 / 2015-05-19
-===================
-
-  * deps: mime-db@~1.10.0
-    - Add new mime types
-
-2.0.11 / 2015-05-05
-===================
-
-  * deps: mime-db@~1.9.1
-    - Add new mime types
-
-2.0.10 / 2015-03-13
-===================
-
-  * deps: mime-db@~1.8.0
-    - Add new mime types
-
-2.0.9 / 2015-02-09
-==================
-
-  * deps: mime-db@~1.7.0
-    - Add new mime types
-    - Community extensions ownership transferred from `node-mime`
-
-2.0.8 / 2015-01-29
-==================
-
-  * deps: mime-db@~1.6.0
-    - Add new mime types
-
-2.0.7 / 2014-12-30
-==================
-
-  * deps: mime-db@~1.5.0
-    - Add new mime types
-    - Fix various invalid MIME type entries
-
-2.0.6 / 2014-12-30
-==================
-
-  * deps: mime-db@~1.4.0
-    - Add new mime types
-    - Fix various invalid MIME type entries
-    - Remove example template MIME types
-
-2.0.5 / 2014-12-29
-==================
-
-  * deps: mime-db@~1.3.1
-    - Fix missing extensions
-
-2.0.4 / 2014-12-10
-==================
-
-  * deps: mime-db@~1.3.0
-    - Add new mime types
-
-2.0.3 / 2014-11-09
-==================
-
-  * deps: mime-db@~1.2.0
-    - Add new mime types
-
-2.0.2 / 2014-09-28
-==================
-
-  * deps: mime-db@~1.1.0
-    - Add new mime types
-    - Add additional compressible
-    - Update charsets
-
-2.0.1 / 2014-09-07
-==================
-
-  * Support Node.js 0.6
-
-2.0.0 / 2014-09-02
-==================
-
-  * Use `mime-db`
-  * Remove `.define()`
-
-1.0.2 / 2014-08-04
-==================
-
-  * Set charset=utf-8 for `text/javascript`
-
-1.0.1 / 2014-06-24
-==================
-
-  * Add `text/jsx` type
-
-1.0.0 / 2014-05-12
-==================
-
-  * Return `false` for unknown types
-  * Set charset=utf-8 for `application/json`
-
-0.1.0 / 2014-05-02
-==================
-
-  * Initial release
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-types/LICENSE b/signaling_server/service/node_modules/express/node_modules/mime-types/LICENSE
deleted file mode 100644 (file)
index 0616607..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
-Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-types/README.md b/signaling_server/service/node_modules/express/node_modules/mime-types/README.md
deleted file mode 100644 (file)
index 1dbef2b..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-# mime-types
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-The ultimate javascript content-type utility.
-
-Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except:
-
-- __No fallbacks.__ Instead of naively returning the first available type,
-  `mime-types` simply returns `false`, so do
-  `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.
-- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.
-- No `.define()` functionality
-- Bug fixes for `.lookup(path)`
-
-Otherwise, the API is compatible with `mime` 1.x.
-
-## Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install mime-types
-```
-
-## Adding Types
-
-All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db),
-so open a PR there if you'd like to add mime types.
-
-## API
-
-```js
-var mime = require('mime-types')
-```
-
-All functions return `false` if input is invalid or not found.
-
-### mime.lookup(path)
-
-Lookup the content-type associated with a file.
-
-```js
-mime.lookup('json')             // 'application/json'
-mime.lookup('.md')              // 'text/markdown'
-mime.lookup('file.html')        // 'text/html'
-mime.lookup('folder/file.js')   // 'application/javascript'
-mime.lookup('folder/.htaccess') // false
-
-mime.lookup('cats') // false
-```
-
-### mime.contentType(type)
-
-Create a full content-type header given a content-type or extension.
-When given an extension, `mime.lookup` is used to get the matching
-content-type, otherwise the given content-type is used. Then if the
-content-type does not already have a `charset` parameter, `mime.charset`
-is used to get the default charset and add to the returned content-type.
-
-```js
-mime.contentType('markdown')  // 'text/x-markdown; charset=utf-8'
-mime.contentType('file.json') // 'application/json; charset=utf-8'
-mime.contentType('text/html') // 'text/html; charset=utf-8'
-mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1'
-
-// from a full path
-mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'
-```
-
-### mime.extension(type)
-
-Get the default extension for a content-type.
-
-```js
-mime.extension('application/octet-stream') // 'bin'
-```
-
-### mime.charset(type)
-
-Lookup the implied default charset of a content-type.
-
-```js
-mime.charset('text/markdown') // 'UTF-8'
-```
-
-### var type = mime.types[extension]
-
-A map of content-types by extension.
-
-### [extensions...] = mime.extensions[type]
-
-A map of extensions by content-type.
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master
-[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master
-[node-version-image]: https://badgen.net/npm/node/mime-types
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/mime-types
-[npm-url]: https://npmjs.org/package/mime-types
-[npm-version-image]: https://badgen.net/npm/v/mime-types
-[travis-image]: https://badgen.net/travis/jshttp/mime-types/master
-[travis-url]: https://travis-ci.org/jshttp/mime-types
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-types/index.js b/signaling_server/service/node_modules/express/node_modules/mime-types/index.js
deleted file mode 100644 (file)
index b9f34d5..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*!
- * mime-types
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module dependencies.
- * @private
- */
-
-var db = require('mime-db')
-var extname = require('path').extname
-
-/**
- * Module variables.
- * @private
- */
-
-var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/
-var TEXT_TYPE_REGEXP = /^text\//i
-
-/**
- * Module exports.
- * @public
- */
-
-exports.charset = charset
-exports.charsets = { lookup: charset }
-exports.contentType = contentType
-exports.extension = extension
-exports.extensions = Object.create(null)
-exports.lookup = lookup
-exports.types = Object.create(null)
-
-// Populate the extensions/types maps
-populateMaps(exports.extensions, exports.types)
-
-/**
- * Get the default charset for a MIME type.
- *
- * @param {string} type
- * @return {boolean|string}
- */
-
-function charset (type) {
-  if (!type || typeof type !== 'string') {
-    return false
-  }
-
-  // TODO: use media-typer
-  var match = EXTRACT_TYPE_REGEXP.exec(type)
-  var mime = match && db[match[1].toLowerCase()]
-
-  if (mime && mime.charset) {
-    return mime.charset
-  }
-
-  // default text/* to utf-8
-  if (match && TEXT_TYPE_REGEXP.test(match[1])) {
-    return 'UTF-8'
-  }
-
-  return false
-}
-
-/**
- * Create a full Content-Type header given a MIME type or extension.
- *
- * @param {string} str
- * @return {boolean|string}
- */
-
-function contentType (str) {
-  // TODO: should this even be in this module?
-  if (!str || typeof str !== 'string') {
-    return false
-  }
-
-  var mime = str.indexOf('/') === -1
-    ? exports.lookup(str)
-    : str
-
-  if (!mime) {
-    return false
-  }
-
-  // TODO: use content-type or other module
-  if (mime.indexOf('charset') === -1) {
-    var charset = exports.charset(mime)
-    if (charset) mime += '; charset=' + charset.toLowerCase()
-  }
-
-  return mime
-}
-
-/**
- * Get the default extension for a MIME type.
- *
- * @param {string} type
- * @return {boolean|string}
- */
-
-function extension (type) {
-  if (!type || typeof type !== 'string') {
-    return false
-  }
-
-  // TODO: use media-typer
-  var match = EXTRACT_TYPE_REGEXP.exec(type)
-
-  // get extensions
-  var exts = match && exports.extensions[match[1].toLowerCase()]
-
-  if (!exts || !exts.length) {
-    return false
-  }
-
-  return exts[0]
-}
-
-/**
- * Lookup the MIME type for a file path/extension.
- *
- * @param {string} path
- * @return {boolean|string}
- */
-
-function lookup (path) {
-  if (!path || typeof path !== 'string') {
-    return false
-  }
-
-  // get the extension ("ext" or ".ext" or full path)
-  var extension = extname('x.' + path)
-    .toLowerCase()
-    .substr(1)
-
-  if (!extension) {
-    return false
-  }
-
-  return exports.types[extension] || false
-}
-
-/**
- * Populate the extensions and types maps.
- * @private
- */
-
-function populateMaps (extensions, types) {
-  // source preference (least -> most)
-  var preference = ['nginx', 'apache', undefined, 'iana']
-
-  Object.keys(db).forEach(function forEachMimeType (type) {
-    var mime = db[type]
-    var exts = mime.extensions
-
-    if (!exts || !exts.length) {
-      return
-    }
-
-    // mime -> extensions
-    extensions[type] = exts
-
-    // extension -> mime
-    for (var i = 0; i < exts.length; i++) {
-      var extension = exts[i]
-
-      if (types[extension]) {
-        var from = preference.indexOf(db[types[extension]].source)
-        var to = preference.indexOf(mime.source)
-
-        if (types[extension] !== 'application/octet-stream' &&
-          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
-          // skip the remapping
-          continue
-        }
-      }
-
-      // set the extension -> mime
-      types[extension] = type
-    }
-  })
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/mime-types/package.json b/signaling_server/service/node_modules/express/node_modules/mime-types/package.json
deleted file mode 100644 (file)
index bebb20a..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "_from": "mime-types@~2.1.24",
-  "_id": "mime-types@2.1.26",
-  "_inBundle": false,
-  "_integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
-  "_location": "/mime-types",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "mime-types@~2.1.24",
-    "name": "mime-types",
-    "escapedName": "mime-types",
-    "rawSpec": "~2.1.24",
-    "saveSpec": null,
-    "fetchSpec": "~2.1.24"
-  },
-  "_requiredBy": [
-    "/accepts",
-    "/form-data",
-    "/request",
-    "/type-is"
-  ],
-  "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
-  "_shasum": "9c921fc09b7e149a65dfdc0da4d20997200b0a06",
-  "_spec": "mime-types@~2.1.24",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/accepts",
-  "bugs": {
-    "url": "https://github.com/jshttp/mime-types/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jeremiah Senkpiel",
-      "email": "fishrock123@rocketmail.com",
-      "url": "https://searchbeam.jit.su"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "dependencies": {
-    "mime-db": "1.43.0"
-  },
-  "deprecated": false,
-  "description": "The ultimate javascript content-type utility.",
-  "devDependencies": {
-    "eslint": "6.8.0",
-    "eslint-config-standard": "14.1.0",
-    "eslint-plugin-import": "2.19.1",
-    "eslint-plugin-node": "11.0.0",
-    "eslint-plugin-promise": "4.2.1",
-    "eslint-plugin-standard": "4.0.1",
-    "mocha": "7.0.0",
-    "nyc": "15.0.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/mime-types#readme",
-  "keywords": [
-    "mime",
-    "types"
-  ],
-  "license": "MIT",
-  "name": "mime-types",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/mime-types.git"
-  },
-  "scripts": {
-    "lint": "eslint .",
-    "test": "mocha --reporter spec test/test.js",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test"
-  },
-  "version": "2.1.26"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/mime/LICENSE b/signaling_server/service/node_modules/express/node_modules/mime/LICENSE
deleted file mode 100644 (file)
index 451fc45..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2010 Benjamin Thomas, Robert Kieffer
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/mime/README.md b/signaling_server/service/node_modules/express/node_modules/mime/README.md
deleted file mode 100644 (file)
index 6ca19bd..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-# mime
-
-Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.
-
-## Install
-
-Install with [npm](http://github.com/isaacs/npm):
-
-    npm install mime
-
-## API - Queries
-
-### mime.lookup(path)
-Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.').  E.g.
-
-    var mime = require('mime');
-
-    mime.lookup('/path/to/file.txt');         // => 'text/plain'
-    mime.lookup('file.txt');                  // => 'text/plain'
-    mime.lookup('.TXT');                      // => 'text/plain'
-    mime.lookup('htm');                       // => 'text/html'
-
-### mime.default_type
-Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)
-
-### mime.extension(type)
-Get the default extension for `type`
-
-    mime.extension('text/html');                 // => 'html'
-    mime.extension('application/octet-stream');  // => 'bin'
-
-### mime.charsets.lookup()
-
-Map mime-type to charset
-
-    mime.charsets.lookup('text/plain');        // => 'UTF-8'
-
-(The logic for charset lookups is pretty rudimentary.  Feel free to suggest improvements.)
-
-## API - Defining Custom Types
-
-The following APIs allow you to add your own type mappings within your project.  If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).
-
-### mime.define()
-
-Add custom mime/extension mappings
-
-    mime.define({
-        'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],
-        'application/x-my-type': ['x-mt', 'x-mtt'],
-        // etc ...
-    });
-
-    mime.lookup('x-sft');                 // => 'text/x-some-format'
-
-The first entry in the extensions array is returned by `mime.extension()`. E.g.
-
-    mime.extension('text/x-some-format'); // => 'x-sf'
-
-### mime.load(filepath)
-
-Load mappings from an Apache ".types" format file
-
-    mime.load('./my_project.types');
-
-The .types file format is simple -  See the `types` dir for examples.
diff --git a/signaling_server/service/node_modules/express/node_modules/mime/mime.js b/signaling_server/service/node_modules/express/node_modules/mime/mime.js
deleted file mode 100644 (file)
index 48be0c5..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-var path = require('path');
-var fs = require('fs');
-
-function Mime() {
-  // Map of extension -> mime type
-  this.types = Object.create(null);
-
-  // Map of mime type -> extension
-  this.extensions = Object.create(null);
-}
-
-/**
- * Define mimetype -> extension mappings.  Each key is a mime-type that maps
- * to an array of extensions associated with the type.  The first extension is
- * used as the default extension for the type.
- *
- * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});
- *
- * @param map (Object) type definitions
- */
-Mime.prototype.define = function (map) {
-  for (var type in map) {
-    var exts = map[type];
-
-    for (var i = 0; i < exts.length; i++) {
-      if (process.env.DEBUG_MIME && this.types[exts]) {
-        console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' +
-          this.types[exts] + ' to ' + type);
-      }
-
-      this.types[exts[i]] = type;
-    }
-
-    // Default extension is the first one we encounter
-    if (!this.extensions[type]) {
-      this.extensions[type] = exts[0];
-    }
-  }
-};
-
-/**
- * Load an Apache2-style ".types" file
- *
- * This may be called multiple times (it's expected).  Where files declare
- * overlapping types/extensions, the last file wins.
- *
- * @param file (String) path of file to load.
- */
-Mime.prototype.load = function(file) {
-
-  this._loading = file;
-  // Read file and split into lines
-  var map = {},
-      content = fs.readFileSync(file, 'ascii'),
-      lines = content.split(/[\r\n]+/);
-
-  lines.forEach(function(line) {
-    // Clean up whitespace/comments, and split into fields
-    var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/);
-    map[fields.shift()] = fields;
-  });
-
-  this.define(map);
-
-  this._loading = null;
-};
-
-/**
- * Lookup a mime type based on extension
- */
-Mime.prototype.lookup = function(path, fallback) {
-  var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase();
-
-  return this.types[ext] || fallback || this.default_type;
-};
-
-/**
- * Return file extension associated with a mime type
- */
-Mime.prototype.extension = function(mimeType) {
-  var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase();
-  return this.extensions[type];
-};
-
-// Default instance
-var mime = new Mime();
-
-// Load local copy of
-// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
-mime.load(path.join(__dirname, 'types/mime.types'));
-
-// Load additional types from node.js community
-mime.load(path.join(__dirname, 'types/node.types'));
-
-// Default type
-mime.default_type = mime.lookup('bin');
-
-//
-// Additional API specific to the default instance
-//
-
-mime.Mime = Mime;
-
-/**
- * Lookup a charset based on mime type.
- */
-mime.charsets = {
-  lookup: function(mimeType, fallback) {
-    // Assume text types are utf8
-    return (/^text\//).test(mimeType) ? 'UTF-8' : fallback;
-  }
-};
-
-module.exports = mime;
diff --git a/signaling_server/service/node_modules/express/node_modules/mime/package.json b/signaling_server/service/node_modules/express/node_modules/mime/package.json
deleted file mode 100644 (file)
index 4455a46..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "_from": "mime@1.2.11",
-  "_id": "mime@1.2.11",
-  "_inBundle": false,
-  "_integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
-  "_location": "/mime",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "mime@1.2.11",
-    "name": "mime",
-    "escapedName": "mime",
-    "rawSpec": "1.2.11",
-    "saveSpec": null,
-    "fetchSpec": "1.2.11"
-  },
-  "_requiredBy": [
-    "/"
-  ],
-  "_resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
-  "_shasum": "58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10",
-  "_spec": "mime@1.2.11",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes",
-  "author": {
-    "name": "Robert Kieffer",
-    "email": "robert@broofa.com",
-    "url": "http://github.com/broofa"
-  },
-  "bugs": {
-    "url": "https://github.com/broofa/node-mime/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Benjamin Thomas",
-      "email": "benjamin@benjaminthomas.org",
-      "url": "http://github.com/bentomas"
-    }
-  ],
-  "dependencies": {},
-  "deprecated": false,
-  "description": "A comprehensive library for mime-type mapping",
-  "devDependencies": {},
-  "homepage": "https://github.com/broofa/node-mime#readme",
-  "keywords": [
-    "util",
-    "mime"
-  ],
-  "main": "mime.js",
-  "name": "mime",
-  "repository": {
-    "url": "git+https://github.com/broofa/node-mime.git",
-    "type": "git"
-  },
-  "version": "1.2.11"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/mime/test.js b/signaling_server/service/node_modules/express/node_modules/mime/test.js
deleted file mode 100644 (file)
index 2cda1c7..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Usage: node test.js
- */
-
-var mime = require('./mime');
-var assert = require('assert');
-var path = require('path');
-
-function eq(a, b) {
-  console.log('Test: ' + a + ' === ' + b);
-  assert.strictEqual.apply(null, arguments);
-}
-
-console.log(Object.keys(mime.extensions).length + ' types');
-console.log(Object.keys(mime.types).length + ' extensions\n');
-
-//
-// Test mime lookups
-//
-
-eq('text/plain', mime.lookup('text.txt'));     // normal file
-eq('text/plain', mime.lookup('TEXT.TXT'));     // uppercase
-eq('text/plain', mime.lookup('dir/text.txt')); // dir + file
-eq('text/plain', mime.lookup('.text.txt'));    // hidden file
-eq('text/plain', mime.lookup('.txt'));         // nameless
-eq('text/plain', mime.lookup('txt'));          // extension-only
-eq('text/plain', mime.lookup('/txt'));         // extension-less ()
-eq('text/plain', mime.lookup('\\txt'));        // Windows, extension-less
-eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized
-eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default
-
-//
-// Test extensions
-//
-
-eq('txt', mime.extension(mime.types.text));
-eq('html', mime.extension(mime.types.htm));
-eq('bin', mime.extension('application/octet-stream'));
-eq('bin', mime.extension('application/octet-stream '));
-eq('html', mime.extension(' text/html; charset=UTF-8'));
-eq('html', mime.extension('text/html; charset=UTF-8 '));
-eq('html', mime.extension('text/html; charset=UTF-8'));
-eq('html', mime.extension('text/html ; charset=UTF-8'));
-eq('html', mime.extension('text/html;charset=UTF-8'));
-eq('html', mime.extension('text/Html;charset=UTF-8'));
-eq(undefined, mime.extension('unrecognized'));
-
-//
-// Test node.types lookups
-//
-
-eq('application/font-woff', mime.lookup('file.woff'));
-eq('application/octet-stream', mime.lookup('file.buffer'));
-eq('audio/mp4', mime.lookup('file.m4a'));
-eq('font/opentype', mime.lookup('file.otf'));
-
-//
-// Test charsets
-//
-
-eq('UTF-8', mime.charsets.lookup('text/plain'));
-eq(undefined, mime.charsets.lookup(mime.types.js));
-eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));
-
-//
-// Test for overlaps between mime.types and node.types
-//
-
-var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime();
-apacheTypes.load(path.join(__dirname, 'types/mime.types'));
-nodeTypes.load(path.join(__dirname, 'types/node.types'));
-
-var keys = [].concat(Object.keys(apacheTypes.types))
-             .concat(Object.keys(nodeTypes.types));
-keys.sort();
-for (var i = 1; i < keys.length; i++) {
-  if (keys[i] == keys[i-1]) {
-    console.warn('Warning: ' +
-      'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] +
-      ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]);
-  }
-}
-
-console.log('\nOK');
diff --git a/signaling_server/service/node_modules/express/node_modules/mime/types/mime.types b/signaling_server/service/node_modules/express/node_modules/mime/types/mime.types
deleted file mode 100644 (file)
index da8cd69..0000000
+++ /dev/null
@@ -1,1588 +0,0 @@
-# This file maps Internet media types to unique file extension(s).
-# Although created for httpd, this file is used by many software systems
-# and has been placed in the public domain for unlimited redisribution.
-#
-# The table below contains both registered and (common) unregistered types.
-# A type that has no unique extension can be ignored -- they are listed
-# here to guide configurations toward known types and to make it easier to
-# identify "new" types.  File extensions are also commonly used to indicate
-# content languages and encodings, so choose them carefully.
-#
-# Internet media types should be registered as described in RFC 4288.
-# The registry is at <http://www.iana.org/assignments/media-types/>.
-#
-# MIME type (lowercased)                       Extensions
-# ============================================ ==========
-# application/1d-interleaved-parityfec
-# application/3gpp-ims+xml
-# application/activemessage
-application/andrew-inset                       ez
-# application/applefile
-application/applixware                         aw
-application/atom+xml                           atom
-application/atomcat+xml                                atomcat
-# application/atomicmail
-application/atomsvc+xml                                atomsvc
-# application/auth-policy+xml
-# application/batch-smtp
-# application/beep+xml
-# application/calendar+xml
-# application/cals-1840
-# application/ccmp+xml
-application/ccxml+xml                          ccxml
-application/cdmi-capability                    cdmia
-application/cdmi-container                     cdmic
-application/cdmi-domain                                cdmid
-application/cdmi-object                                cdmio
-application/cdmi-queue                         cdmiq
-# application/cea-2018+xml
-# application/cellml+xml
-# application/cfw
-# application/cnrp+xml
-# application/commonground
-# application/conference-info+xml
-# application/cpl+xml
-# application/csta+xml
-# application/cstadata+xml
-application/cu-seeme                           cu
-# application/cybercash
-application/davmount+xml                       davmount
-# application/dca-rft
-# application/dec-dx
-# application/dialog-info+xml
-# application/dicom
-# application/dns
-application/docbook+xml                                dbk
-# application/dskpp+xml
-application/dssc+der                           dssc
-application/dssc+xml                           xdssc
-# application/dvcs
-application/ecmascript                         ecma
-# application/edi-consent
-# application/edi-x12
-# application/edifact
-application/emma+xml                           emma
-# application/epp+xml
-application/epub+zip                           epub
-# application/eshop
-# application/example
-application/exi                                        exi
-# application/fastinfoset
-# application/fastsoap
-# application/fits
-application/font-tdpfr                         pfr
-# application/framework-attributes+xml
-application/gml+xml                            gml
-application/gpx+xml                            gpx
-application/gxf                                        gxf
-# application/h224
-# application/held+xml
-# application/http
-application/hyperstudio                                stk
-# application/ibe-key-request+xml
-# application/ibe-pkg-reply+xml
-# application/ibe-pp-data
-# application/iges
-# application/im-iscomposing+xml
-# application/index
-# application/index.cmd
-# application/index.obj
-# application/index.response
-# application/index.vnd
-application/inkml+xml                          ink inkml
-# application/iotp
-application/ipfix                              ipfix
-# application/ipp
-# application/isup
-application/java-archive                       jar
-application/java-serialized-object             ser
-application/java-vm                            class
-application/javascript                         js
-application/json                               json
-application/jsonml+json                                jsonml
-# application/kpml-request+xml
-# application/kpml-response+xml
-application/lost+xml                           lostxml
-application/mac-binhex40                       hqx
-application/mac-compactpro                     cpt
-# application/macwriteii
-application/mads+xml                           mads
-application/marc                               mrc
-application/marcxml+xml                                mrcx
-application/mathematica                                ma nb mb
-# application/mathml-content+xml
-# application/mathml-presentation+xml
-application/mathml+xml                         mathml
-# application/mbms-associated-procedure-description+xml
-# application/mbms-deregister+xml
-# application/mbms-envelope+xml
-# application/mbms-msk+xml
-# application/mbms-msk-response+xml
-# application/mbms-protection-description+xml
-# application/mbms-reception-report+xml
-# application/mbms-register+xml
-# application/mbms-register-response+xml
-# application/mbms-user-service-description+xml
-application/mbox                               mbox
-# application/media_control+xml
-application/mediaservercontrol+xml             mscml
-application/metalink+xml                       metalink
-application/metalink4+xml                      meta4
-application/mets+xml                           mets
-# application/mikey
-application/mods+xml                           mods
-# application/moss-keys
-# application/moss-signature
-# application/mosskey-data
-# application/mosskey-request
-application/mp21                               m21 mp21
-application/mp4                                        mp4s
-# application/mpeg4-generic
-# application/mpeg4-iod
-# application/mpeg4-iod-xmt
-# application/msc-ivr+xml
-# application/msc-mixer+xml
-application/msword                             doc dot
-application/mxf                                        mxf
-# application/nasdata
-# application/news-checkgroups
-# application/news-groupinfo
-# application/news-transmission
-# application/nss
-# application/ocsp-request
-# application/ocsp-response
-application/octet-stream       bin dms lrf mar so dist distz pkg bpk dump elc deploy
-application/oda                                        oda
-application/oebps-package+xml                  opf
-application/ogg                                        ogx
-application/omdoc+xml                          omdoc
-application/onenote                            onetoc onetoc2 onetmp onepkg
-application/oxps                               oxps
-# application/parityfec
-application/patch-ops-error+xml                        xer
-application/pdf                                        pdf
-application/pgp-encrypted                      pgp
-# application/pgp-keys
-application/pgp-signature                      asc sig
-application/pics-rules                         prf
-# application/pidf+xml
-# application/pidf-diff+xml
-application/pkcs10                             p10
-application/pkcs7-mime                         p7m p7c
-application/pkcs7-signature                    p7s
-application/pkcs8                              p8
-application/pkix-attr-cert                     ac
-application/pkix-cert                          cer
-application/pkix-crl                           crl
-application/pkix-pkipath                       pkipath
-application/pkixcmp                            pki
-application/pls+xml                            pls
-# application/poc-settings+xml
-application/postscript                         ai eps ps
-# application/prs.alvestrand.titrax-sheet
-application/prs.cww                            cww
-# application/prs.nprend
-# application/prs.plucker
-# application/prs.rdf-xml-crypt
-# application/prs.xsf+xml
-application/pskc+xml                           pskcxml
-# application/qsig
-application/rdf+xml                            rdf
-application/reginfo+xml                                rif
-application/relax-ng-compact-syntax            rnc
-# application/remote-printing
-application/resource-lists+xml                 rl
-application/resource-lists-diff+xml            rld
-# application/riscos
-# application/rlmi+xml
-application/rls-services+xml                   rs
-application/rpki-ghostbusters                  gbr
-application/rpki-manifest                      mft
-application/rpki-roa                           roa
-# application/rpki-updown
-application/rsd+xml                            rsd
-application/rss+xml                            rss
-application/rtf                                        rtf
-# application/rtx
-# application/samlassertion+xml
-# application/samlmetadata+xml
-application/sbml+xml                           sbml
-application/scvp-cv-request                    scq
-application/scvp-cv-response                   scs
-application/scvp-vp-request                    spq
-application/scvp-vp-response                   spp
-application/sdp                                        sdp
-# application/set-payment
-application/set-payment-initiation             setpay
-# application/set-registration
-application/set-registration-initiation                setreg
-# application/sgml
-# application/sgml-open-catalog
-application/shf+xml                            shf
-# application/sieve
-# application/simple-filter+xml
-# application/simple-message-summary
-# application/simplesymbolcontainer
-# application/slate
-# application/smil
-application/smil+xml                           smi smil
-# application/soap+fastinfoset
-# application/soap+xml
-application/sparql-query                       rq
-application/sparql-results+xml                 srx
-# application/spirits-event+xml
-application/srgs                               gram
-application/srgs+xml                           grxml
-application/sru+xml                            sru
-application/ssdl+xml                           ssdl
-application/ssml+xml                           ssml
-# application/tamp-apex-update
-# application/tamp-apex-update-confirm
-# application/tamp-community-update
-# application/tamp-community-update-confirm
-# application/tamp-error
-# application/tamp-sequence-adjust
-# application/tamp-sequence-adjust-confirm
-# application/tamp-status-query
-# application/tamp-status-response
-# application/tamp-update
-# application/tamp-update-confirm
-application/tei+xml                            tei teicorpus
-application/thraud+xml                         tfi
-# application/timestamp-query
-# application/timestamp-reply
-application/timestamped-data                   tsd
-# application/tve-trigger
-# application/ulpfec
-# application/vcard+xml
-# application/vemmi
-# application/vividence.scriptfile
-# application/vnd.3gpp.bsf+xml
-application/vnd.3gpp.pic-bw-large              plb
-application/vnd.3gpp.pic-bw-small              psb
-application/vnd.3gpp.pic-bw-var                        pvb
-# application/vnd.3gpp.sms
-# application/vnd.3gpp2.bcmcsinfo+xml
-# application/vnd.3gpp2.sms
-application/vnd.3gpp2.tcap                     tcap
-application/vnd.3m.post-it-notes               pwn
-application/vnd.accpac.simply.aso              aso
-application/vnd.accpac.simply.imp              imp
-application/vnd.acucobol                       acu
-application/vnd.acucorp                                atc acutc
-application/vnd.adobe.air-application-installer-package+zip    air
-application/vnd.adobe.formscentral.fcdt                fcdt
-application/vnd.adobe.fxp                      fxp fxpl
-# application/vnd.adobe.partial-upload
-application/vnd.adobe.xdp+xml                  xdp
-application/vnd.adobe.xfdf                     xfdf
-# application/vnd.aether.imp
-# application/vnd.ah-barcode
-application/vnd.ahead.space                    ahead
-application/vnd.airzip.filesecure.azf          azf
-application/vnd.airzip.filesecure.azs          azs
-application/vnd.amazon.ebook                   azw
-application/vnd.americandynamics.acc           acc
-application/vnd.amiga.ami                      ami
-# application/vnd.amundsen.maze+xml
-application/vnd.android.package-archive                apk
-application/vnd.anser-web-certificate-issue-initiation cii
-application/vnd.anser-web-funds-transfer-initiation    fti
-application/vnd.antix.game-component           atx
-application/vnd.apple.installer+xml            mpkg
-application/vnd.apple.mpegurl                  m3u8
-# application/vnd.arastra.swi
-application/vnd.aristanetworks.swi             swi
-application/vnd.astraea-software.iota          iota
-application/vnd.audiograph                     aep
-# application/vnd.autopackage
-# application/vnd.avistar+xml
-application/vnd.blueice.multipass              mpm
-# application/vnd.bluetooth.ep.oob
-application/vnd.bmi                            bmi
-application/vnd.businessobjects                        rep
-# application/vnd.cab-jscript
-# application/vnd.canon-cpdl
-# application/vnd.canon-lips
-# application/vnd.cendio.thinlinc.clientconf
-application/vnd.chemdraw+xml                   cdxml
-application/vnd.chipnuts.karaoke-mmd           mmd
-application/vnd.cinderella                     cdy
-# application/vnd.cirpack.isdn-ext
-application/vnd.claymore                       cla
-application/vnd.cloanto.rp9                    rp9
-application/vnd.clonk.c4group                  c4g c4d c4f c4p c4u
-application/vnd.cluetrust.cartomobile-config           c11amc
-application/vnd.cluetrust.cartomobile-config-pkg       c11amz
-# application/vnd.collection+json
-# application/vnd.commerce-battelle
-application/vnd.commonspace                    csp
-application/vnd.contact.cmsg                   cdbcmsg
-application/vnd.cosmocaller                    cmc
-application/vnd.crick.clicker                  clkx
-application/vnd.crick.clicker.keyboard         clkk
-application/vnd.crick.clicker.palette          clkp
-application/vnd.crick.clicker.template         clkt
-application/vnd.crick.clicker.wordbank         clkw
-application/vnd.criticaltools.wbs+xml          wbs
-application/vnd.ctc-posml                      pml
-# application/vnd.ctct.ws+xml
-# application/vnd.cups-pdf
-# application/vnd.cups-postscript
-application/vnd.cups-ppd                       ppd
-# application/vnd.cups-raster
-# application/vnd.cups-raw
-# application/vnd.curl
-application/vnd.curl.car                       car
-application/vnd.curl.pcurl                     pcurl
-# application/vnd.cybank
-application/vnd.dart                           dart
-application/vnd.data-vision.rdz                        rdz
-application/vnd.dece.data                      uvf uvvf uvd uvvd
-application/vnd.dece.ttml+xml                  uvt uvvt
-application/vnd.dece.unspecified               uvx uvvx
-application/vnd.dece.zip                       uvz uvvz
-application/vnd.denovo.fcselayout-link         fe_launch
-# application/vnd.dir-bi.plate-dl-nosuffix
-application/vnd.dna                            dna
-application/vnd.dolby.mlp                      mlp
-# application/vnd.dolby.mobile.1
-# application/vnd.dolby.mobile.2
-application/vnd.dpgraph                                dpg
-application/vnd.dreamfactory                   dfac
-application/vnd.ds-keypoint                    kpxx
-application/vnd.dvb.ait                                ait
-# application/vnd.dvb.dvbj
-# application/vnd.dvb.esgcontainer
-# application/vnd.dvb.ipdcdftnotifaccess
-# application/vnd.dvb.ipdcesgaccess
-# application/vnd.dvb.ipdcesgaccess2
-# application/vnd.dvb.ipdcesgpdd
-# application/vnd.dvb.ipdcroaming
-# application/vnd.dvb.iptv.alfec-base
-# application/vnd.dvb.iptv.alfec-enhancement
-# application/vnd.dvb.notif-aggregate-root+xml
-# application/vnd.dvb.notif-container+xml
-# application/vnd.dvb.notif-generic+xml
-# application/vnd.dvb.notif-ia-msglist+xml
-# application/vnd.dvb.notif-ia-registration-request+xml
-# application/vnd.dvb.notif-ia-registration-response+xml
-# application/vnd.dvb.notif-init+xml
-# application/vnd.dvb.pfr
-application/vnd.dvb.service                    svc
-# application/vnd.dxr
-application/vnd.dynageo                                geo
-# application/vnd.easykaraoke.cdgdownload
-# application/vnd.ecdis-update
-application/vnd.ecowin.chart                   mag
-# application/vnd.ecowin.filerequest
-# application/vnd.ecowin.fileupdate
-# application/vnd.ecowin.series
-# application/vnd.ecowin.seriesrequest
-# application/vnd.ecowin.seriesupdate
-# application/vnd.emclient.accessrequest+xml
-application/vnd.enliven                                nml
-# application/vnd.eprints.data+xml
-application/vnd.epson.esf                      esf
-application/vnd.epson.msf                      msf
-application/vnd.epson.quickanime               qam
-application/vnd.epson.salt                     slt
-application/vnd.epson.ssf                      ssf
-# application/vnd.ericsson.quickcall
-application/vnd.eszigno3+xml                   es3 et3
-# application/vnd.etsi.aoc+xml
-# application/vnd.etsi.cug+xml
-# application/vnd.etsi.iptvcommand+xml
-# application/vnd.etsi.iptvdiscovery+xml
-# application/vnd.etsi.iptvprofile+xml
-# application/vnd.etsi.iptvsad-bc+xml
-# application/vnd.etsi.iptvsad-cod+xml
-# application/vnd.etsi.iptvsad-npvr+xml
-# application/vnd.etsi.iptvservice+xml
-# application/vnd.etsi.iptvsync+xml
-# application/vnd.etsi.iptvueprofile+xml
-# application/vnd.etsi.mcid+xml
-# application/vnd.etsi.overload-control-policy-dataset+xml
-# application/vnd.etsi.sci+xml
-# application/vnd.etsi.simservs+xml
-# application/vnd.etsi.tsl+xml
-# application/vnd.etsi.tsl.der
-# application/vnd.eudora.data
-application/vnd.ezpix-album                    ez2
-application/vnd.ezpix-package                  ez3
-# application/vnd.f-secure.mobile
-application/vnd.fdf                            fdf
-application/vnd.fdsn.mseed                     mseed
-application/vnd.fdsn.seed                      seed dataless
-# application/vnd.ffsns
-# application/vnd.fints
-application/vnd.flographit                     gph
-application/vnd.fluxtime.clip                  ftc
-# application/vnd.font-fontforge-sfd
-application/vnd.framemaker                     fm frame maker book
-application/vnd.frogans.fnc                    fnc
-application/vnd.frogans.ltf                    ltf
-application/vnd.fsc.weblaunch                  fsc
-application/vnd.fujitsu.oasys                  oas
-application/vnd.fujitsu.oasys2                 oa2
-application/vnd.fujitsu.oasys3                 oa3
-application/vnd.fujitsu.oasysgp                        fg5
-application/vnd.fujitsu.oasysprs               bh2
-# application/vnd.fujixerox.art-ex
-# application/vnd.fujixerox.art4
-# application/vnd.fujixerox.hbpl
-application/vnd.fujixerox.ddd                  ddd
-application/vnd.fujixerox.docuworks            xdw
-application/vnd.fujixerox.docuworks.binder     xbd
-# application/vnd.fut-misnet
-application/vnd.fuzzysheet                     fzs
-application/vnd.genomatix.tuxedo               txd
-# application/vnd.geocube+xml
-application/vnd.geogebra.file                  ggb
-application/vnd.geogebra.tool                  ggt
-application/vnd.geometry-explorer              gex gre
-application/vnd.geonext                                gxt
-application/vnd.geoplan                                g2w
-application/vnd.geospace                       g3w
-# application/vnd.globalplatform.card-content-mgt
-# application/vnd.globalplatform.card-content-mgt-response
-application/vnd.gmx                            gmx
-application/vnd.google-earth.kml+xml           kml
-application/vnd.google-earth.kmz               kmz
-application/vnd.grafeq                         gqf gqs
-# application/vnd.gridmp
-application/vnd.groove-account                 gac
-application/vnd.groove-help                    ghf
-application/vnd.groove-identity-message                gim
-application/vnd.groove-injector                        grv
-application/vnd.groove-tool-message            gtm
-application/vnd.groove-tool-template           tpl
-application/vnd.groove-vcard                   vcg
-# application/vnd.hal+json
-application/vnd.hal+xml                                hal
-application/vnd.handheld-entertainment+xml     zmm
-application/vnd.hbci                           hbci
-# application/vnd.hcl-bireports
-application/vnd.hhe.lesson-player              les
-application/vnd.hp-hpgl                                hpgl
-application/vnd.hp-hpid                                hpid
-application/vnd.hp-hps                         hps
-application/vnd.hp-jlyt                                jlt
-application/vnd.hp-pcl                         pcl
-application/vnd.hp-pclxl                       pclxl
-# application/vnd.httphone
-application/vnd.hydrostatix.sof-data           sfd-hdstx
-# application/vnd.hzn-3d-crossword
-# application/vnd.ibm.afplinedata
-# application/vnd.ibm.electronic-media
-application/vnd.ibm.minipay                    mpy
-application/vnd.ibm.modcap                     afp listafp list3820
-application/vnd.ibm.rights-management          irm
-application/vnd.ibm.secure-container           sc
-application/vnd.iccprofile                     icc icm
-application/vnd.igloader                       igl
-application/vnd.immervision-ivp                        ivp
-application/vnd.immervision-ivu                        ivu
-# application/vnd.informedcontrol.rms+xml
-# application/vnd.informix-visionary
-# application/vnd.infotech.project
-# application/vnd.infotech.project+xml
-# application/vnd.innopath.wamp.notification
-application/vnd.insors.igm                     igm
-application/vnd.intercon.formnet               xpw xpx
-application/vnd.intergeo                       i2g
-# application/vnd.intertrust.digibox
-# application/vnd.intertrust.nncp
-application/vnd.intu.qbo                       qbo
-application/vnd.intu.qfx                       qfx
-# application/vnd.iptc.g2.conceptitem+xml
-# application/vnd.iptc.g2.knowledgeitem+xml
-# application/vnd.iptc.g2.newsitem+xml
-# application/vnd.iptc.g2.newsmessage+xml
-# application/vnd.iptc.g2.packageitem+xml
-# application/vnd.iptc.g2.planningitem+xml
-application/vnd.ipunplugged.rcprofile          rcprofile
-application/vnd.irepository.package+xml                irp
-application/vnd.is-xpr                         xpr
-application/vnd.isac.fcs                       fcs
-application/vnd.jam                            jam
-# application/vnd.japannet-directory-service
-# application/vnd.japannet-jpnstore-wakeup
-# application/vnd.japannet-payment-wakeup
-# application/vnd.japannet-registration
-# application/vnd.japannet-registration-wakeup
-# application/vnd.japannet-setstore-wakeup
-# application/vnd.japannet-verification
-# application/vnd.japannet-verification-wakeup
-application/vnd.jcp.javame.midlet-rms          rms
-application/vnd.jisp                           jisp
-application/vnd.joost.joda-archive             joda
-application/vnd.kahootz                                ktz ktr
-application/vnd.kde.karbon                     karbon
-application/vnd.kde.kchart                     chrt
-application/vnd.kde.kformula                   kfo
-application/vnd.kde.kivio                      flw
-application/vnd.kde.kontour                    kon
-application/vnd.kde.kpresenter                 kpr kpt
-application/vnd.kde.kspread                    ksp
-application/vnd.kde.kword                      kwd kwt
-application/vnd.kenameaapp                     htke
-application/vnd.kidspiration                   kia
-application/vnd.kinar                          kne knp
-application/vnd.koan                           skp skd skt skm
-application/vnd.kodak-descriptor               sse
-application/vnd.las.las+xml                    lasxml
-# application/vnd.liberty-request+xml
-application/vnd.llamagraphics.life-balance.desktop     lbd
-application/vnd.llamagraphics.life-balance.exchange+xml        lbe
-application/vnd.lotus-1-2-3                    123
-application/vnd.lotus-approach                 apr
-application/vnd.lotus-freelance                        pre
-application/vnd.lotus-notes                    nsf
-application/vnd.lotus-organizer                        org
-application/vnd.lotus-screencam                        scm
-application/vnd.lotus-wordpro                  lwp
-application/vnd.macports.portpkg               portpkg
-# application/vnd.marlin.drm.actiontoken+xml
-# application/vnd.marlin.drm.conftoken+xml
-# application/vnd.marlin.drm.license+xml
-# application/vnd.marlin.drm.mdcf
-application/vnd.mcd                            mcd
-application/vnd.medcalcdata                    mc1
-application/vnd.mediastation.cdkey             cdkey
-# application/vnd.meridian-slingshot
-application/vnd.mfer                           mwf
-application/vnd.mfmp                           mfm
-application/vnd.micrografx.flo                 flo
-application/vnd.micrografx.igx                 igx
-application/vnd.mif                            mif
-# application/vnd.minisoft-hp3000-save
-# application/vnd.mitsubishi.misty-guard.trustweb
-application/vnd.mobius.daf                     daf
-application/vnd.mobius.dis                     dis
-application/vnd.mobius.mbk                     mbk
-application/vnd.mobius.mqy                     mqy
-application/vnd.mobius.msl                     msl
-application/vnd.mobius.plc                     plc
-application/vnd.mobius.txf                     txf
-application/vnd.mophun.application             mpn
-application/vnd.mophun.certificate             mpc
-# application/vnd.motorola.flexsuite
-# application/vnd.motorola.flexsuite.adsi
-# application/vnd.motorola.flexsuite.fis
-# application/vnd.motorola.flexsuite.gotap
-# application/vnd.motorola.flexsuite.kmr
-# application/vnd.motorola.flexsuite.ttc
-# application/vnd.motorola.flexsuite.wem
-# application/vnd.motorola.iprm
-application/vnd.mozilla.xul+xml                        xul
-application/vnd.ms-artgalry                    cil
-# application/vnd.ms-asf
-application/vnd.ms-cab-compressed              cab
-# application/vnd.ms-color.iccprofile
-application/vnd.ms-excel                       xls xlm xla xlc xlt xlw
-application/vnd.ms-excel.addin.macroenabled.12         xlam
-application/vnd.ms-excel.sheet.binary.macroenabled.12  xlsb
-application/vnd.ms-excel.sheet.macroenabled.12         xlsm
-application/vnd.ms-excel.template.macroenabled.12      xltm
-application/vnd.ms-fontobject                  eot
-application/vnd.ms-htmlhelp                    chm
-application/vnd.ms-ims                         ims
-application/vnd.ms-lrm                         lrm
-# application/vnd.ms-office.activex+xml
-application/vnd.ms-officetheme                 thmx
-# application/vnd.ms-opentype
-# application/vnd.ms-package.obfuscated-opentype
-application/vnd.ms-pki.seccat                  cat
-application/vnd.ms-pki.stl                     stl
-# application/vnd.ms-playready.initiator+xml
-application/vnd.ms-powerpoint                  ppt pps pot
-application/vnd.ms-powerpoint.addin.macroenabled.12            ppam
-application/vnd.ms-powerpoint.presentation.macroenabled.12     pptm
-application/vnd.ms-powerpoint.slide.macroenabled.12            sldm
-application/vnd.ms-powerpoint.slideshow.macroenabled.12                ppsm
-application/vnd.ms-powerpoint.template.macroenabled.12         potm
-# application/vnd.ms-printing.printticket+xml
-application/vnd.ms-project                     mpp mpt
-# application/vnd.ms-tnef
-# application/vnd.ms-wmdrm.lic-chlg-req
-# application/vnd.ms-wmdrm.lic-resp
-# application/vnd.ms-wmdrm.meter-chlg-req
-# application/vnd.ms-wmdrm.meter-resp
-application/vnd.ms-word.document.macroenabled.12       docm
-application/vnd.ms-word.template.macroenabled.12       dotm
-application/vnd.ms-works                       wps wks wcm wdb
-application/vnd.ms-wpl                         wpl
-application/vnd.ms-xpsdocument                 xps
-application/vnd.mseq                           mseq
-# application/vnd.msign
-# application/vnd.multiad.creator
-# application/vnd.multiad.creator.cif
-# application/vnd.music-niff
-application/vnd.musician                       mus
-application/vnd.muvee.style                    msty
-application/vnd.mynfc                          taglet
-# application/vnd.ncd.control
-# application/vnd.ncd.reference
-# application/vnd.nervana
-# application/vnd.netfpx
-application/vnd.neurolanguage.nlu              nlu
-application/vnd.nitf                           ntf nitf
-application/vnd.noblenet-directory             nnd
-application/vnd.noblenet-sealer                        nns
-application/vnd.noblenet-web                   nnw
-# application/vnd.nokia.catalogs
-# application/vnd.nokia.conml+wbxml
-# application/vnd.nokia.conml+xml
-# application/vnd.nokia.isds-radio-presets
-# application/vnd.nokia.iptv.config+xml
-# application/vnd.nokia.landmark+wbxml
-# application/vnd.nokia.landmark+xml
-# application/vnd.nokia.landmarkcollection+xml
-# application/vnd.nokia.n-gage.ac+xml
-application/vnd.nokia.n-gage.data              ngdat
-application/vnd.nokia.n-gage.symbian.install   n-gage
-# application/vnd.nokia.ncd
-# application/vnd.nokia.pcd+wbxml
-# application/vnd.nokia.pcd+xml
-application/vnd.nokia.radio-preset             rpst
-application/vnd.nokia.radio-presets            rpss
-application/vnd.novadigm.edm                   edm
-application/vnd.novadigm.edx                   edx
-application/vnd.novadigm.ext                   ext
-# application/vnd.ntt-local.file-transfer
-# application/vnd.ntt-local.sip-ta_remote
-# application/vnd.ntt-local.sip-ta_tcp_stream
-application/vnd.oasis.opendocument.chart               odc
-application/vnd.oasis.opendocument.chart-template      otc
-application/vnd.oasis.opendocument.database            odb
-application/vnd.oasis.opendocument.formula             odf
-application/vnd.oasis.opendocument.formula-template    odft
-application/vnd.oasis.opendocument.graphics            odg
-application/vnd.oasis.opendocument.graphics-template   otg
-application/vnd.oasis.opendocument.image               odi
-application/vnd.oasis.opendocument.image-template      oti
-application/vnd.oasis.opendocument.presentation                odp
-application/vnd.oasis.opendocument.presentation-template       otp
-application/vnd.oasis.opendocument.spreadsheet         ods
-application/vnd.oasis.opendocument.spreadsheet-template        ots
-application/vnd.oasis.opendocument.text                        odt
-application/vnd.oasis.opendocument.text-master         odm
-application/vnd.oasis.opendocument.text-template       ott
-application/vnd.oasis.opendocument.text-web            oth
-# application/vnd.obn
-# application/vnd.oftn.l10n+json
-# application/vnd.oipf.contentaccessdownload+xml
-# application/vnd.oipf.contentaccessstreaming+xml
-# application/vnd.oipf.cspg-hexbinary
-# application/vnd.oipf.dae.svg+xml
-# application/vnd.oipf.dae.xhtml+xml
-# application/vnd.oipf.mippvcontrolmessage+xml
-# application/vnd.oipf.pae.gem
-# application/vnd.oipf.spdiscovery+xml
-# application/vnd.oipf.spdlist+xml
-# application/vnd.oipf.ueprofile+xml
-# application/vnd.oipf.userprofile+xml
-application/vnd.olpc-sugar                     xo
-# application/vnd.oma-scws-config
-# application/vnd.oma-scws-http-request
-# application/vnd.oma-scws-http-response
-# application/vnd.oma.bcast.associated-procedure-parameter+xml
-# application/vnd.oma.bcast.drm-trigger+xml
-# application/vnd.oma.bcast.imd+xml
-# application/vnd.oma.bcast.ltkm
-# application/vnd.oma.bcast.notification+xml
-# application/vnd.oma.bcast.provisioningtrigger
-# application/vnd.oma.bcast.sgboot
-# application/vnd.oma.bcast.sgdd+xml
-# application/vnd.oma.bcast.sgdu
-# application/vnd.oma.bcast.simple-symbol-container
-# application/vnd.oma.bcast.smartcard-trigger+xml
-# application/vnd.oma.bcast.sprov+xml
-# application/vnd.oma.bcast.stkm
-# application/vnd.oma.cab-address-book+xml
-# application/vnd.oma.cab-feature-handler+xml
-# application/vnd.oma.cab-pcc+xml
-# application/vnd.oma.cab-user-prefs+xml
-# application/vnd.oma.dcd
-# application/vnd.oma.dcdc
-application/vnd.oma.dd2+xml                    dd2
-# application/vnd.oma.drm.risd+xml
-# application/vnd.oma.group-usage-list+xml
-# application/vnd.oma.pal+xml
-# application/vnd.oma.poc.detailed-progress-report+xml
-# application/vnd.oma.poc.final-report+xml
-# application/vnd.oma.poc.groups+xml
-# application/vnd.oma.poc.invocation-descriptor+xml
-# application/vnd.oma.poc.optimized-progress-report+xml
-# application/vnd.oma.push
-# application/vnd.oma.scidm.messages+xml
-# application/vnd.oma.xcap-directory+xml
-# application/vnd.omads-email+xml
-# application/vnd.omads-file+xml
-# application/vnd.omads-folder+xml
-# application/vnd.omaloc-supl-init
-application/vnd.openofficeorg.extension                oxt
-# application/vnd.openxmlformats-officedocument.custom-properties+xml
-# application/vnd.openxmlformats-officedocument.customxmlproperties+xml
-# application/vnd.openxmlformats-officedocument.drawing+xml
-# application/vnd.openxmlformats-officedocument.drawingml.chart+xml
-# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml
-# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml
-# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml
-# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml
-# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml
-# application/vnd.openxmlformats-officedocument.extended-properties+xml
-# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml
-# application/vnd.openxmlformats-officedocument.presentationml.comments+xml
-# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml
-# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml
-# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml
-application/vnd.openxmlformats-officedocument.presentationml.presentation      pptx
-# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml
-# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml
-application/vnd.openxmlformats-officedocument.presentationml.slide     sldx
-# application/vnd.openxmlformats-officedocument.presentationml.slide+xml
-# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml
-# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml
-application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
-# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml
-# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml
-# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml
-# application/vnd.openxmlformats-officedocument.presentationml.tags+xml
-application/vnd.openxmlformats-officedocument.presentationml.template  potx
-# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml
-# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml
-application/vnd.openxmlformats-officedocument.spreadsheetml.sheet      xlsx
-# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml
-application/vnd.openxmlformats-officedocument.spreadsheetml.template   xltx
-# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml
-# application/vnd.openxmlformats-officedocument.theme+xml
-# application/vnd.openxmlformats-officedocument.themeoverride+xml
-# application/vnd.openxmlformats-officedocument.vmldrawing
-# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml
-application/vnd.openxmlformats-officedocument.wordprocessingml.document        docx
-# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml
-application/vnd.openxmlformats-officedocument.wordprocessingml.template        dotx
-# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml
-# application/vnd.openxmlformats-package.core-properties+xml
-# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml
-# application/vnd.openxmlformats-package.relationships+xml
-# application/vnd.quobject-quoxdocument
-# application/vnd.osa.netdeploy
-application/vnd.osgeo.mapguide.package         mgp
-# application/vnd.osgi.bundle
-application/vnd.osgi.dp                                dp
-application/vnd.osgi.subsystem                 esa
-# application/vnd.otps.ct-kip+xml
-application/vnd.palm                           pdb pqa oprc
-# application/vnd.paos.xml
-application/vnd.pawaafile                      paw
-application/vnd.pg.format                      str
-application/vnd.pg.osasli                      ei6
-# application/vnd.piaccess.application-licence
-application/vnd.picsel                         efif
-application/vnd.pmi.widget                     wg
-# application/vnd.poc.group-advertisement+xml
-application/vnd.pocketlearn                    plf
-application/vnd.powerbuilder6                  pbd
-# application/vnd.powerbuilder6-s
-# application/vnd.powerbuilder7
-# application/vnd.powerbuilder7-s
-# application/vnd.powerbuilder75
-# application/vnd.powerbuilder75-s
-# application/vnd.preminet
-application/vnd.previewsystems.box             box
-application/vnd.proteus.magazine               mgz
-application/vnd.publishare-delta-tree          qps
-application/vnd.pvi.ptid1                      ptid
-# application/vnd.pwg-multiplexed
-# application/vnd.pwg-xhtml-print+xml
-# application/vnd.qualcomm.brew-app-res
-application/vnd.quark.quarkxpress              qxd qxt qwd qwt qxl qxb
-# application/vnd.radisys.moml+xml
-# application/vnd.radisys.msml+xml
-# application/vnd.radisys.msml-audit+xml
-# application/vnd.radisys.msml-audit-conf+xml
-# application/vnd.radisys.msml-audit-conn+xml
-# application/vnd.radisys.msml-audit-dialog+xml
-# application/vnd.radisys.msml-audit-stream+xml
-# application/vnd.radisys.msml-conf+xml
-# application/vnd.radisys.msml-dialog+xml
-# application/vnd.radisys.msml-dialog-base+xml
-# application/vnd.radisys.msml-dialog-fax-detect+xml
-# application/vnd.radisys.msml-dialog-fax-sendrecv+xml
-# application/vnd.radisys.msml-dialog-group+xml
-# application/vnd.radisys.msml-dialog-speech+xml
-# application/vnd.radisys.msml-dialog-transform+xml
-# application/vnd.rainstor.data
-# application/vnd.rapid
-application/vnd.realvnc.bed                    bed
-application/vnd.recordare.musicxml             mxl
-application/vnd.recordare.musicxml+xml         musicxml
-# application/vnd.renlearn.rlprint
-application/vnd.rig.cryptonote                 cryptonote
-application/vnd.rim.cod                                cod
-application/vnd.rn-realmedia                   rm
-application/vnd.rn-realmedia-vbr               rmvb
-application/vnd.route66.link66+xml             link66
-# application/vnd.rs-274x
-# application/vnd.ruckus.download
-# application/vnd.s3sms
-application/vnd.sailingtracker.track           st
-# application/vnd.sbm.cid
-# application/vnd.sbm.mid2
-# application/vnd.scribus
-# application/vnd.sealed.3df
-# application/vnd.sealed.csf
-# application/vnd.sealed.doc
-# application/vnd.sealed.eml
-# application/vnd.sealed.mht
-# application/vnd.sealed.net
-# application/vnd.sealed.ppt
-# application/vnd.sealed.tiff
-# application/vnd.sealed.xls
-# application/vnd.sealedmedia.softseal.html
-# application/vnd.sealedmedia.softseal.pdf
-application/vnd.seemail                                see
-application/vnd.sema                           sema
-application/vnd.semd                           semd
-application/vnd.semf                           semf
-application/vnd.shana.informed.formdata                ifm
-application/vnd.shana.informed.formtemplate    itp
-application/vnd.shana.informed.interchange     iif
-application/vnd.shana.informed.package         ipk
-application/vnd.simtech-mindmapper             twd twds
-application/vnd.smaf                           mmf
-# application/vnd.smart.notebook
-application/vnd.smart.teacher                  teacher
-# application/vnd.software602.filler.form+xml
-# application/vnd.software602.filler.form-xml-zip
-application/vnd.solent.sdkm+xml                        sdkm sdkd
-application/vnd.spotfire.dxp                   dxp
-application/vnd.spotfire.sfs                   sfs
-# application/vnd.sss-cod
-# application/vnd.sss-dtf
-# application/vnd.sss-ntf
-application/vnd.stardivision.calc              sdc
-application/vnd.stardivision.draw              sda
-application/vnd.stardivision.impress           sdd
-application/vnd.stardivision.math              smf
-application/vnd.stardivision.writer            sdw vor
-application/vnd.stardivision.writer-global     sgl
-application/vnd.stepmania.package              smzip
-application/vnd.stepmania.stepchart            sm
-# application/vnd.street-stream
-application/vnd.sun.xml.calc                   sxc
-application/vnd.sun.xml.calc.template          stc
-application/vnd.sun.xml.draw                   sxd
-application/vnd.sun.xml.draw.template          std
-application/vnd.sun.xml.impress                        sxi
-application/vnd.sun.xml.impress.template       sti
-application/vnd.sun.xml.math                   sxm
-application/vnd.sun.xml.writer                 sxw
-application/vnd.sun.xml.writer.global          sxg
-application/vnd.sun.xml.writer.template                stw
-# application/vnd.sun.wadl+xml
-application/vnd.sus-calendar                   sus susp
-application/vnd.svd                            svd
-# application/vnd.swiftview-ics
-application/vnd.symbian.install                        sis sisx
-application/vnd.syncml+xml                     xsm
-application/vnd.syncml.dm+wbxml                        bdm
-application/vnd.syncml.dm+xml                  xdm
-# application/vnd.syncml.dm.notification
-# application/vnd.syncml.ds.notification
-application/vnd.tao.intent-module-archive      tao
-application/vnd.tcpdump.pcap                   pcap cap dmp
-application/vnd.tmobile-livetv                 tmo
-application/vnd.trid.tpt                       tpt
-application/vnd.triscape.mxs                   mxs
-application/vnd.trueapp                                tra
-# application/vnd.truedoc
-# application/vnd.ubisoft.webplayer
-application/vnd.ufdl                           ufd ufdl
-application/vnd.uiq.theme                      utz
-application/vnd.umajin                         umj
-application/vnd.unity                          unityweb
-application/vnd.uoml+xml                       uoml
-# application/vnd.uplanet.alert
-# application/vnd.uplanet.alert-wbxml
-# application/vnd.uplanet.bearer-choice
-# application/vnd.uplanet.bearer-choice-wbxml
-# application/vnd.uplanet.cacheop
-# application/vnd.uplanet.cacheop-wbxml
-# application/vnd.uplanet.channel
-# application/vnd.uplanet.channel-wbxml
-# application/vnd.uplanet.list
-# application/vnd.uplanet.list-wbxml
-# application/vnd.uplanet.listcmd
-# application/vnd.uplanet.listcmd-wbxml
-# application/vnd.uplanet.signal
-application/vnd.vcx                            vcx
-# application/vnd.vd-study
-# application/vnd.vectorworks
-# application/vnd.verimatrix.vcas
-# application/vnd.vidsoft.vidconference
-application/vnd.visio                          vsd vst vss vsw
-application/vnd.visionary                      vis
-# application/vnd.vividence.scriptfile
-application/vnd.vsf                            vsf
-# application/vnd.wap.sic
-# application/vnd.wap.slc
-application/vnd.wap.wbxml                      wbxml
-application/vnd.wap.wmlc                       wmlc
-application/vnd.wap.wmlscriptc                 wmlsc
-application/vnd.webturbo                       wtb
-# application/vnd.wfa.wsc
-# application/vnd.wmc
-# application/vnd.wmf.bootstrap
-# application/vnd.wolfram.mathematica
-# application/vnd.wolfram.mathematica.package
-application/vnd.wolfram.player                 nbp
-application/vnd.wordperfect                    wpd
-application/vnd.wqd                            wqd
-# application/vnd.wrq-hp3000-labelled
-application/vnd.wt.stf                         stf
-# application/vnd.wv.csp+wbxml
-# application/vnd.wv.csp+xml
-# application/vnd.wv.ssp+xml
-application/vnd.xara                           xar
-application/vnd.xfdl                           xfdl
-# application/vnd.xfdl.webform
-# application/vnd.xmi+xml
-# application/vnd.xmpie.cpkg
-# application/vnd.xmpie.dpkg
-# application/vnd.xmpie.plan
-# application/vnd.xmpie.ppkg
-# application/vnd.xmpie.xlim
-application/vnd.yamaha.hv-dic                  hvd
-application/vnd.yamaha.hv-script               hvs
-application/vnd.yamaha.hv-voice                        hvp
-application/vnd.yamaha.openscoreformat                 osf
-application/vnd.yamaha.openscoreformat.osfpvg+xml      osfpvg
-# application/vnd.yamaha.remote-setup
-application/vnd.yamaha.smaf-audio              saf
-application/vnd.yamaha.smaf-phrase             spf
-# application/vnd.yamaha.through-ngn
-# application/vnd.yamaha.tunnel-udpencap
-application/vnd.yellowriver-custom-menu                cmp
-application/vnd.zul                            zir zirz
-application/vnd.zzazz.deck+xml                 zaz
-application/voicexml+xml                       vxml
-# application/vq-rtcpxr
-# application/watcherinfo+xml
-# application/whoispp-query
-# application/whoispp-response
-application/widget                             wgt
-application/winhlp                             hlp
-# application/wita
-# application/wordperfect5.1
-application/wsdl+xml                           wsdl
-application/wspolicy+xml                       wspolicy
-application/x-7z-compressed                    7z
-application/x-abiword                          abw
-application/x-ace-compressed                   ace
-# application/x-amf
-application/x-apple-diskimage                  dmg
-application/x-authorware-bin                   aab x32 u32 vox
-application/x-authorware-map                   aam
-application/x-authorware-seg                   aas
-application/x-bcpio                            bcpio
-application/x-bittorrent                       torrent
-application/x-blorb                            blb blorb
-application/x-bzip                             bz
-application/x-bzip2                            bz2 boz
-application/x-cbr                              cbr cba cbt cbz cb7
-application/x-cdlink                           vcd
-application/x-cfs-compressed                   cfs
-application/x-chat                             chat
-application/x-chess-pgn                                pgn
-application/x-conference                       nsc
-# application/x-compress
-application/x-cpio                             cpio
-application/x-csh                              csh
-application/x-debian-package                   deb udeb
-application/x-dgc-compressed                   dgc
-application/x-director                 dir dcr dxr cst cct cxt w3d fgd swa
-application/x-doom                             wad
-application/x-dtbncx+xml                       ncx
-application/x-dtbook+xml                       dtb
-application/x-dtbresource+xml                  res
-application/x-dvi                              dvi
-application/x-envoy                            evy
-application/x-eva                              eva
-application/x-font-bdf                         bdf
-# application/x-font-dos
-# application/x-font-framemaker
-application/x-font-ghostscript                 gsf
-# application/x-font-libgrx
-application/x-font-linux-psf                   psf
-application/x-font-otf                         otf
-application/x-font-pcf                         pcf
-application/x-font-snf                         snf
-# application/x-font-speedo
-# application/x-font-sunos-news
-application/x-font-ttf                         ttf ttc
-application/x-font-type1                       pfa pfb pfm afm
-application/font-woff                          woff
-# application/x-font-vfont
-application/x-freearc                          arc
-application/x-futuresplash                     spl
-application/x-gca-compressed                   gca
-application/x-glulx                            ulx
-application/x-gnumeric                         gnumeric
-application/x-gramps-xml                       gramps
-application/x-gtar                             gtar
-# application/x-gzip
-application/x-hdf                              hdf
-application/x-install-instructions             install
-application/x-iso9660-image                    iso
-application/x-java-jnlp-file                   jnlp
-application/x-latex                            latex
-application/x-lzh-compressed                   lzh lha
-application/x-mie                              mie
-application/x-mobipocket-ebook                 prc mobi
-application/x-ms-application                   application
-application/x-ms-shortcut                      lnk
-application/x-ms-wmd                           wmd
-application/x-ms-wmz                           wmz
-application/x-ms-xbap                          xbap
-application/x-msaccess                         mdb
-application/x-msbinder                         obd
-application/x-mscardfile                       crd
-application/x-msclip                           clp
-application/x-msdownload                       exe dll com bat msi
-application/x-msmediaview                      mvb m13 m14
-application/x-msmetafile                       wmf wmz emf emz
-application/x-msmoney                          mny
-application/x-mspublisher                      pub
-application/x-msschedule                       scd
-application/x-msterminal                       trm
-application/x-mswrite                          wri
-application/x-netcdf                           nc cdf
-application/x-nzb                              nzb
-application/x-pkcs12                           p12 pfx
-application/x-pkcs7-certificates               p7b spc
-application/x-pkcs7-certreqresp                        p7r
-application/x-rar-compressed                   rar
-application/x-research-info-systems            ris
-application/x-sh                               sh
-application/x-shar                             shar
-application/x-shockwave-flash                  swf
-application/x-silverlight-app                  xap
-application/x-sql                              sql
-application/x-stuffit                          sit
-application/x-stuffitx                         sitx
-application/x-subrip                           srt
-application/x-sv4cpio                          sv4cpio
-application/x-sv4crc                           sv4crc
-application/x-t3vm-image                       t3
-application/x-tads                             gam
-application/x-tar                              tar
-application/x-tcl                              tcl
-application/x-tex                              tex
-application/x-tex-tfm                          tfm
-application/x-texinfo                          texinfo texi
-application/x-tgif                             obj
-application/x-ustar                            ustar
-application/x-wais-source                      src
-application/x-x509-ca-cert                     der crt
-application/x-xfig                             fig
-application/x-xliff+xml                                xlf
-application/x-xpinstall                                xpi
-application/x-xz                               xz
-application/x-zmachine                         z1 z2 z3 z4 z5 z6 z7 z8
-# application/x400-bp
-application/xaml+xml                           xaml
-# application/xcap-att+xml
-# application/xcap-caps+xml
-application/xcap-diff+xml                      xdf
-# application/xcap-el+xml
-# application/xcap-error+xml
-# application/xcap-ns+xml
-# application/xcon-conference-info-diff+xml
-# application/xcon-conference-info+xml
-application/xenc+xml                           xenc
-application/xhtml+xml                          xhtml xht
-# application/xhtml-voice+xml
-application/xml                                        xml xsl
-application/xml-dtd                            dtd
-# application/xml-external-parsed-entity
-# application/xmpp+xml
-application/xop+xml                            xop
-application/xproc+xml                          xpl
-application/xslt+xml                           xslt
-application/xspf+xml                           xspf
-application/xv+xml                             mxml xhvml xvml xvm
-application/yang                               yang
-application/yin+xml                            yin
-application/zip                                        zip
-# audio/1d-interleaved-parityfec
-# audio/32kadpcm
-# audio/3gpp
-# audio/3gpp2
-# audio/ac3
-audio/adpcm                                    adp
-# audio/amr
-# audio/amr-wb
-# audio/amr-wb+
-# audio/asc
-# audio/atrac-advanced-lossless
-# audio/atrac-x
-# audio/atrac3
-audio/basic                                    au snd
-# audio/bv16
-# audio/bv32
-# audio/clearmode
-# audio/cn
-# audio/dat12
-# audio/dls
-# audio/dsr-es201108
-# audio/dsr-es202050
-# audio/dsr-es202211
-# audio/dsr-es202212
-# audio/dv
-# audio/dvi4
-# audio/eac3
-# audio/evrc
-# audio/evrc-qcp
-# audio/evrc0
-# audio/evrc1
-# audio/evrcb
-# audio/evrcb0
-# audio/evrcb1
-# audio/evrcwb
-# audio/evrcwb0
-# audio/evrcwb1
-# audio/example
-# audio/fwdred
-# audio/g719
-# audio/g722
-# audio/g7221
-# audio/g723
-# audio/g726-16
-# audio/g726-24
-# audio/g726-32
-# audio/g726-40
-# audio/g728
-# audio/g729
-# audio/g7291
-# audio/g729d
-# audio/g729e
-# audio/gsm
-# audio/gsm-efr
-# audio/gsm-hr-08
-# audio/ilbc
-# audio/ip-mr_v2.5
-# audio/isac
-# audio/l16
-# audio/l20
-# audio/l24
-# audio/l8
-# audio/lpc
-audio/midi                                     mid midi kar rmi
-# audio/mobile-xmf
-audio/mp4                                      mp4a
-# audio/mp4a-latm
-# audio/mpa
-# audio/mpa-robust
-audio/mpeg                                     mpga mp2 mp2a mp3 m2a m3a
-# audio/mpeg4-generic
-# audio/musepack
-audio/ogg                                      oga ogg spx
-# audio/opus
-# audio/parityfec
-# audio/pcma
-# audio/pcma-wb
-# audio/pcmu-wb
-# audio/pcmu
-# audio/prs.sid
-# audio/qcelp
-# audio/red
-# audio/rtp-enc-aescm128
-# audio/rtp-midi
-# audio/rtx
-audio/s3m                                      s3m
-audio/silk                                     sil
-# audio/smv
-# audio/smv0
-# audio/smv-qcp
-# audio/sp-midi
-# audio/speex
-# audio/t140c
-# audio/t38
-# audio/telephone-event
-# audio/tone
-# audio/uemclip
-# audio/ulpfec
-# audio/vdvi
-# audio/vmr-wb
-# audio/vnd.3gpp.iufp
-# audio/vnd.4sb
-# audio/vnd.audiokoz
-# audio/vnd.celp
-# audio/vnd.cisco.nse
-# audio/vnd.cmles.radio-events
-# audio/vnd.cns.anp1
-# audio/vnd.cns.inf1
-audio/vnd.dece.audio                           uva uvva
-audio/vnd.digital-winds                                eol
-# audio/vnd.dlna.adts
-# audio/vnd.dolby.heaac.1
-# audio/vnd.dolby.heaac.2
-# audio/vnd.dolby.mlp
-# audio/vnd.dolby.mps
-# audio/vnd.dolby.pl2
-# audio/vnd.dolby.pl2x
-# audio/vnd.dolby.pl2z
-# audio/vnd.dolby.pulse.1
-audio/vnd.dra                                  dra
-audio/vnd.dts                                  dts
-audio/vnd.dts.hd                               dtshd
-# audio/vnd.dvb.file
-# audio/vnd.everad.plj
-# audio/vnd.hns.audio
-audio/vnd.lucent.voice                         lvp
-audio/vnd.ms-playready.media.pya               pya
-# audio/vnd.nokia.mobile-xmf
-# audio/vnd.nortel.vbk
-audio/vnd.nuera.ecelp4800                      ecelp4800
-audio/vnd.nuera.ecelp7470                      ecelp7470
-audio/vnd.nuera.ecelp9600                      ecelp9600
-# audio/vnd.octel.sbc
-# audio/vnd.qcelp
-# audio/vnd.rhetorex.32kadpcm
-audio/vnd.rip                                  rip
-# audio/vnd.sealedmedia.softseal.mpeg
-# audio/vnd.vmx.cvsd
-# audio/vorbis
-# audio/vorbis-config
-audio/webm                                     weba
-audio/x-aac                                    aac
-audio/x-aiff                                   aif aiff aifc
-audio/x-caf                                    caf
-audio/x-flac                                   flac
-audio/x-matroska                               mka
-audio/x-mpegurl                                        m3u
-audio/x-ms-wax                                 wax
-audio/x-ms-wma                                 wma
-audio/x-pn-realaudio                           ram ra
-audio/x-pn-realaudio-plugin                    rmp
-# audio/x-tta
-audio/x-wav                                    wav
-audio/xm                                       xm
-chemical/x-cdx                                 cdx
-chemical/x-cif                                 cif
-chemical/x-cmdf                                        cmdf
-chemical/x-cml                                 cml
-chemical/x-csml                                        csml
-# chemical/x-pdb
-chemical/x-xyz                                 xyz
-image/bmp                                      bmp
-image/cgm                                      cgm
-# image/example
-# image/fits
-image/g3fax                                    g3
-image/gif                                      gif
-image/ief                                      ief
-# image/jp2
-image/jpeg                                     jpeg jpg jpe
-# image/jpm
-# image/jpx
-image/ktx                                      ktx
-# image/naplps
-image/png                                      png
-image/prs.btif                                 btif
-# image/prs.pti
-image/sgi                                      sgi
-image/svg+xml                                  svg svgz
-# image/t38
-image/tiff                                     tiff tif
-# image/tiff-fx
-image/vnd.adobe.photoshop                      psd
-# image/vnd.cns.inf2
-image/vnd.dece.graphic                         uvi uvvi uvg uvvg
-image/vnd.dvb.subtitle                         sub
-image/vnd.djvu                                 djvu djv
-image/vnd.dwg                                  dwg
-image/vnd.dxf                                  dxf
-image/vnd.fastbidsheet                         fbs
-image/vnd.fpx                                  fpx
-image/vnd.fst                                  fst
-image/vnd.fujixerox.edmics-mmr                 mmr
-image/vnd.fujixerox.edmics-rlc                 rlc
-# image/vnd.globalgraphics.pgb
-# image/vnd.microsoft.icon
-# image/vnd.mix
-image/vnd.ms-modi                              mdi
-image/vnd.ms-photo                             wdp
-image/vnd.net-fpx                              npx
-# image/vnd.radiance
-# image/vnd.sealed.png
-# image/vnd.sealedmedia.softseal.gif
-# image/vnd.sealedmedia.softseal.jpg
-# image/vnd.svf
-image/vnd.wap.wbmp                             wbmp
-image/vnd.xiff                                 xif
-image/webp                                     webp
-image/x-3ds                                    3ds
-image/x-cmu-raster                             ras
-image/x-cmx                                    cmx
-image/x-freehand                               fh fhc fh4 fh5 fh7
-image/x-icon                                   ico
-image/x-mrsid-image                            sid
-image/x-pcx                                    pcx
-image/x-pict                                   pic pct
-image/x-portable-anymap                                pnm
-image/x-portable-bitmap                                pbm
-image/x-portable-graymap                       pgm
-image/x-portable-pixmap                                ppm
-image/x-rgb                                    rgb
-image/x-tga                                    tga
-image/x-xbitmap                                        xbm
-image/x-xpixmap                                        xpm
-image/x-xwindowdump                            xwd
-# message/cpim
-# message/delivery-status
-# message/disposition-notification
-# message/example
-# message/external-body
-# message/feedback-report
-# message/global
-# message/global-delivery-status
-# message/global-disposition-notification
-# message/global-headers
-# message/http
-# message/imdn+xml
-# message/news
-# message/partial
-message/rfc822                                 eml mime
-# message/s-http
-# message/sip
-# message/sipfrag
-# message/tracking-status
-# message/vnd.si.simp
-# model/example
-model/iges                                     igs iges
-model/mesh                                     msh mesh silo
-model/vnd.collada+xml                          dae
-model/vnd.dwf                                  dwf
-# model/vnd.flatland.3dml
-model/vnd.gdl                                  gdl
-# model/vnd.gs-gdl
-# model/vnd.gs.gdl
-model/vnd.gtw                                  gtw
-# model/vnd.moml+xml
-model/vnd.mts                                  mts
-# model/vnd.parasolid.transmit.binary
-# model/vnd.parasolid.transmit.text
-model/vnd.vtu                                  vtu
-model/vrml                                     wrl vrml
-model/x3d+binary                               x3db x3dbz
-model/x3d+vrml                                 x3dv x3dvz
-model/x3d+xml                                  x3d x3dz
-# multipart/alternative
-# multipart/appledouble
-# multipart/byteranges
-# multipart/digest
-# multipart/encrypted
-# multipart/example
-# multipart/form-data
-# multipart/header-set
-# multipart/mixed
-# multipart/parallel
-# multipart/related
-# multipart/report
-# multipart/signed
-# multipart/voice-message
-# text/1d-interleaved-parityfec
-text/cache-manifest                            appcache
-text/calendar                                  ics ifb
-text/css                                       css
-text/csv                                       csv
-# text/directory
-# text/dns
-# text/ecmascript
-# text/enriched
-# text/example
-# text/fwdred
-text/html                                      html htm
-# text/javascript
-text/n3                                                n3
-# text/parityfec
-text/plain                                     txt text conf def list log in
-# text/prs.fallenstein.rst
-text/prs.lines.tag                             dsc
-# text/vnd.radisys.msml-basic-layout
-# text/red
-# text/rfc822-headers
-text/richtext                                  rtx
-# text/rtf
-# text/rtp-enc-aescm128
-# text/rtx
-text/sgml                                      sgml sgm
-# text/t140
-text/tab-separated-values                      tsv
-text/troff                                     t tr roff man me ms
-text/turtle                                    ttl
-# text/ulpfec
-text/uri-list                                  uri uris urls
-text/vcard                                     vcard
-# text/vnd.abc
-text/vnd.curl                                  curl
-text/vnd.curl.dcurl                            dcurl
-text/vnd.curl.scurl                            scurl
-text/vnd.curl.mcurl                            mcurl
-# text/vnd.dmclientscript
-text/vnd.dvb.subtitle                          sub
-# text/vnd.esmertec.theme-descriptor
-text/vnd.fly                                   fly
-text/vnd.fmi.flexstor                          flx
-text/vnd.graphviz                              gv
-text/vnd.in3d.3dml                             3dml
-text/vnd.in3d.spot                             spot
-# text/vnd.iptc.newsml
-# text/vnd.iptc.nitf
-# text/vnd.latex-z
-# text/vnd.motorola.reflex
-# text/vnd.ms-mediapackage
-# text/vnd.net2phone.commcenter.command
-# text/vnd.si.uricatalogue
-text/vnd.sun.j2me.app-descriptor               jad
-# text/vnd.trolltech.linguist
-# text/vnd.wap.si
-# text/vnd.wap.sl
-text/vnd.wap.wml                               wml
-text/vnd.wap.wmlscript                         wmls
-text/x-asm                                     s asm
-text/x-c                                       c cc cxx cpp h hh dic
-text/x-fortran                                 f for f77 f90
-text/x-java-source                             java
-text/x-opml                                    opml
-text/x-pascal                                  p pas
-text/x-nfo                                     nfo
-text/x-setext                                  etx
-text/x-sfv                                     sfv
-text/x-uuencode                                        uu
-text/x-vcalendar                               vcs
-text/x-vcard                                   vcf
-# text/xml
-# text/xml-external-parsed-entity
-# video/1d-interleaved-parityfec
-video/3gpp                                     3gp
-# video/3gpp-tt
-video/3gpp2                                    3g2
-# video/bmpeg
-# video/bt656
-# video/celb
-# video/dv
-# video/example
-video/h261                                     h261
-video/h263                                     h263
-# video/h263-1998
-# video/h263-2000
-video/h264                                     h264
-# video/h264-rcdo
-# video/h264-svc
-video/jpeg                                     jpgv
-# video/jpeg2000
-video/jpm                                      jpm jpgm
-video/mj2                                      mj2 mjp2
-# video/mp1s
-# video/mp2p
-# video/mp2t
-video/mp4                                      mp4 mp4v mpg4
-# video/mp4v-es
-video/mpeg                                     mpeg mpg mpe m1v m2v
-# video/mpeg4-generic
-# video/mpv
-# video/nv
-video/ogg                                      ogv
-# video/parityfec
-# video/pointer
-video/quicktime                                        qt mov
-# video/raw
-# video/rtp-enc-aescm128
-# video/rtx
-# video/smpte292m
-# video/ulpfec
-# video/vc1
-# video/vnd.cctv
-video/vnd.dece.hd                              uvh uvvh
-video/vnd.dece.mobile                          uvm uvvm
-# video/vnd.dece.mp4
-video/vnd.dece.pd                              uvp uvvp
-video/vnd.dece.sd                              uvs uvvs
-video/vnd.dece.video                           uvv uvvv
-# video/vnd.directv.mpeg
-# video/vnd.directv.mpeg-tts
-# video/vnd.dlna.mpeg-tts
-video/vnd.dvb.file                             dvb
-video/vnd.fvt                                  fvt
-# video/vnd.hns.video
-# video/vnd.iptvforum.1dparityfec-1010
-# video/vnd.iptvforum.1dparityfec-2005
-# video/vnd.iptvforum.2dparityfec-1010
-# video/vnd.iptvforum.2dparityfec-2005
-# video/vnd.iptvforum.ttsavc
-# video/vnd.iptvforum.ttsmpeg2
-# video/vnd.motorola.video
-# video/vnd.motorola.videop
-video/vnd.mpegurl                              mxu m4u
-video/vnd.ms-playready.media.pyv               pyv
-# video/vnd.nokia.interleaved-multimedia
-# video/vnd.nokia.videovoip
-# video/vnd.objectvideo
-# video/vnd.sealed.mpeg1
-# video/vnd.sealed.mpeg4
-# video/vnd.sealed.swf
-# video/vnd.sealedmedia.softseal.mov
-video/vnd.uvvu.mp4                             uvu uvvu
-video/vnd.vivo                                 viv
-video/webm                                     webm
-video/x-f4v                                    f4v
-video/x-fli                                    fli
-video/x-flv                                    flv
-video/x-m4v                                    m4v
-video/x-matroska                               mkv mk3d mks
-video/x-mng                                    mng
-video/x-ms-asf                                 asf asx
-video/x-ms-vob                                 vob
-video/x-ms-wm                                  wm
-video/x-ms-wmv                                 wmv
-video/x-ms-wmx                                 wmx
-video/x-ms-wvx                                 wvx
-video/x-msvideo                                        avi
-video/x-sgi-movie                              movie
-video/x-smv                                    smv
-x-conference/x-cooltalk                                ice
diff --git a/signaling_server/service/node_modules/express/node_modules/mime/types/node.types b/signaling_server/service/node_modules/express/node_modules/mime/types/node.types
deleted file mode 100644 (file)
index 55b2cf7..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# What: WebVTT
-# Why: To allow formats intended for marking up external text track resources.
-# http://dev.w3.org/html5/webvtt/
-# Added by: niftylettuce
-text/vtt  vtt
-
-# What: Google Chrome Extension
-# Why: To allow apps to (work) be served with the right content type header.
-# http://codereview.chromium.org/2830017
-# Added by: niftylettuce
-application/x-chrome-extension  crx
-
-# What: HTC support
-# Why: To properly render .htc files such as CSS3PIE
-# Added by: niftylettuce
-text/x-component  htc
-
-# What: HTML5 application cache manifes ('.manifest' extension)
-# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps
-# per https://developer.mozilla.org/en/offline_resources_in_firefox
-# Added by: louisremi
-text/cache-manifest  manifest
-
-# What: node binary buffer format
-# Why: semi-standard extension w/in the node community
-# Added by: tootallnate
-application/octet-stream  buffer
-
-# What: The "protected" MP-4 formats used by iTunes.
-# Why: Required for streaming music to browsers (?)
-# Added by: broofa
-application/mp4  m4p
-audio/mp4  m4a
-
-# What: Video format, Part of RFC1890
-# Why: See https://github.com/bentomas/node-mime/pull/6
-# Added by: mjrusso
-video/MP2T  ts
-
-# What: EventSource mime type
-# Why: mime type of Server-Sent Events stream
-# http://www.w3.org/TR/eventsource/#text-event-stream
-# Added by: francois2metz
-text/event-stream  event-stream
-
-# What: Mozilla App manifest mime type
-# Why: https://developer.mozilla.org/en/Apps/Manifest#Serving_manifests
-# Added by: ednapiranha
-application/x-web-app-manifest+json   webapp
-
-# What: Lua file types
-# Why: Googling around shows de-facto consensus on these
-# Added by: creationix (Issue #45)
-text/x-lua  lua
-application/x-lua-bytecode  luac
-
-# What: Markdown files, as per http://daringfireball.net/projects/markdown/syntax
-# Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown
-# Added by: avoidwork
-text/x-markdown  markdown md mkd
-
-# What: ini files
-# Why: because they're just text files
-# Added by: Matthew Kastor
-text/plain  ini
-
-# What: DASH Adaptive Streaming manifest
-# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video
-# Added by: eelcocramer
-application/dash+xml mdp
-
-# What: OpenType font files - http://www.microsoft.com/typography/otspec/
-# Why:  Browsers usually ignore the font MIME types and sniff the content,
-#       but Chrome, shows a warning if OpenType fonts aren't served with
-#       the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png.
-# Added by: alrra
-font/opentype  otf
index 1acc877..1159e8d 100644 (file)
@@ -1,9 +1,15 @@
 {
+  "_args": [
+    [
+      "ms@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
   "_from": "ms@2.0.0",
   "_id": "ms@2.0.0",
   "_inBundle": false,
   "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-  "_location": "/ms",
+  "_location": "/express/ms",
   "_phantomChildren": {},
   "_requested": {
     "type": "version",
     "fetchSpec": "2.0.0"
   },
   "_requiredBy": [
-    "/body-parser/debug",
-    "/cachemanager/debug",
-    "/electron-download/debug",
-    "/eslint/debug",
-    "/expand-brackets/debug",
-    "/express/debug",
-    "/extract-zip/debug",
-    "/finalhandler/debug",
-    "/grunt-eslint/debug",
-    "/inmemfilecache/debug",
-    "/mocha/debug",
-    "/nugget/debug",
-    "/snapdragon/debug",
-    "/sumchecker/debug"
+    "/express/debug"
   ],
   "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-  "_shasum": "5608aeadfc00be6c2901df5f9861788de0d597c8",
-  "_spec": "ms@2.0.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/body-parser/node_modules/debug",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
   "bugs": {
     "url": "https://github.com/zeit/ms/issues"
   },
-  "bundleDependencies": false,
-  "deprecated": false,
   "description": "Tiny milisecond conversion utility",
   "devDependencies": {
     "eslint": "3.19.0",
diff --git a/signaling_server/service/node_modules/express/node_modules/negotiator/HISTORY.md b/signaling_server/service/node_modules/express/node_modules/negotiator/HISTORY.md
deleted file mode 100644 (file)
index 6d06c76..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-0.6.2 / 2019-04-29
-==================
-
-  * Fix sorting charset, encoding, and language with extra parameters
-
-0.6.1 / 2016-05-02
-==================
-
-  * perf: improve `Accept` parsing speed
-  * perf: improve `Accept-Charset` parsing speed
-  * perf: improve `Accept-Encoding` parsing speed
-  * perf: improve `Accept-Language` parsing speed
-
-0.6.0 / 2015-09-29
-==================
-
-  * Fix including type extensions in parameters in `Accept` parsing
-  * Fix parsing `Accept` parameters with quoted equals
-  * Fix parsing `Accept` parameters with quoted semicolons
-  * Lazy-load modules from main entry point
-  * perf: delay type concatenation until needed
-  * perf: enable strict mode
-  * perf: hoist regular expressions
-  * perf: remove closures getting spec properties
-  * perf: remove a closure from media type parsing
-  * perf: remove property delete from media type parsing
-
-0.5.3 / 2015-05-10
-==================
-
-  * Fix media type parameter matching to be case-insensitive
-
-0.5.2 / 2015-05-06
-==================
-
-  * Fix comparing media types with quoted values
-  * Fix splitting media types with quoted commas
-
-0.5.1 / 2015-02-14
-==================
-
-  * Fix preference sorting to be stable for long acceptable lists
-
-0.5.0 / 2014-12-18
-==================
-
-  * Fix list return order when large accepted list
-  * Fix missing identity encoding when q=0 exists
-  * Remove dynamic building of Negotiator class
-
-0.4.9 / 2014-10-14
-==================
-
-  * Fix error when media type has invalid parameter
-
-0.4.8 / 2014-09-28
-==================
-
-  * Fix all negotiations to be case-insensitive
-  * Stable sort preferences of same quality according to client order
-  * Support Node.js 0.6
-
-0.4.7 / 2014-06-24
-==================
-
-  * Handle invalid provided languages
-  * Handle invalid provided media types
-
-0.4.6 / 2014-06-11
-==================
-
-  *  Order by specificity when quality is the same
-
-0.4.5 / 2014-05-29
-==================
-
-  * Fix regression in empty header handling
-
-0.4.4 / 2014-05-29
-==================
-
-  * Fix behaviors when headers are not present
-
-0.4.3 / 2014-04-16
-==================
-
-  * Handle slashes on media params correctly
-
-0.4.2 / 2014-02-28
-==================
-
-  * Fix media type sorting
-  * Handle media types params strictly
-
-0.4.1 / 2014-01-16
-==================
-
-  * Use most specific matches
-
-0.4.0 / 2014-01-09
-==================
-
-  * Remove preferred prefix from methods
diff --git a/signaling_server/service/node_modules/express/node_modules/negotiator/LICENSE b/signaling_server/service/node_modules/express/node_modules/negotiator/LICENSE
deleted file mode 100644 (file)
index ea6b9e2..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2012-2014 Federico Romero
-Copyright (c) 2012-2014 Isaac Z. Schlueter
-Copyright (c) 2014-2015 Douglas Christopher Wilson
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/negotiator/README.md b/signaling_server/service/node_modules/express/node_modules/negotiator/README.md
deleted file mode 100644 (file)
index 04a67ff..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-# negotiator
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-An HTTP content negotiator for Node.js
-
-## Installation
-
-```sh
-$ npm install negotiator
-```
-
-## API
-
-```js
-var Negotiator = require('negotiator')
-```
-
-### Accept Negotiation
-
-```js
-availableMediaTypes = ['text/html', 'text/plain', 'application/json']
-
-// The negotiator constructor receives a request object
-negotiator = new Negotiator(request)
-
-// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'
-
-negotiator.mediaTypes()
-// -> ['text/html', 'image/jpeg', 'application/*']
-
-negotiator.mediaTypes(availableMediaTypes)
-// -> ['text/html', 'application/json']
-
-negotiator.mediaType(availableMediaTypes)
-// -> 'text/html'
-```
-
-You can check a working example at `examples/accept.js`.
-
-#### Methods
-
-##### mediaType()
-
-Returns the most preferred media type from the client.
-
-##### mediaType(availableMediaType)
-
-Returns the most preferred media type from a list of available media types.
-
-##### mediaTypes()
-
-Returns an array of preferred media types ordered by the client preference.
-
-##### mediaTypes(availableMediaTypes)
-
-Returns an array of preferred media types ordered by priority from a list of
-available media types.
-
-### Accept-Language Negotiation
-
-```js
-negotiator = new Negotiator(request)
-
-availableLanguages = ['en', 'es', 'fr']
-
-// Let's say Accept-Language header is 'en;q=0.8, es, pt'
-
-negotiator.languages()
-// -> ['es', 'pt', 'en']
-
-negotiator.languages(availableLanguages)
-// -> ['es', 'en']
-
-language = negotiator.language(availableLanguages)
-// -> 'es'
-```
-
-You can check a working example at `examples/language.js`.
-
-#### Methods
-
-##### language()
-
-Returns the most preferred language from the client.
-
-##### language(availableLanguages)
-
-Returns the most preferred language from a list of available languages.
-
-##### languages()
-
-Returns an array of preferred languages ordered by the client preference.
-
-##### languages(availableLanguages)
-
-Returns an array of preferred languages ordered by priority from a list of
-available languages.
-
-### Accept-Charset Negotiation
-
-```js
-availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']
-
-negotiator = new Negotiator(request)
-
-// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'
-
-negotiator.charsets()
-// -> ['utf-8', 'iso-8859-1', 'utf-7']
-
-negotiator.charsets(availableCharsets)
-// -> ['utf-8', 'iso-8859-1']
-
-negotiator.charset(availableCharsets)
-// -> 'utf-8'
-```
-
-You can check a working example at `examples/charset.js`.
-
-#### Methods
-
-##### charset()
-
-Returns the most preferred charset from the client.
-
-##### charset(availableCharsets)
-
-Returns the most preferred charset from a list of available charsets.
-
-##### charsets()
-
-Returns an array of preferred charsets ordered by the client preference.
-
-##### charsets(availableCharsets)
-
-Returns an array of preferred charsets ordered by priority from a list of
-available charsets.
-
-### Accept-Encoding Negotiation
-
-```js
-availableEncodings = ['identity', 'gzip']
-
-negotiator = new Negotiator(request)
-
-// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'
-
-negotiator.encodings()
-// -> ['gzip', 'identity', 'compress']
-
-negotiator.encodings(availableEncodings)
-// -> ['gzip', 'identity']
-
-negotiator.encoding(availableEncodings)
-// -> 'gzip'
-```
-
-You can check a working example at `examples/encoding.js`.
-
-#### Methods
-
-##### encoding()
-
-Returns the most preferred encoding from the client.
-
-##### encoding(availableEncodings)
-
-Returns the most preferred encoding from a list of available encodings.
-
-##### encodings()
-
-Returns an array of preferred encodings ordered by the client preference.
-
-##### encodings(availableEncodings)
-
-Returns an array of preferred encodings ordered by priority from a list of
-available encodings.
-
-## See Also
-
-The [accepts](https://npmjs.org/package/accepts#readme) module builds on
-this module and provides an alternative interface, mime type validation,
-and more.
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/negotiator.svg
-[npm-url]: https://npmjs.org/package/negotiator
-[node-version-image]: https://img.shields.io/node/v/negotiator.svg
-[node-version-url]: https://nodejs.org/en/download/
-[travis-image]: https://img.shields.io/travis/jshttp/negotiator/master.svg
-[travis-url]: https://travis-ci.org/jshttp/negotiator
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg
-[downloads-url]: https://npmjs.org/package/negotiator
diff --git a/signaling_server/service/node_modules/express/node_modules/negotiator/index.js b/signaling_server/service/node_modules/express/node_modules/negotiator/index.js
deleted file mode 100644 (file)
index 8d4f6a2..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*!
- * negotiator
- * Copyright(c) 2012 Federico Romero
- * Copyright(c) 2012-2014 Isaac Z. Schlueter
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict';
-
-/**
- * Cached loaded submodules.
- * @private
- */
-
-var modules = Object.create(null);
-
-/**
- * Module exports.
- * @public
- */
-
-module.exports = Negotiator;
-module.exports.Negotiator = Negotiator;
-
-/**
- * Create a Negotiator instance from a request.
- * @param {object} request
- * @public
- */
-
-function Negotiator(request) {
-  if (!(this instanceof Negotiator)) {
-    return new Negotiator(request);
-  }
-
-  this.request = request;
-}
-
-Negotiator.prototype.charset = function charset(available) {
-  var set = this.charsets(available);
-  return set && set[0];
-};
-
-Negotiator.prototype.charsets = function charsets(available) {
-  var preferredCharsets = loadModule('charset').preferredCharsets;
-  return preferredCharsets(this.request.headers['accept-charset'], available);
-};
-
-Negotiator.prototype.encoding = function encoding(available) {
-  var set = this.encodings(available);
-  return set && set[0];
-};
-
-Negotiator.prototype.encodings = function encodings(available) {
-  var preferredEncodings = loadModule('encoding').preferredEncodings;
-  return preferredEncodings(this.request.headers['accept-encoding'], available);
-};
-
-Negotiator.prototype.language = function language(available) {
-  var set = this.languages(available);
-  return set && set[0];
-};
-
-Negotiator.prototype.languages = function languages(available) {
-  var preferredLanguages = loadModule('language').preferredLanguages;
-  return preferredLanguages(this.request.headers['accept-language'], available);
-};
-
-Negotiator.prototype.mediaType = function mediaType(available) {
-  var set = this.mediaTypes(available);
-  return set && set[0];
-};
-
-Negotiator.prototype.mediaTypes = function mediaTypes(available) {
-  var preferredMediaTypes = loadModule('mediaType').preferredMediaTypes;
-  return preferredMediaTypes(this.request.headers.accept, available);
-};
-
-// Backwards compatibility
-Negotiator.prototype.preferredCharset = Negotiator.prototype.charset;
-Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;
-Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;
-Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;
-Negotiator.prototype.preferredLanguage = Negotiator.prototype.language;
-Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages;
-Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;
-Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;
-
-/**
- * Load the given module.
- * @private
- */
-
-function loadModule(moduleName) {
-  var module = modules[moduleName];
-
-  if (module !== undefined) {
-    return module;
-  }
-
-  // This uses a switch for static require analysis
-  switch (moduleName) {
-    case 'charset':
-      module = require('./lib/charset');
-      break;
-    case 'encoding':
-      module = require('./lib/encoding');
-      break;
-    case 'language':
-      module = require('./lib/language');
-      break;
-    case 'mediaType':
-      module = require('./lib/mediaType');
-      break;
-    default:
-      throw new Error('Cannot find module \'' + moduleName + '\'');
-  }
-
-  // Store to prevent invoking require()
-  modules[moduleName] = module;
-
-  return module;
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/negotiator/lib/charset.js b/signaling_server/service/node_modules/express/node_modules/negotiator/lib/charset.js
deleted file mode 100644 (file)
index cdd0148..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * negotiator
- * Copyright(c) 2012 Isaac Z. Schlueter
- * Copyright(c) 2014 Federico Romero
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict';
-
-/**
- * Module exports.
- * @public
- */
-
-module.exports = preferredCharsets;
-module.exports.preferredCharsets = preferredCharsets;
-
-/**
- * Module variables.
- * @private
- */
-
-var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
-
-/**
- * Parse the Accept-Charset header.
- * @private
- */
-
-function parseAcceptCharset(accept) {
-  var accepts = accept.split(',');
-
-  for (var i = 0, j = 0; i < accepts.length; i++) {
-    var charset = parseCharset(accepts[i].trim(), i);
-
-    if (charset) {
-      accepts[j++] = charset;
-    }
-  }
-
-  // trim accepts
-  accepts.length = j;
-
-  return accepts;
-}
-
-/**
- * Parse a charset from the Accept-Charset header.
- * @private
- */
-
-function parseCharset(str, i) {
-  var match = simpleCharsetRegExp.exec(str);
-  if (!match) return null;
-
-  var charset = match[1];
-  var q = 1;
-  if (match[2]) {
-    var params = match[2].split(';')
-    for (var j = 0; j < params.length; j++) {
-      var p = params[j].trim().split('=');
-      if (p[0] === 'q') {
-        q = parseFloat(p[1]);
-        break;
-      }
-    }
-  }
-
-  return {
-    charset: charset,
-    q: q,
-    i: i
-  };
-}
-
-/**
- * Get the priority of a charset.
- * @private
- */
-
-function getCharsetPriority(charset, accepted, index) {
-  var priority = {o: -1, q: 0, s: 0};
-
-  for (var i = 0; i < accepted.length; i++) {
-    var spec = specify(charset, accepted[i], index);
-
-    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
-      priority = spec;
-    }
-  }
-
-  return priority;
-}
-
-/**
- * Get the specificity of the charset.
- * @private
- */
-
-function specify(charset, spec, index) {
-  var s = 0;
-  if(spec.charset.toLowerCase() === charset.toLowerCase()){
-    s |= 1;
-  } else if (spec.charset !== '*' ) {
-    return null
-  }
-
-  return {
-    i: index,
-    o: spec.i,
-    q: spec.q,
-    s: s
-  }
-}
-
-/**
- * Get the preferred charsets from an Accept-Charset header.
- * @public
- */
-
-function preferredCharsets(accept, provided) {
-  // RFC 2616 sec 14.2: no header = *
-  var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');
-
-  if (!provided) {
-    // sorted list of all charsets
-    return accepts
-      .filter(isQuality)
-      .sort(compareSpecs)
-      .map(getFullCharset);
-  }
-
-  var priorities = provided.map(function getPriority(type, index) {
-    return getCharsetPriority(type, accepts, index);
-  });
-
-  // sorted list of accepted charsets
-  return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {
-    return provided[priorities.indexOf(priority)];
-  });
-}
-
-/**
- * Compare two specs.
- * @private
- */
-
-function compareSpecs(a, b) {
-  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
-}
-
-/**
- * Get full charset string.
- * @private
- */
-
-function getFullCharset(spec) {
-  return spec.charset;
-}
-
-/**
- * Check if a spec has any quality.
- * @private
- */
-
-function isQuality(spec) {
-  return spec.q > 0;
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/negotiator/lib/encoding.js b/signaling_server/service/node_modules/express/node_modules/negotiator/lib/encoding.js
deleted file mode 100644 (file)
index 8432cd7..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * negotiator
- * Copyright(c) 2012 Isaac Z. Schlueter
- * Copyright(c) 2014 Federico Romero
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict';
-
-/**
- * Module exports.
- * @public
- */
-
-module.exports = preferredEncodings;
-module.exports.preferredEncodings = preferredEncodings;
-
-/**
- * Module variables.
- * @private
- */
-
-var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
-
-/**
- * Parse the Accept-Encoding header.
- * @private
- */
-
-function parseAcceptEncoding(accept) {
-  var accepts = accept.split(',');
-  var hasIdentity = false;
-  var minQuality = 1;
-
-  for (var i = 0, j = 0; i < accepts.length; i++) {
-    var encoding = parseEncoding(accepts[i].trim(), i);
-
-    if (encoding) {
-      accepts[j++] = encoding;
-      hasIdentity = hasIdentity || specify('identity', encoding);
-      minQuality = Math.min(minQuality, encoding.q || 1);
-    }
-  }
-
-  if (!hasIdentity) {
-    /*
-     * If identity doesn't explicitly appear in the accept-encoding header,
-     * it's added to the list of acceptable encoding with the lowest q
-     */
-    accepts[j++] = {
-      encoding: 'identity',
-      q: minQuality,
-      i: i
-    };
-  }
-
-  // trim accepts
-  accepts.length = j;
-
-  return accepts;
-}
-
-/**
- * Parse an encoding from the Accept-Encoding header.
- * @private
- */
-
-function parseEncoding(str, i) {
-  var match = simpleEncodingRegExp.exec(str);
-  if (!match) return null;
-
-  var encoding = match[1];
-  var q = 1;
-  if (match[2]) {
-    var params = match[2].split(';');
-    for (var j = 0; j < params.length; j++) {
-      var p = params[j].trim().split('=');
-      if (p[0] === 'q') {
-        q = parseFloat(p[1]);
-        break;
-      }
-    }
-  }
-
-  return {
-    encoding: encoding,
-    q: q,
-    i: i
-  };
-}
-
-/**
- * Get the priority of an encoding.
- * @private
- */
-
-function getEncodingPriority(encoding, accepted, index) {
-  var priority = {o: -1, q: 0, s: 0};
-
-  for (var i = 0; i < accepted.length; i++) {
-    var spec = specify(encoding, accepted[i], index);
-
-    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
-      priority = spec;
-    }
-  }
-
-  return priority;
-}
-
-/**
- * Get the specificity of the encoding.
- * @private
- */
-
-function specify(encoding, spec, index) {
-  var s = 0;
-  if(spec.encoding.toLowerCase() === encoding.toLowerCase()){
-    s |= 1;
-  } else if (spec.encoding !== '*' ) {
-    return null
-  }
-
-  return {
-    i: index,
-    o: spec.i,
-    q: spec.q,
-    s: s
-  }
-};
-
-/**
- * Get the preferred encodings from an Accept-Encoding header.
- * @public
- */
-
-function preferredEncodings(accept, provided) {
-  var accepts = parseAcceptEncoding(accept || '');
-
-  if (!provided) {
-    // sorted list of all encodings
-    return accepts
-      .filter(isQuality)
-      .sort(compareSpecs)
-      .map(getFullEncoding);
-  }
-
-  var priorities = provided.map(function getPriority(type, index) {
-    return getEncodingPriority(type, accepts, index);
-  });
-
-  // sorted list of accepted encodings
-  return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {
-    return provided[priorities.indexOf(priority)];
-  });
-}
-
-/**
- * Compare two specs.
- * @private
- */
-
-function compareSpecs(a, b) {
-  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
-}
-
-/**
- * Get full encoding string.
- * @private
- */
-
-function getFullEncoding(spec) {
-  return spec.encoding;
-}
-
-/**
- * Check if a spec has any quality.
- * @private
- */
-
-function isQuality(spec) {
-  return spec.q > 0;
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/negotiator/lib/language.js b/signaling_server/service/node_modules/express/node_modules/negotiator/lib/language.js
deleted file mode 100644 (file)
index 62f737f..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/**
- * negotiator
- * Copyright(c) 2012 Isaac Z. Schlueter
- * Copyright(c) 2014 Federico Romero
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict';
-
-/**
- * Module exports.
- * @public
- */
-
-module.exports = preferredLanguages;
-module.exports.preferredLanguages = preferredLanguages;
-
-/**
- * Module variables.
- * @private
- */
-
-var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/;
-
-/**
- * Parse the Accept-Language header.
- * @private
- */
-
-function parseAcceptLanguage(accept) {
-  var accepts = accept.split(',');
-
-  for (var i = 0, j = 0; i < accepts.length; i++) {
-    var language = parseLanguage(accepts[i].trim(), i);
-
-    if (language) {
-      accepts[j++] = language;
-    }
-  }
-
-  // trim accepts
-  accepts.length = j;
-
-  return accepts;
-}
-
-/**
- * Parse a language from the Accept-Language header.
- * @private
- */
-
-function parseLanguage(str, i) {
-  var match = simpleLanguageRegExp.exec(str);
-  if (!match) return null;
-
-  var prefix = match[1],
-    suffix = match[2],
-    full = prefix;
-
-  if (suffix) full += "-" + suffix;
-
-  var q = 1;
-  if (match[3]) {
-    var params = match[3].split(';')
-    for (var j = 0; j < params.length; j++) {
-      var p = params[j].split('=');
-      if (p[0] === 'q') q = parseFloat(p[1]);
-    }
-  }
-
-  return {
-    prefix: prefix,
-    suffix: suffix,
-    q: q,
-    i: i,
-    full: full
-  };
-}
-
-/**
- * Get the priority of a language.
- * @private
- */
-
-function getLanguagePriority(language, accepted, index) {
-  var priority = {o: -1, q: 0, s: 0};
-
-  for (var i = 0; i < accepted.length; i++) {
-    var spec = specify(language, accepted[i], index);
-
-    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
-      priority = spec;
-    }
-  }
-
-  return priority;
-}
-
-/**
- * Get the specificity of the language.
- * @private
- */
-
-function specify(language, spec, index) {
-  var p = parseLanguage(language)
-  if (!p) return null;
-  var s = 0;
-  if(spec.full.toLowerCase() === p.full.toLowerCase()){
-    s |= 4;
-  } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {
-    s |= 2;
-  } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {
-    s |= 1;
-  } else if (spec.full !== '*' ) {
-    return null
-  }
-
-  return {
-    i: index,
-    o: spec.i,
-    q: spec.q,
-    s: s
-  }
-};
-
-/**
- * Get the preferred languages from an Accept-Language header.
- * @public
- */
-
-function preferredLanguages(accept, provided) {
-  // RFC 2616 sec 14.4: no header = *
-  var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');
-
-  if (!provided) {
-    // sorted list of all languages
-    return accepts
-      .filter(isQuality)
-      .sort(compareSpecs)
-      .map(getFullLanguage);
-  }
-
-  var priorities = provided.map(function getPriority(type, index) {
-    return getLanguagePriority(type, accepts, index);
-  });
-
-  // sorted list of accepted languages
-  return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {
-    return provided[priorities.indexOf(priority)];
-  });
-}
-
-/**
- * Compare two specs.
- * @private
- */
-
-function compareSpecs(a, b) {
-  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
-}
-
-/**
- * Get full language string.
- * @private
- */
-
-function getFullLanguage(spec) {
-  return spec.full;
-}
-
-/**
- * Check if a spec has any quality.
- * @private
- */
-
-function isQuality(spec) {
-  return spec.q > 0;
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/negotiator/lib/mediaType.js b/signaling_server/service/node_modules/express/node_modules/negotiator/lib/mediaType.js
deleted file mode 100644 (file)
index 67309dd..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-/**
- * negotiator
- * Copyright(c) 2012 Isaac Z. Schlueter
- * Copyright(c) 2014 Federico Romero
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict';
-
-/**
- * Module exports.
- * @public
- */
-
-module.exports = preferredMediaTypes;
-module.exports.preferredMediaTypes = preferredMediaTypes;
-
-/**
- * Module variables.
- * @private
- */
-
-var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
-
-/**
- * Parse the Accept header.
- * @private
- */
-
-function parseAccept(accept) {
-  var accepts = splitMediaTypes(accept);
-
-  for (var i = 0, j = 0; i < accepts.length; i++) {
-    var mediaType = parseMediaType(accepts[i].trim(), i);
-
-    if (mediaType) {
-      accepts[j++] = mediaType;
-    }
-  }
-
-  // trim accepts
-  accepts.length = j;
-
-  return accepts;
-}
-
-/**
- * Parse a media type from the Accept header.
- * @private
- */
-
-function parseMediaType(str, i) {
-  var match = simpleMediaTypeRegExp.exec(str);
-  if (!match) return null;
-
-  var params = Object.create(null);
-  var q = 1;
-  var subtype = match[2];
-  var type = match[1];
-
-  if (match[3]) {
-    var kvps = splitParameters(match[3]).map(splitKeyValuePair);
-
-    for (var j = 0; j < kvps.length; j++) {
-      var pair = kvps[j];
-      var key = pair[0].toLowerCase();
-      var val = pair[1];
-
-      // get the value, unwrapping quotes
-      var value = val && val[0] === '"' && val[val.length - 1] === '"'
-        ? val.substr(1, val.length - 2)
-        : val;
-
-      if (key === 'q') {
-        q = parseFloat(value);
-        break;
-      }
-
-      // store parameter
-      params[key] = value;
-    }
-  }
-
-  return {
-    type: type,
-    subtype: subtype,
-    params: params,
-    q: q,
-    i: i
-  };
-}
-
-/**
- * Get the priority of a media type.
- * @private
- */
-
-function getMediaTypePriority(type, accepted, index) {
-  var priority = {o: -1, q: 0, s: 0};
-
-  for (var i = 0; i < accepted.length; i++) {
-    var spec = specify(type, accepted[i], index);
-
-    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
-      priority = spec;
-    }
-  }
-
-  return priority;
-}
-
-/**
- * Get the specificity of the media type.
- * @private
- */
-
-function specify(type, spec, index) {
-  var p = parseMediaType(type);
-  var s = 0;
-
-  if (!p) {
-    return null;
-  }
-
-  if(spec.type.toLowerCase() == p.type.toLowerCase()) {
-    s |= 4
-  } else if(spec.type != '*') {
-    return null;
-  }
-
-  if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {
-    s |= 2
-  } else if(spec.subtype != '*') {
-    return null;
-  }
-
-  var keys = Object.keys(spec.params);
-  if (keys.length > 0) {
-    if (keys.every(function (k) {
-      return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();
-    })) {
-      s |= 1
-    } else {
-      return null
-    }
-  }
-
-  return {
-    i: index,
-    o: spec.i,
-    q: spec.q,
-    s: s,
-  }
-}
-
-/**
- * Get the preferred media types from an Accept header.
- * @public
- */
-
-function preferredMediaTypes(accept, provided) {
-  // RFC 2616 sec 14.2: no header = */*
-  var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');
-
-  if (!provided) {
-    // sorted list of all types
-    return accepts
-      .filter(isQuality)
-      .sort(compareSpecs)
-      .map(getFullType);
-  }
-
-  var priorities = provided.map(function getPriority(type, index) {
-    return getMediaTypePriority(type, accepts, index);
-  });
-
-  // sorted list of accepted types
-  return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {
-    return provided[priorities.indexOf(priority)];
-  });
-}
-
-/**
- * Compare two specs.
- * @private
- */
-
-function compareSpecs(a, b) {
-  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
-}
-
-/**
- * Get full type string.
- * @private
- */
-
-function getFullType(spec) {
-  return spec.type + '/' + spec.subtype;
-}
-
-/**
- * Check if a spec has any quality.
- * @private
- */
-
-function isQuality(spec) {
-  return spec.q > 0;
-}
-
-/**
- * Count the number of quotes in a string.
- * @private
- */
-
-function quoteCount(string) {
-  var count = 0;
-  var index = 0;
-
-  while ((index = string.indexOf('"', index)) !== -1) {
-    count++;
-    index++;
-  }
-
-  return count;
-}
-
-/**
- * Split a key value pair.
- * @private
- */
-
-function splitKeyValuePair(str) {
-  var index = str.indexOf('=');
-  var key;
-  var val;
-
-  if (index === -1) {
-    key = str;
-  } else {
-    key = str.substr(0, index);
-    val = str.substr(index + 1);
-  }
-
-  return [key, val];
-}
-
-/**
- * Split an Accept header into media types.
- * @private
- */
-
-function splitMediaTypes(accept) {
-  var accepts = accept.split(',');
-
-  for (var i = 1, j = 0; i < accepts.length; i++) {
-    if (quoteCount(accepts[j]) % 2 == 0) {
-      accepts[++j] = accepts[i];
-    } else {
-      accepts[j] += ',' + accepts[i];
-    }
-  }
-
-  // trim accepts
-  accepts.length = j + 1;
-
-  return accepts;
-}
-
-/**
- * Split a string of parameters.
- * @private
- */
-
-function splitParameters(str) {
-  var parameters = str.split(';');
-
-  for (var i = 1, j = 0; i < parameters.length; i++) {
-    if (quoteCount(parameters[j]) % 2 == 0) {
-      parameters[++j] = parameters[i];
-    } else {
-      parameters[j] += ';' + parameters[i];
-    }
-  }
-
-  // trim parameters
-  parameters.length = j + 1;
-
-  for (var i = 0; i < parameters.length; i++) {
-    parameters[i] = parameters[i].trim();
-  }
-
-  return parameters;
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/negotiator/package.json b/signaling_server/service/node_modules/express/node_modules/negotiator/package.json
deleted file mode 100644 (file)
index 87659ac..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "_from": "negotiator@0.6.2",
-  "_id": "negotiator@0.6.2",
-  "_inBundle": false,
-  "_integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
-  "_location": "/negotiator",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "negotiator@0.6.2",
-    "name": "negotiator",
-    "escapedName": "negotiator",
-    "rawSpec": "0.6.2",
-    "saveSpec": null,
-    "fetchSpec": "0.6.2"
-  },
-  "_requiredBy": [
-    "/accepts"
-  ],
-  "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
-  "_shasum": "feacf7ccf525a77ae9634436a64883ffeca346fb",
-  "_spec": "negotiator@0.6.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/accepts",
-  "bugs": {
-    "url": "https://github.com/jshttp/negotiator/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Federico Romero",
-      "email": "federico.romero@outboxlabs.com"
-    },
-    {
-      "name": "Isaac Z. Schlueter",
-      "email": "i@izs.me",
-      "url": "http://blog.izs.me/"
-    }
-  ],
-  "deprecated": false,
-  "description": "HTTP content negotiation",
-  "devDependencies": {
-    "eslint": "5.16.0",
-    "eslint-plugin-markdown": "1.0.0",
-    "mocha": "6.1.4",
-    "nyc": "14.0.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "lib/",
-    "HISTORY.md",
-    "LICENSE",
-    "index.js",
-    "README.md"
-  ],
-  "homepage": "https://github.com/jshttp/negotiator#readme",
-  "keywords": [
-    "http",
-    "content negotiation",
-    "accept",
-    "accept-language",
-    "accept-encoding",
-    "accept-charset"
-  ],
-  "license": "MIT",
-  "name": "negotiator",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/negotiator.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --check-leaks --bail test/",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test"
-  },
-  "version": "0.6.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/on-finished/package.json b/signaling_server/service/node_modules/express/node_modules/on-finished/package.json
deleted file mode 100644 (file)
index cdfdab7..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "_from": "on-finished@~2.3.0",
-  "_id": "on-finished@2.3.0",
-  "_inBundle": false,
-  "_integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
-  "_location": "/on-finished",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "on-finished@~2.3.0",
-    "name": "on-finished",
-    "escapedName": "on-finished",
-    "rawSpec": "~2.3.0",
-    "saveSpec": null,
-    "fetchSpec": "~2.3.0"
-  },
-  "_requiredBy": [
-    "/body-parser",
-    "/express",
-    "/finalhandler",
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-  "_shasum": "20f1336481b083cd75337992a16971aa2d906947",
-  "_spec": "on-finished@~2.3.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/jshttp/on-finished/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "dependencies": {
-    "ee-first": "1.1.1"
-  },
-  "deprecated": false,
-  "description": "Execute a callback when a request closes, finishes, or errors",
-  "devDependencies": {
-    "istanbul": "0.3.9",
-    "mocha": "2.2.5"
-  },
-  "engines": {
-    "node": ">= 0.8"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/on-finished#readme",
-  "license": "MIT",
-  "name": "on-finished",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/on-finished.git"
-  },
-  "scripts": {
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "2.3.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/optionator/LICENSE b/signaling_server/service/node_modules/express/node_modules/optionator/LICENSE
deleted file mode 100644 (file)
index 525b118..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) George Zahariev
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/optionator/README.md b/signaling_server/service/node_modules/express/node_modules/optionator/README.md
deleted file mode 100644 (file)
index 6f455b2..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-# Optionator
-<a name="optionator" />
-
-Optionator is an option parsing and help generation library.
-
-## Why?
-The  problem with other option parsers, such as `yargs` or `minimist`, is they just accept all input, valid or not.
-With Optionator, if you mistype an option, it will give you an error (with a suggestion for what you meant).
-If you give the wrong type of argument for an option, it will give you an error rather than supplying the wrong input to your application.
-
-    $ cmd --halp
-    Invalid option '--halp' - perhaps you meant '--help'?
-
-    $ cmd --count str
-    Invalid value for option 'count' - expected type Int, received value: str.
-
-Over helpful features include reformatting the help text based on the size of the console, so that it fits even if the console is narrow, and accepting not just an array (eg. process.argv), but a string or object as well, making things like testing much easier.
-
-## About
-Optionator uses [type-check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) behind the scenes to cast and verify input according the specified types.
-
-Optionator is used by [Grasp](http://graspjs.com), [eslint](https://github.com/eslint/eslint), and [LiveScript](http://livescript.net).
-
-MIT license. Version 0.4.0
-
-    npm install optionator
-
-For updates on Optionator, [follow me on twitter](https://twitter.com/gkzahariev).
-
-## Usage
-`require('optionator');` returns a function. It has one property, `VERSION`, the current version of the library as a string. This function is called with an object specifying your options and other information, see the [settings format section](#settings-format). This in turn returns an object with three properties, `parse`, `generateHelp`, and `generateHelpForOption`, which are all functions.
-
-```js
-var optionator = require('optionator')({
-  prepend: 'Usage: cmd [options]',
-  append: 'Version 1.0.0',
-  options: [{
-    option: 'help',
-    alias: 'h',
-    type: 'Boolean',
-    description: 'displays help'
-  }, {
-    option: 'count',
-    alias: 'c',
-    type: 'Int',
-    description: 'number of things',
-    example: 'cmd --count 2'
-  }]
-});
-```
-
-### parse(input, parseOptions)
-`parse` processes the `input` according to your settings, and returns an object with the results.
-
-##### arguments
-* input - `[String] | Object | String` - the input you wish to parse
-* parseOptions - `{slice: Int}` - all options optional
-    - `slice` specifies how much to slice away from the beginning if the input is an array or string - by default `0` for string, `2` for array (works with `process.argv`)
-
-##### returns
-`Object` - the parsed options, each key is a camelCase version of the option name (specified in dash-case), and each value is the processed value for that option. Positional values are in an array under the `_` key.
-
-##### example
-```js
-parse(['node', 't.js', '--count', '2', 'positional']); // {count: 2, _: ['positional']}
-parse('--count 2 positional');                         // {count: 2, _: ['positional']}
-parse({count: 2, _:['positional']});                   // {count: 2, _: ['positional']}
-```
-
-### generateHelp(helpOptions)
-`generateHelp` produces help text based on your settings.
-
-##### arguments
-* helpOptions - `{showHidden: Boolean, interpolate: Object}` - all options optional
-    - `showHidden` specifies whether to show options with `hidden: true` specified, by default it is `false`
-    - `interpolate` specify data to be interpolated in `prepend` and `append` text, `{{key}}` is the format - eg. `generateHelp({interpolate:{version: '0.4.2'}})`, will change this `append` text: `Version {{version}}` to `Version 0.4.2`
-
-##### returns
-`String` - the generated help text
-
-##### example
-```js
-generateHelp(); /*
-"Usage: cmd [options] positional
-
-  -h, --help       displays help
-  -c, --count Int  number of things
-
-Version  1.0.0
-"*/
-```
-
-### generateHelpForOption(optionName)
-`generateHelpForOption` produces expanded help text for the specified with `optionName` option. If an `example` was specified for the option, it will be displayed,  and if a `longDescription` was specified, it will display that instead of the `description`.
-
-##### arguments
-* optionName - `String` - the name of the option to display
-
-##### returns
-`String` - the generated help text for the option
-
-##### example
-```js
-generateHelpForOption('count'); /*
-"-c, --count Int
-description: number of things
-example: cmd --count 2
-"*/
-```
-
-## Settings Format
-When your `require('optionator')`, you get a function that takes in a settings object. This object has the type:
-
-    {
-      prepend: Maybe String,
-      append: Maybe String,
-      options: [{heading: String} | {
-        option: String,
-        alias: Maybe [String] | String,
-        type: Maybe String,
-        enum: Maybe [String],
-        default: Maybe String,
-        restPositional: Maybe Boolean,
-        requried: Maybe Boolean,
-        overrideRequired: Maybe Bookean,
-        dependsOn: Maybe [String] | String,
-        description: Maybe String,
-        longDescription: Maybe String,
-        example: Maybe [String] | String
-      }],
-      helpStyle: Maybe {
-        aliasSeparator: Maybe String,
-        typeSeparator: Maybe String,
-        descriptionSeparator: Maybe String,
-        initialIndent: Maybe Int,
-        secondaryIndent: Maybe Int,
-        maxPadFactor: Maybe Number
-      },
-      mutuallyExclusive: Maybe [[String | [String]]],
-      concatRepeatedArrays: Maybe Boolean,
-      mergeRepeatedObjects: Maybe Boolean
-    }
-
-### Top Level Properties
-* `prepend` is an optional string to be placed before the options in the help text
-* `append` is an optional string to be placed after the options in the help text
-* `options` is a required array specifying your options and headings, the options and headings will be displayed in the order specified
-* `helpStyle` is an optional object which enables you to change the default appearance of some aspects of the help text
-* `mutuallyExclusive` is an optional array of arrays of either strings or arrays of strings. The top level array is a list of rules, each rule is a list of elements - each element can be either a string (the name of an option), or a list of strings (a group of option names) - there will be an error if more than one element is present
-* `concatRepeatedArrays` is an optional boolean (defaults to `false`) - when set to `true` and an option contains an array value and is repeated, the subsequent values for the flag will be appended rather than overwriting the original value - eg. option `g` of type `[String]`: `-g a -g b -g c,d` will result in `['a','b','c','d']`
-* `mergeRepeatedObjects` is an optional boolean (defaults to `false`) - when set to `true` and an option contains an object value and is repeated, the subsequent values for the flag will be merged rather than overwriting the original value - eg. option `g` of type `Object`: `-g a:1 -g b:2 -g c:3,d:4` will result in `{a: 1, b: 2, c: 3, d: 4}`
-
-#### Heading Properties
-* `heading` a required string, the name of the heading
-
-#### Option Properties
-* `option` the required name of the option - use dash-case, without the leading dashes
-* `alias` is an optional string or array of strings which specify any aliases for the option
-* `type` is a required string in the [type check](https://github.com/gkz/type-check) [format](https://github.com/gkz/type-check#type-format), this will be used to cast the inputted value and validate it
-* `enum` is an optional array of strings, each string will be parsed by [levn](https://github.com/gkz/levn) - the argument value must be one of the resulting values - each potential value must validate against the specified `type`
-* `default` is a optional string, which will be parsed by [levn](https://github.com/gkz/levn) and used as the default value if none is set - the value must validate against the specified `type`
-* `restPositional` is an optional boolean - if set to `true`, everything after the option will be taken to be a positional argument, even if it looks like a named argument
-* `required` is an optional boolean - if set to `true`, the option parsing will fail if the option is not defined
-* `overrideRequired` is a optional boolean - if set to `true` and the option is used, and there is another option which is required but not set, it will override the need for the required option and there will be no error - this is useful if you have required options and want to use `--help` or `--version` flags
-* `dependsOn` is an optional string or array of strings - if simply a string (the name of another option), it will make sure that that other option is set, if an array of strings, depending on whether `'and'` or `'or'` is first, it will either check whether all (`['and', 'option-a', 'option-b']`), or at least one (`['or', 'option-a', 'option-b']`) other options are set
-* `description` is an optional string, which will be displayed next to the option in the help text
-* `longDescription` is an optional string, it will be displayed instead of the `description` when `generateHelpForOption` is used
-* `example` is an optional string or array of strings with example(s) for the option - these will be displayed when `generateHelpForOption` is used
-
-#### Help Style Properties
-* `aliasSeparator` is an optional string, separates multiple names from each other - default: ' ,'
-* `typeSeparator` is an optional string, separates the type from the names - default: ' '
-* `descriptionSeparator` is an optional string , separates the description from the padded name and type - default: '  '
-* `initialIndent` is an optional int - the amount of indent for options - default: 2
-* `secondaryIndent` is an optional int - the amount of indent if wrapped fully (in addition to the initial indent) - default: 4
-* `maxPadFactor` is an optional number - affects the default level of padding for the names/type, it is multiplied by the average of the length of the names/type - default: 1.5
-
-## Argument Format
-At the highest level there are two types of arguments: named, and positional.
-
-Name arguments of any length are prefixed with `--` (eg. `--go`), and those of one character may be prefixed with either `--` or `-` (eg. `-g`).
-
-There are two types of named arguments: boolean flags (eg. `--problemo`, `-p`) which take no value and result in a `true` if they are present, the falsey `undefined` if they are not present, or `false` if present and explicitly prefixed with `no` (eg. `--no-problemo`). Named arguments with values (eg. `--tseries 800`, `-t 800`) are the other type. If the option has a type `Boolean` it will automatically be made into a boolean flag. Any other type results in a named argument that takes a value.
-
-For more information about how to properly set types to get the value you want, take a look at the [type check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) pages.
-
-You can group single character arguments that use a single `-`, however all except the last must be boolean flags (which take no value). The last may be a boolean flag, or an argument which takes a value - eg. `-ba 2` is equivalent to `-b -a 2`.
-
-Positional arguments are all those values which do not fall under the above - they can be anywhere, not just at the end. For example, in `cmd -b one -a 2 two` where `b` is a boolean flag, and `a` has the type `Number`, there are two positional arguments, `one` and `two`.
-
-Everything after an `--` is positional, even if it looks like a named argument.
-
-You may optionally use `=` to separate option names from values, for example: `--count=2`.
-
-If you specify the option `NUM`, then any argument using a single `-` followed by a number will be valid and will set the value of `NUM`. Eg. `-2` will be parsed into `NUM: 2`.
-
-If duplicate named arguments are present, the last one will be taken.
-
-## Technical About
-`optionator` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [levn](https://github.com/gkz/levn) to cast arguments to their specified type, and uses [type-check](https://github.com/gkz/type-check) to validate values. It also uses the [prelude.ls](http://preludels.com/) library.
diff --git a/signaling_server/service/node_modules/express/node_modules/optionator/lib/coerce.js b/signaling_server/service/node_modules/express/node_modules/optionator/lib/coerce.js
deleted file mode 100644 (file)
index 6fb60aa..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var ref$, id, reject, parsedTypeCheck, types, tokenRegex, toString$ = {}.toString;
-  ref$ = require('prelude-ls'), id = ref$.id, reject = ref$.reject;
-  parsedTypeCheck = require('type-check').parsedTypeCheck;
-  types = {
-    '*': function(it){
-      switch (toString$.call(it).slice(8, -1)) {
-      case 'Array':
-        return coerceType(it, {
-          type: 'Array'
-        });
-      case 'Object':
-        return coerceType(it, {
-          type: 'Object'
-        });
-      default:
-        return {
-          type: 'Just',
-          value: coerceTypes(it, [
-            {
-              type: 'Undefined'
-            }, {
-              type: 'Null'
-            }, {
-              type: 'Boolean'
-            }, {
-              type: 'Number'
-            }, {
-              type: 'Date'
-            }, {
-              type: 'RegExp'
-            }, {
-              type: 'Array'
-            }, {
-              type: 'Object'
-            }, {
-              type: 'String'
-            }
-          ], {
-            explicit: true
-          })
-        };
-      }
-    },
-    Undefined: function(it){
-      if (it === 'undefined') {
-        return {
-          type: 'Just',
-          value: void 8
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    Null: function(it){
-      if (it === 'null') {
-        return {
-          type: 'Just',
-          value: null
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    Boolean: function(it){
-      if (it === 'true') {
-        return {
-          type: 'Just',
-          value: true
-        };
-      } else if (it === 'false') {
-        return {
-          type: 'Just',
-          value: false
-        };
-      } else {
-        return {
-          type: 'Nothing'
-        };
-      }
-    },
-    Number: function(it){
-      return {
-        type: 'Just',
-        value: +it
-      };
-    },
-    Int: function(it){
-      return {
-        type: 'Just',
-        value: parseInt(it)
-      };
-    },
-    Float: function(it){
-      return {
-        type: 'Just',
-        value: parseFloat(it)
-      };
-    },
-    Date: function(value, options){
-      var that;
-      if (that = /^\#(.*)\#$/.exec(value)) {
-        return {
-          type: 'Just',
-          value: new Date(+that[1] || that[1])
-        };
-      } else if (options.explicit) {
-        return {
-          type: 'Nothing'
-        };
-      } else {
-        return {
-          type: 'Just',
-          value: new Date(+value || value)
-        };
-      }
-    },
-    RegExp: function(value, options){
-      var that;
-      if (that = /^\/(.*)\/([gimy]*)$/.exec(value)) {
-        return {
-          type: 'Just',
-          value: new RegExp(that[1], that[2])
-        };
-      } else if (options.explicit) {
-        return {
-          type: 'Nothing'
-        };
-      } else {
-        return {
-          type: 'Just',
-          value: new RegExp(value)
-        };
-      }
-    },
-    Array: function(it){
-      return coerceArray(it, {
-        of: [{
-          type: '*'
-        }]
-      });
-    },
-    Object: function(it){
-      return coerceFields(it, {
-        of: {}
-      });
-    },
-    String: function(it){
-      var that;
-      if (that = it.match(/^'(.*)'$/)) {
-        return {
-          type: 'Just',
-          value: that[1]
-        };
-      } else if (that = it.match(/^"(.*)"$/)) {
-        return {
-          type: 'Just',
-          value: that[1]
-        };
-      } else {
-        return {
-          type: 'Just',
-          value: it
-        };
-      }
-    }
-  };
-  function coerceArray(node, type){
-    var typeOf, element;
-    if (toString$.call(node).slice(8, -1) !== 'Array') {
-      return {
-        type: 'Nothing'
-      };
-    }
-    typeOf = type.of;
-    return {
-      type: 'Just',
-      value: (function(){
-        var i$, ref$, len$, results$ = [];
-        for (i$ = 0, len$ = (ref$ = node).length; i$ < len$; ++i$) {
-          element = ref$[i$];
-          results$.push(coerceTypes(element, typeOf));
-        }
-        return results$;
-      }())
-    };
-  }
-  function coerceTuple(node, type){
-    var i, types;
-    if (toString$.call(node).slice(8, -1) !== 'Array') {
-      return {
-        type: 'Nothing'
-      };
-    }
-    return {
-      type: 'Just',
-      value: (function(){
-        var i$, ref$, len$, results$ = [];
-        for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {
-          i = i$;
-          types = ref$[i$];
-          results$.push(coerceTypes(node[i], types));
-        }
-        return results$;
-      }())
-    };
-  }
-  function coerceFields(node, type){
-    var typeOf, key, value;
-    if (toString$.call(node).slice(8, -1) !== 'Object') {
-      return {
-        type: 'Nothing'
-      };
-    }
-    typeOf = type.of;
-    return {
-      type: 'Just',
-      value: (function(){
-        var ref$, results$ = {};
-        for (key in ref$ = node) {
-          value = ref$[key];
-          results$[key] = coerceTypes(value, typeOf[key] || [{
-            type: '*'
-          }]);
-        }
-        return results$;
-      }())
-    };
-  }
-  function coerceType(node, typeObj, options){
-    var type, structure, coerceFunc;
-    type = typeObj.type, structure = typeObj.structure;
-    if (type) {
-      coerceFunc = types[type];
-      return coerceFunc(node, options);
-    } else {
-      switch (structure) {
-      case 'array':
-        return coerceArray(node, typeObj);
-      case 'tuple':
-        return coerceTuple(node, typeObj);
-      case 'fields':
-        return coerceFields(node, typeObj);
-      }
-    }
-  }
-  function coerceTypes(node, types, options){
-    var i$, len$, type, ref$, valueType, value;
-    options == null && (options = {});
-    for (i$ = 0, len$ = types.length; i$ < len$; ++i$) {
-      type = types[i$];
-      ref$ = coerceType(node, type, options), valueType = ref$.type, value = ref$.value;
-      if (valueType === 'Nothing') {
-        continue;
-      }
-      if (parsedTypeCheck([type], value)) {
-        return value;
-      }
-    }
-    throw new Error("Value '" + node + "' does not type check against " + JSON.stringify(types) + ".");
-  }
-  function consumeOp(tokens, op){
-    if (tokens[0] === op) {
-      return tokens.shift();
-    } else {
-      throw new Error("Expected '" + op + "', but got " + tokens[0] + " instead.");
-    }
-  }
-  function maybeConsumeOp(tokens, op){
-    if (tokens[0] === op) {
-      return tokens.shift();
-    }
-  }
-  function consumeList(tokens, delimiters, hasDelimiters){
-    var result;
-    if (hasDelimiters) {
-      consumeOp(tokens, delimiters[0]);
-    }
-    result = [];
-    while (tokens.length && tokens[0] !== delimiters[1]) {
-      result.push(consumeElement(tokens));
-      maybeConsumeOp(tokens, ',');
-    }
-    if (hasDelimiters) {
-      consumeOp(tokens, delimiters[1]);
-    }
-    return result;
-  }
-  function consumeArray(tokens, hasDelimiters){
-    return consumeList(tokens, ['[', ']'], hasDelimiters);
-  }
-  function consumeTuple(tokens, hasDelimiters){
-    return consumeList(tokens, ['(', ')'], hasDelimiters);
-  }
-  function consumeFields(tokens, hasDelimiters){
-    var result, key;
-    if (hasDelimiters) {
-      consumeOp(tokens, '{');
-    }
-    result = {};
-    while (tokens.length && (!hasDelimiters || tokens[0] !== '}')) {
-      key = tokens.shift();
-      consumeOp(tokens, ':');
-      result[key] = consumeElement(tokens);
-      maybeConsumeOp(tokens, ',');
-    }
-    if (hasDelimiters) {
-      consumeOp(tokens, '}');
-    }
-    return result;
-  }
-  function consumeElement(tokens){
-    switch (tokens[0]) {
-    case '[':
-      return consumeArray(tokens, true);
-    case '(':
-      return consumeTuple(tokens, true);
-    case '{':
-      return consumeFields(tokens, true);
-    default:
-      return tokens.shift();
-    }
-  }
-  function consumeTopLevel(tokens, types){
-    var structure, origTokens, result;
-    structure = types[0].structure;
-    if (types.length === 1 && structure) {
-      origTokens = tokens.slice();
-      result = structure === 'array'
-        ? consumeArray(tokens, tokens[0] === '[')
-        : structure === 'tuple'
-          ? consumeTuple(tokens, tokens[0] === '(')
-          : consumeFields(tokens, tokens[0] === '{');
-      if (tokens.length) {
-        return consumeElement(structure === 'array'
-          ? ['['].concat(origTokens, [']'])
-          : ['('].concat(origTokens, [')']));
-      } else {
-        return result;
-      }
-    } else {
-      return consumeElement(tokens);
-    }
-  }
-  tokenRegex = /("(?:[^"]|\\")*")|('(?:[^']|\\')*')|(#.*#)|(\/(?:\\\/|[^\/])*\/[gimy]*)|([\[\]\(\)}{:,])|([-\.\$\w]+)|\s*/;
-  function coerce(types, string){
-    var tokens, node;
-    tokens = reject(function(it){
-      return !it || /^\s+$/.test(it);
-    }, string.split(tokenRegex));
-    node = consumeTopLevel(tokens, types);
-    if (!node) {
-      throw new Error("Error parsing " + string);
-    }
-    return coerceTypes(node, types);
-  }
-  module.exports = coerce;
-  /*
-  function log
-    console.log it; it
-  */
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/optionator/lib/help.js b/signaling_server/service/node_modules/express/node_modules/optionator/lib/help.js
deleted file mode 100644 (file)
index 95d47b6..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var ref$, id, find, sort, min, max, map, partition, unlines, nameToRaw, dasherize, wordwrap, getPreText, setHelpStyleDefaults, generateHelpForOption, generateHelp;
-  ref$ = require('prelude-ls'), id = ref$.id, find = ref$.find, sort = ref$.sort, min = ref$.min, max = ref$.max, map = ref$.map, partition = ref$.partition, unlines = ref$.unlines;
-  ref$ = require('./util'), nameToRaw = ref$.nameToRaw, dasherize = ref$.dasherize;
-  wordwrap = require('wordwrap');
-  getPreText = function(option, arg$, maxWidth){
-    var mainName, aliases, ref$, type, description, aliasSeparator, typeSeparator, initialIndent, shortNames, longNames, names, namesString, namesStringLen, typeSeparatorString, typeSeparatorStringLen, typeString, that, wrap;
-    mainName = option.option, aliases = (ref$ = option.aliases) != null
-      ? ref$
-      : [], type = option.type, description = option.description;
-    aliasSeparator = arg$.aliasSeparator, typeSeparator = arg$.typeSeparator, initialIndent = arg$.initialIndent;
-    ref$ = partition(function(it){
-      return it.length === 1;
-    }, aliases), shortNames = ref$[0], longNames = ref$[1];
-    names = mainName.length === 1
-      ? [mainName].concat(shortNames, longNames)
-      : shortNames.concat([mainName], longNames);
-    namesString = map(nameToRaw, names).join(aliasSeparator);
-    namesStringLen = namesString.length;
-    typeSeparatorString = mainName === 'NUM' ? '::' : typeSeparator;
-    typeSeparatorStringLen = typeSeparatorString.length;
-    typeString = (that = option['enum']) ? "One of: " + that.join(', ') : type;
-    if (maxWidth != null && !option.boolean && initialIndent + namesStringLen + typeSeparatorStringLen + typeString.length > maxWidth) {
-      wrap = wordwrap(initialIndent + namesStringLen + typeSeparatorStringLen, maxWidth);
-      return namesString + "" + typeSeparatorString + wrap(typeString).replace(/^\s+/, '');
-    } else {
-      return namesString + "" + (option.boolean
-        ? ''
-        : typeSeparatorString + "" + typeString);
-    }
-  };
-  setHelpStyleDefaults = function(helpStyle){
-    helpStyle.aliasSeparator == null && (helpStyle.aliasSeparator = ', ');
-    helpStyle.typeSeparator == null && (helpStyle.typeSeparator = ' ');
-    helpStyle.descriptionSeparator == null && (helpStyle.descriptionSeparator = '  ');
-    helpStyle.initialIndent == null && (helpStyle.initialIndent = 2);
-    helpStyle.secondaryIndent == null && (helpStyle.secondaryIndent = 4);
-    helpStyle.maxPadFactor == null && (helpStyle.maxPadFactor = 1.5);
-  };
-  generateHelpForOption = function(getOption, arg$){
-    var stdout, helpStyle, ref$;
-    stdout = arg$.stdout, helpStyle = (ref$ = arg$.helpStyle) != null
-      ? ref$
-      : {};
-    setHelpStyleDefaults(helpStyle);
-    return function(optionName){
-      var maxWidth, wrap, option, e, pre, defaultString, restPositionalString, description, fullDescription, that, preDescription, descriptionString, exampleString, examples, seperator;
-      maxWidth = stdout != null && stdout.isTTY ? stdout.columns - 1 : null;
-      wrap = maxWidth ? wordwrap(maxWidth) : id;
-      try {
-        option = getOption(dasherize(optionName));
-      } catch (e$) {
-        e = e$;
-        return e.message;
-      }
-      pre = getPreText(option, helpStyle);
-      defaultString = option['default'] ? "\ndefault: " + option['default'] : '';
-      restPositionalString = option.restPositional ? 'Everything after this option is considered a positional argument, even if it looks like an option.' : '';
-      description = option.longDescription || option.description && sentencize(option.description);
-      fullDescription = description && restPositionalString
-        ? description + " " + restPositionalString
-        : (that = description || restPositionalString) ? that : '';
-      preDescription = 'description:';
-      descriptionString = !fullDescription
-        ? ''
-        : maxWidth && fullDescription.length - 1 - preDescription.length > maxWidth
-          ? "\n" + preDescription + "\n" + wrap(fullDescription)
-          : "\n" + preDescription + " " + fullDescription;
-      exampleString = (that = option.example) ? (examples = [].concat(that), examples.length > 1
-        ? "\nexamples:\n" + unlines(examples)
-        : "\nexample: " + examples[0]) : '';
-      seperator = defaultString || descriptionString || exampleString ? "\n" + repeatString$('=', pre.length) : '';
-      return pre + "" + seperator + defaultString + descriptionString + exampleString;
-    };
-  };
-  generateHelp = function(arg$){
-    var options, prepend, append, helpStyle, ref$, stdout, aliasSeparator, typeSeparator, descriptionSeparator, maxPadFactor, initialIndent, secondaryIndent;
-    options = arg$.options, prepend = arg$.prepend, append = arg$.append, helpStyle = (ref$ = arg$.helpStyle) != null
-      ? ref$
-      : {}, stdout = arg$.stdout;
-    setHelpStyleDefaults(helpStyle);
-    aliasSeparator = helpStyle.aliasSeparator, typeSeparator = helpStyle.typeSeparator, descriptionSeparator = helpStyle.descriptionSeparator, maxPadFactor = helpStyle.maxPadFactor, initialIndent = helpStyle.initialIndent, secondaryIndent = helpStyle.secondaryIndent;
-    return function(arg$){
-      var ref$, showHidden, interpolate, maxWidth, output, out, data, optionCount, totalPreLen, preLens, i$, len$, item, that, pre, desc, preLen, sortedPreLens, maxPreLen, preLenMean, x, padAmount, descSepLen, fullWrapCount, partialWrapCount, descLen, totalLen, initialSpace, wrapAllFull, i, wrap;
-      ref$ = arg$ != null
-        ? arg$
-        : {}, showHidden = ref$.showHidden, interpolate = ref$.interpolate;
-      maxWidth = stdout != null && stdout.isTTY ? stdout.columns - 1 : null;
-      output = [];
-      out = function(it){
-        return output.push(it != null ? it : '');
-      };
-      if (prepend) {
-        out(interpolate ? interp(prepend, interpolate) : prepend);
-        out();
-      }
-      data = [];
-      optionCount = 0;
-      totalPreLen = 0;
-      preLens = [];
-      for (i$ = 0, len$ = (ref$ = options).length; i$ < len$; ++i$) {
-        item = ref$[i$];
-        if (showHidden || !item.hidden) {
-          if (that = item.heading) {
-            data.push({
-              type: 'heading',
-              value: that
-            });
-          } else {
-            pre = getPreText(item, helpStyle, maxWidth);
-            desc = item['default']
-              ? (that = item.description) != null
-                ? that + " - default: " + item['default']
-                : "default: " + item['default']
-              : (that = item.description) != null ? that : '';
-            data.push({
-              type: 'option',
-              pre: pre,
-              desc: desc,
-              descLen: desc.length
-            });
-            preLen = pre.length;
-            optionCount++;
-            totalPreLen += preLen;
-            preLens.push(preLen);
-          }
-        }
-      }
-      sortedPreLens = sort(preLens);
-      maxPreLen = sortedPreLens[sortedPreLens.length - 1];
-      preLenMean = initialIndent + totalPreLen / optionCount;
-      x = optionCount > 2 ? min(preLenMean * maxPadFactor, maxPreLen) : maxPreLen;
-      for (i$ = sortedPreLens.length - 1; i$ >= 0; --i$) {
-        preLen = sortedPreLens[i$];
-        if (preLen <= x) {
-          padAmount = preLen;
-          break;
-        }
-      }
-      descSepLen = descriptionSeparator.length;
-      if (maxWidth != null) {
-        fullWrapCount = 0;
-        partialWrapCount = 0;
-        for (i$ = 0, len$ = data.length; i$ < len$; ++i$) {
-          item = data[i$];
-          if (item.type === 'option') {
-            pre = item.pre, desc = item.desc, descLen = item.descLen;
-            if (descLen === 0) {
-              item.wrap = 'none';
-            } else {
-              preLen = max(padAmount, pre.length) + initialIndent + descSepLen;
-              totalLen = preLen + descLen;
-              if (totalLen > maxWidth) {
-                if (descLen / 2.5 > maxWidth - preLen) {
-                  fullWrapCount++;
-                  item.wrap = 'full';
-                } else {
-                  partialWrapCount++;
-                  item.wrap = 'partial';
-                }
-              } else {
-                item.wrap = 'none';
-              }
-            }
-          }
-        }
-      }
-      initialSpace = repeatString$(' ', initialIndent);
-      wrapAllFull = optionCount > 1 && fullWrapCount + partialWrapCount * 0.5 > optionCount * 0.5;
-      for (i$ = 0, len$ = data.length; i$ < len$; ++i$) {
-        i = i$;
-        item = data[i$];
-        if (item.type === 'heading') {
-          if (i !== 0) {
-            out();
-          }
-          out(item.value + ":");
-        } else {
-          pre = item.pre, desc = item.desc, descLen = item.descLen, wrap = item.wrap;
-          if (maxWidth != null) {
-            if (wrapAllFull || wrap === 'full') {
-              wrap = wordwrap(initialIndent + secondaryIndent, maxWidth);
-              out(initialSpace + "" + pre + "\n" + wrap(desc));
-              continue;
-            } else if (wrap === 'partial') {
-              wrap = wordwrap(initialIndent + descSepLen + max(padAmount, pre.length), maxWidth);
-              out(initialSpace + "" + pad(pre, padAmount) + descriptionSeparator + wrap(desc).replace(/^\s+/, ''));
-              continue;
-            }
-          }
-          if (descLen === 0) {
-            out(initialSpace + "" + pre);
-          } else {
-            out(initialSpace + "" + pad(pre, padAmount) + descriptionSeparator + desc);
-          }
-        }
-      }
-      if (append) {
-        out();
-        out(interpolate ? interp(append, interpolate) : append);
-      }
-      return unlines(output);
-    };
-  };
-  function pad(str, num){
-    var len, padAmount;
-    len = str.length;
-    padAmount = num - len;
-    return str + "" + repeatString$(' ', padAmount > 0 ? padAmount : 0);
-  }
-  function sentencize(str){
-    var first, rest, period;
-    first = str.charAt(0).toUpperCase();
-    rest = str.slice(1);
-    period = /[\.!\?]$/.test(str) ? '' : '.';
-    return first + "" + rest + period;
-  }
-  function interp(string, object){
-    return string.replace(/{{([a-zA-Z$_][a-zA-Z$_0-9]*)}}/g, function(arg$, key){
-      var ref$;
-      return (ref$ = object[key]) != null
-        ? ref$
-        : "{{" + key + "}}";
-    });
-  }
-  module.exports = {
-    generateHelp: generateHelp,
-    generateHelpForOption: generateHelpForOption
-  };
-  function repeatString$(str, n){
-    for (var r = ''; n > 0; (n >>= 1) && (str += str)) if (n & 1) r += str;
-    return r;
-  }
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/optionator/lib/index.js b/signaling_server/service/node_modules/express/node_modules/optionator/lib/index.js
deleted file mode 100644 (file)
index 9a01d4b..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var VERSION, ref$, id, map, compact, any, groupBy, chars, isItNaN, keys, Obj, camelize, deepIs, closestString, nameToRaw, dasherize, generateHelp, generateHelpForOption, parsedTypeCheck, parseType, parseLevn, camelizeKeys, parseString, main, toString$ = {}.toString, slice$ = [].slice;
-  VERSION = '0.4.0';
-  ref$ = require('prelude-ls'), id = ref$.id, map = ref$.map, compact = ref$.compact, any = ref$.any, groupBy = ref$.groupBy, chars = ref$.chars, isItNaN = ref$.isItNaN, keys = ref$.keys, Obj = ref$.Obj, camelize = ref$.camelize;
-  deepIs = require('deep-is');
-  ref$ = require('./util'), closestString = ref$.closestString, nameToRaw = ref$.nameToRaw, dasherize = ref$.dasherize;
-  ref$ = require('./help'), generateHelp = ref$.generateHelp, generateHelpForOption = ref$.generateHelpForOption;
-  ref$ = require('type-check'), parsedTypeCheck = ref$.parsedTypeCheck, parseType = ref$.parseType;
-  parseLevn = require('levn').parsedTypeParse;
-  camelizeKeys = function(obj){
-    var key, value, results$ = {};
-    for (key in obj) {
-      value = obj[key];
-      results$[camelize(key)] = value;
-    }
-    return results$;
-  };
-  parseString = function(string){
-    var assignOpt, regex, replaceRegex, result;
-    assignOpt = '--?[a-zA-Z][-a-z-A-Z0-9]*=';
-    regex = RegExp('(?:' + assignOpt + ')?(?:\'(?:\\\\\'|[^\'])+\'|"(?:\\\\"|[^"])+")|[^\'"\\s]+', 'g');
-    replaceRegex = RegExp('^(' + assignOpt + ')?[\'"]([\\s\\S]*)[\'"]$');
-    result = map(function(it){
-      return it.replace(replaceRegex, '$1$2');
-    }, string.match(regex) || []);
-    return result;
-  };
-  main = function(libOptions){
-    var opts, defaults, required, traverse, getOption, parse;
-    opts = {};
-    defaults = {};
-    required = [];
-    if (toString$.call(libOptions.stdout).slice(8, -1) === 'Undefined') {
-      libOptions.stdout = process.stdout;
-    }
-    traverse = function(options){
-      var i$, len$, option, name, e, parsedPossibilities, parsedType, j$, ref$, len1$, possibility, that, rawDependsType, dependsOpts, dependsType, alias;
-      if (toString$.call(options).slice(8, -1) !== 'Array') {
-        throw new Error('No options defined.');
-      }
-      for (i$ = 0, len$ = options.length; i$ < len$; ++i$) {
-        option = options[i$];
-        if (option.heading == null) {
-          name = option.option;
-          if (opts[name] != null) {
-            throw new Error("Option '" + name + "' already defined.");
-          }
-          if (option.type === 'Boolean') {
-            option.boolean == null && (option.boolean = true);
-          }
-          if (option.parsedType == null) {
-            if (!option.type) {
-              throw new Error("No type defined for option '" + name + "'.");
-            }
-            try {
-              option.parsedType = parseType(option.type);
-            } catch (e$) {
-              e = e$;
-              throw new Error("Option '" + name + "': Error parsing type '" + option.type + "': " + e.message);
-            }
-          }
-          if (option['default']) {
-            try {
-              defaults[name] = parseLevn(option.parsedType, option['default']);
-            } catch (e$) {
-              e = e$;
-              throw new Error("Option '" + name + "': Error parsing default value '" + option['default'] + "' for type '" + option.type + "': " + e.message);
-            }
-          }
-          if (option['enum'] && !option.parsedPossiblities) {
-            parsedPossibilities = [];
-            parsedType = option.parsedType;
-            for (j$ = 0, len1$ = (ref$ = option['enum']).length; j$ < len1$; ++j$) {
-              possibility = ref$[j$];
-              try {
-                parsedPossibilities.push(parseLevn(parsedType, possibility));
-              } catch (e$) {
-                e = e$;
-                throw new Error("Option '" + name + "': Error parsing enum value '" + possibility + "' for type '" + option.type + "': " + e.message);
-              }
-            }
-            option.parsedPossibilities = parsedPossibilities;
-          }
-          if (that = option.dependsOn) {
-            if (that.length) {
-              ref$ = [].concat(option.dependsOn), rawDependsType = ref$[0], dependsOpts = slice$.call(ref$, 1);
-              dependsType = rawDependsType.toLowerCase();
-              if (dependsOpts.length) {
-                if (dependsType === 'and' || dependsType === 'or') {
-                  option.dependsOn = [dependsType].concat(slice$.call(dependsOpts));
-                } else {
-                  throw new Error("Option '" + name + "': If you have more than one dependency, you must specify either 'and' or 'or'");
-                }
-              } else {
-                if ((ref$ = dependsType.toLowerCase()) === 'and' || ref$ === 'or') {
-                  option.dependsOn = null;
-                } else {
-                  option.dependsOn = ['and', rawDependsType];
-                }
-              }
-            } else {
-              option.dependsOn = null;
-            }
-          }
-          if (option.required) {
-            required.push(name);
-          }
-          opts[name] = option;
-          if (option.alias || option.aliases) {
-            if (name === 'NUM') {
-              throw new Error("-NUM option can't have aliases.");
-            }
-            if (option.alias) {
-              option.aliases == null && (option.aliases = [].concat(option.alias));
-            }
-            for (j$ = 0, len1$ = (ref$ = option.aliases).length; j$ < len1$; ++j$) {
-              alias = ref$[j$];
-              if (opts[alias] != null) {
-                throw new Error("Option '" + alias + "' already defined.");
-              }
-              opts[alias] = option;
-            }
-          }
-        }
-      }
-    };
-    traverse(libOptions.options);
-    getOption = function(name){
-      var opt, possiblyMeant;
-      opt = opts[name];
-      if (opt == null) {
-        possiblyMeant = closestString(keys(opts), name);
-        throw new Error("Invalid option '" + nameToRaw(name) + "'" + (possiblyMeant ? " - perhaps you meant '" + nameToRaw(possiblyMeant) + "'?" : '.'));
-      }
-      return opt;
-    };
-    parse = function(input, arg$){
-      var slice, obj, positional, restPositional, overrideRequired, prop, setValue, setDefaults, checkRequired, mutuallyExclusiveError, checkMutuallyExclusive, checkDependency, checkDependencies, args, key, value, option, ref$, i$, len$, arg, that, result, short, argName, usingAssign, val, flags, len, j$, len1$, i, flag, opt, name, negated, noedName, valPrime;
-      slice = (arg$ != null
-        ? arg$
-        : {}).slice;
-      obj = {};
-      positional = [];
-      restPositional = false;
-      overrideRequired = false;
-      prop = null;
-      setValue = function(name, value){
-        var opt, val, e, currentType;
-        opt = getOption(name);
-        if (opt.boolean) {
-          val = value;
-        } else {
-          try {
-            val = parseLevn(opt.parsedType, value);
-          } catch (e$) {
-            e = e$;
-            throw new Error("Invalid value for option '" + name + "' - expected type " + opt.type + ", received value: " + value + ".");
-          }
-          if (opt['enum'] && !any(function(it){
-            return deepIs(it, val);
-          }, opt.parsedPossibilities)) {
-            throw new Error("Option " + name + ": '" + val + "' not in [" + opt['enum'].join(', ') + "].");
-          }
-        }
-        currentType = toString$.call(obj[name]).slice(8, -1);
-        if (obj[name] != null) {
-          if (libOptions.concatRepeatedArrays && currentType === 'Array') {
-            obj[name] = obj[name].concat(val);
-          } else if (libOptions.mergeRepeatedObjects && currentType === 'Object') {
-            import$(obj[name], val);
-          } else {
-            obj[name] = val;
-          }
-        } else {
-          obj[name] = val;
-        }
-        if (opt.restPositional) {
-          restPositional = true;
-        }
-        if (opt.overrideRequired) {
-          overrideRequired = true;
-        }
-      };
-      setDefaults = function(){
-        var name, ref$, value;
-        for (name in ref$ = defaults) {
-          value = ref$[name];
-          if (obj[name] == null) {
-            obj[name] = value;
-          }
-        }
-      };
-      checkRequired = function(){
-        var i$, ref$, len$, name;
-        if (overrideRequired) {
-          return;
-        }
-        for (i$ = 0, len$ = (ref$ = required).length; i$ < len$; ++i$) {
-          name = ref$[i$];
-          if (!obj[name]) {
-            throw new Error("Option " + nameToRaw(name) + " is required.");
-          }
-        }
-      };
-      mutuallyExclusiveError = function(first, second){
-        throw new Error("The options " + nameToRaw(first) + " and " + nameToRaw(second) + " are mutually exclusive - you cannot use them at the same time.");
-      };
-      checkMutuallyExclusive = function(){
-        var rules, i$, len$, rule, present, j$, len1$, element, k$, len2$, opt;
-        rules = libOptions.mutuallyExclusive;
-        if (!rules) {
-          return;
-        }
-        for (i$ = 0, len$ = rules.length; i$ < len$; ++i$) {
-          rule = rules[i$];
-          present = null;
-          for (j$ = 0, len1$ = rule.length; j$ < len1$; ++j$) {
-            element = rule[j$];
-            if (toString$.call(element).slice(8, -1) === 'Array') {
-              for (k$ = 0, len2$ = element.length; k$ < len2$; ++k$) {
-                opt = element[k$];
-                if (opt in obj) {
-                  if (present != null) {
-                    mutuallyExclusiveError(present, opt);
-                  } else {
-                    present = opt;
-                    break;
-                  }
-                }
-              }
-            } else {
-              if (element in obj) {
-                if (present != null) {
-                  mutuallyExclusiveError(present, element);
-                } else {
-                  present = element;
-                }
-              }
-            }
-          }
-        }
-      };
-      checkDependency = function(option){
-        var dependsOn, type, targetOptionNames, i$, len$, targetOptionName, targetOption;
-        dependsOn = option.dependsOn;
-        if (!dependsOn || option.dependenciesMet) {
-          return true;
-        }
-        type = dependsOn[0], targetOptionNames = slice$.call(dependsOn, 1);
-        for (i$ = 0, len$ = targetOptionNames.length; i$ < len$; ++i$) {
-          targetOptionName = targetOptionNames[i$];
-          targetOption = obj[targetOptionName];
-          if (targetOption && checkDependency(targetOption)) {
-            if (type === 'or') {
-              return true;
-            }
-          } else if (type === 'and') {
-            throw new Error("The option '" + option.option + "' did not have its dependencies met.");
-          }
-        }
-        if (type === 'and') {
-          return true;
-        } else {
-          throw new Error("The option '" + option.option + "' did not meet any of its dependencies.");
-        }
-      };
-      checkDependencies = function(){
-        var name;
-        for (name in obj) {
-          checkDependency(opts[name]);
-        }
-      };
-      switch (toString$.call(input).slice(8, -1)) {
-      case 'String':
-        args = parseString(input.slice(slice != null ? slice : 0));
-        break;
-      case 'Array':
-        args = input.slice(slice != null ? slice : 2);
-        break;
-      case 'Object':
-        obj = {};
-        for (key in input) {
-          value = input[key];
-          if (key !== '_') {
-            option = getOption(dasherize(key));
-            if (parsedTypeCheck(option.parsedType, value)) {
-              obj[option.option] = value;
-            } else {
-              throw new Error("Option '" + option.option + "': Invalid type for '" + value + "' - expected type '" + option.type + "'.");
-            }
-          }
-        }
-        checkMutuallyExclusive();
-        checkDependencies();
-        setDefaults();
-        checkRequired();
-        return ref$ = camelizeKeys(obj), ref$._ = input._ || [], ref$;
-      default:
-        throw new Error("Invalid argument to 'parse': " + input + ".");
-      }
-      for (i$ = 0, len$ = args.length; i$ < len$; ++i$) {
-        arg = args[i$];
-        if (arg === '--') {
-          restPositional = true;
-        } else if (restPositional) {
-          positional.push(arg);
-        } else {
-          if (that = arg.match(/^(--?)([a-zA-Z][-a-zA-Z0-9]*)(=)?(.*)?$/)) {
-            result = that;
-            if (prop) {
-              throw new Error("Value for '" + prop + "' of type '" + getOption(prop).type + "' required.");
-            }
-            short = result[1].length === 1;
-            argName = result[2];
-            usingAssign = result[3] != null;
-            val = result[4];
-            if (usingAssign && val == null) {
-              throw new Error("No value for '" + argName + "' specified.");
-            }
-            if (short) {
-              flags = chars(argName);
-              len = flags.length;
-              for (j$ = 0, len1$ = flags.length; j$ < len1$; ++j$) {
-                i = j$;
-                flag = flags[j$];
-                opt = getOption(flag);
-                name = opt.option;
-                if (restPositional) {
-                  positional.push(flag);
-                } else if (opt.boolean) {
-                  setValue(name, true);
-                } else if (i === len - 1) {
-                  if (usingAssign) {
-                    setValue(name, val);
-                  } else {
-                    prop = name;
-                  }
-                } else {
-                  throw new Error("Can't set argument '" + flag + "' when not last flag in a group of short flags.");
-                }
-              }
-            } else {
-              negated = false;
-              if (that = argName.match(/^no-(.+)$/)) {
-                negated = true;
-                noedName = that[1];
-                opt = getOption(noedName);
-              } else {
-                opt = getOption(argName);
-              }
-              name = opt.option;
-              if (opt.boolean) {
-                valPrime = usingAssign ? parseLevn([{
-                  type: 'Boolean'
-                }], val) : true;
-                if (negated) {
-                  setValue(name, !valPrime);
-                } else {
-                  setValue(name, valPrime);
-                }
-              } else {
-                if (negated) {
-                  throw new Error("Only use 'no-' prefix for Boolean options, not with '" + noedName + "'.");
-                }
-                if (usingAssign) {
-                  setValue(name, val);
-                } else {
-                  prop = name;
-                }
-              }
-            }
-          } else if (that = arg.match(/^-([0-9]+(?:\.[0-9]+)?)$/)) {
-            opt = opts.NUM;
-            if (!opt) {
-              throw new Error('No -NUM option defined.');
-            }
-            setValue(opt.option, that[1]);
-          } else {
-            if (prop) {
-              setValue(prop, arg);
-              prop = null;
-            } else {
-              positional.push(arg);
-            }
-          }
-        }
-      }
-      checkMutuallyExclusive();
-      checkDependencies();
-      setDefaults();
-      checkRequired();
-      return ref$ = camelizeKeys(obj), ref$._ = positional, ref$;
-    };
-    return {
-      parse: parse,
-      generateHelp: generateHelp(libOptions),
-      generateHelpForOption: generateHelpForOption(getOption, libOptions)
-    };
-  };
-  main.VERSION = VERSION;
-  module.exports = main;
-  function import$(obj, src){
-    var own = {}.hasOwnProperty;
-    for (var key in src) if (own.call(src, key)) obj[key] = src[key];
-    return obj;
-  }
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/optionator/lib/parse-type.js b/signaling_server/service/node_modules/express/node_modules/optionator/lib/parse-type.js
deleted file mode 100644 (file)
index e648723..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var reject, tokenRegex;
-  reject = require('prelude-ls').reject;
-  function consumeWord(tokens){
-    var token;
-    token = tokens[0];
-    if (!(token != null && /^[a-zA-Z]+$/.test(token))) {
-      throw new Error("Exected textual string.");
-    }
-    return tokens.shift();
-  }
-  function consumeOp(tokens, op){
-    var token;
-    token = tokens[0];
-    if (token !== op) {
-      throw new Error("Expected " + op);
-    }
-    return tokens.shift();
-  }
-  function maybeConsumeOp(tokens, op){
-    var token;
-    token = tokens[0];
-    if (token === op) {
-      return tokens.shift();
-    } else {
-      return null;
-    }
-  }
-  function consumeArray(tokens){
-    var contentType;
-    consumeOp(tokens, '[');
-    contentType = consumeTypes(tokens);
-    if (!contentType) {
-      throw new Error("Must specify content type for Array.");
-    }
-    consumeOp(tokens, ']');
-    return {
-      type: 'Array',
-      contentType: contentType
-    };
-  }
-  function consumeTuple(tokens){
-    var contentTypes, that;
-    contentTypes = [];
-    consumeOp(tokens, '(');
-    while (that = consumeTypes(tokens)) {
-      contentTypes.push(that);
-      if (!maybeConsumeOp(tokens, ',')) {
-        break;
-      }
-    }
-    consumeOp(tokens, ')');
-    return {
-      type: 'Tuple',
-      contentTypes: contentTypes
-    };
-  }
-  function consumeProperty(tokens){
-    var key, type;
-    key = consumeWord(tokens);
-    consumeOp(tokens, ':');
-    type = consumeTypes(tokens);
-    return {
-      key: key,
-      type: type
-    };
-  }
-  function consumeObject(tokens){
-    var properties, that;
-    properties = [];
-    consumeOp(tokens, '{');
-    while (that = consumeProperty(tokens)) {
-      properties.push(that);
-      if (!maybeConsumeOp(tokens, ',')) {
-        break;
-      }
-    }
-    consumeOp(tokens, '}');
-    return {
-      type: 'Object',
-      properties: properties
-    };
-  }
-  function consumeType(tokens){
-    switch (tokens[0]) {
-    case '[':
-      return consumeArray(tokens);
-    case '{':
-      return consumeObject(tokens);
-    case '(':
-      return consumeTuple(tokens);
-    default:
-      return {
-        type: consumeWord(tokens)
-      };
-    }
-  }
-  function consumeMaybe(tokens){
-    var maybe, type;
-    if (tokens[0] === 'Maybe') {
-      tokens.shift();
-      maybe = true;
-    }
-    type = consumeType(tokens);
-    if (maybe) {
-      return {
-        type: 'Maybe',
-        contentType: type
-      };
-    } else {
-      return type;
-    }
-  }
-  function consumeTypes(tokens){
-    var types;
-    types = [];
-    for (;;) {
-      types.push(consumeMaybe(tokens));
-      if (!maybeConsumeOp('|')) {
-        break;
-      }
-    }
-    if (!types.length) {
-      throw new Error("Expected type(s).");
-    }
-    return types;
-  }
-  tokenRegex = /[:,\[\]\(\)}{]|[a-zA-Z]+/g;
-  module.exports = function(input){
-    var tokens, e;
-    tokens = reject(function(it){
-      return /^\s*$/.test(it);
-    })(
-    input.match(tokenRegex));
-    try {
-      return consumeTypes(tokens);
-    } catch (e$) {
-      e = e$;
-      throw new Error(e.message + " - '" + tokens.join('#') + "' - '" + input + "'");
-    }
-  };
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/optionator/lib/util.js b/signaling_server/service/node_modules/express/node_modules/optionator/lib/util.js
deleted file mode 100644 (file)
index 480ba95..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-// Generated by LiveScript 1.2.0
-(function(){
-  var prelude, map, sortBy, fl, closestString, nameToRaw, dasherize;
-  prelude = require('prelude-ls'), map = prelude.map, sortBy = prelude.sortBy;
-  fl = require('fast-levenshtein');
-  closestString = function(possibilities, input){
-    var distances, ref$, string, distance;
-    if (!possibilities.length) {
-      return;
-    }
-    distances = map(function(it){
-      var ref$, longer, shorter;
-      ref$ = input.length > it.length
-        ? [input, it]
-        : [it, input], longer = ref$[0], shorter = ref$[1];
-      return {
-        string: it,
-        distance: fl.get(longer, shorter)
-      };
-    })(
-    possibilities);
-    ref$ = sortBy(function(it){
-      return it.distance;
-    }, distances)[0], string = ref$.string, distance = ref$.distance;
-    return string;
-  };
-  nameToRaw = function(name){
-    if (name.length === 1 || name === 'NUM') {
-      return "-" + name;
-    } else {
-      return "--" + name;
-    }
-  };
-  dasherize = function(string){
-    if (/^[A-Z]/.test(string)) {
-      return string;
-    } else {
-      return prelude.dasherize(string);
-    }
-  };
-  module.exports = {
-    closestString: closestString,
-    nameToRaw: nameToRaw,
-    dasherize: dasherize
-  };
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/optionator/package.json b/signaling_server/service/node_modules/express/node_modules/optionator/package.json
deleted file mode 100644 (file)
index af33d8d..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "_from": "optionator@^0.4.0",
-  "_id": "optionator@0.4.0",
-  "_inBundle": false,
-  "_integrity": "sha1-55x5Jv99VQ+SxxTfw9oh14d+vqY=",
-  "_location": "/optionator",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "optionator@^0.4.0",
-    "name": "optionator",
-    "escapedName": "optionator",
-    "rawSpec": "^0.4.0",
-    "saveSpec": null,
-    "fetchSpec": "^0.4.0"
-  },
-  "_requiredBy": [
-    "/"
-  ],
-  "_resolved": "https://registry.npmjs.org/optionator/-/optionator-0.4.0.tgz",
-  "_shasum": "e79c7926ff7d550f92c714dfc3da21d7877ebea6",
-  "_spec": "optionator@^0.4.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes",
-  "author": {
-    "name": "George Zahariev",
-    "email": "z@georgezahariev.com"
-  },
-  "bugs": {
-    "url": "https://github.com/gkz/optionator/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "deep-is": "~0.1.2",
-    "fast-levenshtein": "~1.0.0",
-    "levn": "~0.2.5",
-    "prelude-ls": "~1.1.0",
-    "type-check": "~0.3.1",
-    "wordwrap": "~0.0.2"
-  },
-  "deprecated": false,
-  "description": "option parsing and help generation",
-  "devDependencies": {
-    "LiveScript": "~1.2.0",
-    "istanbul": "~0.1.43",
-    "mocha": "~1.8.2"
-  },
-  "engines": {
-    "node": ">= 0.8.0"
-  },
-  "files": [
-    "lib",
-    "README.md",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/gkz/optionator",
-  "keywords": [
-    "options"
-  ],
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "https://raw.githubusercontent.com/gkz/optionator/master/LICENSE"
-    }
-  ],
-  "main": "./lib/",
-  "name": "optionator",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/gkz/optionator.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "0.4.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/parseurl/package.json b/signaling_server/service/node_modules/express/node_modules/parseurl/package.json
deleted file mode 100644 (file)
index d810ad3..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-{
-  "_from": "parseurl@~1.3.3",
-  "_id": "parseurl@1.3.3",
-  "_inBundle": false,
-  "_integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
-  "_location": "/parseurl",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "parseurl@~1.3.3",
-    "name": "parseurl",
-    "escapedName": "parseurl",
-    "rawSpec": "~1.3.3",
-    "saveSpec": null,
-    "fetchSpec": "~1.3.3"
-  },
-  "_requiredBy": [
-    "/express",
-    "/finalhandler",
-    "/serve-static"
-  ],
-  "_resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-  "_shasum": "9da19e7bee8d12dff0513ed5b76957793bc2e8d4",
-  "_spec": "parseurl@~1.3.3",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/pillarjs/parseurl/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "parse a url with memoization",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "2.1.4",
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.1",
-    "eslint-plugin-node": "7.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "fast-url-parser": "1.1.3",
-    "istanbul": "0.4.5",
-    "mocha": "6.1.3"
-  },
-  "engines": {
-    "node": ">= 0.8"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/pillarjs/parseurl#readme",
-  "license": "MIT",
-  "name": "parseurl",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/pillarjs/parseurl.git"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js",
-    "lint": "eslint .",
-    "test": "mocha --check-leaks --bail --reporter spec test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec test/"
-  },
-  "version": "1.3.3"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/path-to-regexp/package.json b/signaling_server/service/node_modules/express/node_modules/path-to-regexp/package.json
deleted file mode 100644 (file)
index 868532e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "_from": "path-to-regexp@0.1.7",
-  "_id": "path-to-regexp@0.1.7",
-  "_inBundle": false,
-  "_integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
-  "_location": "/path-to-regexp",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "path-to-regexp@0.1.7",
-    "name": "path-to-regexp",
-    "escapedName": "path-to-regexp",
-    "rawSpec": "0.1.7",
-    "saveSpec": null,
-    "fetchSpec": "0.1.7"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-  "_shasum": "df604178005f522f15eb4490e7247a1bfaa67f8c",
-  "_spec": "path-to-regexp@0.1.7",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/component/path-to-regexp/issues"
-  },
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "path-to-regexp": "index.js"
-    }
-  },
-  "deprecated": false,
-  "description": "Express style path to RegExp utility",
-  "devDependencies": {
-    "istanbul": "^0.2.6",
-    "mocha": "^1.17.1"
-  },
-  "files": [
-    "index.js",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/component/path-to-regexp#readme",
-  "keywords": [
-    "express",
-    "regexp"
-  ],
-  "license": "MIT",
-  "name": "path-to-regexp",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/component/path-to-regexp.git"
-  },
-  "scripts": {
-    "test": "istanbul cover _mocha -- -R spec"
-  },
-  "version": "0.1.7"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/CHANGELOG.md b/signaling_server/service/node_modules/express/node_modules/prelude-ls/CHANGELOG.md
deleted file mode 100644 (file)
index c2de12d..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-# 1.1.2
-- add `Func.memoize`
-- fix `zip-all` and `zip-with-all` corner case (no input)
-- build with LiveScript 1.4.0
-
-# 1.1.1
-- curry `unique-by`, `minimum-by`
-
-# 1.1.0
-- added `List` functions: `maximum-by`, `minimum-by`, `unique-by`
-- added `List` functions: `at`, `elem-index`, `elem-indices`, `find-index`, `find-indices`
-- added `Str` functions: `capitalize`, `camelize`, `dasherize`
-- added `Func` function: `over` - eg. ``same-length = (==) `over` (.length)``
-- exported `Str.repeat` through main `prelude` object
-- fixed definition of `foldr` and `foldr1`, the new correct definition is backwards incompatible with the old, incorrect one
-- fixed issue with `fix`
-- improved code coverage
-
-# 1.0.3
-- build browser versions
-
-# 1.0.2
-- bug fix for `flatten` - slight change with bug fix, flattens arrays only, not array-like objects
-
-# 1.0.1
-- bug fixes for `drop-while` and `take-while`
-
-# 1.0.0
-* massive update - separated functions into separate modules
-* functions do not accept multiple types anymore - use different versions in their respective modules in some cases (eg. `Obj.map`), or use `chars` or `values` in other cases to transform into a list
-* objects are no longer transformed into functions, simply use `(obj.)` in LiveScript to do that
-* browser version now using browserify - use `prelude = require('prelude-ls')`
-* added `compact`, `split`, `flatten`, `difference`, `intersection`, `union`, `count-by`, `group-by`, `chars`, `unchars`, `apply`
-* added `lists-to-obj` which takes a list of keys and list of values and zips them up into an object, and the converse `obj-to-lists`
-* added `pairs-to-obj` which takes a list of pairs (2 element lists) and creates an object, and the converse `obj-to-pairs`
-* removed `cons`, `append` - use the concat operator
-* removed `compose` - use the compose operator
-* removed `obj-to-func` - use partially applied access (eg. `(obj.)`)
-* removed `length` - use `(.length)`
-* `sort-by` renamed to `sort-with`
-* added new `sort-by`
-* removed `compare` - just use the new `sort-by`
-* `break-it` renamed `break-list`, (`Str.break-str` for the string version)
-* added `Str.repeat` which creates a new string by repeating the input n times
-* `unfold` as alias to `unfoldr` is no longer used
-* fixed up style and compiled with LiveScript 1.1.1
-* use Make instead of Slake
-* greatly improved tests
-
-# 0.6.0
-* fixed various bugs
-* added `fix`, a fixpoint (Y combinator) for anonymous recursive functions
-* added `unfoldr` (alias `unfold`)
-* calling `replicate` with a string now returns a list of strings
-* removed `partial`, just use native partial application in LiveScript using the `_` placeholder, or currying
-* added `sort`, `sortBy`, and `compare`
-
-# 0.5.0
-* removed `lookup` - use (.prop)
-* removed `call` - use (.func arg1, arg2)
-* removed `pluck` - use map (.prop), xs
-* fixed buys wtih `head` and `last`
-* added non-minifed browser version, as `prelude-browser.js`
-* renamed `prelude-min.js` to `prelude-browser-min.js`
-* renamed `zip` to `zipAll`
-* renamed `zipWith` to `zipAllWith`
-* added `zip`, a curried zip that takes only two arguments
-* added `zipWith`, a curried zipWith that takes only two arguments
-
-# 0.4.0
-* added `parition` function
-* added `curry` function
-* removed `elem` function (use `in`)
-* removed `notElem` function (use `not in`)
-
-# 0.3.0
-* added `listToObject`
-* added `unique`
-* added `objToFunc`
-* added support for using strings in map and the like
-* added support for using objects in map and the like
-* added ability to use objects instead of functions in certain cases
-* removed `error` (just use throw)
-* added `tau` constant
-* added `join`
-* added `values`
-* added `keys`
-* added `partial`
-* renamed `log` to `ln`
-* added alias to `head`: `first`
-* added `installPrelude` helper
-
-# 0.2.0
-* removed functions that simply warp operators as you can now use operators as functions in LiveScript
-* `min/max` are now curried and take only 2 arguments
-* added `call`
-
-# 0.1.0
-* initial public release
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/LICENSE b/signaling_server/service/node_modules/express/node_modules/prelude-ls/LICENSE
deleted file mode 100644 (file)
index 525b118..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) George Zahariev
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/README.md b/signaling_server/service/node_modules/express/node_modules/prelude-ls/README.md
deleted file mode 100644 (file)
index fabc212..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# prelude.ls [![Build Status](https://travis-ci.org/gkz/prelude-ls.png?branch=master)](https://travis-ci.org/gkz/prelude-ls)
-
-is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, <a href="http://livescript.net">LiveScript</a>.
-
-See **[the prelude.ls site](http://preludels.com)** for examples, a reference, and more.
-
-You can install via npm `npm install prelude-ls`
-
-### Development
-
-`make test` to test
-
-`make build` to build `lib` from `src`
-
-`make build-browser` to build browser versions
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Func.js b/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Func.js
deleted file mode 100644 (file)
index b80c9b1..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-// Generated by LiveScript 1.4.0
-var apply, curry, flip, fix, over, memoize, slice$ = [].slice, toString$ = {}.toString;
-apply = curry$(function(f, list){
-  return f.apply(null, list);
-});
-curry = function(f){
-  return curry$(f);
-};
-flip = curry$(function(f, x, y){
-  return f(y, x);
-});
-fix = function(f){
-  return function(g){
-    return function(){
-      return f(g(g)).apply(null, arguments);
-    };
-  }(function(g){
-    return function(){
-      return f(g(g)).apply(null, arguments);
-    };
-  });
-};
-over = curry$(function(f, g, x, y){
-  return f(g(x), g(y));
-});
-memoize = function(f){
-  var memo;
-  memo = {};
-  return function(){
-    var args, key, arg;
-    args = slice$.call(arguments);
-    key = (function(){
-      var i$, ref$, len$, results$ = [];
-      for (i$ = 0, len$ = (ref$ = args).length; i$ < len$; ++i$) {
-        arg = ref$[i$];
-        results$.push(arg + toString$.call(arg).slice(8, -1));
-      }
-      return results$;
-    }()).join('');
-    return memo[key] = key in memo
-      ? memo[key]
-      : f.apply(null, args);
-  };
-};
-module.exports = {
-  curry: curry,
-  flip: flip,
-  fix: fix,
-  apply: apply,
-  over: over,
-  memoize: memoize
-};
-function curry$(f, bound){
-  var context,
-  _curry = function(args) {
-    return f.length > 1 ? function(){
-      var params = args ? args.concat() : [];
-      context = bound ? context || this : this;
-      return params.push.apply(params, arguments) <
-          f.length && arguments.length ?
-        _curry.call(context, params) : f.apply(context, params);
-    } : f;
-  };
-  return _curry();
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/List.js b/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/List.js
deleted file mode 100644 (file)
index 5790816..0000000
+++ /dev/null
@@ -1,686 +0,0 @@
-// Generated by LiveScript 1.4.0
-var each, map, compact, filter, reject, partition, find, head, first, tail, last, initial, empty, reverse, unique, uniqueBy, fold, foldl, fold1, foldl1, foldr, foldr1, unfoldr, concat, concatMap, flatten, difference, intersection, union, countBy, groupBy, andList, orList, any, all, sort, sortWith, sortBy, sum, product, mean, average, maximum, minimum, maximumBy, minimumBy, scan, scanl, scan1, scanl1, scanr, scanr1, slice, take, drop, splitAt, takeWhile, dropWhile, span, breakList, zip, zipWith, zipAll, zipAllWith, at, elemIndex, elemIndices, findIndex, findIndices, toString$ = {}.toString, slice$ = [].slice;
-each = curry$(function(f, xs){
-  var i$, len$, x;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    f(x);
-  }
-  return xs;
-});
-map = curry$(function(f, xs){
-  var i$, len$, x, results$ = [];
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    results$.push(f(x));
-  }
-  return results$;
-});
-compact = function(xs){
-  var i$, len$, x, results$ = [];
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    if (x) {
-      results$.push(x);
-    }
-  }
-  return results$;
-};
-filter = curry$(function(f, xs){
-  var i$, len$, x, results$ = [];
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    if (f(x)) {
-      results$.push(x);
-    }
-  }
-  return results$;
-});
-reject = curry$(function(f, xs){
-  var i$, len$, x, results$ = [];
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    if (!f(x)) {
-      results$.push(x);
-    }
-  }
-  return results$;
-});
-partition = curry$(function(f, xs){
-  var passed, failed, i$, len$, x;
-  passed = [];
-  failed = [];
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    (f(x) ? passed : failed).push(x);
-  }
-  return [passed, failed];
-});
-find = curry$(function(f, xs){
-  var i$, len$, x;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    if (f(x)) {
-      return x;
-    }
-  }
-});
-head = first = function(xs){
-  return xs[0];
-};
-tail = function(xs){
-  if (!xs.length) {
-    return;
-  }
-  return xs.slice(1);
-};
-last = function(xs){
-  return xs[xs.length - 1];
-};
-initial = function(xs){
-  if (!xs.length) {
-    return;
-  }
-  return xs.slice(0, -1);
-};
-empty = function(xs){
-  return !xs.length;
-};
-reverse = function(xs){
-  return xs.concat().reverse();
-};
-unique = function(xs){
-  var result, i$, len$, x;
-  result = [];
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    if (!in$(x, result)) {
-      result.push(x);
-    }
-  }
-  return result;
-};
-uniqueBy = curry$(function(f, xs){
-  var seen, i$, len$, x, val, results$ = [];
-  seen = [];
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    val = f(x);
-    if (in$(val, seen)) {
-      continue;
-    }
-    seen.push(val);
-    results$.push(x);
-  }
-  return results$;
-});
-fold = foldl = curry$(function(f, memo, xs){
-  var i$, len$, x;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    memo = f(memo, x);
-  }
-  return memo;
-});
-fold1 = foldl1 = curry$(function(f, xs){
-  return fold(f, xs[0], xs.slice(1));
-});
-foldr = curry$(function(f, memo, xs){
-  var i$, x;
-  for (i$ = xs.length - 1; i$ >= 0; --i$) {
-    x = xs[i$];
-    memo = f(x, memo);
-  }
-  return memo;
-});
-foldr1 = curry$(function(f, xs){
-  return foldr(f, xs[xs.length - 1], xs.slice(0, -1));
-});
-unfoldr = curry$(function(f, b){
-  var result, x, that;
-  result = [];
-  x = b;
-  while ((that = f(x)) != null) {
-    result.push(that[0]);
-    x = that[1];
-  }
-  return result;
-});
-concat = function(xss){
-  return [].concat.apply([], xss);
-};
-concatMap = curry$(function(f, xs){
-  var x;
-  return [].concat.apply([], (function(){
-    var i$, ref$, len$, results$ = [];
-    for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
-      x = ref$[i$];
-      results$.push(f(x));
-    }
-    return results$;
-  }()));
-});
-flatten = function(xs){
-  var x;
-  return [].concat.apply([], (function(){
-    var i$, ref$, len$, results$ = [];
-    for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
-      x = ref$[i$];
-      if (toString$.call(x).slice(8, -1) === 'Array') {
-        results$.push(flatten(x));
-      } else {
-        results$.push(x);
-      }
-    }
-    return results$;
-  }()));
-};
-difference = function(xs){
-  var yss, results, i$, len$, x, j$, len1$, ys;
-  yss = slice$.call(arguments, 1);
-  results = [];
-  outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {
-      ys = yss[j$];
-      if (in$(x, ys)) {
-        continue outer;
-      }
-    }
-    results.push(x);
-  }
-  return results;
-};
-intersection = function(xs){
-  var yss, results, i$, len$, x, j$, len1$, ys;
-  yss = slice$.call(arguments, 1);
-  results = [];
-  outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {
-      ys = yss[j$];
-      if (!in$(x, ys)) {
-        continue outer;
-      }
-    }
-    results.push(x);
-  }
-  return results;
-};
-union = function(){
-  var xss, results, i$, len$, xs, j$, len1$, x;
-  xss = slice$.call(arguments);
-  results = [];
-  for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
-    xs = xss[i$];
-    for (j$ = 0, len1$ = xs.length; j$ < len1$; ++j$) {
-      x = xs[j$];
-      if (!in$(x, results)) {
-        results.push(x);
-      }
-    }
-  }
-  return results;
-};
-countBy = curry$(function(f, xs){
-  var results, i$, len$, x, key;
-  results = {};
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    key = f(x);
-    if (key in results) {
-      results[key] += 1;
-    } else {
-      results[key] = 1;
-    }
-  }
-  return results;
-});
-groupBy = curry$(function(f, xs){
-  var results, i$, len$, x, key;
-  results = {};
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    key = f(x);
-    if (key in results) {
-      results[key].push(x);
-    } else {
-      results[key] = [x];
-    }
-  }
-  return results;
-});
-andList = function(xs){
-  var i$, len$, x;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    if (!x) {
-      return false;
-    }
-  }
-  return true;
-};
-orList = function(xs){
-  var i$, len$, x;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    if (x) {
-      return true;
-    }
-  }
-  return false;
-};
-any = curry$(function(f, xs){
-  var i$, len$, x;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    if (f(x)) {
-      return true;
-    }
-  }
-  return false;
-});
-all = curry$(function(f, xs){
-  var i$, len$, x;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    if (!f(x)) {
-      return false;
-    }
-  }
-  return true;
-});
-sort = function(xs){
-  return xs.concat().sort(function(x, y){
-    if (x > y) {
-      return 1;
-    } else if (x < y) {
-      return -1;
-    } else {
-      return 0;
-    }
-  });
-};
-sortWith = curry$(function(f, xs){
-  return xs.concat().sort(f);
-});
-sortBy = curry$(function(f, xs){
-  return xs.concat().sort(function(x, y){
-    if (f(x) > f(y)) {
-      return 1;
-    } else if (f(x) < f(y)) {
-      return -1;
-    } else {
-      return 0;
-    }
-  });
-});
-sum = function(xs){
-  var result, i$, len$, x;
-  result = 0;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    result += x;
-  }
-  return result;
-};
-product = function(xs){
-  var result, i$, len$, x;
-  result = 1;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    result *= x;
-  }
-  return result;
-};
-mean = average = function(xs){
-  var sum, i$, len$, x;
-  sum = 0;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    x = xs[i$];
-    sum += x;
-  }
-  return sum / xs.length;
-};
-maximum = function(xs){
-  var max, i$, ref$, len$, x;
-  max = xs[0];
-  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
-    x = ref$[i$];
-    if (x > max) {
-      max = x;
-    }
-  }
-  return max;
-};
-minimum = function(xs){
-  var min, i$, ref$, len$, x;
-  min = xs[0];
-  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
-    x = ref$[i$];
-    if (x < min) {
-      min = x;
-    }
-  }
-  return min;
-};
-maximumBy = curry$(function(f, xs){
-  var max, i$, ref$, len$, x;
-  max = xs[0];
-  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
-    x = ref$[i$];
-    if (f(x) > f(max)) {
-      max = x;
-    }
-  }
-  return max;
-});
-minimumBy = curry$(function(f, xs){
-  var min, i$, ref$, len$, x;
-  min = xs[0];
-  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
-    x = ref$[i$];
-    if (f(x) < f(min)) {
-      min = x;
-    }
-  }
-  return min;
-});
-scan = scanl = curry$(function(f, memo, xs){
-  var last, x;
-  last = memo;
-  return [memo].concat((function(){
-    var i$, ref$, len$, results$ = [];
-    for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
-      x = ref$[i$];
-      results$.push(last = f(last, x));
-    }
-    return results$;
-  }()));
-});
-scan1 = scanl1 = curry$(function(f, xs){
-  if (!xs.length) {
-    return;
-  }
-  return scan(f, xs[0], xs.slice(1));
-});
-scanr = curry$(function(f, memo, xs){
-  xs = xs.concat().reverse();
-  return scan(f, memo, xs).reverse();
-});
-scanr1 = curry$(function(f, xs){
-  if (!xs.length) {
-    return;
-  }
-  xs = xs.concat().reverse();
-  return scan(f, xs[0], xs.slice(1)).reverse();
-});
-slice = curry$(function(x, y, xs){
-  return xs.slice(x, y);
-});
-take = curry$(function(n, xs){
-  if (n <= 0) {
-    return xs.slice(0, 0);
-  } else {
-    return xs.slice(0, n);
-  }
-});
-drop = curry$(function(n, xs){
-  if (n <= 0) {
-    return xs;
-  } else {
-    return xs.slice(n);
-  }
-});
-splitAt = curry$(function(n, xs){
-  return [take(n, xs), drop(n, xs)];
-});
-takeWhile = curry$(function(p, xs){
-  var len, i;
-  len = xs.length;
-  if (!len) {
-    return xs;
-  }
-  i = 0;
-  while (i < len && p(xs[i])) {
-    i += 1;
-  }
-  return xs.slice(0, i);
-});
-dropWhile = curry$(function(p, xs){
-  var len, i;
-  len = xs.length;
-  if (!len) {
-    return xs;
-  }
-  i = 0;
-  while (i < len && p(xs[i])) {
-    i += 1;
-  }
-  return xs.slice(i);
-});
-span = curry$(function(p, xs){
-  return [takeWhile(p, xs), dropWhile(p, xs)];
-});
-breakList = curry$(function(p, xs){
-  return span(compose$(p, not$), xs);
-});
-zip = curry$(function(xs, ys){
-  var result, len, i$, len$, i, x;
-  result = [];
-  len = ys.length;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    i = i$;
-    x = xs[i$];
-    if (i === len) {
-      break;
-    }
-    result.push([x, ys[i]]);
-  }
-  return result;
-});
-zipWith = curry$(function(f, xs, ys){
-  var result, len, i$, len$, i, x;
-  result = [];
-  len = ys.length;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    i = i$;
-    x = xs[i$];
-    if (i === len) {
-      break;
-    }
-    result.push(f(x, ys[i]));
-  }
-  return result;
-});
-zipAll = function(){
-  var xss, minLength, i$, len$, xs, ref$, i, lresult$, j$, results$ = [];
-  xss = slice$.call(arguments);
-  minLength = undefined;
-  for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
-    xs = xss[i$];
-    minLength <= (ref$ = xs.length) || (minLength = ref$);
-  }
-  for (i$ = 0; i$ < minLength; ++i$) {
-    i = i$;
-    lresult$ = [];
-    for (j$ = 0, len$ = xss.length; j$ < len$; ++j$) {
-      xs = xss[j$];
-      lresult$.push(xs[i]);
-    }
-    results$.push(lresult$);
-  }
-  return results$;
-};
-zipAllWith = function(f){
-  var xss, minLength, i$, len$, xs, ref$, i, results$ = [];
-  xss = slice$.call(arguments, 1);
-  minLength = undefined;
-  for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
-    xs = xss[i$];
-    minLength <= (ref$ = xs.length) || (minLength = ref$);
-  }
-  for (i$ = 0; i$ < minLength; ++i$) {
-    i = i$;
-    results$.push(f.apply(null, (fn$())));
-  }
-  return results$;
-  function fn$(){
-    var i$, ref$, len$, results$ = [];
-    for (i$ = 0, len$ = (ref$ = xss).length; i$ < len$; ++i$) {
-      xs = ref$[i$];
-      results$.push(xs[i]);
-    }
-    return results$;
-  }
-};
-at = curry$(function(n, xs){
-  if (n < 0) {
-    return xs[xs.length + n];
-  } else {
-    return xs[n];
-  }
-});
-elemIndex = curry$(function(el, xs){
-  var i$, len$, i, x;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    i = i$;
-    x = xs[i$];
-    if (x === el) {
-      return i;
-    }
-  }
-});
-elemIndices = curry$(function(el, xs){
-  var i$, len$, i, x, results$ = [];
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    i = i$;
-    x = xs[i$];
-    if (x === el) {
-      results$.push(i);
-    }
-  }
-  return results$;
-});
-findIndex = curry$(function(f, xs){
-  var i$, len$, i, x;
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    i = i$;
-    x = xs[i$];
-    if (f(x)) {
-      return i;
-    }
-  }
-});
-findIndices = curry$(function(f, xs){
-  var i$, len$, i, x, results$ = [];
-  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
-    i = i$;
-    x = xs[i$];
-    if (f(x)) {
-      results$.push(i);
-    }
-  }
-  return results$;
-});
-module.exports = {
-  each: each,
-  map: map,
-  filter: filter,
-  compact: compact,
-  reject: reject,
-  partition: partition,
-  find: find,
-  head: head,
-  first: first,
-  tail: tail,
-  last: last,
-  initial: initial,
-  empty: empty,
-  reverse: reverse,
-  difference: difference,
-  intersection: intersection,
-  union: union,
-  countBy: countBy,
-  groupBy: groupBy,
-  fold: fold,
-  fold1: fold1,
-  foldl: foldl,
-  foldl1: foldl1,
-  foldr: foldr,
-  foldr1: foldr1,
-  unfoldr: unfoldr,
-  andList: andList,
-  orList: orList,
-  any: any,
-  all: all,
-  unique: unique,
-  uniqueBy: uniqueBy,
-  sort: sort,
-  sortWith: sortWith,
-  sortBy: sortBy,
-  sum: sum,
-  product: product,
-  mean: mean,
-  average: average,
-  concat: concat,
-  concatMap: concatMap,
-  flatten: flatten,
-  maximum: maximum,
-  minimum: minimum,
-  maximumBy: maximumBy,
-  minimumBy: minimumBy,
-  scan: scan,
-  scan1: scan1,
-  scanl: scanl,
-  scanl1: scanl1,
-  scanr: scanr,
-  scanr1: scanr1,
-  slice: slice,
-  take: take,
-  drop: drop,
-  splitAt: splitAt,
-  takeWhile: takeWhile,
-  dropWhile: dropWhile,
-  span: span,
-  breakList: breakList,
-  zip: zip,
-  zipWith: zipWith,
-  zipAll: zipAll,
-  zipAllWith: zipAllWith,
-  at: at,
-  elemIndex: elemIndex,
-  elemIndices: elemIndices,
-  findIndex: findIndex,
-  findIndices: findIndices
-};
-function curry$(f, bound){
-  var context,
-  _curry = function(args) {
-    return f.length > 1 ? function(){
-      var params = args ? args.concat() : [];
-      context = bound ? context || this : this;
-      return params.push.apply(params, arguments) <
-          f.length && arguments.length ?
-        _curry.call(context, params) : f.apply(context, params);
-    } : f;
-  };
-  return _curry();
-}
-function in$(x, xs){
-  var i = -1, l = xs.length >>> 0;
-  while (++i < l) if (x === xs[i]) return true;
-  return false;
-}
-function compose$() {
-  var functions = arguments;
-  return function() {
-    var i, result;
-    result = functions[0].apply(this, arguments);
-    for (i = 1; i < functions.length; ++i) {
-      result = functions[i](result);
-    }
-    return result;
-  };
-}
-function not$(x){ return !x; }
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Num.js b/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Num.js
deleted file mode 100644 (file)
index 0e25be7..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-// Generated by LiveScript 1.4.0
-var max, min, negate, abs, signum, quot, rem, div, mod, recip, pi, tau, exp, sqrt, ln, pow, sin, tan, cos, asin, acos, atan, atan2, truncate, round, ceiling, floor, isItNaN, even, odd, gcd, lcm;
-max = curry$(function(x$, y$){
-  return x$ > y$ ? x$ : y$;
-});
-min = curry$(function(x$, y$){
-  return x$ < y$ ? x$ : y$;
-});
-negate = function(x){
-  return -x;
-};
-abs = Math.abs;
-signum = function(x){
-  if (x < 0) {
-    return -1;
-  } else if (x > 0) {
-    return 1;
-  } else {
-    return 0;
-  }
-};
-quot = curry$(function(x, y){
-  return ~~(x / y);
-});
-rem = curry$(function(x$, y$){
-  return x$ % y$;
-});
-div = curry$(function(x, y){
-  return Math.floor(x / y);
-});
-mod = curry$(function(x$, y$){
-  var ref$;
-  return (((x$) % (ref$ = y$) + ref$) % ref$);
-});
-recip = (function(it){
-  return 1 / it;
-});
-pi = Math.PI;
-tau = pi * 2;
-exp = Math.exp;
-sqrt = Math.sqrt;
-ln = Math.log;
-pow = curry$(function(x$, y$){
-  return Math.pow(x$, y$);
-});
-sin = Math.sin;
-tan = Math.tan;
-cos = Math.cos;
-asin = Math.asin;
-acos = Math.acos;
-atan = Math.atan;
-atan2 = curry$(function(x, y){
-  return Math.atan2(x, y);
-});
-truncate = function(x){
-  return ~~x;
-};
-round = Math.round;
-ceiling = Math.ceil;
-floor = Math.floor;
-isItNaN = function(x){
-  return x !== x;
-};
-even = function(x){
-  return x % 2 === 0;
-};
-odd = function(x){
-  return x % 2 !== 0;
-};
-gcd = curry$(function(x, y){
-  var z;
-  x = Math.abs(x);
-  y = Math.abs(y);
-  while (y !== 0) {
-    z = x % y;
-    x = y;
-    y = z;
-  }
-  return x;
-});
-lcm = curry$(function(x, y){
-  return Math.abs(Math.floor(x / gcd(x, y) * y));
-});
-module.exports = {
-  max: max,
-  min: min,
-  negate: negate,
-  abs: abs,
-  signum: signum,
-  quot: quot,
-  rem: rem,
-  div: div,
-  mod: mod,
-  recip: recip,
-  pi: pi,
-  tau: tau,
-  exp: exp,
-  sqrt: sqrt,
-  ln: ln,
-  pow: pow,
-  sin: sin,
-  tan: tan,
-  cos: cos,
-  acos: acos,
-  asin: asin,
-  atan: atan,
-  atan2: atan2,
-  truncate: truncate,
-  round: round,
-  ceiling: ceiling,
-  floor: floor,
-  isItNaN: isItNaN,
-  even: even,
-  odd: odd,
-  gcd: gcd,
-  lcm: lcm
-};
-function curry$(f, bound){
-  var context,
-  _curry = function(args) {
-    return f.length > 1 ? function(){
-      var params = args ? args.concat() : [];
-      context = bound ? context || this : this;
-      return params.push.apply(params, arguments) <
-          f.length && arguments.length ?
-        _curry.call(context, params) : f.apply(context, params);
-    } : f;
-  };
-  return _curry();
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Obj.js b/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Obj.js
deleted file mode 100644 (file)
index f0a921f..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-// Generated by LiveScript 1.4.0
-var values, keys, pairsToObj, objToPairs, listsToObj, objToLists, empty, each, map, compact, filter, reject, partition, find;
-values = function(object){
-  var i$, x, results$ = [];
-  for (i$ in object) {
-    x = object[i$];
-    results$.push(x);
-  }
-  return results$;
-};
-keys = function(object){
-  var x, results$ = [];
-  for (x in object) {
-    results$.push(x);
-  }
-  return results$;
-};
-pairsToObj = function(object){
-  var i$, len$, x, resultObj$ = {};
-  for (i$ = 0, len$ = object.length; i$ < len$; ++i$) {
-    x = object[i$];
-    resultObj$[x[0]] = x[1];
-  }
-  return resultObj$;
-};
-objToPairs = function(object){
-  var key, value, results$ = [];
-  for (key in object) {
-    value = object[key];
-    results$.push([key, value]);
-  }
-  return results$;
-};
-listsToObj = curry$(function(keys, values){
-  var i$, len$, i, key, resultObj$ = {};
-  for (i$ = 0, len$ = keys.length; i$ < len$; ++i$) {
-    i = i$;
-    key = keys[i$];
-    resultObj$[key] = values[i];
-  }
-  return resultObj$;
-});
-objToLists = function(object){
-  var keys, values, key, value;
-  keys = [];
-  values = [];
-  for (key in object) {
-    value = object[key];
-    keys.push(key);
-    values.push(value);
-  }
-  return [keys, values];
-};
-empty = function(object){
-  var x;
-  for (x in object) {
-    return false;
-  }
-  return true;
-};
-each = curry$(function(f, object){
-  var i$, x;
-  for (i$ in object) {
-    x = object[i$];
-    f(x);
-  }
-  return object;
-});
-map = curry$(function(f, object){
-  var k, x, resultObj$ = {};
-  for (k in object) {
-    x = object[k];
-    resultObj$[k] = f(x);
-  }
-  return resultObj$;
-});
-compact = function(object){
-  var k, x, resultObj$ = {};
-  for (k in object) {
-    x = object[k];
-    if (x) {
-      resultObj$[k] = x;
-    }
-  }
-  return resultObj$;
-};
-filter = curry$(function(f, object){
-  var k, x, resultObj$ = {};
-  for (k in object) {
-    x = object[k];
-    if (f(x)) {
-      resultObj$[k] = x;
-    }
-  }
-  return resultObj$;
-});
-reject = curry$(function(f, object){
-  var k, x, resultObj$ = {};
-  for (k in object) {
-    x = object[k];
-    if (!f(x)) {
-      resultObj$[k] = x;
-    }
-  }
-  return resultObj$;
-});
-partition = curry$(function(f, object){
-  var passed, failed, k, x;
-  passed = {};
-  failed = {};
-  for (k in object) {
-    x = object[k];
-    (f(x) ? passed : failed)[k] = x;
-  }
-  return [passed, failed];
-});
-find = curry$(function(f, object){
-  var i$, x;
-  for (i$ in object) {
-    x = object[i$];
-    if (f(x)) {
-      return x;
-    }
-  }
-});
-module.exports = {
-  values: values,
-  keys: keys,
-  pairsToObj: pairsToObj,
-  objToPairs: objToPairs,
-  listsToObj: listsToObj,
-  objToLists: objToLists,
-  empty: empty,
-  each: each,
-  map: map,
-  filter: filter,
-  compact: compact,
-  reject: reject,
-  partition: partition,
-  find: find
-};
-function curry$(f, bound){
-  var context,
-  _curry = function(args) {
-    return f.length > 1 ? function(){
-      var params = args ? args.concat() : [];
-      context = bound ? context || this : this;
-      return params.push.apply(params, arguments) <
-          f.length && arguments.length ?
-        _curry.call(context, params) : f.apply(context, params);
-    } : f;
-  };
-  return _curry();
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Str.js b/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/Str.js
deleted file mode 100644 (file)
index eb9a1ac..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-// Generated by LiveScript 1.4.0
-var split, join, lines, unlines, words, unwords, chars, unchars, reverse, repeat, capitalize, camelize, dasherize;
-split = curry$(function(sep, str){
-  return str.split(sep);
-});
-join = curry$(function(sep, xs){
-  return xs.join(sep);
-});
-lines = function(str){
-  if (!str.length) {
-    return [];
-  }
-  return str.split('\n');
-};
-unlines = function(it){
-  return it.join('\n');
-};
-words = function(str){
-  if (!str.length) {
-    return [];
-  }
-  return str.split(/[ ]+/);
-};
-unwords = function(it){
-  return it.join(' ');
-};
-chars = function(it){
-  return it.split('');
-};
-unchars = function(it){
-  return it.join('');
-};
-reverse = function(str){
-  return str.split('').reverse().join('');
-};
-repeat = curry$(function(n, str){
-  var result, i$;
-  result = '';
-  for (i$ = 0; i$ < n; ++i$) {
-    result += str;
-  }
-  return result;
-});
-capitalize = function(str){
-  return str.charAt(0).toUpperCase() + str.slice(1);
-};
-camelize = function(it){
-  return it.replace(/[-_]+(.)?/g, function(arg$, c){
-    return (c != null ? c : '').toUpperCase();
-  });
-};
-dasherize = function(str){
-  return str.replace(/([^-A-Z])([A-Z]+)/g, function(arg$, lower, upper){
-    return lower + "-" + (upper.length > 1
-      ? upper
-      : upper.toLowerCase());
-  }).replace(/^([A-Z]+)/, function(arg$, upper){
-    if (upper.length > 1) {
-      return upper + "-";
-    } else {
-      return upper.toLowerCase();
-    }
-  });
-};
-module.exports = {
-  split: split,
-  join: join,
-  lines: lines,
-  unlines: unlines,
-  words: words,
-  unwords: unwords,
-  chars: chars,
-  unchars: unchars,
-  reverse: reverse,
-  repeat: repeat,
-  capitalize: capitalize,
-  camelize: camelize,
-  dasherize: dasherize
-};
-function curry$(f, bound){
-  var context,
-  _curry = function(args) {
-    return f.length > 1 ? function(){
-      var params = args ? args.concat() : [];
-      context = bound ? context || this : this;
-      return params.push.apply(params, arguments) <
-          f.length && arguments.length ?
-        _curry.call(context, params) : f.apply(context, params);
-    } : f;
-  };
-  return _curry();
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/index.js b/signaling_server/service/node_modules/express/node_modules/prelude-ls/lib/index.js
deleted file mode 100644 (file)
index 391cb2e..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-// Generated by LiveScript 1.4.0
-var Func, List, Obj, Str, Num, id, isType, replicate, prelude, toString$ = {}.toString;
-Func = require('./Func.js');
-List = require('./List.js');
-Obj = require('./Obj.js');
-Str = require('./Str.js');
-Num = require('./Num.js');
-id = function(x){
-  return x;
-};
-isType = curry$(function(type, x){
-  return toString$.call(x).slice(8, -1) === type;
-});
-replicate = curry$(function(n, x){
-  var i$, results$ = [];
-  for (i$ = 0; i$ < n; ++i$) {
-    results$.push(x);
-  }
-  return results$;
-});
-Str.empty = List.empty;
-Str.slice = List.slice;
-Str.take = List.take;
-Str.drop = List.drop;
-Str.splitAt = List.splitAt;
-Str.takeWhile = List.takeWhile;
-Str.dropWhile = List.dropWhile;
-Str.span = List.span;
-Str.breakStr = List.breakList;
-prelude = {
-  Func: Func,
-  List: List,
-  Obj: Obj,
-  Str: Str,
-  Num: Num,
-  id: id,
-  isType: isType,
-  replicate: replicate
-};
-prelude.each = List.each;
-prelude.map = List.map;
-prelude.filter = List.filter;
-prelude.compact = List.compact;
-prelude.reject = List.reject;
-prelude.partition = List.partition;
-prelude.find = List.find;
-prelude.head = List.head;
-prelude.first = List.first;
-prelude.tail = List.tail;
-prelude.last = List.last;
-prelude.initial = List.initial;
-prelude.empty = List.empty;
-prelude.reverse = List.reverse;
-prelude.difference = List.difference;
-prelude.intersection = List.intersection;
-prelude.union = List.union;
-prelude.countBy = List.countBy;
-prelude.groupBy = List.groupBy;
-prelude.fold = List.fold;
-prelude.foldl = List.foldl;
-prelude.fold1 = List.fold1;
-prelude.foldl1 = List.foldl1;
-prelude.foldr = List.foldr;
-prelude.foldr1 = List.foldr1;
-prelude.unfoldr = List.unfoldr;
-prelude.andList = List.andList;
-prelude.orList = List.orList;
-prelude.any = List.any;
-prelude.all = List.all;
-prelude.unique = List.unique;
-prelude.uniqueBy = List.uniqueBy;
-prelude.sort = List.sort;
-prelude.sortWith = List.sortWith;
-prelude.sortBy = List.sortBy;
-prelude.sum = List.sum;
-prelude.product = List.product;
-prelude.mean = List.mean;
-prelude.average = List.average;
-prelude.concat = List.concat;
-prelude.concatMap = List.concatMap;
-prelude.flatten = List.flatten;
-prelude.maximum = List.maximum;
-prelude.minimum = List.minimum;
-prelude.maximumBy = List.maximumBy;
-prelude.minimumBy = List.minimumBy;
-prelude.scan = List.scan;
-prelude.scanl = List.scanl;
-prelude.scan1 = List.scan1;
-prelude.scanl1 = List.scanl1;
-prelude.scanr = List.scanr;
-prelude.scanr1 = List.scanr1;
-prelude.slice = List.slice;
-prelude.take = List.take;
-prelude.drop = List.drop;
-prelude.splitAt = List.splitAt;
-prelude.takeWhile = List.takeWhile;
-prelude.dropWhile = List.dropWhile;
-prelude.span = List.span;
-prelude.breakList = List.breakList;
-prelude.zip = List.zip;
-prelude.zipWith = List.zipWith;
-prelude.zipAll = List.zipAll;
-prelude.zipAllWith = List.zipAllWith;
-prelude.at = List.at;
-prelude.elemIndex = List.elemIndex;
-prelude.elemIndices = List.elemIndices;
-prelude.findIndex = List.findIndex;
-prelude.findIndices = List.findIndices;
-prelude.apply = Func.apply;
-prelude.curry = Func.curry;
-prelude.flip = Func.flip;
-prelude.fix = Func.fix;
-prelude.over = Func.over;
-prelude.split = Str.split;
-prelude.join = Str.join;
-prelude.lines = Str.lines;
-prelude.unlines = Str.unlines;
-prelude.words = Str.words;
-prelude.unwords = Str.unwords;
-prelude.chars = Str.chars;
-prelude.unchars = Str.unchars;
-prelude.repeat = Str.repeat;
-prelude.capitalize = Str.capitalize;
-prelude.camelize = Str.camelize;
-prelude.dasherize = Str.dasherize;
-prelude.values = Obj.values;
-prelude.keys = Obj.keys;
-prelude.pairsToObj = Obj.pairsToObj;
-prelude.objToPairs = Obj.objToPairs;
-prelude.listsToObj = Obj.listsToObj;
-prelude.objToLists = Obj.objToLists;
-prelude.max = Num.max;
-prelude.min = Num.min;
-prelude.negate = Num.negate;
-prelude.abs = Num.abs;
-prelude.signum = Num.signum;
-prelude.quot = Num.quot;
-prelude.rem = Num.rem;
-prelude.div = Num.div;
-prelude.mod = Num.mod;
-prelude.recip = Num.recip;
-prelude.pi = Num.pi;
-prelude.tau = Num.tau;
-prelude.exp = Num.exp;
-prelude.sqrt = Num.sqrt;
-prelude.ln = Num.ln;
-prelude.pow = Num.pow;
-prelude.sin = Num.sin;
-prelude.tan = Num.tan;
-prelude.cos = Num.cos;
-prelude.acos = Num.acos;
-prelude.asin = Num.asin;
-prelude.atan = Num.atan;
-prelude.atan2 = Num.atan2;
-prelude.truncate = Num.truncate;
-prelude.round = Num.round;
-prelude.ceiling = Num.ceiling;
-prelude.floor = Num.floor;
-prelude.isItNaN = Num.isItNaN;
-prelude.even = Num.even;
-prelude.odd = Num.odd;
-prelude.gcd = Num.gcd;
-prelude.lcm = Num.lcm;
-prelude.VERSION = '1.1.2';
-module.exports = prelude;
-function curry$(f, bound){
-  var context,
-  _curry = function(args) {
-    return f.length > 1 ? function(){
-      var params = args ? args.concat() : [];
-      context = bound ? context || this : this;
-      return params.push.apply(params, arguments) <
-          f.length && arguments.length ?
-        _curry.call(context, params) : f.apply(context, params);
-    } : f;
-  };
-  return _curry();
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/prelude-ls/package.json b/signaling_server/service/node_modules/express/node_modules/prelude-ls/package.json
deleted file mode 100644 (file)
index 1c483ab..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-{
-  "_from": "prelude-ls@~1.1.0",
-  "_id": "prelude-ls@1.1.2",
-  "_inBundle": false,
-  "_integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
-  "_location": "/prelude-ls",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "prelude-ls@~1.1.0",
-    "name": "prelude-ls",
-    "escapedName": "prelude-ls",
-    "rawSpec": "~1.1.0",
-    "saveSpec": null,
-    "fetchSpec": "~1.1.0"
-  },
-  "_requiredBy": [
-    "/eslint/levn",
-    "/eslint/optionator",
-    "/grunt-eslint/optionator",
-    "/levn",
-    "/optionator",
-    "/type-check"
-  ],
-  "_resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-  "_shasum": "21932a549f5e52ffd9a827f570e04be62a97da54",
-  "_spec": "prelude-ls@~1.1.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/optionator",
-  "author": {
-    "name": "George Zahariev",
-    "email": "z@georgezahariev.com"
-  },
-  "bugs": {
-    "url": "https://github.com/gkz/prelude-ls/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "prelude.ls is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.",
-  "devDependencies": {
-    "browserify": "~3.24.13",
-    "istanbul": "~0.2.4",
-    "livescript": "~1.4.0",
-    "mocha": "~2.2.4",
-    "sinon": "~1.10.2",
-    "uglify-js": "~2.4.12"
-  },
-  "engines": {
-    "node": ">= 0.8.0"
-  },
-  "files": [
-    "lib/",
-    "README.md",
-    "LICENSE"
-  ],
-  "homepage": "http://preludels.com",
-  "keywords": [
-    "prelude",
-    "livescript",
-    "utility",
-    "ls",
-    "coffeescript",
-    "javascript",
-    "library",
-    "functional",
-    "array",
-    "list",
-    "object",
-    "string"
-  ],
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "https://raw.github.com/gkz/prelude-ls/master/LICENSE"
-    }
-  ],
-  "main": "lib/",
-  "name": "prelude-ls",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/gkz/prelude-ls.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "1.1.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/.jshintrc b/signaling_server/service/node_modules/express/node_modules/promise/.jshintrc
deleted file mode 100644 (file)
index 47c256f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "asi": true,
-  "node": true,
-  "strict": true
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/.npmignore b/signaling_server/service/node_modules/express/node_modules/promise/.npmignore
deleted file mode 100644 (file)
index ad5be4a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-components
-node_modules
-test
-.gitignore
-.travis.yml
-component.json
-coverage
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/LICENSE b/signaling_server/service/node_modules/express/node_modules/promise/LICENSE
deleted file mode 100644 (file)
index 7a1f763..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2014 Forbes Lindesay
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/Readme.md b/signaling_server/service/node_modules/express/node_modules/promise/Readme.md
deleted file mode 100644 (file)
index 9e281a7..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-<a href="https://promisesaplus.com/"><img src="https://promisesaplus.com/assets/logo-small.png" align="right" /></a>
-# promise
-
-This is a simple implementation of Promises.  It is a super set of ES6 Promises designed to have readable, performant code and to provide just the extensions that are absolutely necessary for using promises today.
-
-For detailed tutorials on its use, see www.promisejs.org
-
-**N.B.** This promise exposes internals via underscore (`_`) prefixed properties.  If you use these, your code will break with each new release.
-
-[![travis][travis-image]][travis-url]
-[![dep][dep-image]][dep-url]
-[![npm][npm-image]][npm-url]
-[![downloads][downloads-image]][downloads-url]
-
-[travis-image]: https://img.shields.io/travis/then/promise.svg?style=flat
-[travis-url]: https://travis-ci.org/then/promise
-[dep-image]: https://img.shields.io/david/then/promise.svg?style=flat
-[dep-url]: https://david-dm.org/then/promise
-[npm-image]: https://img.shields.io/npm/v/promise.svg?style=flat
-[npm-url]: https://npmjs.org/package/promise
-[downloads-image]: https://img.shields.io/npm/dm/promise.svg?style=flat
-[downloads-url]: https://npmjs.org/package/promise
-
-## Installation
-
-**Server:**
-
-    $ npm install promise
-
-**Client:**
-
-You can use browserify on the client, or use the pre-compiled script that acts as a polyfill.
-
-```html
-<script src="https://www.promisejs.org/polyfills/promise-6.1.0.js"></script>
-```
-
-Note that the [es5-shim](https://github.com/es-shims/es5-shim) must be loaded before this library to support browsers pre IE9.
-
-```html
-<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/3.4.0/es5-shim.min.js"></script>
-```
-
-## Usage
-
-The example below shows how you can load the promise library (in a way that works on both client and server using node or browserify).  It then demonstrates creating a promise from scratch.  You simply call `new Promise(fn)`.  There is a complete specification for what is returned by this method in [Promises/A+](http://promises-aplus.github.com/promises-spec/).
-
-```javascript
-var Promise = require('promise');
-
-var promise = new Promise(function (resolve, reject) {
-  get('http://www.google.com', function (err, res) {
-    if (err) reject(err);
-    else resolve(res);
-  });
-});
-```
-
-If you need [domains](https://iojs.org/api/domain.html) support, you should instead use:
-
-```js
-var Promise = require('promise/domains');
-```
-
-If you are in an environment that implements `setImmediate` and don't want the optimisations provided by asap, you can use:
-
-```js
-var Promise = require('promise/setimmediate');
-```
-
-If you only want part of the features, e.g. just a pure ES6 polyfill:
-
-```js
-var Promise = require('promise/lib/es6-extensions');
-// or require('promise/domains/es6-extensions');
-// or require('promise/setimmediate/es6-extensions');
-```
-
-## Unhandled Rejections
-
-By default, promises silence any unhandled rejections.
-
-You can enable logging of unhandled ReferenceErrors and TypeErrors via:
-
-```js
-require('promise/lib/rejection-tracking').enable();
-```
-
-Due to the performance cost, you should only do this during development.
-
-You can enable logging of all unhandled rejections if you need to debug an exception you think is being swallowed by promises:
-
-```js
-require('promise/lib/rejection-tracking').enable(
-  {allRejections: true}
-);
-```
-
-Due to the high probability of false positives, I only recommend using this when debugging specific issues that you think may be being swallowed.  For the preferred debugging method, see `Promise#done(onFulfilled, onRejected)`.
-
-`rejection-tracking.enable(options)` takes the following options:
-
- - allRejections (`boolean`) - track all exceptions, not just reference errors and type errors.  Note that this has a high probability of resulting in false positives if your code loads data optimisticly
- - whitelist (`Array<ErrorConstructor>`) - this defaults to `[ReferenceError, TypeError]` but you can override it with your own list of error constructors to track.
- - `onUnhandled(id, error)` and `onHandled(id, error)` - you can use these to provide your own customised display for errors.  Note that if possible you should indicate that the error was a false positive if `onHandled` is called.  `onHandled` is only called if `onUnhandled` has already been called.
-
-To reduce the chance of false-positives there is a delay of up to 2 seconds before errors are logged.  This means that if you attach an error handler within 2 seconds, it won't be logged as a false positive.  ReferenceErrors and TypeErrors are only subject to a 100ms delay due to the higher likelihood that the error is due to programmer error.
-
-## API
-
-Before all examples, you will need:
-
-```js
-var Promise = require('promise');
-```
-
-### new Promise(resolver)
-
-This creates and returns a new promise.  `resolver` must be a function.  The `resolver` function is passed two arguments:
-
- 1. `resolve` should be called with a single argument.  If it is called with a non-promise value then the promise is fulfilled with that value.  If it is called with a promise (A) then the returned promise takes on the state of that new promise (A).
- 2. `reject` should be called with a single argument.  The returned promise will be rejected with that argument.
-
-### Static Functions
-
-  These methods are invoked by calling `Promise.methodName`.
-
-#### Promise.resolve(value)
-
-(deprecated aliases: `Promise.from(value)`, `Promise.cast(value)`)
-
-Converts values and foreign promises into Promises/A+ promises.  If you pass it a value then it returns a Promise for that value.  If you pass it something that is close to a promise (such as a jQuery attempt at a promise) it returns a Promise that takes on the state of `value` (rejected or fulfilled).
-
-#### Promise.reject(value)
-
-Returns a rejected promise with the given value.
-
-#### Promise.all(array)
-
-Returns a promise for an array.  If it is called with a single argument that `Array.isArray` then this returns a promise for a copy of that array with any promises replaced by their fulfilled values.  e.g.
-
-```js
-Promise.all([Promise.resolve('a'), 'b', Promise.resolve('c')])
-  .then(function (res) {
-    assert(res[0] === 'a')
-    assert(res[1] === 'b')
-    assert(res[2] === 'c')
-  })
-```
-
-#### Promise.denodeify(fn)
-
-_Non Standard_
-
-Takes a function which accepts a node style callback and returns a new function that returns a promise instead.
-
-e.g.
-
-```javascript
-var fs = require('fs')
-
-var read = Promise.denodeify(fs.readFile)
-var write = Promise.denodeify(fs.writeFile)
-
-var p = read('foo.json', 'utf8')
-  .then(function (str) {
-    return write('foo.json', JSON.stringify(JSON.parse(str), null, '  '), 'utf8')
-  })
-```
-
-#### Promise.nodeify(fn)
-
-_Non Standard_
-
-The twin to `denodeify` is useful when you want to export an API that can be used by people who haven't learnt about the brilliance of promises yet.
-
-```javascript
-module.exports = Promise.nodeify(awesomeAPI)
-function awesomeAPI(a, b) {
-  return download(a, b)
-}
-```
-
-If the last argument passed to `module.exports` is a function, then it will be treated like a node.js callback and not parsed on to the child function, otherwise the API will just return a promise.
-
-### Prototype Methods
-
-These methods are invoked on a promise instance by calling `myPromise.methodName`
-
-### Promise#then(onFulfilled, onRejected)
-
-This method follows the [Promises/A+ spec](http://promises-aplus.github.io/promises-spec/).  It explains things very clearly so I recommend you read it.
-
-Either `onFulfilled` or `onRejected` will be called and they will not be called more than once.  They will be passed a single argument and will always be called asynchronously (in the next turn of the event loop).
-
-If the promise is fulfilled then `onFulfilled` is called.  If the promise is rejected then `onRejected` is called.
-
-The call to `.then` also returns a promise.  If the handler that is called returns a promise, the promise returned by `.then` takes on the state of that returned promise.  If the handler that is called returns a value that is not a promise, the promise returned by `.then` will be fulfilled with that value. If the handler that is called throws an exception then the promise returned by `.then` is rejected with that exception.
-
-#### Promise#catch(onRejected)
-
-Sugar for `Promise#then(null, onRejected)`, to mirror `catch` in synchronous code.
-
-#### Promise#done(onFulfilled, onRejected)
-
-_Non Standard_
-
-The same semantics as `.then` except that it does not return a promise and any exceptions are re-thrown so that they can be logged (crashing the application in non-browser environments)
-
-#### Promise#nodeify(callback)
-
-_Non Standard_
-
-If `callback` is `null` or `undefined` it just returns `this`.  If `callback` is a function it is called with rejection reason as the first argument and result as the second argument (as per the node.js convention).
-
-This lets you write API functions that look like:
-
-```javascript
-function awesomeAPI(foo, bar, callback) {
-  return internalAPI(foo, bar)
-    .then(parseResult)
-    .then(null, retryErrors)
-    .nodeify(callback)
-}
-```
-
-People who use typical node.js style callbacks will be able to just pass a callback and get the expected behavior.  The enlightened people can not pass a callback and will get awesome promises.
-
-## License
-
-  MIT
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/build.js b/signaling_server/service/node_modules/express/node_modules/promise/build.js
deleted file mode 100644 (file)
index 1e028e9..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-'use strict';
-
-var fs = require('fs');
-var rimraf = require('rimraf');
-var acorn = require('acorn');
-var walk = require('acorn/dist/walk');
-
-var ids = [];
-var names = {};
-
-function getIdFor(name) {
-  if (name in names) return names[name];
-  var id;
-  do {
-    id = '_' + Math.floor(Math.random() * 100);
-  } while (ids.indexOf(id) !== -1)
-  ids.push(id);
-  names[name] = id;
-  return id;
-}
-
-function fixup(src) {
-  var ast = acorn.parse(src);
-  src = src.split('');
-  walk.simple(ast, {
-    MemberExpression: function (node) {
-      if (node.computed) return;
-      if (node.property.type !== 'Identifier') return;
-      if (node.property.name[0] !== '_') return;
-      replace(node.property, getIdFor(node.property.name));
-    }
-  });
-  function source(node) {
-    return src.slice(node.start, node.end).join('');
-  }
-  function replace(node, str) {
-    for (var i = node.start; i < node.end; i++) {
-      src[i] = '';
-    }
-    src[node.start] = str;
-  }
-  return src.join('');
-}
-rimraf.sync(__dirname + '/lib/');
-fs.mkdirSync(__dirname + '/lib/');
-fs.readdirSync(__dirname + '/src').forEach(function (filename) {
-  var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8');
-  var out = fixup(src);
-  fs.writeFileSync(__dirname + '/lib/' + filename, out);
-});
-
-rimraf.sync(__dirname + '/domains/');
-fs.mkdirSync(__dirname + '/domains/');
-fs.readdirSync(__dirname + '/src').forEach(function (filename) {
-  var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8');
-  var out = fixup(src);
-  out = out.replace(/require\(\'asap\/raw\'\)/g, "require('asap')");
-  fs.writeFileSync(__dirname + '/domains/' + filename, out);
-});
-
-rimraf.sync(__dirname + '/setimmediate/');
-fs.mkdirSync(__dirname + '/setimmediate/');
-fs.readdirSync(__dirname + '/src').forEach(function (filename) {
-  var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8');
-  var out = fixup(src);
-  out = out.replace(/var asap \= require\(\'([a-z\/]+)\'\);/g, '');
-  out = out.replace(/asap/g, "setImmediate");
-  fs.writeFileSync(__dirname + '/setimmediate/' + filename, out);
-});
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/core.js b/signaling_server/service/node_modules/express/node_modules/promise/core.js
deleted file mode 100644 (file)
index 5f332a2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-'use strict';
-
-module.exports = require('./lib/core.js');
-
-console.error('require("promise/core") is deprecated, use require("promise/lib/core") instead.');
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/domains/core.js b/signaling_server/service/node_modules/express/node_modules/promise/domains/core.js
deleted file mode 100644 (file)
index aea4414..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-'use strict';
-
-var asap = require('asap');
-
-function noop() {}
-
-// States:
-//
-// 0 - pending
-// 1 - fulfilled with _value
-// 2 - rejected with _value
-// 3 - adopted the state of another promise, _value
-//
-// once the state is no longer pending (0) it is immutable
-
-// All `_` prefixed properties will be reduced to `_{random number}`
-// at build time to obfuscate them and discourage their use.
-// We don't use symbols or Object.defineProperty to fully hide them
-// because the performance isn't good enough.
-
-
-// to avoid using try/catch inside critical functions, we
-// extract them to here.
-var LAST_ERROR = null;
-var IS_ERROR = {};
-function getThen(obj) {
-  try {
-    return obj.then;
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-
-function tryCallOne(fn, a) {
-  try {
-    return fn(a);
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-function tryCallTwo(fn, a, b) {
-  try {
-    fn(a, b);
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-
-module.exports = Promise;
-
-function Promise(fn) {
-  if (typeof this !== 'object') {
-    throw new TypeError('Promises must be constructed via new');
-  }
-  if (typeof fn !== 'function') {
-    throw new TypeError('Promise constructor\'s argument is not a function');
-  }
-  this._40 = 0;
-  this._65 = 0;
-  this._55 = null;
-  this._72 = null;
-  if (fn === noop) return;
-  doResolve(fn, this);
-}
-Promise._37 = null;
-Promise._87 = null;
-Promise._61 = noop;
-
-Promise.prototype.then = function(onFulfilled, onRejected) {
-  if (this.constructor !== Promise) {
-    return safeThen(this, onFulfilled, onRejected);
-  }
-  var res = new Promise(noop);
-  handle(this, new Handler(onFulfilled, onRejected, res));
-  return res;
-};
-
-function safeThen(self, onFulfilled, onRejected) {
-  return new self.constructor(function (resolve, reject) {
-    var res = new Promise(noop);
-    res.then(resolve, reject);
-    handle(self, new Handler(onFulfilled, onRejected, res));
-  });
-}
-function handle(self, deferred) {
-  while (self._65 === 3) {
-    self = self._55;
-  }
-  if (Promise._37) {
-    Promise._37(self);
-  }
-  if (self._65 === 0) {
-    if (self._40 === 0) {
-      self._40 = 1;
-      self._72 = deferred;
-      return;
-    }
-    if (self._40 === 1) {
-      self._40 = 2;
-      self._72 = [self._72, deferred];
-      return;
-    }
-    self._72.push(deferred);
-    return;
-  }
-  handleResolved(self, deferred);
-}
-
-function handleResolved(self, deferred) {
-  asap(function() {
-    var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected;
-    if (cb === null) {
-      if (self._65 === 1) {
-        resolve(deferred.promise, self._55);
-      } else {
-        reject(deferred.promise, self._55);
-      }
-      return;
-    }
-    var ret = tryCallOne(cb, self._55);
-    if (ret === IS_ERROR) {
-      reject(deferred.promise, LAST_ERROR);
-    } else {
-      resolve(deferred.promise, ret);
-    }
-  });
-}
-function resolve(self, newValue) {
-  // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
-  if (newValue === self) {
-    return reject(
-      self,
-      new TypeError('A promise cannot be resolved with itself.')
-    );
-  }
-  if (
-    newValue &&
-    (typeof newValue === 'object' || typeof newValue === 'function')
-  ) {
-    var then = getThen(newValue);
-    if (then === IS_ERROR) {
-      return reject(self, LAST_ERROR);
-    }
-    if (
-      then === self.then &&
-      newValue instanceof Promise
-    ) {
-      self._65 = 3;
-      self._55 = newValue;
-      finale(self);
-      return;
-    } else if (typeof then === 'function') {
-      doResolve(then.bind(newValue), self);
-      return;
-    }
-  }
-  self._65 = 1;
-  self._55 = newValue;
-  finale(self);
-}
-
-function reject(self, newValue) {
-  self._65 = 2;
-  self._55 = newValue;
-  if (Promise._87) {
-    Promise._87(self, newValue);
-  }
-  finale(self);
-}
-function finale(self) {
-  if (self._40 === 1) {
-    handle(self, self._72);
-    self._72 = null;
-  }
-  if (self._40 === 2) {
-    for (var i = 0; i < self._72.length; i++) {
-      handle(self, self._72[i]);
-    }
-    self._72 = null;
-  }
-}
-
-function Handler(onFulfilled, onRejected, promise){
-  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
-  this.onRejected = typeof onRejected === 'function' ? onRejected : null;
-  this.promise = promise;
-}
-
-/**
- * Take a potentially misbehaving resolver function and make sure
- * onFulfilled and onRejected are only called once.
- *
- * Makes no guarantees about asynchrony.
- */
-function doResolve(fn, promise) {
-  var done = false;
-  var res = tryCallTwo(fn, function (value) {
-    if (done) return;
-    done = true;
-    resolve(promise, value);
-  }, function (reason) {
-    if (done) return;
-    done = true;
-    reject(promise, reason);
-  });
-  if (!done && res === IS_ERROR) {
-    done = true;
-    reject(promise, LAST_ERROR);
-  }
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/domains/done.js b/signaling_server/service/node_modules/express/node_modules/promise/domains/done.js
deleted file mode 100644 (file)
index f879317..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.prototype.done = function (onFulfilled, onRejected) {
-  var self = arguments.length ? this.then.apply(this, arguments) : this;
-  self.then(null, function (err) {
-    setTimeout(function () {
-      throw err;
-    }, 0);
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/domains/es6-extensions.js b/signaling_server/service/node_modules/express/node_modules/promise/domains/es6-extensions.js
deleted file mode 100644 (file)
index 8ab2666..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-'use strict';
-
-//This file contains the ES6 extensions to the core Promises/A+ API
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-
-/* Static Functions */
-
-var TRUE = valuePromise(true);
-var FALSE = valuePromise(false);
-var NULL = valuePromise(null);
-var UNDEFINED = valuePromise(undefined);
-var ZERO = valuePromise(0);
-var EMPTYSTRING = valuePromise('');
-
-function valuePromise(value) {
-  var p = new Promise(Promise._61);
-  p._65 = 1;
-  p._55 = value;
-  return p;
-}
-Promise.resolve = function (value) {
-  if (value instanceof Promise) return value;
-
-  if (value === null) return NULL;
-  if (value === undefined) return UNDEFINED;
-  if (value === true) return TRUE;
-  if (value === false) return FALSE;
-  if (value === 0) return ZERO;
-  if (value === '') return EMPTYSTRING;
-
-  if (typeof value === 'object' || typeof value === 'function') {
-    try {
-      var then = value.then;
-      if (typeof then === 'function') {
-        return new Promise(then.bind(value));
-      }
-    } catch (ex) {
-      return new Promise(function (resolve, reject) {
-        reject(ex);
-      });
-    }
-  }
-  return valuePromise(value);
-};
-
-Promise.all = function (arr) {
-  var args = Array.prototype.slice.call(arr);
-
-  return new Promise(function (resolve, reject) {
-    if (args.length === 0) return resolve([]);
-    var remaining = args.length;
-    function res(i, val) {
-      if (val && (typeof val === 'object' || typeof val === 'function')) {
-        if (val instanceof Promise && val.then === Promise.prototype.then) {
-          while (val._65 === 3) {
-            val = val._55;
-          }
-          if (val._65 === 1) return res(i, val._55);
-          if (val._65 === 2) reject(val._55);
-          val.then(function (val) {
-            res(i, val);
-          }, reject);
-          return;
-        } else {
-          var then = val.then;
-          if (typeof then === 'function') {
-            var p = new Promise(then.bind(val));
-            p.then(function (val) {
-              res(i, val);
-            }, reject);
-            return;
-          }
-        }
-      }
-      args[i] = val;
-      if (--remaining === 0) {
-        resolve(args);
-      }
-    }
-    for (var i = 0; i < args.length; i++) {
-      res(i, args[i]);
-    }
-  });
-};
-
-Promise.reject = function (value) {
-  return new Promise(function (resolve, reject) {
-    reject(value);
-  });
-};
-
-Promise.race = function (values) {
-  return new Promise(function (resolve, reject) {
-    values.forEach(function(value){
-      Promise.resolve(value).then(resolve, reject);
-    });
-  });
-};
-
-/* Prototype Methods */
-
-Promise.prototype['catch'] = function (onRejected) {
-  return this.then(null, onRejected);
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/domains/finally.js b/signaling_server/service/node_modules/express/node_modules/promise/domains/finally.js
deleted file mode 100644 (file)
index f5ee0b9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.prototype['finally'] = function (f) {
-  return this.then(function (value) {
-    return Promise.resolve(f()).then(function () {
-      return value;
-    });
-  }, function (err) {
-    return Promise.resolve(f()).then(function () {
-      throw err;
-    });
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/domains/index.js b/signaling_server/service/node_modules/express/node_modules/promise/domains/index.js
deleted file mode 100644 (file)
index 6e674f3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-module.exports = require('./core.js');
-require('./done.js');
-require('./finally.js');
-require('./es6-extensions.js');
-require('./node-extensions.js');
-require('./synchronous.js');
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/domains/node-extensions.js b/signaling_server/service/node_modules/express/node_modules/promise/domains/node-extensions.js
deleted file mode 100644 (file)
index 157cddc..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-'use strict';
-
-// This file contains then/promise specific extensions that are only useful
-// for node.js interop
-
-var Promise = require('./core.js');
-var asap = require('asap');
-
-module.exports = Promise;
-
-/* Static Functions */
-
-Promise.denodeify = function (fn, argumentCount) {
-  if (
-    typeof argumentCount === 'number' && argumentCount !== Infinity
-  ) {
-    return denodeifyWithCount(fn, argumentCount);
-  } else {
-    return denodeifyWithoutCount(fn);
-  }
-};
-
-var callbackFn = (
-  'function (err, res) {' +
-  'if (err) { rj(err); } else { rs(res); }' +
-  '}'
-);
-function denodeifyWithCount(fn, argumentCount) {
-  var args = [];
-  for (var i = 0; i < argumentCount; i++) {
-    args.push('a' + i);
-  }
-  var body = [
-    'return function (' + args.join(',') + ') {',
-    'var self = this;',
-    'return new Promise(function (rs, rj) {',
-    'var res = fn.call(',
-    ['self'].concat(args).concat([callbackFn]).join(','),
-    ');',
-    'if (res &&',
-    '(typeof res === "object" || typeof res === "function") &&',
-    'typeof res.then === "function"',
-    ') {rs(res);}',
-    '});',
-    '};'
-  ].join('');
-  return Function(['Promise', 'fn'], body)(Promise, fn);
-}
-function denodeifyWithoutCount(fn) {
-  var fnLength = Math.max(fn.length - 1, 3);
-  var args = [];
-  for (var i = 0; i < fnLength; i++) {
-    args.push('a' + i);
-  }
-  var body = [
-    'return function (' + args.join(',') + ') {',
-    'var self = this;',
-    'var args;',
-    'var argLength = arguments.length;',
-    'if (arguments.length > ' + fnLength + ') {',
-    'args = new Array(arguments.length + 1);',
-    'for (var i = 0; i < arguments.length; i++) {',
-    'args[i] = arguments[i];',
-    '}',
-    '}',
-    'return new Promise(function (rs, rj) {',
-    'var cb = ' + callbackFn + ';',
-    'var res;',
-    'switch (argLength) {',
-    args.concat(['extra']).map(function (_, index) {
-      return (
-        'case ' + (index) + ':' +
-        'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +
-        'break;'
-      );
-    }).join(''),
-    'default:',
-    'args[argLength] = cb;',
-    'res = fn.apply(self, args);',
-    '}',
-    
-    'if (res &&',
-    '(typeof res === "object" || typeof res === "function") &&',
-    'typeof res.then === "function"',
-    ') {rs(res);}',
-    '});',
-    '};'
-  ].join('');
-
-  return Function(
-    ['Promise', 'fn'],
-    body
-  )(Promise, fn);
-}
-
-Promise.nodeify = function (fn) {
-  return function () {
-    var args = Array.prototype.slice.call(arguments);
-    var callback =
-      typeof args[args.length - 1] === 'function' ? args.pop() : null;
-    var ctx = this;
-    try {
-      return fn.apply(this, arguments).nodeify(callback, ctx);
-    } catch (ex) {
-      if (callback === null || typeof callback == 'undefined') {
-        return new Promise(function (resolve, reject) {
-          reject(ex);
-        });
-      } else {
-        asap(function () {
-          callback.call(ctx, ex);
-        })
-      }
-    }
-  }
-};
-
-Promise.prototype.nodeify = function (callback, ctx) {
-  if (typeof callback != 'function') return this;
-
-  this.then(function (value) {
-    asap(function () {
-      callback.call(ctx, null, value);
-    });
-  }, function (err) {
-    asap(function () {
-      callback.call(ctx, err);
-    });
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/domains/rejection-tracking.js b/signaling_server/service/node_modules/express/node_modules/promise/domains/rejection-tracking.js
deleted file mode 100644 (file)
index 10ccce3..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-'use strict';
-
-var Promise = require('./core');
-
-var DEFAULT_WHITELIST = [
-  ReferenceError,
-  TypeError,
-  RangeError
-];
-
-var enabled = false;
-exports.disable = disable;
-function disable() {
-  enabled = false;
-  Promise._37 = null;
-  Promise._87 = null;
-}
-
-exports.enable = enable;
-function enable(options) {
-  options = options || {};
-  if (enabled) disable();
-  enabled = true;
-  var id = 0;
-  var displayId = 0;
-  var rejections = {};
-  Promise._37 = function (promise) {
-    if (
-      promise._65 === 2 && // IS REJECTED
-      rejections[promise._51]
-    ) {
-      if (rejections[promise._51].logged) {
-        onHandled(promise._51);
-      } else {
-        clearTimeout(rejections[promise._51].timeout);
-      }
-      delete rejections[promise._51];
-    }
-  };
-  Promise._87 = function (promise, err) {
-    if (promise._40 === 0) { // not yet handled
-      promise._51 = id++;
-      rejections[promise._51] = {
-        displayId: null,
-        error: err,
-        timeout: setTimeout(
-          onUnhandled.bind(null, promise._51),
-          // For reference errors and type errors, this almost always
-          // means the programmer made a mistake, so log them after just
-          // 100ms
-          // otherwise, wait 2 seconds to see if they get handled
-          matchWhitelist(err, DEFAULT_WHITELIST)
-            ? 100
-            : 2000
-        ),
-        logged: false
-      };
-    }
-  };
-  function onUnhandled(id) {
-    if (
-      options.allRejections ||
-      matchWhitelist(
-        rejections[id].error,
-        options.whitelist || DEFAULT_WHITELIST
-      )
-    ) {
-      rejections[id].displayId = displayId++;
-      if (options.onUnhandled) {
-        rejections[id].logged = true;
-        options.onUnhandled(
-          rejections[id].displayId,
-          rejections[id].error
-        );
-      } else {
-        rejections[id].logged = true;
-        logError(
-          rejections[id].displayId,
-          rejections[id].error
-        );
-      }
-    }
-  }
-  function onHandled(id) {
-    if (rejections[id].logged) {
-      if (options.onHandled) {
-        options.onHandled(rejections[id].displayId, rejections[id].error);
-      } else if (!rejections[id].onUnhandled) {
-        console.warn(
-          'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'
-        );
-        console.warn(
-          '  This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' +
-          rejections[id].displayId + '.'
-        );
-      }
-    }
-  }
-}
-
-function logError(id, error) {
-  console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');
-  var errStr = (error && (error.stack || error)) + '';
-  errStr.split('\n').forEach(function (line) {
-    console.warn('  ' + line);
-  });
-}
-
-function matchWhitelist(error, list) {
-  return list.some(function (cls) {
-    return error instanceof cls;
-  });
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/domains/synchronous.js b/signaling_server/service/node_modules/express/node_modules/promise/domains/synchronous.js
deleted file mode 100644 (file)
index 4939964..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.enableSynchronous = function () {
-  Promise.prototype.isPending = function() {
-    return this.getState() == 0;
-  };
-
-  Promise.prototype.isFulfilled = function() {
-    return this.getState() == 1;
-  };
-
-  Promise.prototype.isRejected = function() {
-    return this.getState() == 2;
-  };
-
-  Promise.prototype.getValue = function () {
-    if (this._65 === 3) {
-      return this._55.getValue();
-    }
-
-    if (!this.isFulfilled()) {
-      throw new Error('Cannot get a value of an unfulfilled promise.');
-    }
-
-    return this._55;
-  };
-
-  Promise.prototype.getReason = function () {
-    if (this._65 === 3) {
-      return this._55.getReason();
-    }
-
-    if (!this.isRejected()) {
-      throw new Error('Cannot get a rejection reason of a non-rejected promise.');
-    }
-
-    return this._55;
-  };
-
-  Promise.prototype.getState = function () {
-    if (this._65 === 3) {
-      return this._55.getState();
-    }
-    if (this._65 === -1 || this._65 === -2) {
-      return 0;
-    }
-
-    return this._65;
-  };
-};
-
-Promise.disableSynchronous = function() {
-  Promise.prototype.isPending = undefined;
-  Promise.prototype.isFulfilled = undefined;
-  Promise.prototype.isRejected = undefined;
-  Promise.prototype.getValue = undefined;
-  Promise.prototype.getReason = undefined;
-  Promise.prototype.getState = undefined;
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/index.d.ts b/signaling_server/service/node_modules/express/node_modules/promise/index.d.ts
deleted file mode 100644 (file)
index a199cbc..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-interface Thenable<T> {
-  /**
-   * Attaches callbacks for the resolution and/or rejection of the ThenPromise.
-   * @param onfulfilled The callback to execute when the ThenPromise is resolved.
-   * @param onrejected The callback to execute when the ThenPromise is rejected.
-   * @returns A ThenPromise for the completion of which ever callback is executed.
-   */
-  then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | Thenable<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | Thenable<TResult2>) | undefined | null): Thenable<TResult1 | TResult2>;
-}
-
-/**
- * Represents the completion of an asynchronous operation
- */
-interface ThenPromise<T> {
-  /**
-   * Attaches callbacks for the resolution and/or rejection of the ThenPromise.
-   * @param onfulfilled The callback to execute when the ThenPromise is resolved.
-   * @param onrejected The callback to execute when the ThenPromise is rejected.
-   * @returns A ThenPromise for the completion of which ever callback is executed.
-   */
-  then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | Thenable<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | Thenable<TResult2>) | undefined | null): ThenPromise<TResult1 | TResult2>;
-
-  /**
-   * Attaches a callback for only the rejection of the ThenPromise.
-   * @param onrejected The callback to execute when the ThenPromise is rejected.
-   * @returns A ThenPromise for the completion of the callback.
-   */
-  catch<TResult = never>(onrejected?: ((reason: any) => TResult | Thenable<TResult>) | undefined | null): ThenPromise<T | TResult>;
-
-  // Extensions specific to then/promise
-
-  /**
-   * Attaches callbacks for the resolution and/or rejection of the ThenPromise, without returning a new promise.
-   * @param onfulfilled The callback to execute when the ThenPromise is resolved.
-   * @param onrejected The callback to execute when the ThenPromise is rejected.
-   */
-  done(onfulfilled?: ((value: T) => any) | undefined | null, onrejected?: ((reason: any) => any) | undefined | null): void;
-
-
-  /**
-   * Calls a node.js style callback.  If none is provided, the promise is returned.
-   */
-       nodeify(callback: void | null): ThenPromise<T>;
-       nodeify(callback: (err: Error, value: T) => void): void;
-}
-
-interface ThenPromiseConstructor {
-  /**
-   * A reference to the prototype.
-   */
-  readonly prototype: ThenPromise<any>;
-
-  /**
-   * Creates a new ThenPromise.
-   * @param executor A callback used to initialize the promise. This callback is passed two arguments:
-   * a resolve callback used resolve the promise with a value or the result of another promise,
-   * and a reject callback used to reject the promise with a provided reason or error.
-   */
-  new <T>(executor: (resolve: (value?: T | Thenable<T>) => void, reject: (reason?: any) => void) => any): ThenPromise<T>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable <T4>, T5 | Thenable<T5>, T6 | Thenable<T6>, T7 | Thenable<T7>, T8 | Thenable<T8>, T9 | Thenable<T9>, T10 | Thenable<T10>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable <T4>, T5 | Thenable<T5>, T6 | Thenable<T6>, T7 | Thenable<T7>, T8 | Thenable<T8>, T9 | Thenable<T9>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable <T4>, T5 | Thenable<T5>, T6 | Thenable<T6>, T7 | Thenable<T7>, T8 | Thenable<T8>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8]>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable <T4>, T5 | Thenable<T5>, T6 | Thenable<T6>, T7 | Thenable<T7>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7]>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T1, T2, T3, T4, T5, T6>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable <T4>, T5 | Thenable<T5>, T6 | Thenable<T6>]): ThenPromise<[T1, T2, T3, T4, T5, T6]>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T1, T2, T3, T4, T5>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable <T4>, T5 | Thenable<T5>]): ThenPromise<[T1, T2, T3, T4, T5]>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T1, T2, T3, T4>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable <T4>]): ThenPromise<[T1, T2, T3, T4]>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T1, T2, T3>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>]): ThenPromise<[T1, T2, T3]>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T1, T2>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>]): ThenPromise<[T1, T2]>;
-
-  /**
-   * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
-   * resolve, or rejected when any ThenPromise is rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  all<T>(values: (T | Thenable<T>)[]): ThenPromise<T[]>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable<T4>, T5 | Thenable<T5>, T6 | Thenable<T6>, T7 | Thenable<T7>, T8 | Thenable<T8>, T9 | Thenable<T9>, T10 | Thenable<T10>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable<T4>, T5 | Thenable<T5>, T6 | Thenable<T6>, T7 | Thenable<T7>, T8 | Thenable<T8>, T9 | Thenable<T9>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable<T4>, T5 | Thenable<T5>, T6 | Thenable<T6>, T7 | Thenable<T7>, T8 | Thenable<T8>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable<T4>, T5 | Thenable<T5>, T6 | Thenable<T6>, T7 | Thenable<T7>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T1, T2, T3, T4, T5, T6>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable<T4>, T5 | Thenable<T5>, T6 | Thenable<T6>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T1, T2, T3, T4, T5>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable<T4>, T5 | Thenable<T5>]): ThenPromise<T1 | T2 | T3 | T4 | T5>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T1, T2, T3, T4>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>, T4 | Thenable<T4>]): ThenPromise<T1 | T2 | T3 | T4>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T1, T2, T3>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>, T3 | Thenable<T3>]): ThenPromise<T1 | T2 | T3>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T1, T2>(values: [T1 | Thenable<T1>, T2 | Thenable<T2>]): ThenPromise<T1 | T2>;
-
-  /**
-   * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
-   * or rejected.
-   * @param values An array of Promises.
-   * @returns A new ThenPromise.
-   */
-  race<T>(values: (T | Thenable<T>)[]): ThenPromise<T>;
-
-  /**
-   * Creates a new rejected promise for the provided reason.
-   * @param reason The reason the promise was rejected.
-   * @returns A new rejected ThenPromise.
-   */
-  reject(reason: any): ThenPromise<never>;
-
-  /**
-   * Creates a new rejected promise for the provided reason.
-   * @param reason The reason the promise was rejected.
-   * @returns A new rejected ThenPromise.
-   */
-  reject<T>(reason: any): ThenPromise<T>;
-
-  /**
-   * Creates a new resolved promise for the provided value.
-   * @param value A promise.
-   * @returns A promise whose internal state matches the provided promise.
-   */
-  resolve<T>(value: T | Thenable<T>): ThenPromise<T>;
-
-  /**
-   * Creates a new resolved promise .
-   * @returns A resolved promise.
-   */
-  resolve(): ThenPromise<void>;
-
-  // Extensions specific to then/promise
-
-  denodeify: (fn: Function) => (...args: any[]) => ThenPromise<any>;
-  nodeify: (fn: Function) => Function;
-}
-
-declare var ThenPromise: ThenPromiseConstructor;
-
-export = ThenPromise;
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/index.js b/signaling_server/service/node_modules/express/node_modules/promise/index.js
deleted file mode 100644 (file)
index 1c38e46..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-'use strict';
-
-module.exports = require('./lib')
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/lib/core.js b/signaling_server/service/node_modules/express/node_modules/promise/lib/core.js
deleted file mode 100644 (file)
index aefc987..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-'use strict';
-
-var asap = require('asap/raw');
-
-function noop() {}
-
-// States:
-//
-// 0 - pending
-// 1 - fulfilled with _value
-// 2 - rejected with _value
-// 3 - adopted the state of another promise, _value
-//
-// once the state is no longer pending (0) it is immutable
-
-// All `_` prefixed properties will be reduced to `_{random number}`
-// at build time to obfuscate them and discourage their use.
-// We don't use symbols or Object.defineProperty to fully hide them
-// because the performance isn't good enough.
-
-
-// to avoid using try/catch inside critical functions, we
-// extract them to here.
-var LAST_ERROR = null;
-var IS_ERROR = {};
-function getThen(obj) {
-  try {
-    return obj.then;
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-
-function tryCallOne(fn, a) {
-  try {
-    return fn(a);
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-function tryCallTwo(fn, a, b) {
-  try {
-    fn(a, b);
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-
-module.exports = Promise;
-
-function Promise(fn) {
-  if (typeof this !== 'object') {
-    throw new TypeError('Promises must be constructed via new');
-  }
-  if (typeof fn !== 'function') {
-    throw new TypeError('Promise constructor\'s argument is not a function');
-  }
-  this._40 = 0;
-  this._65 = 0;
-  this._55 = null;
-  this._72 = null;
-  if (fn === noop) return;
-  doResolve(fn, this);
-}
-Promise._37 = null;
-Promise._87 = null;
-Promise._61 = noop;
-
-Promise.prototype.then = function(onFulfilled, onRejected) {
-  if (this.constructor !== Promise) {
-    return safeThen(this, onFulfilled, onRejected);
-  }
-  var res = new Promise(noop);
-  handle(this, new Handler(onFulfilled, onRejected, res));
-  return res;
-};
-
-function safeThen(self, onFulfilled, onRejected) {
-  return new self.constructor(function (resolve, reject) {
-    var res = new Promise(noop);
-    res.then(resolve, reject);
-    handle(self, new Handler(onFulfilled, onRejected, res));
-  });
-}
-function handle(self, deferred) {
-  while (self._65 === 3) {
-    self = self._55;
-  }
-  if (Promise._37) {
-    Promise._37(self);
-  }
-  if (self._65 === 0) {
-    if (self._40 === 0) {
-      self._40 = 1;
-      self._72 = deferred;
-      return;
-    }
-    if (self._40 === 1) {
-      self._40 = 2;
-      self._72 = [self._72, deferred];
-      return;
-    }
-    self._72.push(deferred);
-    return;
-  }
-  handleResolved(self, deferred);
-}
-
-function handleResolved(self, deferred) {
-  asap(function() {
-    var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected;
-    if (cb === null) {
-      if (self._65 === 1) {
-        resolve(deferred.promise, self._55);
-      } else {
-        reject(deferred.promise, self._55);
-      }
-      return;
-    }
-    var ret = tryCallOne(cb, self._55);
-    if (ret === IS_ERROR) {
-      reject(deferred.promise, LAST_ERROR);
-    } else {
-      resolve(deferred.promise, ret);
-    }
-  });
-}
-function resolve(self, newValue) {
-  // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
-  if (newValue === self) {
-    return reject(
-      self,
-      new TypeError('A promise cannot be resolved with itself.')
-    );
-  }
-  if (
-    newValue &&
-    (typeof newValue === 'object' || typeof newValue === 'function')
-  ) {
-    var then = getThen(newValue);
-    if (then === IS_ERROR) {
-      return reject(self, LAST_ERROR);
-    }
-    if (
-      then === self.then &&
-      newValue instanceof Promise
-    ) {
-      self._65 = 3;
-      self._55 = newValue;
-      finale(self);
-      return;
-    } else if (typeof then === 'function') {
-      doResolve(then.bind(newValue), self);
-      return;
-    }
-  }
-  self._65 = 1;
-  self._55 = newValue;
-  finale(self);
-}
-
-function reject(self, newValue) {
-  self._65 = 2;
-  self._55 = newValue;
-  if (Promise._87) {
-    Promise._87(self, newValue);
-  }
-  finale(self);
-}
-function finale(self) {
-  if (self._40 === 1) {
-    handle(self, self._72);
-    self._72 = null;
-  }
-  if (self._40 === 2) {
-    for (var i = 0; i < self._72.length; i++) {
-      handle(self, self._72[i]);
-    }
-    self._72 = null;
-  }
-}
-
-function Handler(onFulfilled, onRejected, promise){
-  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
-  this.onRejected = typeof onRejected === 'function' ? onRejected : null;
-  this.promise = promise;
-}
-
-/**
- * Take a potentially misbehaving resolver function and make sure
- * onFulfilled and onRejected are only called once.
- *
- * Makes no guarantees about asynchrony.
- */
-function doResolve(fn, promise) {
-  var done = false;
-  var res = tryCallTwo(fn, function (value) {
-    if (done) return;
-    done = true;
-    resolve(promise, value);
-  }, function (reason) {
-    if (done) return;
-    done = true;
-    reject(promise, reason);
-  });
-  if (!done && res === IS_ERROR) {
-    done = true;
-    reject(promise, LAST_ERROR);
-  }
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/lib/done.js b/signaling_server/service/node_modules/express/node_modules/promise/lib/done.js
deleted file mode 100644 (file)
index f879317..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.prototype.done = function (onFulfilled, onRejected) {
-  var self = arguments.length ? this.then.apply(this, arguments) : this;
-  self.then(null, function (err) {
-    setTimeout(function () {
-      throw err;
-    }, 0);
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/lib/es6-extensions.js b/signaling_server/service/node_modules/express/node_modules/promise/lib/es6-extensions.js
deleted file mode 100644 (file)
index 8ab2666..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-'use strict';
-
-//This file contains the ES6 extensions to the core Promises/A+ API
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-
-/* Static Functions */
-
-var TRUE = valuePromise(true);
-var FALSE = valuePromise(false);
-var NULL = valuePromise(null);
-var UNDEFINED = valuePromise(undefined);
-var ZERO = valuePromise(0);
-var EMPTYSTRING = valuePromise('');
-
-function valuePromise(value) {
-  var p = new Promise(Promise._61);
-  p._65 = 1;
-  p._55 = value;
-  return p;
-}
-Promise.resolve = function (value) {
-  if (value instanceof Promise) return value;
-
-  if (value === null) return NULL;
-  if (value === undefined) return UNDEFINED;
-  if (value === true) return TRUE;
-  if (value === false) return FALSE;
-  if (value === 0) return ZERO;
-  if (value === '') return EMPTYSTRING;
-
-  if (typeof value === 'object' || typeof value === 'function') {
-    try {
-      var then = value.then;
-      if (typeof then === 'function') {
-        return new Promise(then.bind(value));
-      }
-    } catch (ex) {
-      return new Promise(function (resolve, reject) {
-        reject(ex);
-      });
-    }
-  }
-  return valuePromise(value);
-};
-
-Promise.all = function (arr) {
-  var args = Array.prototype.slice.call(arr);
-
-  return new Promise(function (resolve, reject) {
-    if (args.length === 0) return resolve([]);
-    var remaining = args.length;
-    function res(i, val) {
-      if (val && (typeof val === 'object' || typeof val === 'function')) {
-        if (val instanceof Promise && val.then === Promise.prototype.then) {
-          while (val._65 === 3) {
-            val = val._55;
-          }
-          if (val._65 === 1) return res(i, val._55);
-          if (val._65 === 2) reject(val._55);
-          val.then(function (val) {
-            res(i, val);
-          }, reject);
-          return;
-        } else {
-          var then = val.then;
-          if (typeof then === 'function') {
-            var p = new Promise(then.bind(val));
-            p.then(function (val) {
-              res(i, val);
-            }, reject);
-            return;
-          }
-        }
-      }
-      args[i] = val;
-      if (--remaining === 0) {
-        resolve(args);
-      }
-    }
-    for (var i = 0; i < args.length; i++) {
-      res(i, args[i]);
-    }
-  });
-};
-
-Promise.reject = function (value) {
-  return new Promise(function (resolve, reject) {
-    reject(value);
-  });
-};
-
-Promise.race = function (values) {
-  return new Promise(function (resolve, reject) {
-    values.forEach(function(value){
-      Promise.resolve(value).then(resolve, reject);
-    });
-  });
-};
-
-/* Prototype Methods */
-
-Promise.prototype['catch'] = function (onRejected) {
-  return this.then(null, onRejected);
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/lib/finally.js b/signaling_server/service/node_modules/express/node_modules/promise/lib/finally.js
deleted file mode 100644 (file)
index f5ee0b9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.prototype['finally'] = function (f) {
-  return this.then(function (value) {
-    return Promise.resolve(f()).then(function () {
-      return value;
-    });
-  }, function (err) {
-    return Promise.resolve(f()).then(function () {
-      throw err;
-    });
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/lib/index.js b/signaling_server/service/node_modules/express/node_modules/promise/lib/index.js
deleted file mode 100644 (file)
index 6e674f3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-module.exports = require('./core.js');
-require('./done.js');
-require('./finally.js');
-require('./es6-extensions.js');
-require('./node-extensions.js');
-require('./synchronous.js');
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/lib/node-extensions.js b/signaling_server/service/node_modules/express/node_modules/promise/lib/node-extensions.js
deleted file mode 100644 (file)
index 157cddc..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-'use strict';
-
-// This file contains then/promise specific extensions that are only useful
-// for node.js interop
-
-var Promise = require('./core.js');
-var asap = require('asap');
-
-module.exports = Promise;
-
-/* Static Functions */
-
-Promise.denodeify = function (fn, argumentCount) {
-  if (
-    typeof argumentCount === 'number' && argumentCount !== Infinity
-  ) {
-    return denodeifyWithCount(fn, argumentCount);
-  } else {
-    return denodeifyWithoutCount(fn);
-  }
-};
-
-var callbackFn = (
-  'function (err, res) {' +
-  'if (err) { rj(err); } else { rs(res); }' +
-  '}'
-);
-function denodeifyWithCount(fn, argumentCount) {
-  var args = [];
-  for (var i = 0; i < argumentCount; i++) {
-    args.push('a' + i);
-  }
-  var body = [
-    'return function (' + args.join(',') + ') {',
-    'var self = this;',
-    'return new Promise(function (rs, rj) {',
-    'var res = fn.call(',
-    ['self'].concat(args).concat([callbackFn]).join(','),
-    ');',
-    'if (res &&',
-    '(typeof res === "object" || typeof res === "function") &&',
-    'typeof res.then === "function"',
-    ') {rs(res);}',
-    '});',
-    '};'
-  ].join('');
-  return Function(['Promise', 'fn'], body)(Promise, fn);
-}
-function denodeifyWithoutCount(fn) {
-  var fnLength = Math.max(fn.length - 1, 3);
-  var args = [];
-  for (var i = 0; i < fnLength; i++) {
-    args.push('a' + i);
-  }
-  var body = [
-    'return function (' + args.join(',') + ') {',
-    'var self = this;',
-    'var args;',
-    'var argLength = arguments.length;',
-    'if (arguments.length > ' + fnLength + ') {',
-    'args = new Array(arguments.length + 1);',
-    'for (var i = 0; i < arguments.length; i++) {',
-    'args[i] = arguments[i];',
-    '}',
-    '}',
-    'return new Promise(function (rs, rj) {',
-    'var cb = ' + callbackFn + ';',
-    'var res;',
-    'switch (argLength) {',
-    args.concat(['extra']).map(function (_, index) {
-      return (
-        'case ' + (index) + ':' +
-        'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +
-        'break;'
-      );
-    }).join(''),
-    'default:',
-    'args[argLength] = cb;',
-    'res = fn.apply(self, args);',
-    '}',
-    
-    'if (res &&',
-    '(typeof res === "object" || typeof res === "function") &&',
-    'typeof res.then === "function"',
-    ') {rs(res);}',
-    '});',
-    '};'
-  ].join('');
-
-  return Function(
-    ['Promise', 'fn'],
-    body
-  )(Promise, fn);
-}
-
-Promise.nodeify = function (fn) {
-  return function () {
-    var args = Array.prototype.slice.call(arguments);
-    var callback =
-      typeof args[args.length - 1] === 'function' ? args.pop() : null;
-    var ctx = this;
-    try {
-      return fn.apply(this, arguments).nodeify(callback, ctx);
-    } catch (ex) {
-      if (callback === null || typeof callback == 'undefined') {
-        return new Promise(function (resolve, reject) {
-          reject(ex);
-        });
-      } else {
-        asap(function () {
-          callback.call(ctx, ex);
-        })
-      }
-    }
-  }
-};
-
-Promise.prototype.nodeify = function (callback, ctx) {
-  if (typeof callback != 'function') return this;
-
-  this.then(function (value) {
-    asap(function () {
-      callback.call(ctx, null, value);
-    });
-  }, function (err) {
-    asap(function () {
-      callback.call(ctx, err);
-    });
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/lib/rejection-tracking.js b/signaling_server/service/node_modules/express/node_modules/promise/lib/rejection-tracking.js
deleted file mode 100644 (file)
index 10ccce3..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-'use strict';
-
-var Promise = require('./core');
-
-var DEFAULT_WHITELIST = [
-  ReferenceError,
-  TypeError,
-  RangeError
-];
-
-var enabled = false;
-exports.disable = disable;
-function disable() {
-  enabled = false;
-  Promise._37 = null;
-  Promise._87 = null;
-}
-
-exports.enable = enable;
-function enable(options) {
-  options = options || {};
-  if (enabled) disable();
-  enabled = true;
-  var id = 0;
-  var displayId = 0;
-  var rejections = {};
-  Promise._37 = function (promise) {
-    if (
-      promise._65 === 2 && // IS REJECTED
-      rejections[promise._51]
-    ) {
-      if (rejections[promise._51].logged) {
-        onHandled(promise._51);
-      } else {
-        clearTimeout(rejections[promise._51].timeout);
-      }
-      delete rejections[promise._51];
-    }
-  };
-  Promise._87 = function (promise, err) {
-    if (promise._40 === 0) { // not yet handled
-      promise._51 = id++;
-      rejections[promise._51] = {
-        displayId: null,
-        error: err,
-        timeout: setTimeout(
-          onUnhandled.bind(null, promise._51),
-          // For reference errors and type errors, this almost always
-          // means the programmer made a mistake, so log them after just
-          // 100ms
-          // otherwise, wait 2 seconds to see if they get handled
-          matchWhitelist(err, DEFAULT_WHITELIST)
-            ? 100
-            : 2000
-        ),
-        logged: false
-      };
-    }
-  };
-  function onUnhandled(id) {
-    if (
-      options.allRejections ||
-      matchWhitelist(
-        rejections[id].error,
-        options.whitelist || DEFAULT_WHITELIST
-      )
-    ) {
-      rejections[id].displayId = displayId++;
-      if (options.onUnhandled) {
-        rejections[id].logged = true;
-        options.onUnhandled(
-          rejections[id].displayId,
-          rejections[id].error
-        );
-      } else {
-        rejections[id].logged = true;
-        logError(
-          rejections[id].displayId,
-          rejections[id].error
-        );
-      }
-    }
-  }
-  function onHandled(id) {
-    if (rejections[id].logged) {
-      if (options.onHandled) {
-        options.onHandled(rejections[id].displayId, rejections[id].error);
-      } else if (!rejections[id].onUnhandled) {
-        console.warn(
-          'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'
-        );
-        console.warn(
-          '  This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' +
-          rejections[id].displayId + '.'
-        );
-      }
-    }
-  }
-}
-
-function logError(id, error) {
-  console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');
-  var errStr = (error && (error.stack || error)) + '';
-  errStr.split('\n').forEach(function (line) {
-    console.warn('  ' + line);
-  });
-}
-
-function matchWhitelist(error, list) {
-  return list.some(function (cls) {
-    return error instanceof cls;
-  });
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/lib/synchronous.js b/signaling_server/service/node_modules/express/node_modules/promise/lib/synchronous.js
deleted file mode 100644 (file)
index 4939964..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.enableSynchronous = function () {
-  Promise.prototype.isPending = function() {
-    return this.getState() == 0;
-  };
-
-  Promise.prototype.isFulfilled = function() {
-    return this.getState() == 1;
-  };
-
-  Promise.prototype.isRejected = function() {
-    return this.getState() == 2;
-  };
-
-  Promise.prototype.getValue = function () {
-    if (this._65 === 3) {
-      return this._55.getValue();
-    }
-
-    if (!this.isFulfilled()) {
-      throw new Error('Cannot get a value of an unfulfilled promise.');
-    }
-
-    return this._55;
-  };
-
-  Promise.prototype.getReason = function () {
-    if (this._65 === 3) {
-      return this._55.getReason();
-    }
-
-    if (!this.isRejected()) {
-      throw new Error('Cannot get a rejection reason of a non-rejected promise.');
-    }
-
-    return this._55;
-  };
-
-  Promise.prototype.getState = function () {
-    if (this._65 === 3) {
-      return this._55.getState();
-    }
-    if (this._65 === -1 || this._65 === -2) {
-      return 0;
-    }
-
-    return this._65;
-  };
-};
-
-Promise.disableSynchronous = function() {
-  Promise.prototype.isPending = undefined;
-  Promise.prototype.isFulfilled = undefined;
-  Promise.prototype.isRejected = undefined;
-  Promise.prototype.getValue = undefined;
-  Promise.prototype.getReason = undefined;
-  Promise.prototype.getState = undefined;
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/package.json b/signaling_server/service/node_modules/express/node_modules/promise/package.json
deleted file mode 100644 (file)
index dde3734..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "_from": "promise@^7.1.1",
-  "_id": "promise@7.3.1",
-  "_inBundle": false,
-  "_integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
-  "_location": "/promise",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "promise@^7.1.1",
-    "name": "promise",
-    "escapedName": "promise",
-    "rawSpec": "^7.1.1",
-    "saveSpec": null,
-    "fetchSpec": "^7.1.1"
-  },
-  "_requiredBy": [
-    "/"
-  ],
-  "_resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
-  "_shasum": "064b72602b18f90f29192b8b1bc418ffd1ebd3bf",
-  "_spec": "promise@^7.1.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes",
-  "author": {
-    "name": "ForbesLindesay"
-  },
-  "bugs": {
-    "url": "https://github.com/then/promise/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "asap": "~2.0.3"
-  },
-  "deprecated": false,
-  "description": "Bare bones Promises/A+ implementation",
-  "devDependencies": {
-    "acorn": "^1.0.1",
-    "better-assert": "*",
-    "istanbul": "^0.3.13",
-    "mocha": "*",
-    "promises-aplus-tests": "*",
-    "rimraf": "^2.3.2"
-  },
-  "homepage": "https://github.com/then/promise#readme",
-  "license": "MIT",
-  "main": "index.js",
-  "name": "promise",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/then/promise.git"
-  },
-  "scripts": {
-    "coverage": "istanbul cover node_modules/mocha/bin/_mocha -- --bail --timeout 200 --slow 99999 -R dot",
-    "prepublish": "node build",
-    "pretest": "node build",
-    "pretest-extensions": "node build",
-    "pretest-memory-leak": "node build",
-    "pretest-resolve": "node build",
-    "test": "mocha --bail --timeout 200 --slow 99999 -R dot && npm run test-memory-leak",
-    "test-extensions": "mocha test/extensions-tests.js --timeout 200 --slow 999999",
-    "test-memory-leak": "node --expose-gc test/memory-leak.js",
-    "test-resolve": "mocha test/resolver-tests.js --timeout 200 --slow 999999"
-  },
-  "version": "7.3.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/polyfill-done.js b/signaling_server/service/node_modules/express/node_modules/promise/polyfill-done.js
deleted file mode 100644 (file)
index e50b4c0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-// should work in any browser without browserify
-
-if (typeof Promise.prototype.done !== 'function') {
-  Promise.prototype.done = function (onFulfilled, onRejected) {
-    var self = arguments.length ? this.then.apply(this, arguments) : this
-    self.then(null, function (err) {
-      setTimeout(function () {
-        throw err
-      }, 0)
-    })
-  }
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/polyfill.js b/signaling_server/service/node_modules/express/node_modules/promise/polyfill.js
deleted file mode 100644 (file)
index db099f8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// not "use strict" so we can declare global "Promise"
-
-var asap = require('asap');
-
-if (typeof Promise === 'undefined') {
-  Promise = require('./lib/core.js')
-  require('./lib/es6-extensions.js')
-}
-
-require('./polyfill-done.js');
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/core.js b/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/core.js
deleted file mode 100644 (file)
index a84fb3d..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-'use strict';
-
-
-
-function noop() {}
-
-// States:
-//
-// 0 - pending
-// 1 - fulfilled with _value
-// 2 - rejected with _value
-// 3 - adopted the state of another promise, _value
-//
-// once the state is no longer pending (0) it is immutable
-
-// All `_` prefixed properties will be reduced to `_{random number}`
-// at build time to obfuscate them and discourage their use.
-// We don't use symbols or Object.defineProperty to fully hide them
-// because the performance isn't good enough.
-
-
-// to avoid using try/catch inside critical functions, we
-// extract them to here.
-var LAST_ERROR = null;
-var IS_ERROR = {};
-function getThen(obj) {
-  try {
-    return obj.then;
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-
-function tryCallOne(fn, a) {
-  try {
-    return fn(a);
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-function tryCallTwo(fn, a, b) {
-  try {
-    fn(a, b);
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-
-module.exports = Promise;
-
-function Promise(fn) {
-  if (typeof this !== 'object') {
-    throw new TypeError('Promises must be constructed via new');
-  }
-  if (typeof fn !== 'function') {
-    throw new TypeError('Promise constructor\'s argument is not a function');
-  }
-  this._40 = 0;
-  this._65 = 0;
-  this._55 = null;
-  this._72 = null;
-  if (fn === noop) return;
-  doResolve(fn, this);
-}
-Promise._37 = null;
-Promise._87 = null;
-Promise._61 = noop;
-
-Promise.prototype.then = function(onFulfilled, onRejected) {
-  if (this.constructor !== Promise) {
-    return safeThen(this, onFulfilled, onRejected);
-  }
-  var res = new Promise(noop);
-  handle(this, new Handler(onFulfilled, onRejected, res));
-  return res;
-};
-
-function safeThen(self, onFulfilled, onRejected) {
-  return new self.constructor(function (resolve, reject) {
-    var res = new Promise(noop);
-    res.then(resolve, reject);
-    handle(self, new Handler(onFulfilled, onRejected, res));
-  });
-}
-function handle(self, deferred) {
-  while (self._65 === 3) {
-    self = self._55;
-  }
-  if (Promise._37) {
-    Promise._37(self);
-  }
-  if (self._65 === 0) {
-    if (self._40 === 0) {
-      self._40 = 1;
-      self._72 = deferred;
-      return;
-    }
-    if (self._40 === 1) {
-      self._40 = 2;
-      self._72 = [self._72, deferred];
-      return;
-    }
-    self._72.push(deferred);
-    return;
-  }
-  handleResolved(self, deferred);
-}
-
-function handleResolved(self, deferred) {
-  setImmediate(function() {
-    var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected;
-    if (cb === null) {
-      if (self._65 === 1) {
-        resolve(deferred.promise, self._55);
-      } else {
-        reject(deferred.promise, self._55);
-      }
-      return;
-    }
-    var ret = tryCallOne(cb, self._55);
-    if (ret === IS_ERROR) {
-      reject(deferred.promise, LAST_ERROR);
-    } else {
-      resolve(deferred.promise, ret);
-    }
-  });
-}
-function resolve(self, newValue) {
-  // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
-  if (newValue === self) {
-    return reject(
-      self,
-      new TypeError('A promise cannot be resolved with itself.')
-    );
-  }
-  if (
-    newValue &&
-    (typeof newValue === 'object' || typeof newValue === 'function')
-  ) {
-    var then = getThen(newValue);
-    if (then === IS_ERROR) {
-      return reject(self, LAST_ERROR);
-    }
-    if (
-      then === self.then &&
-      newValue instanceof Promise
-    ) {
-      self._65 = 3;
-      self._55 = newValue;
-      finale(self);
-      return;
-    } else if (typeof then === 'function') {
-      doResolve(then.bind(newValue), self);
-      return;
-    }
-  }
-  self._65 = 1;
-  self._55 = newValue;
-  finale(self);
-}
-
-function reject(self, newValue) {
-  self._65 = 2;
-  self._55 = newValue;
-  if (Promise._87) {
-    Promise._87(self, newValue);
-  }
-  finale(self);
-}
-function finale(self) {
-  if (self._40 === 1) {
-    handle(self, self._72);
-    self._72 = null;
-  }
-  if (self._40 === 2) {
-    for (var i = 0; i < self._72.length; i++) {
-      handle(self, self._72[i]);
-    }
-    self._72 = null;
-  }
-}
-
-function Handler(onFulfilled, onRejected, promise){
-  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
-  this.onRejected = typeof onRejected === 'function' ? onRejected : null;
-  this.promise = promise;
-}
-
-/**
- * Take a potentially misbehaving resolver function and make sure
- * onFulfilled and onRejected are only called once.
- *
- * Makes no guarantees about asynchrony.
- */
-function doResolve(fn, promise) {
-  var done = false;
-  var res = tryCallTwo(fn, function (value) {
-    if (done) return;
-    done = true;
-    resolve(promise, value);
-  }, function (reason) {
-    if (done) return;
-    done = true;
-    reject(promise, reason);
-  });
-  if (!done && res === IS_ERROR) {
-    done = true;
-    reject(promise, LAST_ERROR);
-  }
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/done.js b/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/done.js
deleted file mode 100644 (file)
index f879317..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.prototype.done = function (onFulfilled, onRejected) {
-  var self = arguments.length ? this.then.apply(this, arguments) : this;
-  self.then(null, function (err) {
-    setTimeout(function () {
-      throw err;
-    }, 0);
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/es6-extensions.js b/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/es6-extensions.js
deleted file mode 100644 (file)
index 8ab2666..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-'use strict';
-
-//This file contains the ES6 extensions to the core Promises/A+ API
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-
-/* Static Functions */
-
-var TRUE = valuePromise(true);
-var FALSE = valuePromise(false);
-var NULL = valuePromise(null);
-var UNDEFINED = valuePromise(undefined);
-var ZERO = valuePromise(0);
-var EMPTYSTRING = valuePromise('');
-
-function valuePromise(value) {
-  var p = new Promise(Promise._61);
-  p._65 = 1;
-  p._55 = value;
-  return p;
-}
-Promise.resolve = function (value) {
-  if (value instanceof Promise) return value;
-
-  if (value === null) return NULL;
-  if (value === undefined) return UNDEFINED;
-  if (value === true) return TRUE;
-  if (value === false) return FALSE;
-  if (value === 0) return ZERO;
-  if (value === '') return EMPTYSTRING;
-
-  if (typeof value === 'object' || typeof value === 'function') {
-    try {
-      var then = value.then;
-      if (typeof then === 'function') {
-        return new Promise(then.bind(value));
-      }
-    } catch (ex) {
-      return new Promise(function (resolve, reject) {
-        reject(ex);
-      });
-    }
-  }
-  return valuePromise(value);
-};
-
-Promise.all = function (arr) {
-  var args = Array.prototype.slice.call(arr);
-
-  return new Promise(function (resolve, reject) {
-    if (args.length === 0) return resolve([]);
-    var remaining = args.length;
-    function res(i, val) {
-      if (val && (typeof val === 'object' || typeof val === 'function')) {
-        if (val instanceof Promise && val.then === Promise.prototype.then) {
-          while (val._65 === 3) {
-            val = val._55;
-          }
-          if (val._65 === 1) return res(i, val._55);
-          if (val._65 === 2) reject(val._55);
-          val.then(function (val) {
-            res(i, val);
-          }, reject);
-          return;
-        } else {
-          var then = val.then;
-          if (typeof then === 'function') {
-            var p = new Promise(then.bind(val));
-            p.then(function (val) {
-              res(i, val);
-            }, reject);
-            return;
-          }
-        }
-      }
-      args[i] = val;
-      if (--remaining === 0) {
-        resolve(args);
-      }
-    }
-    for (var i = 0; i < args.length; i++) {
-      res(i, args[i]);
-    }
-  });
-};
-
-Promise.reject = function (value) {
-  return new Promise(function (resolve, reject) {
-    reject(value);
-  });
-};
-
-Promise.race = function (values) {
-  return new Promise(function (resolve, reject) {
-    values.forEach(function(value){
-      Promise.resolve(value).then(resolve, reject);
-    });
-  });
-};
-
-/* Prototype Methods */
-
-Promise.prototype['catch'] = function (onRejected) {
-  return this.then(null, onRejected);
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/finally.js b/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/finally.js
deleted file mode 100644 (file)
index f5ee0b9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.prototype['finally'] = function (f) {
-  return this.then(function (value) {
-    return Promise.resolve(f()).then(function () {
-      return value;
-    });
-  }, function (err) {
-    return Promise.resolve(f()).then(function () {
-      throw err;
-    });
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/index.js b/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/index.js
deleted file mode 100644 (file)
index 6e674f3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-module.exports = require('./core.js');
-require('./done.js');
-require('./finally.js');
-require('./es6-extensions.js');
-require('./node-extensions.js');
-require('./synchronous.js');
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/node-extensions.js b/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/node-extensions.js
deleted file mode 100644 (file)
index f03e861..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-'use strict';
-
-// This file contains then/promise specific extensions that are only useful
-// for node.js interop
-
-var Promise = require('./core.js');
-
-
-module.exports = Promise;
-
-/* Static Functions */
-
-Promise.denodeify = function (fn, argumentCount) {
-  if (
-    typeof argumentCount === 'number' && argumentCount !== Infinity
-  ) {
-    return denodeifyWithCount(fn, argumentCount);
-  } else {
-    return denodeifyWithoutCount(fn);
-  }
-};
-
-var callbackFn = (
-  'function (err, res) {' +
-  'if (err) { rj(err); } else { rs(res); }' +
-  '}'
-);
-function denodeifyWithCount(fn, argumentCount) {
-  var args = [];
-  for (var i = 0; i < argumentCount; i++) {
-    args.push('a' + i);
-  }
-  var body = [
-    'return function (' + args.join(',') + ') {',
-    'var self = this;',
-    'return new Promise(function (rs, rj) {',
-    'var res = fn.call(',
-    ['self'].concat(args).concat([callbackFn]).join(','),
-    ');',
-    'if (res &&',
-    '(typeof res === "object" || typeof res === "function") &&',
-    'typeof res.then === "function"',
-    ') {rs(res);}',
-    '});',
-    '};'
-  ].join('');
-  return Function(['Promise', 'fn'], body)(Promise, fn);
-}
-function denodeifyWithoutCount(fn) {
-  var fnLength = Math.max(fn.length - 1, 3);
-  var args = [];
-  for (var i = 0; i < fnLength; i++) {
-    args.push('a' + i);
-  }
-  var body = [
-    'return function (' + args.join(',') + ') {',
-    'var self = this;',
-    'var args;',
-    'var argLength = arguments.length;',
-    'if (arguments.length > ' + fnLength + ') {',
-    'args = new Array(arguments.length + 1);',
-    'for (var i = 0; i < arguments.length; i++) {',
-    'args[i] = arguments[i];',
-    '}',
-    '}',
-    'return new Promise(function (rs, rj) {',
-    'var cb = ' + callbackFn + ';',
-    'var res;',
-    'switch (argLength) {',
-    args.concat(['extra']).map(function (_, index) {
-      return (
-        'case ' + (index) + ':' +
-        'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +
-        'break;'
-      );
-    }).join(''),
-    'default:',
-    'args[argLength] = cb;',
-    'res = fn.apply(self, args);',
-    '}',
-    
-    'if (res &&',
-    '(typeof res === "object" || typeof res === "function") &&',
-    'typeof res.then === "function"',
-    ') {rs(res);}',
-    '});',
-    '};'
-  ].join('');
-
-  return Function(
-    ['Promise', 'fn'],
-    body
-  )(Promise, fn);
-}
-
-Promise.nodeify = function (fn) {
-  return function () {
-    var args = Array.prototype.slice.call(arguments);
-    var callback =
-      typeof args[args.length - 1] === 'function' ? args.pop() : null;
-    var ctx = this;
-    try {
-      return fn.apply(this, arguments).nodeify(callback, ctx);
-    } catch (ex) {
-      if (callback === null || typeof callback == 'undefined') {
-        return new Promise(function (resolve, reject) {
-          reject(ex);
-        });
-      } else {
-        setImmediate(function () {
-          callback.call(ctx, ex);
-        })
-      }
-    }
-  }
-};
-
-Promise.prototype.nodeify = function (callback, ctx) {
-  if (typeof callback != 'function') return this;
-
-  this.then(function (value) {
-    setImmediate(function () {
-      callback.call(ctx, null, value);
-    });
-  }, function (err) {
-    setImmediate(function () {
-      callback.call(ctx, err);
-    });
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/rejection-tracking.js b/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/rejection-tracking.js
deleted file mode 100644 (file)
index 10ccce3..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-'use strict';
-
-var Promise = require('./core');
-
-var DEFAULT_WHITELIST = [
-  ReferenceError,
-  TypeError,
-  RangeError
-];
-
-var enabled = false;
-exports.disable = disable;
-function disable() {
-  enabled = false;
-  Promise._37 = null;
-  Promise._87 = null;
-}
-
-exports.enable = enable;
-function enable(options) {
-  options = options || {};
-  if (enabled) disable();
-  enabled = true;
-  var id = 0;
-  var displayId = 0;
-  var rejections = {};
-  Promise._37 = function (promise) {
-    if (
-      promise._65 === 2 && // IS REJECTED
-      rejections[promise._51]
-    ) {
-      if (rejections[promise._51].logged) {
-        onHandled(promise._51);
-      } else {
-        clearTimeout(rejections[promise._51].timeout);
-      }
-      delete rejections[promise._51];
-    }
-  };
-  Promise._87 = function (promise, err) {
-    if (promise._40 === 0) { // not yet handled
-      promise._51 = id++;
-      rejections[promise._51] = {
-        displayId: null,
-        error: err,
-        timeout: setTimeout(
-          onUnhandled.bind(null, promise._51),
-          // For reference errors and type errors, this almost always
-          // means the programmer made a mistake, so log them after just
-          // 100ms
-          // otherwise, wait 2 seconds to see if they get handled
-          matchWhitelist(err, DEFAULT_WHITELIST)
-            ? 100
-            : 2000
-        ),
-        logged: false
-      };
-    }
-  };
-  function onUnhandled(id) {
-    if (
-      options.allRejections ||
-      matchWhitelist(
-        rejections[id].error,
-        options.whitelist || DEFAULT_WHITELIST
-      )
-    ) {
-      rejections[id].displayId = displayId++;
-      if (options.onUnhandled) {
-        rejections[id].logged = true;
-        options.onUnhandled(
-          rejections[id].displayId,
-          rejections[id].error
-        );
-      } else {
-        rejections[id].logged = true;
-        logError(
-          rejections[id].displayId,
-          rejections[id].error
-        );
-      }
-    }
-  }
-  function onHandled(id) {
-    if (rejections[id].logged) {
-      if (options.onHandled) {
-        options.onHandled(rejections[id].displayId, rejections[id].error);
-      } else if (!rejections[id].onUnhandled) {
-        console.warn(
-          'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'
-        );
-        console.warn(
-          '  This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' +
-          rejections[id].displayId + '.'
-        );
-      }
-    }
-  }
-}
-
-function logError(id, error) {
-  console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');
-  var errStr = (error && (error.stack || error)) + '';
-  errStr.split('\n').forEach(function (line) {
-    console.warn('  ' + line);
-  });
-}
-
-function matchWhitelist(error, list) {
-  return list.some(function (cls) {
-    return error instanceof cls;
-  });
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/synchronous.js b/signaling_server/service/node_modules/express/node_modules/promise/setimmediate/synchronous.js
deleted file mode 100644 (file)
index 4939964..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.enableSynchronous = function () {
-  Promise.prototype.isPending = function() {
-    return this.getState() == 0;
-  };
-
-  Promise.prototype.isFulfilled = function() {
-    return this.getState() == 1;
-  };
-
-  Promise.prototype.isRejected = function() {
-    return this.getState() == 2;
-  };
-
-  Promise.prototype.getValue = function () {
-    if (this._65 === 3) {
-      return this._55.getValue();
-    }
-
-    if (!this.isFulfilled()) {
-      throw new Error('Cannot get a value of an unfulfilled promise.');
-    }
-
-    return this._55;
-  };
-
-  Promise.prototype.getReason = function () {
-    if (this._65 === 3) {
-      return this._55.getReason();
-    }
-
-    if (!this.isRejected()) {
-      throw new Error('Cannot get a rejection reason of a non-rejected promise.');
-    }
-
-    return this._55;
-  };
-
-  Promise.prototype.getState = function () {
-    if (this._65 === 3) {
-      return this._55.getState();
-    }
-    if (this._65 === -1 || this._65 === -2) {
-      return 0;
-    }
-
-    return this._65;
-  };
-};
-
-Promise.disableSynchronous = function() {
-  Promise.prototype.isPending = undefined;
-  Promise.prototype.isFulfilled = undefined;
-  Promise.prototype.isRejected = undefined;
-  Promise.prototype.getValue = undefined;
-  Promise.prototype.getReason = undefined;
-  Promise.prototype.getState = undefined;
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/src/core.js b/signaling_server/service/node_modules/express/node_modules/promise/src/core.js
deleted file mode 100644 (file)
index 312010d..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-'use strict';
-
-var asap = require('asap/raw');
-
-function noop() {}
-
-// States:
-//
-// 0 - pending
-// 1 - fulfilled with _value
-// 2 - rejected with _value
-// 3 - adopted the state of another promise, _value
-//
-// once the state is no longer pending (0) it is immutable
-
-// All `_` prefixed properties will be reduced to `_{random number}`
-// at build time to obfuscate them and discourage their use.
-// We don't use symbols or Object.defineProperty to fully hide them
-// because the performance isn't good enough.
-
-
-// to avoid using try/catch inside critical functions, we
-// extract them to here.
-var LAST_ERROR = null;
-var IS_ERROR = {};
-function getThen(obj) {
-  try {
-    return obj.then;
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-
-function tryCallOne(fn, a) {
-  try {
-    return fn(a);
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-function tryCallTwo(fn, a, b) {
-  try {
-    fn(a, b);
-  } catch (ex) {
-    LAST_ERROR = ex;
-    return IS_ERROR;
-  }
-}
-
-module.exports = Promise;
-
-function Promise(fn) {
-  if (typeof this !== 'object') {
-    throw new TypeError('Promises must be constructed via new');
-  }
-  if (typeof fn !== 'function') {
-    throw new TypeError('Promise constructor\'s argument is not a function');
-  }
-  this._deferredState = 0;
-  this._state = 0;
-  this._value = null;
-  this._deferreds = null;
-  if (fn === noop) return;
-  doResolve(fn, this);
-}
-Promise._onHandle = null;
-Promise._onReject = null;
-Promise._noop = noop;
-
-Promise.prototype.then = function(onFulfilled, onRejected) {
-  if (this.constructor !== Promise) {
-    return safeThen(this, onFulfilled, onRejected);
-  }
-  var res = new Promise(noop);
-  handle(this, new Handler(onFulfilled, onRejected, res));
-  return res;
-};
-
-function safeThen(self, onFulfilled, onRejected) {
-  return new self.constructor(function (resolve, reject) {
-    var res = new Promise(noop);
-    res.then(resolve, reject);
-    handle(self, new Handler(onFulfilled, onRejected, res));
-  });
-}
-function handle(self, deferred) {
-  while (self._state === 3) {
-    self = self._value;
-  }
-  if (Promise._onHandle) {
-    Promise._onHandle(self);
-  }
-  if (self._state === 0) {
-    if (self._deferredState === 0) {
-      self._deferredState = 1;
-      self._deferreds = deferred;
-      return;
-    }
-    if (self._deferredState === 1) {
-      self._deferredState = 2;
-      self._deferreds = [self._deferreds, deferred];
-      return;
-    }
-    self._deferreds.push(deferred);
-    return;
-  }
-  handleResolved(self, deferred);
-}
-
-function handleResolved(self, deferred) {
-  asap(function() {
-    var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
-    if (cb === null) {
-      if (self._state === 1) {
-        resolve(deferred.promise, self._value);
-      } else {
-        reject(deferred.promise, self._value);
-      }
-      return;
-    }
-    var ret = tryCallOne(cb, self._value);
-    if (ret === IS_ERROR) {
-      reject(deferred.promise, LAST_ERROR);
-    } else {
-      resolve(deferred.promise, ret);
-    }
-  });
-}
-function resolve(self, newValue) {
-  // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
-  if (newValue === self) {
-    return reject(
-      self,
-      new TypeError('A promise cannot be resolved with itself.')
-    );
-  }
-  if (
-    newValue &&
-    (typeof newValue === 'object' || typeof newValue === 'function')
-  ) {
-    var then = getThen(newValue);
-    if (then === IS_ERROR) {
-      return reject(self, LAST_ERROR);
-    }
-    if (
-      then === self.then &&
-      newValue instanceof Promise
-    ) {
-      self._state = 3;
-      self._value = newValue;
-      finale(self);
-      return;
-    } else if (typeof then === 'function') {
-      doResolve(then.bind(newValue), self);
-      return;
-    }
-  }
-  self._state = 1;
-  self._value = newValue;
-  finale(self);
-}
-
-function reject(self, newValue) {
-  self._state = 2;
-  self._value = newValue;
-  if (Promise._onReject) {
-    Promise._onReject(self, newValue);
-  }
-  finale(self);
-}
-function finale(self) {
-  if (self._deferredState === 1) {
-    handle(self, self._deferreds);
-    self._deferreds = null;
-  }
-  if (self._deferredState === 2) {
-    for (var i = 0; i < self._deferreds.length; i++) {
-      handle(self, self._deferreds[i]);
-    }
-    self._deferreds = null;
-  }
-}
-
-function Handler(onFulfilled, onRejected, promise){
-  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
-  this.onRejected = typeof onRejected === 'function' ? onRejected : null;
-  this.promise = promise;
-}
-
-/**
- * Take a potentially misbehaving resolver function and make sure
- * onFulfilled and onRejected are only called once.
- *
- * Makes no guarantees about asynchrony.
- */
-function doResolve(fn, promise) {
-  var done = false;
-  var res = tryCallTwo(fn, function (value) {
-    if (done) return;
-    done = true;
-    resolve(promise, value);
-  }, function (reason) {
-    if (done) return;
-    done = true;
-    reject(promise, reason);
-  });
-  if (!done && res === IS_ERROR) {
-    done = true;
-    reject(promise, LAST_ERROR);
-  }
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/src/done.js b/signaling_server/service/node_modules/express/node_modules/promise/src/done.js
deleted file mode 100644 (file)
index f879317..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.prototype.done = function (onFulfilled, onRejected) {
-  var self = arguments.length ? this.then.apply(this, arguments) : this;
-  self.then(null, function (err) {
-    setTimeout(function () {
-      throw err;
-    }, 0);
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/src/es6-extensions.js b/signaling_server/service/node_modules/express/node_modules/promise/src/es6-extensions.js
deleted file mode 100644 (file)
index 0435813..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-'use strict';
-
-//This file contains the ES6 extensions to the core Promises/A+ API
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-
-/* Static Functions */
-
-var TRUE = valuePromise(true);
-var FALSE = valuePromise(false);
-var NULL = valuePromise(null);
-var UNDEFINED = valuePromise(undefined);
-var ZERO = valuePromise(0);
-var EMPTYSTRING = valuePromise('');
-
-function valuePromise(value) {
-  var p = new Promise(Promise._noop);
-  p._state = 1;
-  p._value = value;
-  return p;
-}
-Promise.resolve = function (value) {
-  if (value instanceof Promise) return value;
-
-  if (value === null) return NULL;
-  if (value === undefined) return UNDEFINED;
-  if (value === true) return TRUE;
-  if (value === false) return FALSE;
-  if (value === 0) return ZERO;
-  if (value === '') return EMPTYSTRING;
-
-  if (typeof value === 'object' || typeof value === 'function') {
-    try {
-      var then = value.then;
-      if (typeof then === 'function') {
-        return new Promise(then.bind(value));
-      }
-    } catch (ex) {
-      return new Promise(function (resolve, reject) {
-        reject(ex);
-      });
-    }
-  }
-  return valuePromise(value);
-};
-
-Promise.all = function (arr) {
-  var args = Array.prototype.slice.call(arr);
-
-  return new Promise(function (resolve, reject) {
-    if (args.length === 0) return resolve([]);
-    var remaining = args.length;
-    function res(i, val) {
-      if (val && (typeof val === 'object' || typeof val === 'function')) {
-        if (val instanceof Promise && val.then === Promise.prototype.then) {
-          while (val._state === 3) {
-            val = val._value;
-          }
-          if (val._state === 1) return res(i, val._value);
-          if (val._state === 2) reject(val._value);
-          val.then(function (val) {
-            res(i, val);
-          }, reject);
-          return;
-        } else {
-          var then = val.then;
-          if (typeof then === 'function') {
-            var p = new Promise(then.bind(val));
-            p.then(function (val) {
-              res(i, val);
-            }, reject);
-            return;
-          }
-        }
-      }
-      args[i] = val;
-      if (--remaining === 0) {
-        resolve(args);
-      }
-    }
-    for (var i = 0; i < args.length; i++) {
-      res(i, args[i]);
-    }
-  });
-};
-
-Promise.reject = function (value) {
-  return new Promise(function (resolve, reject) {
-    reject(value);
-  });
-};
-
-Promise.race = function (values) {
-  return new Promise(function (resolve, reject) {
-    values.forEach(function(value){
-      Promise.resolve(value).then(resolve, reject);
-    });
-  });
-};
-
-/* Prototype Methods */
-
-Promise.prototype['catch'] = function (onRejected) {
-  return this.then(null, onRejected);
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/src/finally.js b/signaling_server/service/node_modules/express/node_modules/promise/src/finally.js
deleted file mode 100644 (file)
index f5ee0b9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.prototype['finally'] = function (f) {
-  return this.then(function (value) {
-    return Promise.resolve(f()).then(function () {
-      return value;
-    });
-  }, function (err) {
-    return Promise.resolve(f()).then(function () {
-      throw err;
-    });
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/src/index.js b/signaling_server/service/node_modules/express/node_modules/promise/src/index.js
deleted file mode 100644 (file)
index 6e674f3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-module.exports = require('./core.js');
-require('./done.js');
-require('./finally.js');
-require('./es6-extensions.js');
-require('./node-extensions.js');
-require('./synchronous.js');
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/src/node-extensions.js b/signaling_server/service/node_modules/express/node_modules/promise/src/node-extensions.js
deleted file mode 100644 (file)
index 157cddc..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-'use strict';
-
-// This file contains then/promise specific extensions that are only useful
-// for node.js interop
-
-var Promise = require('./core.js');
-var asap = require('asap');
-
-module.exports = Promise;
-
-/* Static Functions */
-
-Promise.denodeify = function (fn, argumentCount) {
-  if (
-    typeof argumentCount === 'number' && argumentCount !== Infinity
-  ) {
-    return denodeifyWithCount(fn, argumentCount);
-  } else {
-    return denodeifyWithoutCount(fn);
-  }
-};
-
-var callbackFn = (
-  'function (err, res) {' +
-  'if (err) { rj(err); } else { rs(res); }' +
-  '}'
-);
-function denodeifyWithCount(fn, argumentCount) {
-  var args = [];
-  for (var i = 0; i < argumentCount; i++) {
-    args.push('a' + i);
-  }
-  var body = [
-    'return function (' + args.join(',') + ') {',
-    'var self = this;',
-    'return new Promise(function (rs, rj) {',
-    'var res = fn.call(',
-    ['self'].concat(args).concat([callbackFn]).join(','),
-    ');',
-    'if (res &&',
-    '(typeof res === "object" || typeof res === "function") &&',
-    'typeof res.then === "function"',
-    ') {rs(res);}',
-    '});',
-    '};'
-  ].join('');
-  return Function(['Promise', 'fn'], body)(Promise, fn);
-}
-function denodeifyWithoutCount(fn) {
-  var fnLength = Math.max(fn.length - 1, 3);
-  var args = [];
-  for (var i = 0; i < fnLength; i++) {
-    args.push('a' + i);
-  }
-  var body = [
-    'return function (' + args.join(',') + ') {',
-    'var self = this;',
-    'var args;',
-    'var argLength = arguments.length;',
-    'if (arguments.length > ' + fnLength + ') {',
-    'args = new Array(arguments.length + 1);',
-    'for (var i = 0; i < arguments.length; i++) {',
-    'args[i] = arguments[i];',
-    '}',
-    '}',
-    'return new Promise(function (rs, rj) {',
-    'var cb = ' + callbackFn + ';',
-    'var res;',
-    'switch (argLength) {',
-    args.concat(['extra']).map(function (_, index) {
-      return (
-        'case ' + (index) + ':' +
-        'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +
-        'break;'
-      );
-    }).join(''),
-    'default:',
-    'args[argLength] = cb;',
-    'res = fn.apply(self, args);',
-    '}',
-    
-    'if (res &&',
-    '(typeof res === "object" || typeof res === "function") &&',
-    'typeof res.then === "function"',
-    ') {rs(res);}',
-    '});',
-    '};'
-  ].join('');
-
-  return Function(
-    ['Promise', 'fn'],
-    body
-  )(Promise, fn);
-}
-
-Promise.nodeify = function (fn) {
-  return function () {
-    var args = Array.prototype.slice.call(arguments);
-    var callback =
-      typeof args[args.length - 1] === 'function' ? args.pop() : null;
-    var ctx = this;
-    try {
-      return fn.apply(this, arguments).nodeify(callback, ctx);
-    } catch (ex) {
-      if (callback === null || typeof callback == 'undefined') {
-        return new Promise(function (resolve, reject) {
-          reject(ex);
-        });
-      } else {
-        asap(function () {
-          callback.call(ctx, ex);
-        })
-      }
-    }
-  }
-};
-
-Promise.prototype.nodeify = function (callback, ctx) {
-  if (typeof callback != 'function') return this;
-
-  this.then(function (value) {
-    asap(function () {
-      callback.call(ctx, null, value);
-    });
-  }, function (err) {
-    asap(function () {
-      callback.call(ctx, err);
-    });
-  });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/src/rejection-tracking.js b/signaling_server/service/node_modules/express/node_modules/promise/src/rejection-tracking.js
deleted file mode 100644 (file)
index 33a59a1..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-'use strict';
-
-var Promise = require('./core');
-
-var DEFAULT_WHITELIST = [
-  ReferenceError,
-  TypeError,
-  RangeError
-];
-
-var enabled = false;
-exports.disable = disable;
-function disable() {
-  enabled = false;
-  Promise._onHandle = null;
-  Promise._onReject = null;
-}
-
-exports.enable = enable;
-function enable(options) {
-  options = options || {};
-  if (enabled) disable();
-  enabled = true;
-  var id = 0;
-  var displayId = 0;
-  var rejections = {};
-  Promise._onHandle = function (promise) {
-    if (
-      promise._state === 2 && // IS REJECTED
-      rejections[promise._rejectionId]
-    ) {
-      if (rejections[promise._rejectionId].logged) {
-        onHandled(promise._rejectionId);
-      } else {
-        clearTimeout(rejections[promise._rejectionId].timeout);
-      }
-      delete rejections[promise._rejectionId];
-    }
-  };
-  Promise._onReject = function (promise, err) {
-    if (promise._deferredState === 0) { // not yet handled
-      promise._rejectionId = id++;
-      rejections[promise._rejectionId] = {
-        displayId: null,
-        error: err,
-        timeout: setTimeout(
-          onUnhandled.bind(null, promise._rejectionId),
-          // For reference errors and type errors, this almost always
-          // means the programmer made a mistake, so log them after just
-          // 100ms
-          // otherwise, wait 2 seconds to see if they get handled
-          matchWhitelist(err, DEFAULT_WHITELIST)
-            ? 100
-            : 2000
-        ),
-        logged: false
-      };
-    }
-  };
-  function onUnhandled(id) {
-    if (
-      options.allRejections ||
-      matchWhitelist(
-        rejections[id].error,
-        options.whitelist || DEFAULT_WHITELIST
-      )
-    ) {
-      rejections[id].displayId = displayId++;
-      if (options.onUnhandled) {
-        rejections[id].logged = true;
-        options.onUnhandled(
-          rejections[id].displayId,
-          rejections[id].error
-        );
-      } else {
-        rejections[id].logged = true;
-        logError(
-          rejections[id].displayId,
-          rejections[id].error
-        );
-      }
-    }
-  }
-  function onHandled(id) {
-    if (rejections[id].logged) {
-      if (options.onHandled) {
-        options.onHandled(rejections[id].displayId, rejections[id].error);
-      } else if (!rejections[id].onUnhandled) {
-        console.warn(
-          'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'
-        );
-        console.warn(
-          '  This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' +
-          rejections[id].displayId + '.'
-        );
-      }
-    }
-  }
-}
-
-function logError(id, error) {
-  console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');
-  var errStr = (error && (error.stack || error)) + '';
-  errStr.split('\n').forEach(function (line) {
-    console.warn('  ' + line);
-  });
-}
-
-function matchWhitelist(error, list) {
-  return list.some(function (cls) {
-    return error instanceof cls;
-  });
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/express/node_modules/promise/src/synchronous.js b/signaling_server/service/node_modules/express/node_modules/promise/src/synchronous.js
deleted file mode 100644 (file)
index 38b228f..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-'use strict';
-
-var Promise = require('./core.js');
-
-module.exports = Promise;
-Promise.enableSynchronous = function () {
-  Promise.prototype.isPending = function() {
-    return this.getState() == 0;
-  };
-
-  Promise.prototype.isFulfilled = function() {
-    return this.getState() == 1;
-  };
-
-  Promise.prototype.isRejected = function() {
-    return this.getState() == 2;
-  };
-
-  Promise.prototype.getValue = function () {
-    if (this._state === 3) {
-      return this._value.getValue();
-    }
-
-    if (!this.isFulfilled()) {
-      throw new Error('Cannot get a value of an unfulfilled promise.');
-    }
-
-    return this._value;
-  };
-
-  Promise.prototype.getReason = function () {
-    if (this._state === 3) {
-      return this._value.getReason();
-    }
-
-    if (!this.isRejected()) {
-      throw new Error('Cannot get a rejection reason of a non-rejected promise.');
-    }
-
-    return this._value;
-  };
-
-  Promise.prototype.getState = function () {
-    if (this._state === 3) {
-      return this._value.getState();
-    }
-    if (this._state === -1 || this._state === -2) {
-      return 0;
-    }
-
-    return this._state;
-  };
-};
-
-Promise.disableSynchronous = function() {
-  Promise.prototype.isPending = undefined;
-  Promise.prototype.isFulfilled = undefined;
-  Promise.prototype.isRejected = undefined;
-  Promise.prototype.getValue = undefined;
-  Promise.prototype.getReason = undefined;
-  Promise.prototype.getState = undefined;
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/proxy-addr/HISTORY.md b/signaling_server/service/node_modules/express/node_modules/proxy-addr/HISTORY.md
deleted file mode 100644 (file)
index 9765f08..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-2.0.5 / 2019-04-16
-==================
-
-  * deps: ipaddr.js@1.9.0
-
-2.0.4 / 2018-07-26
-==================
-
-  * deps: ipaddr.js@1.8.0
-
-2.0.3 / 2018-02-19
-==================
-
-  * deps: ipaddr.js@1.6.0
-
-2.0.2 / 2017-09-24
-==================
-
-  * deps: forwarded@~0.1.2
-    - perf: improve header parsing
-    - perf: reduce overhead when no `X-Forwarded-For` header
-
-2.0.1 / 2017-09-10
-==================
-
-  * deps: forwarded@~0.1.1
-    - Fix trimming leading / trailing OWS
-    - perf: hoist regular expression
-  * deps: ipaddr.js@1.5.2
-
-2.0.0 / 2017-08-08
-==================
-
-  * Drop support for Node.js below 0.10
-
-1.1.5 / 2017-07-25
-==================
-
-  * Fix array argument being altered
-  * deps: ipaddr.js@1.4.0
-
-1.1.4 / 2017-03-24
-==================
-
-  * deps: ipaddr.js@1.3.0
-
-1.1.3 / 2017-01-14
-==================
-
-  * deps: ipaddr.js@1.2.0
-
-1.1.2 / 2016-05-29
-==================
-
-  * deps: ipaddr.js@1.1.1
-    - Fix IPv6-mapped IPv4 validation edge cases
-
-1.1.1 / 2016-05-03
-==================
-
-  * Fix regression matching mixed versions against multiple subnets
-
-1.1.0 / 2016-05-01
-==================
-
-  * Fix accepting various invalid netmasks
-    - IPv4 netmasks must be contingous
-    - IPv6 addresses cannot be used as a netmask
-  * deps: ipaddr.js@1.1.0
-
-1.0.10 / 2015-12-09
-===================
-
-  * deps: ipaddr.js@1.0.5
-    - Fix regression in `isValid` with non-string arguments
-
-1.0.9 / 2015-12-01
-==================
-
-  * deps: ipaddr.js@1.0.4
-    - Fix accepting some invalid IPv6 addresses
-    - Reject CIDRs with negative or overlong masks
-  * perf: enable strict mode
-
-1.0.8 / 2015-05-10
-==================
-
-  * deps: ipaddr.js@1.0.1
-
-1.0.7 / 2015-03-16
-==================
-
-  * deps: ipaddr.js@0.1.9
-    - Fix OOM on certain inputs to `isValid`
-
-1.0.6 / 2015-02-01
-==================
-
-  * deps: ipaddr.js@0.1.8
-
-1.0.5 / 2015-01-08
-==================
-
-  * deps: ipaddr.js@0.1.6
-
-1.0.4 / 2014-11-23
-==================
-
-  * deps: ipaddr.js@0.1.5
-    - Fix edge cases with `isValid`
-
-1.0.3 / 2014-09-21
-==================
-
-  * Use `forwarded` npm module
-
-1.0.2 / 2014-09-18
-==================
-
-  * Fix a global leak when multiple subnets are trusted
-  * Support Node.js 0.6
-  * deps: ipaddr.js@0.1.3
-
-1.0.1 / 2014-06-03
-==================
-
-  * Fix links in npm package
-
-1.0.0 / 2014-05-08
-==================
-
-  * Add `trust` argument to determine proxy trust on
-    * Accepts custom function
-    * Accepts IPv4/IPv6 address(es)
-    * Accepts subnets
-    * Accepts pre-defined names
-  * Add optional `trust` argument to `proxyaddr.all` to
-    stop at first untrusted
-  * Add `proxyaddr.compile` to pre-compile `trust` function
-    to make subsequent calls faster
-
-0.0.1 / 2014-05-04
-==================
-
-  * Fix bad npm publish
-
-0.0.0 / 2014-05-04
-==================
-
-  * Initial release
diff --git a/signaling_server/service/node_modules/express/node_modules/proxy-addr/index.js b/signaling_server/service/node_modules/express/node_modules/proxy-addr/index.js
deleted file mode 100644 (file)
index 8bb7d33..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-/*!
- * proxy-addr
- * Copyright(c) 2014-2016 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module exports.
- * @public
- */
-
-module.exports = proxyaddr
-module.exports.all = alladdrs
-module.exports.compile = compile
-
-/**
- * Module dependencies.
- * @private
- */
-
-var forwarded = require('forwarded')
-var ipaddr = require('ipaddr.js')
-
-/**
- * Variables.
- * @private
- */
-
-var DIGIT_REGEXP = /^[0-9]+$/
-var isip = ipaddr.isValid
-var parseip = ipaddr.parse
-
-/**
- * Pre-defined IP ranges.
- * @private
- */
-
-var IP_RANGES = {
-  linklocal: ['169.254.0.0/16', 'fe80::/10'],
-  loopback: ['127.0.0.1/8', '::1/128'],
-  uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']
-}
-
-/**
- * Get all addresses in the request, optionally stopping
- * at the first untrusted.
- *
- * @param {Object} request
- * @param {Function|Array|String} [trust]
- * @public
- */
-
-function alladdrs (req, trust) {
-  // get addresses
-  var addrs = forwarded(req)
-
-  if (!trust) {
-    // Return all addresses
-    return addrs
-  }
-
-  if (typeof trust !== 'function') {
-    trust = compile(trust)
-  }
-
-  for (var i = 0; i < addrs.length - 1; i++) {
-    if (trust(addrs[i], i)) continue
-
-    addrs.length = i + 1
-  }
-
-  return addrs
-}
-
-/**
- * Compile argument into trust function.
- *
- * @param {Array|String} val
- * @private
- */
-
-function compile (val) {
-  if (!val) {
-    throw new TypeError('argument is required')
-  }
-
-  var trust
-
-  if (typeof val === 'string') {
-    trust = [val]
-  } else if (Array.isArray(val)) {
-    trust = val.slice()
-  } else {
-    throw new TypeError('unsupported trust argument')
-  }
-
-  for (var i = 0; i < trust.length; i++) {
-    val = trust[i]
-
-    if (!IP_RANGES.hasOwnProperty(val)) {
-      continue
-    }
-
-    // Splice in pre-defined range
-    val = IP_RANGES[val]
-    trust.splice.apply(trust, [i, 1].concat(val))
-    i += val.length - 1
-  }
-
-  return compileTrust(compileRangeSubnets(trust))
-}
-
-/**
- * Compile `arr` elements into range subnets.
- *
- * @param {Array} arr
- * @private
- */
-
-function compileRangeSubnets (arr) {
-  var rangeSubnets = new Array(arr.length)
-
-  for (var i = 0; i < arr.length; i++) {
-    rangeSubnets[i] = parseipNotation(arr[i])
-  }
-
-  return rangeSubnets
-}
-
-/**
- * Compile range subnet array into trust function.
- *
- * @param {Array} rangeSubnets
- * @private
- */
-
-function compileTrust (rangeSubnets) {
-  // Return optimized function based on length
-  var len = rangeSubnets.length
-  return len === 0
-    ? trustNone
-    : len === 1
-      ? trustSingle(rangeSubnets[0])
-      : trustMulti(rangeSubnets)
-}
-
-/**
- * Parse IP notation string into range subnet.
- *
- * @param {String} note
- * @private
- */
-
-function parseipNotation (note) {
-  var pos = note.lastIndexOf('/')
-  var str = pos !== -1
-    ? note.substring(0, pos)
-    : note
-
-  if (!isip(str)) {
-    throw new TypeError('invalid IP address: ' + str)
-  }
-
-  var ip = parseip(str)
-
-  if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {
-    // Store as IPv4
-    ip = ip.toIPv4Address()
-  }
-
-  var max = ip.kind() === 'ipv6'
-    ? 128
-    : 32
-
-  var range = pos !== -1
-    ? note.substring(pos + 1, note.length)
-    : null
-
-  if (range === null) {
-    range = max
-  } else if (DIGIT_REGEXP.test(range)) {
-    range = parseInt(range, 10)
-  } else if (ip.kind() === 'ipv4' && isip(range)) {
-    range = parseNetmask(range)
-  } else {
-    range = null
-  }
-
-  if (range <= 0 || range > max) {
-    throw new TypeError('invalid range on address: ' + note)
-  }
-
-  return [ip, range]
-}
-
-/**
- * Parse netmask string into CIDR range.
- *
- * @param {String} netmask
- * @private
- */
-
-function parseNetmask (netmask) {
-  var ip = parseip(netmask)
-  var kind = ip.kind()
-
-  return kind === 'ipv4'
-    ? ip.prefixLengthFromSubnetMask()
-    : null
-}
-
-/**
- * Determine address of proxied request.
- *
- * @param {Object} request
- * @param {Function|Array|String} trust
- * @public
- */
-
-function proxyaddr (req, trust) {
-  if (!req) {
-    throw new TypeError('req argument is required')
-  }
-
-  if (!trust) {
-    throw new TypeError('trust argument is required')
-  }
-
-  var addrs = alladdrs(req, trust)
-  var addr = addrs[addrs.length - 1]
-
-  return addr
-}
-
-/**
- * Static trust function to trust nothing.
- *
- * @private
- */
-
-function trustNone () {
-  return false
-}
-
-/**
- * Compile trust function for multiple subnets.
- *
- * @param {Array} subnets
- * @private
- */
-
-function trustMulti (subnets) {
-  return function trust (addr) {
-    if (!isip(addr)) return false
-
-    var ip = parseip(addr)
-    var ipconv
-    var kind = ip.kind()
-
-    for (var i = 0; i < subnets.length; i++) {
-      var subnet = subnets[i]
-      var subnetip = subnet[0]
-      var subnetkind = subnetip.kind()
-      var subnetrange = subnet[1]
-      var trusted = ip
-
-      if (kind !== subnetkind) {
-        if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {
-          // Incompatible IP addresses
-          continue
-        }
-
-        if (!ipconv) {
-          // Convert IP to match subnet IP kind
-          ipconv = subnetkind === 'ipv4'
-            ? ip.toIPv4Address()
-            : ip.toIPv4MappedAddress()
-        }
-
-        trusted = ipconv
-      }
-
-      if (trusted.match(subnetip, subnetrange)) {
-        return true
-      }
-    }
-
-    return false
-  }
-}
-
-/**
- * Compile trust function for single subnet.
- *
- * @param {Object} subnet
- * @private
- */
-
-function trustSingle (subnet) {
-  var subnetip = subnet[0]
-  var subnetkind = subnetip.kind()
-  var subnetisipv4 = subnetkind === 'ipv4'
-  var subnetrange = subnet[1]
-
-  return function trust (addr) {
-    if (!isip(addr)) return false
-
-    var ip = parseip(addr)
-    var kind = ip.kind()
-
-    if (kind !== subnetkind) {
-      if (subnetisipv4 && !ip.isIPv4MappedAddress()) {
-        // Incompatible IP addresses
-        return false
-      }
-
-      // Convert IP to match subnet IP kind
-      ip = subnetisipv4
-        ? ip.toIPv4Address()
-        : ip.toIPv4MappedAddress()
-    }
-
-    return ip.match(subnetip, subnetrange)
-  }
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/proxy-addr/package.json b/signaling_server/service/node_modules/express/node_modules/proxy-addr/package.json
deleted file mode 100644 (file)
index d8a8729..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "_from": "proxy-addr@~2.0.5",
-  "_id": "proxy-addr@2.0.5",
-  "_inBundle": false,
-  "_integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
-  "_location": "/proxy-addr",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "proxy-addr@~2.0.5",
-    "name": "proxy-addr",
-    "escapedName": "proxy-addr",
-    "rawSpec": "~2.0.5",
-    "saveSpec": null,
-    "fetchSpec": "~2.0.5"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
-  "_shasum": "34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34",
-  "_spec": "proxy-addr@~2.0.5",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/proxy-addr/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "forwarded": "~0.1.2",
-    "ipaddr.js": "1.9.0"
-  },
-  "deprecated": false,
-  "description": "Determine address of proxied request",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "2.1.4",
-    "deep-equal": "1.0.1",
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.1",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "mocha": "6.1.3",
-    "nyc": "13.3.0"
-  },
-  "engines": {
-    "node": ">= 0.10"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/proxy-addr#readme",
-  "keywords": [
-    "ip",
-    "proxy",
-    "x-forwarded-for"
-  ],
-  "license": "MIT",
-  "name": "proxy-addr",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/proxy-addr.git"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js",
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "nyc --reporter=text npm test",
-    "test-travis": "nyc --reporter=html --reporter=text npm test"
-  },
-  "version": "2.0.5"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/qs/package.json b/signaling_server/service/node_modules/express/node_modules/qs/package.json
deleted file mode 100644 (file)
index 8985c20..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-  "_from": "qs@6.7.0",
-  "_id": "qs@6.7.0",
-  "_inBundle": false,
-  "_integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
-  "_location": "/qs",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "qs@6.7.0",
-    "name": "qs",
-    "escapedName": "qs",
-    "rawSpec": "6.7.0",
-    "saveSpec": null,
-    "fetchSpec": "6.7.0"
-  },
-  "_requiredBy": [
-    "/body-parser",
-    "/express",
-    "/tiny-lr"
-  ],
-  "_resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
-  "_shasum": "41dc1a015e3d581f1621776be31afb2876a9b1bc",
-  "_spec": "qs@6.7.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/ljharb/qs/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Jordan Harband",
-      "email": "ljharb@gmail.com",
-      "url": "http://ljharb.codes"
-    }
-  ],
-  "dependencies": {},
-  "deprecated": false,
-  "description": "A querystring parser that supports nesting and arrays, with a depth limit",
-  "devDependencies": {
-    "@ljharb/eslint-config": "^13.1.1",
-    "browserify": "^16.2.3",
-    "covert": "^1.1.1",
-    "editorconfig-tools": "^0.1.1",
-    "eslint": "^5.15.3",
-    "evalmd": "^0.0.17",
-    "for-each": "^0.3.3",
-    "iconv-lite": "^0.4.24",
-    "mkdirp": "^0.5.1",
-    "object-inspect": "^1.6.0",
-    "qs-iconv": "^1.0.4",
-    "safe-publish-latest": "^1.1.2",
-    "safer-buffer": "^2.1.2",
-    "tape": "^4.10.1"
-  },
-  "engines": {
-    "node": ">=0.6"
-  },
-  "homepage": "https://github.com/ljharb/qs",
-  "keywords": [
-    "querystring",
-    "qs",
-    "query",
-    "url",
-    "parse",
-    "stringify"
-  ],
-  "license": "BSD-3-Clause",
-  "main": "lib/index.js",
-  "name": "qs",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/ljharb/qs.git"
-  },
-  "scripts": {
-    "coverage": "covert test",
-    "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js",
-    "lint": "eslint lib/*.js test/*.js",
-    "postlint": "editorconfig-tools check * lib/* test/*",
-    "prepublish": "safe-publish-latest && npm run dist",
-    "pretest": "npm run --silent readme && npm run --silent lint",
-    "readme": "evalmd README.md",
-    "test": "npm run --silent coverage",
-    "tests-only": "node test"
-  },
-  "version": "6.7.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/range-parser/package.json b/signaling_server/service/node_modules/express/node_modules/range-parser/package.json
deleted file mode 100644 (file)
index 4d14b04..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-{
-  "_from": "range-parser@~1.2.1",
-  "_id": "range-parser@1.2.1",
-  "_inBundle": false,
-  "_integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
-  "_location": "/range-parser",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "range-parser@~1.2.1",
-    "name": "range-parser",
-    "escapedName": "range-parser",
-    "rawSpec": "~1.2.1",
-    "saveSpec": null,
-    "fetchSpec": "~1.2.1"
-  },
-  "_requiredBy": [
-    "/express",
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-  "_shasum": "3cf37023d199e1c24d1a55b84800c2f3e6468031",
-  "_spec": "range-parser@~1.2.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca",
-    "url": "http://tjholowaychuk.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/range-parser/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "James Wyatt Cready",
-      "email": "wyatt.cready@lanetix.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "Range header field string parser",
-  "devDependencies": {
-    "deep-equal": "1.0.1",
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.2",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "mocha": "6.1.4",
-    "nyc": "14.1.1"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/range-parser#readme",
-  "keywords": [
-    "range",
-    "parser",
-    "http"
-  ],
-  "license": "MIT",
-  "name": "range-parser",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/range-parser.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test"
-  },
-  "version": "1.2.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/raw-body/package.json b/signaling_server/service/node_modules/express/node_modules/raw-body/package.json
deleted file mode 100644 (file)
index e66f4d3..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-{
-  "_from": "raw-body@2.4.0",
-  "_id": "raw-body@2.4.0",
-  "_inBundle": false,
-  "_integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
-  "_location": "/raw-body",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "raw-body@2.4.0",
-    "name": "raw-body",
-    "escapedName": "raw-body",
-    "rawSpec": "2.4.0",
-    "saveSpec": null,
-    "fetchSpec": "2.4.0"
-  },
-  "_requiredBy": [
-    "/body-parser"
-  ],
-  "_resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
-  "_shasum": "a1ce6fb9c9bc356ca52e89256ab59059e13d0332",
-  "_spec": "raw-body@2.4.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/body-parser",
-  "author": {
-    "name": "Jonathan Ong",
-    "email": "me@jongleberry.com",
-    "url": "http://jongleberry.com"
-  },
-  "bugs": {
-    "url": "https://github.com/stream-utils/raw-body/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Raynos",
-      "email": "raynos2@gmail.com"
-    }
-  ],
-  "dependencies": {
-    "bytes": "3.1.0",
-    "http-errors": "1.7.2",
-    "iconv-lite": "0.4.24",
-    "unpipe": "1.0.0"
-  },
-  "deprecated": false,
-  "description": "Get and validate the raw body of a readable stream.",
-  "devDependencies": {
-    "bluebird": "3.5.4",
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.16.0",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "istanbul": "0.4.5",
-    "mocha": "6.1.3",
-    "readable-stream": "2.3.6",
-    "safe-buffer": "5.1.2"
-  },
-  "engines": {
-    "node": ">= 0.8"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "index.d.ts",
-    "index.js"
-  ],
-  "homepage": "https://github.com/stream-utils/raw-body#readme",
-  "license": "MIT",
-  "name": "raw-body",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/stream-utils/raw-body.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --trace-deprecation --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --trace-deprecation --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --trace-deprecation --reporter spec --check-leaks test/"
-  },
-  "version": "2.4.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/safe-buffer/package.json b/signaling_server/service/node_modules/express/node_modules/safe-buffer/package.json
deleted file mode 100644 (file)
index ecee28b..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "_from": "safe-buffer@5.1.2",
-  "_id": "safe-buffer@5.1.2",
-  "_inBundle": false,
-  "_integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-  "_location": "/safe-buffer",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "safe-buffer@5.1.2",
-    "name": "safe-buffer",
-    "escapedName": "safe-buffer",
-    "rawSpec": "5.1.2",
-    "saveSpec": null,
-    "fetchSpec": "5.1.2"
-  },
-  "_requiredBy": [
-    "/are-we-there-yet/readable-stream",
-    "/are-we-there-yet/string_decoder",
-    "/concat-stream/readable-stream",
-    "/concat-stream/string_decoder",
-    "/content-disposition",
-    "/express",
-    "/memory-fs/readable-stream",
-    "/memory-fs/string_decoder",
-    "/node-libs-browser/readable-stream",
-    "/node-libs-browser/readable-stream/string_decoder",
-    "/readdirp/readable-stream",
-    "/readdirp/string_decoder",
-    "/request",
-    "/stream-browserify/readable-stream",
-    "/stream-browserify/string_decoder",
-    "/stream-http/readable-stream",
-    "/stream-http/string_decoder",
-    "/tunnel-agent",
-    "/websocket-driver"
-  ],
-  "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-  "_shasum": "991ec69d296e0313747d59bdfd2b745c35f8828d",
-  "_spec": "safe-buffer@5.1.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Feross Aboukhadijeh",
-    "email": "feross@feross.org",
-    "url": "http://feross.org"
-  },
-  "bugs": {
-    "url": "https://github.com/feross/safe-buffer/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Safer Node.js Buffer API",
-  "devDependencies": {
-    "standard": "*",
-    "tape": "^4.0.0"
-  },
-  "homepage": "https://github.com/feross/safe-buffer",
-  "keywords": [
-    "buffer",
-    "buffer allocate",
-    "node security",
-    "safe",
-    "safe-buffer",
-    "security",
-    "uninitialized"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "safe-buffer",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/feross/safe-buffer.git"
-  },
-  "scripts": {
-    "test": "standard && tape test/*.js"
-  },
-  "types": "index.d.ts",
-  "version": "5.1.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/safer-buffer/package.json b/signaling_server/service/node_modules/express/node_modules/safer-buffer/package.json
deleted file mode 100644 (file)
index a12a7c7..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "_from": "safer-buffer@>= 2.1.2 < 3",
-  "_id": "safer-buffer@2.1.2",
-  "_inBundle": false,
-  "_integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-  "_location": "/safer-buffer",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "safer-buffer@>= 2.1.2 < 3",
-    "name": "safer-buffer",
-    "escapedName": "safer-buffer",
-    "rawSpec": ">= 2.1.2 < 3",
-    "saveSpec": null,
-    "fetchSpec": ">= 2.1.2 < 3"
-  },
-  "_requiredBy": [
-    "/asn1",
-    "/ecc-jsbn",
-    "/iconv-lite",
-    "/sshpk"
-  ],
-  "_resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-  "_shasum": "44fa161b0187b9549dd84bb91802f9bd8385cd6a",
-  "_spec": "safer-buffer@>= 2.1.2 < 3",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/iconv-lite",
-  "author": {
-    "name": "Nikita Skovoroda",
-    "email": "chalkerx@gmail.com",
-    "url": "https://github.com/ChALkeR"
-  },
-  "bugs": {
-    "url": "https://github.com/ChALkeR/safer-buffer/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Modern Buffer API polyfill without footguns",
-  "devDependencies": {
-    "standard": "^11.0.1",
-    "tape": "^4.9.0"
-  },
-  "files": [
-    "Porting-Buffer.md",
-    "Readme.md",
-    "tests.js",
-    "dangerous.js",
-    "safer.js"
-  ],
-  "homepage": "https://github.com/ChALkeR/safer-buffer#readme",
-  "license": "MIT",
-  "main": "safer.js",
-  "name": "safer-buffer",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/ChALkeR/safer-buffer.git"
-  },
-  "scripts": {
-    "browserify-test": "browserify --external tape tests.js > browserify-tests.js && tape browserify-tests.js",
-    "test": "standard && tape tests.js"
-  },
-  "version": "2.1.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/send/node_modules/.bin/mime b/signaling_server/service/node_modules/express/node_modules/send/node_modules/.bin/mime
deleted file mode 100644 (file)
index 20b1ffe..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env node
-
-var mime = require('./mime.js');
-var file = process.argv[2];
-var type = mime.lookup(file);
-
-process.stdout.write(type + '\n');
-
diff --git a/signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/node_modules/ms/package.json b/signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/node_modules/ms/package.json
deleted file mode 100644 (file)
index aeb7b77..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "_from": "ms@2.0.0",
-  "_id": "ms@2.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-  "_location": "/send/debug/ms",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "ms@2.0.0",
-    "name": "ms",
-    "escapedName": "ms",
-    "rawSpec": "2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "2.0.0"
-  },
-  "_requiredBy": [
-    "/send/debug"
-  ],
-  "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-  "_shasum": "5608aeadfc00be6c2901df5f9861788de0d597c8",
-  "_spec": "ms@2.0.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/send/node_modules/debug",
-  "bugs": {
-    "url": "https://github.com/zeit/ms/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Tiny milisecond conversion utility",
-  "devDependencies": {
-    "eslint": "3.19.0",
-    "expect.js": "0.3.1",
-    "husky": "0.13.3",
-    "lint-staged": "3.4.1",
-    "mocha": "3.4.1"
-  },
-  "eslintConfig": {
-    "extends": "eslint:recommended",
-    "env": {
-      "node": true,
-      "es6": true
-    }
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/zeit/ms#readme",
-  "license": "MIT",
-  "lint-staged": {
-    "*.js": [
-      "npm run lint",
-      "prettier --single-quote --write",
-      "git add"
-    ]
-  },
-  "main": "./index",
-  "name": "ms",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/zeit/ms.git"
-  },
-  "scripts": {
-    "lint": "eslint lib/* bin/*",
-    "precommit": "lint-staged",
-    "test": "mocha tests.js"
-  },
-  "version": "2.0.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/package.json b/signaling_server/service/node_modules/express/node_modules/send/node_modules/debug/package.json
deleted file mode 100644 (file)
index 1f3f48e..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-  "_from": "debug@2.6.9",
-  "_id": "debug@2.6.9",
-  "_inBundle": false,
-  "_integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-  "_location": "/send/debug",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "debug@2.6.9",
-    "name": "debug",
-    "escapedName": "debug",
-    "rawSpec": "2.6.9",
-    "saveSpec": null,
-    "fetchSpec": "2.6.9"
-  },
-  "_requiredBy": [
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-  "_shasum": "5d128515df134ff327e90a4c93f4e077a536341f",
-  "_spec": "debug@2.6.9",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/send",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca"
-  },
-  "browser": "./src/browser.js",
-  "bugs": {
-    "url": "https://github.com/visionmedia/debug/issues"
-  },
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "debug/index.js": "browser.js",
-      "debug/debug.js": "debug.js"
-    }
-  },
-  "contributors": [
-    {
-      "name": "Nathan Rajlich",
-      "email": "nathan@tootallnate.net",
-      "url": "http://n8.io"
-    },
-    {
-      "name": "Andrew Rhyne",
-      "email": "rhyneandrew@gmail.com"
-    }
-  ],
-  "dependencies": {
-    "ms": "2.0.0"
-  },
-  "deprecated": false,
-  "description": "small debugging utility",
-  "devDependencies": {
-    "browserify": "9.0.3",
-    "chai": "^3.5.0",
-    "concurrently": "^3.1.0",
-    "coveralls": "^2.11.15",
-    "eslint": "^3.12.1",
-    "istanbul": "^0.4.5",
-    "karma": "^1.3.0",
-    "karma-chai": "^0.1.0",
-    "karma-mocha": "^1.3.0",
-    "karma-phantomjs-launcher": "^1.0.2",
-    "karma-sinon": "^1.0.5",
-    "mocha": "^3.2.0",
-    "mocha-lcov-reporter": "^1.2.0",
-    "rimraf": "^2.5.4",
-    "sinon": "^1.17.6",
-    "sinon-chai": "^2.8.0"
-  },
-  "homepage": "https://github.com/visionmedia/debug#readme",
-  "keywords": [
-    "debug",
-    "log",
-    "debugger"
-  ],
-  "license": "MIT",
-  "main": "./src/index.js",
-  "name": "debug",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/visionmedia/debug.git"
-  },
-  "version": "2.6.9"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/package.json b/signaling_server/service/node_modules/express/node_modules/send/node_modules/mime/package.json
deleted file mode 100644 (file)
index 91aa50e..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "_from": "mime@1.6.0",
-  "_id": "mime@1.6.0",
-  "_inBundle": false,
-  "_integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
-  "_location": "/send/mime",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "mime@1.6.0",
-    "name": "mime",
-    "escapedName": "mime",
-    "rawSpec": "1.6.0",
-    "saveSpec": null,
-    "fetchSpec": "1.6.0"
-  },
-  "_requiredBy": [
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-  "_shasum": "32cd9e5c64553bd58d19a568af452acff04981b1",
-  "_spec": "mime@1.6.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/send",
-  "author": {
-    "name": "Robert Kieffer",
-    "email": "robert@broofa.com",
-    "url": "http://github.com/broofa"
-  },
-  "bin": {
-    "mime": "cli.js"
-  },
-  "bugs": {
-    "url": "https://github.com/broofa/node-mime/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Benjamin Thomas",
-      "email": "benjamin@benjaminthomas.org",
-      "url": "http://github.com/bentomas"
-    }
-  ],
-  "dependencies": {},
-  "deprecated": false,
-  "description": "A comprehensive library for mime-type mapping",
-  "devDependencies": {
-    "github-release-notes": "0.13.1",
-    "mime-db": "1.31.0",
-    "mime-score": "1.1.0"
-  },
-  "engines": {
-    "node": ">=4"
-  },
-  "homepage": "https://github.com/broofa/node-mime#readme",
-  "keywords": [
-    "util",
-    "mime"
-  ],
-  "license": "MIT",
-  "main": "mime.js",
-  "name": "mime",
-  "repository": {
-    "url": "git+https://github.com/broofa/node-mime.git",
-    "type": "git"
-  },
-  "scripts": {
-    "changelog": "gren changelog --tags=all --generate --override",
-    "prepare": "node src/build.js",
-    "test": "node src/test.js"
-  },
-  "version": "1.6.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/send/node_modules/ms/package.json b/signaling_server/service/node_modules/express/node_modules/send/node_modules/ms/package.json
deleted file mode 100644 (file)
index 431855c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "_from": "ms@2.1.1",
-  "_id": "ms@2.1.1",
-  "_inBundle": false,
-  "_integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
-  "_location": "/send/ms",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "ms@2.1.1",
-    "name": "ms",
-    "escapedName": "ms",
-    "rawSpec": "2.1.1",
-    "saveSpec": null,
-    "fetchSpec": "2.1.1"
-  },
-  "_requiredBy": [
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-  "_shasum": "30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a",
-  "_spec": "ms@2.1.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/send",
-  "bugs": {
-    "url": "https://github.com/zeit/ms/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Tiny millisecond conversion utility",
-  "devDependencies": {
-    "eslint": "4.12.1",
-    "expect.js": "0.3.1",
-    "husky": "0.14.3",
-    "lint-staged": "5.0.0",
-    "mocha": "4.0.1"
-  },
-  "eslintConfig": {
-    "extends": "eslint:recommended",
-    "env": {
-      "node": true,
-      "es6": true
-    }
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/zeit/ms#readme",
-  "license": "MIT",
-  "lint-staged": {
-    "*.js": [
-      "npm run lint",
-      "prettier --single-quote --write",
-      "git add"
-    ]
-  },
-  "main": "./index",
-  "name": "ms",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/zeit/ms.git"
-  },
-  "scripts": {
-    "lint": "eslint lib/* bin/*",
-    "precommit": "lint-staged",
-    "test": "mocha tests.js"
-  },
-  "version": "2.1.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/send/package.json b/signaling_server/service/node_modules/express/node_modules/send/package.json
deleted file mode 100644 (file)
index 265a44a..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-{
-  "_from": "send@0.17.1",
-  "_id": "send@0.17.1",
-  "_inBundle": false,
-  "_integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
-  "_location": "/send",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "send@0.17.1",
-    "name": "send",
-    "escapedName": "send",
-    "rawSpec": "0.17.1",
-    "saveSpec": null,
-    "fetchSpec": "0.17.1"
-  },
-  "_requiredBy": [
-    "/express",
-    "/serve-static"
-  ],
-  "_resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
-  "_shasum": "c1d8b059f7900f7466dd4938bdc44e11ddb376c8",
-  "_spec": "send@0.17.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca"
-  },
-  "bugs": {
-    "url": "https://github.com/pillarjs/send/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "James Wyatt Cready",
-      "email": "jcready@gmail.com"
-    },
-    {
-      "name": "Jesús Leganés Combarro",
-      "email": "piranna@gmail.com"
-    }
-  ],
-  "dependencies": {
-    "debug": "2.6.9",
-    "depd": "~1.1.2",
-    "destroy": "~1.0.4",
-    "encodeurl": "~1.0.2",
-    "escape-html": "~1.0.3",
-    "etag": "~1.8.1",
-    "fresh": "0.5.2",
-    "http-errors": "~1.7.2",
-    "mime": "1.6.0",
-    "ms": "2.1.1",
-    "on-finished": "~2.3.0",
-    "range-parser": "~1.2.1",
-    "statuses": "~1.5.0"
-  },
-  "deprecated": false,
-  "description": "Better streaming static file server with Range and conditional-GET support",
-  "devDependencies": {
-    "after": "0.8.2",
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.2",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "istanbul": "0.4.5",
-    "mocha": "6.1.4",
-    "supertest": "4.0.2"
-  },
-  "engines": {
-    "node": ">= 0.8.0"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/pillarjs/send#readme",
-  "keywords": [
-    "static",
-    "file",
-    "server"
-  ],
-  "license": "MIT",
-  "name": "send",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/pillarjs/send.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --check-leaks --reporter spec --bail",
-    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot"
-  },
-  "version": "0.17.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/serve-static/package.json b/signaling_server/service/node_modules/express/node_modules/serve-static/package.json
deleted file mode 100644 (file)
index f395cac..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-{
-  "_from": "serve-static@1.14.1",
-  "_id": "serve-static@1.14.1",
-  "_inBundle": false,
-  "_integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
-  "_location": "/serve-static",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "serve-static@1.14.1",
-    "name": "serve-static",
-    "escapedName": "serve-static",
-    "rawSpec": "1.14.1",
-    "saveSpec": null,
-    "fetchSpec": "1.14.1"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
-  "_shasum": "666e636dc4f010f7ef29970a88a674320898b2f9",
-  "_spec": "serve-static@1.14.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "bugs": {
-    "url": "https://github.com/expressjs/serve-static/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "encodeurl": "~1.0.2",
-    "escape-html": "~1.0.3",
-    "parseurl": "~1.3.3",
-    "send": "0.17.1"
-  },
-  "deprecated": false,
-  "description": "Serve static files",
-  "devDependencies": {
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.2",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "istanbul": "0.4.5",
-    "mocha": "6.1.4",
-    "safe-buffer": "5.1.2",
-    "supertest": "4.0.2"
-  },
-  "engines": {
-    "node": ">= 0.8.0"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/expressjs/serve-static#readme",
-  "license": "MIT",
-  "name": "serve-static",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/expressjs/serve-static.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "version": "node scripts/version-history.js && git add HISTORY.md"
-  },
-  "version": "1.14.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/setprototypeof/package.json b/signaling_server/service/node_modules/express/node_modules/setprototypeof/package.json
deleted file mode 100644 (file)
index 93c12dc..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "_from": "setprototypeof@1.1.1",
-  "_id": "setprototypeof@1.1.1",
-  "_inBundle": false,
-  "_integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
-  "_location": "/setprototypeof",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "setprototypeof@1.1.1",
-    "name": "setprototypeof",
-    "escapedName": "setprototypeof",
-    "rawSpec": "1.1.1",
-    "saveSpec": null,
-    "fetchSpec": "1.1.1"
-  },
-  "_requiredBy": [
-    "/express",
-    "/http-errors"
-  ],
-  "_resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-  "_shasum": "7e95acb24aa92f5885e0abef5ba131330d4ae683",
-  "_spec": "setprototypeof@1.1.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Wes Todd"
-  },
-  "bugs": {
-    "url": "https://github.com/wesleytodd/setprototypeof/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "A small polyfill for Object.setprototypeof",
-  "devDependencies": {
-    "mocha": "^5.2.0",
-    "standard": "^12.0.1"
-  },
-  "homepage": "https://github.com/wesleytodd/setprototypeof",
-  "keywords": [
-    "polyfill",
-    "object",
-    "setprototypeof"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "name": "setprototypeof",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/wesleytodd/setprototypeof.git"
-  },
-  "scripts": {
-    "node010": "NODE_VER=0.10 MOCHA_VER=3 npm run testversion",
-    "node11": "NODE_VER=11 npm run testversion",
-    "node4": "NODE_VER=4 npm run testversion",
-    "node6": "NODE_VER=6 npm run testversion",
-    "node9": "NODE_VER=9 npm run testversion",
-    "test": "standard && mocha",
-    "testallversions": "npm run node010 && npm run node4 && npm run node6 && npm run node9 && npm run node11",
-    "testversion": "docker run -it --rm -v $(PWD):/usr/src/app -w /usr/src/app node:${NODE_VER} npm install mocha@${MOCHA_VER:-latest} && npm t"
-  },
-  "typings": "index.d.ts",
-  "version": "1.1.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/statuses/package.json b/signaling_server/service/node_modules/express/node_modules/statuses/package.json
deleted file mode 100644 (file)
index 7e82463..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-{
-  "_from": "statuses@~1.5.0",
-  "_id": "statuses@1.5.0",
-  "_inBundle": false,
-  "_integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
-  "_location": "/statuses",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "statuses@~1.5.0",
-    "name": "statuses",
-    "escapedName": "statuses",
-    "rawSpec": "~1.5.0",
-    "saveSpec": null,
-    "fetchSpec": "~1.5.0"
-  },
-  "_requiredBy": [
-    "/express",
-    "/finalhandler",
-    "/http-errors",
-    "/send"
-  ],
-  "_resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-  "_shasum": "161c7dac177659fd9811f43771fa99381478628c",
-  "_spec": "statuses@~1.5.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/jshttp/statuses/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "HTTP status utility",
-  "devDependencies": {
-    "csv-parse": "1.2.4",
-    "eslint": "4.19.1",
-    "eslint-config-standard": "11.0.0",
-    "eslint-plugin-import": "2.9.0",
-    "eslint-plugin-markdown": "1.0.0-beta.6",
-    "eslint-plugin-node": "6.0.1",
-    "eslint-plugin-promise": "3.7.0",
-    "eslint-plugin-standard": "3.0.1",
-    "istanbul": "0.4.5",
-    "mocha": "1.21.5",
-    "raw-body": "2.3.2",
-    "stream-to-array": "2.3.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "HISTORY.md",
-    "index.js",
-    "codes.json",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/jshttp/statuses#readme",
-  "keywords": [
-    "http",
-    "status",
-    "code"
-  ],
-  "license": "MIT",
-  "name": "statuses",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/statuses.git"
-  },
-  "scripts": {
-    "build": "node scripts/build.js",
-    "fetch": "node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js",
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --check-leaks --bail test/",
-    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "update": "npm run fetch && npm run build"
-  },
-  "version": "1.5.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/toidentifier/package.json b/signaling_server/service/node_modules/express/node_modules/toidentifier/package.json
deleted file mode 100644 (file)
index 7f42d02..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "_from": "toidentifier@1.0.0",
-  "_id": "toidentifier@1.0.0",
-  "_inBundle": false,
-  "_integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
-  "_location": "/toidentifier",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "toidentifier@1.0.0",
-    "name": "toidentifier",
-    "escapedName": "toidentifier",
-    "rawSpec": "1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "1.0.0"
-  },
-  "_requiredBy": [
-    "/http-errors"
-  ],
-  "_resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
-  "_shasum": "7e1be3470f1e77948bc43d94a3c8f4d7752ba553",
-  "_spec": "toidentifier@1.0.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/http-errors",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "bugs": {
-    "url": "https://github.com/component/toidentifier/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Nick Baugh",
-      "email": "niftylettuce@gmail.com",
-      "url": "http://niftylettuce.com/"
-    }
-  ],
-  "deprecated": false,
-  "description": "Convert a string of words to a JavaScript identifier",
-  "devDependencies": {
-    "eslint": "4.19.1",
-    "eslint-config-standard": "11.0.0",
-    "eslint-plugin-import": "2.11.0",
-    "eslint-plugin-markdown": "1.0.0-beta.6",
-    "eslint-plugin-node": "6.0.1",
-    "eslint-plugin-promise": "3.7.0",
-    "eslint-plugin-standard": "3.1.0",
-    "mocha": "1.21.5",
-    "nyc": "11.8.0"
-  },
-  "engines": {
-    "node": ">=0.6"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/component/toidentifier#readme",
-  "license": "MIT",
-  "name": "toidentifier",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/component/toidentifier.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "nyc --reporter=html --reporter=text npm test"
-  },
-  "version": "1.0.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/type-check/LICENSE b/signaling_server/service/node_modules/express/node_modules/type-check/LICENSE
deleted file mode 100644 (file)
index 525b118..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) George Zahariev
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/type-check/README.md b/signaling_server/service/node_modules/express/node_modules/type-check/README.md
deleted file mode 100644 (file)
index ec92d59..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-# type-check [![Build Status](https://travis-ci.org/gkz/type-check.png?branch=master)](https://travis-ci.org/gkz/type-check)
-
-<a name="type-check" />
-
-`type-check` is a library which allows you to check the types of JavaScript values at runtime with a Haskell like type syntax. It is great for checking external input, for testing, or even for adding a bit of safety to your internal code. It is a major component of [levn](https://github.com/gkz/levn). MIT license. Version 0.3.2. Check out the [demo](http://gkz.github.io/type-check/).
-
-For updates on `type-check`, [follow me on twitter](https://twitter.com/gkzahariev).
-
-    npm install type-check
-
-## Quick Examples
-
-```js
-// Basic types:
-var typeCheck = require('type-check').typeCheck;
-typeCheck('Number', 1);               // true
-typeCheck('Number', 'str');           // false
-typeCheck('Error', new Error);        // true
-typeCheck('Undefined', undefined);    // true
-
-// Comment
-typeCheck('count::Number', 1);        // true
-
-// One type OR another type:
-typeCheck('Number | String', 2);      // true
-typeCheck('Number | String', 'str');  // true
-
-// Wildcard, matches all types:
-typeCheck('*', 2) // true
-
-// Array, all elements of a single type:
-typeCheck('[Number]', [1, 2, 3]);                // true
-typeCheck('[Number]', [1, 'str', 3]);            // false
-
-// Tuples, or fixed length arrays with elements of different types:
-typeCheck('(String, Number)', ['str', 2]);       // true
-typeCheck('(String, Number)', ['str']);          // false
-typeCheck('(String, Number)', ['str', 2, 5]);    // false
-
-// Object properties:
-typeCheck('{x: Number, y: Boolean}', {x: 2, y: false});             // true
-typeCheck('{x: Number, y: Boolean}',       {x: 2});                 // false
-typeCheck('{x: Number, y: Maybe Boolean}', {x: 2});                 // true
-typeCheck('{x: Number, y: Boolean}',      {x: 2, y: false, z: 3});  // false
-typeCheck('{x: Number, y: Boolean, ...}', {x: 2, y: false, z: 3});  // true
-
-// A particular type AND object properties:
-typeCheck('RegExp{source: String, ...}', /re/i);          // true
-typeCheck('RegExp{source: String, ...}', {source: 're'}); // false
-
-// Custom types:
-var opt = {customTypes:
-  {Even: { typeOf: 'Number', validate: function(x) { return x % 2 === 0; }}}};
-typeCheck('Even', 2, opt); // true
-
-// Nested:
-var type = '{a: (String, [Number], {y: Array, ...}), b: Error{message: String, ...}}'
-typeCheck(type, {a: ['hi', [1, 2, 3], {y: [1, 'ms']}], b: new Error('oh no')}); // true
-```
-
-Check out the [type syntax format](#syntax) and [guide](#guide).
-
-## Usage
-
-`require('type-check');` returns an object that exposes four properties. `VERSION` is the current version of the library as a string. `typeCheck`, `parseType`, and `parsedTypeCheck` are functions.
-
-```js
-// typeCheck(type, input, options);
-typeCheck('Number', 2);               // true
-
-// parseType(type);
-var parsedType = parseType('Number'); // object
-
-// parsedTypeCheck(parsedType, input, options);
-parsedTypeCheck(parsedType, 2);       // true
-```
-
-### typeCheck(type, input, options)
-
-`typeCheck` checks a JavaScript value `input` against `type` written in the [type format](#type-format) (and taking account the optional `options`) and returns whether the `input` matches the `type`.
-
-##### arguments
-* type - `String` - the type written in the [type format](#type-format) which to check against
-* input - `*` - any JavaScript value, which is to be checked against the type
-* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)
-
-##### returns
-`Boolean` - whether the input matches the type
-
-##### example
-```js
-typeCheck('Number', 2); // true
-```
-
-### parseType(type)
-
-`parseType` parses string `type` written in the [type format](#type-format) into an object representing the parsed type.
-
-##### arguments
-* type - `String` - the type written in the [type format](#type-format) which to parse
-
-##### returns
-`Object` - an object in the parsed type format representing the parsed type
-
-##### example
-```js
-parseType('Number'); // [{type: 'Number'}]
-```
-### parsedTypeCheck(parsedType, input, options)
-
-`parsedTypeCheck` checks a JavaScript value `input` against parsed `type` in the parsed type format (and taking account the optional `options`) and returns whether the `input` matches the `type`. Use this in conjunction with `parseType` if you are going to use a type more than once.
-
-##### arguments
-* type - `Object` - the type in the parsed type format which to check against
-* input - `*` - any JavaScript value, which is to be checked against the type
-* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)
-
-##### returns
-`Boolean` - whether the input matches the type
-
-##### example
-```js
-parsedTypeCheck([{type: 'Number'}], 2); // true
-var parsedType = parseType('String');
-parsedTypeCheck(parsedType, 'str');     // true
-```
-
-<a name="type-format" />
-## Type Format
-
-### Syntax
-
-White space is ignored. The root node is a __Types__.
-
-* __Identifier__ = `[\$\w]+` - a group of any lower or upper case letters, numbers, underscores, or dollar signs - eg. `String`
-* __Type__ = an `Identifier`, an `Identifier` followed by a `Structure`, just a `Structure`, or a wildcard `*` - eg. `String`, `Object{x: Number}`, `{x: Number}`, `Array{0: String, 1: Boolean, length: Number}`, `*`
-* __Types__ = optionally a comment (an `Indentifier` followed by a `::`), optionally the identifier `Maybe`, one or more `Type`, separated by `|` - eg. `Number`, `String | Date`, `Maybe Number`, `Maybe Boolean | String`
-* __Structure__ = `Fields`, or a `Tuple`, or an `Array` - eg. `{x: Number}`, `(String, Number)`, `[Date]`
-* __Fields__ = a `{`, followed one or more `Field` separated by a comma `,` (trailing comma `,` is permitted), optionally an `...` (always preceded by a comma `,`), followed by a `}` - eg. `{x: Number, y: String}`, `{k: Function, ...}`
-* __Field__ = an `Identifier`, followed by a colon `:`, followed by `Types` - eg. `x: Date | String`, `y: Boolean`
-* __Tuple__ = a `(`, followed by one or more `Types` separated by a comma `,` (trailing comma `,` is permitted), followed by a `)` - eg `(Date)`, `(Number, Date)`
-* __Array__ = a `[` followed by exactly one `Types` followed by a `]` - eg. `[Boolean]`, `[Boolean | Null]`
-
-### Guide
-
-`type-check` uses `Object.toString` to find out the basic type of a value. Specifically,
-
-```js
-{}.toString.call(VALUE).slice(8, -1)
-{}.toString.call(true).slice(8, -1) // 'Boolean'
-```
-A basic type, eg. `Number`, uses this check. This is much more versatile than using `typeof` - for example, with `document`, `typeof` produces `'object'` which isn't that useful, and our technique produces `'HTMLDocument'`.
-
-You may check for multiple types by separating types with a `|`. The checker proceeds from left to right, and passes if the value is any of the types - eg. `String | Boolean` first checks if the value is a string, and then if it is a boolean. If it is none of those, then it returns false.
-
-Adding a `Maybe` in front of a list of multiple types is the same as also checking for `Null` and `Undefined` - eg. `Maybe String` is equivalent to `Undefined | Null | String`.
-
-You may add a comment to remind you of what the type is for by following an identifier with a `::` before a type (or multiple types). The comment is simply thrown out.
-
-The wildcard `*` matches all types.
-
-There are three types of structures for checking the contents of a value: 'fields', 'tuple', and 'array'.
-
-If used by itself, a 'fields' structure will pass with any type of object as long as it is an instance of `Object` and the properties pass - this allows for duck typing - eg. `{x: Boolean}`.
-
-To check if the properties pass, and the value is of a certain type, you can specify the type - eg. `Error{message: String}`.
-
-If you want to make a field optional, you can simply use `Maybe` - eg. `{x: Boolean, y: Maybe String}` will still pass if `y` is undefined (or null).
-
-If you don't care if the value has properties beyond what you have specified, you can use the 'etc' operator `...` - eg. `{x: Boolean, ...}` will match an object with an `x` property that is a boolean, and with zero or more other properties.
-
-For an array, you must specify one or more types (separated by `|`) - it will pass for something of any length as long as each element passes the types provided - eg. `[Number]`, `[Number | String]`.
-
-A tuple checks for a fixed number of elements, each of a potentially different type. Each element is separated by a comma - eg. `(String, Number)`.
-
-An array and tuple structure check that the value is of type `Array` by default, but if another type is specified, they will check for that instead - eg. `Int32Array[Number]`. You can use the wildcard `*` to search for any type at all.
-
-Check out the [type precedence](https://github.com/zaboco/type-precedence) library for type-check.
-
-## Options
-
-Options is an object. It is an optional parameter to the `typeCheck` and `parsedTypeCheck` functions. The only current option is `customTypes`.
-
-<a name="custom-types" />
-### Custom Types
-
-__Example:__
-
-```js
-var options = {
-  customTypes: {
-    Even: {
-      typeOf: 'Number',
-      validate: function(x) {
-        return x % 2 === 0;
-      }
-    }
-  }
-};
-typeCheck('Even', 2, options); // true
-typeCheck('Even', 3, options); // false
-```
-
-`customTypes` allows you to set up custom types for validation. The value of this is an object. The keys of the object are the types you will be matching. Each value of the object will be an object having a `typeOf` property - a string, and `validate` property - a function.
-
-The `typeOf` property is the type the value should be, and `validate` is a function which should return true if the value is of that type. `validate` receives one parameter, which is the value that we are checking.
-
-## Technical About
-
-`type-check` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It also uses the [prelude.ls](http://preludels.com/) library.
diff --git a/signaling_server/service/node_modules/express/node_modules/type-check/lib/check.js b/signaling_server/service/node_modules/express/node_modules/type-check/lib/check.js
deleted file mode 100644 (file)
index 0504c8d..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-// Generated by LiveScript 1.4.0
-(function(){
-  var ref$, any, all, isItNaN, types, defaultType, customTypes, toString$ = {}.toString;
-  ref$ = require('prelude-ls'), any = ref$.any, all = ref$.all, isItNaN = ref$.isItNaN;
-  types = {
-    Number: {
-      typeOf: 'Number',
-      validate: function(it){
-        return !isItNaN(it);
-      }
-    },
-    NaN: {
-      typeOf: 'Number',
-      validate: isItNaN
-    },
-    Int: {
-      typeOf: 'Number',
-      validate: function(it){
-        return !isItNaN(it) && it % 1 === 0;
-      }
-    },
-    Float: {
-      typeOf: 'Number',
-      validate: function(it){
-        return !isItNaN(it);
-      }
-    },
-    Date: {
-      typeOf: 'Date',
-      validate: function(it){
-        return !isItNaN(it.getTime());
-      }
-    }
-  };
-  defaultType = {
-    array: 'Array',
-    tuple: 'Array'
-  };
-  function checkArray(input, type){
-    return all(function(it){
-      return checkMultiple(it, type.of);
-    }, input);
-  }
-  function checkTuple(input, type){
-    var i, i$, ref$, len$, types;
-    i = 0;
-    for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {
-      types = ref$[i$];
-      if (!checkMultiple(input[i], types)) {
-        return false;
-      }
-      i++;
-    }
-    return input.length <= i;
-  }
-  function checkFields(input, type){
-    var inputKeys, numInputKeys, k, numOfKeys, key, ref$, types;
-    inputKeys = {};
-    numInputKeys = 0;
-    for (k in input) {
-      inputKeys[k] = true;
-      numInputKeys++;
-    }
-    numOfKeys = 0;
-    for (key in ref$ = type.of) {
-      types = ref$[key];
-      if (!checkMultiple(input[key], types)) {
-        return false;
-      }
-      if (inputKeys[key]) {
-        numOfKeys++;
-      }
-    }
-    return type.subset || numInputKeys === numOfKeys;
-  }
-  function checkStructure(input, type){
-    if (!(input instanceof Object)) {
-      return false;
-    }
-    switch (type.structure) {
-    case 'fields':
-      return checkFields(input, type);
-    case 'array':
-      return checkArray(input, type);
-    case 'tuple':
-      return checkTuple(input, type);
-    }
-  }
-  function check(input, typeObj){
-    var type, structure, setting, that;
-    type = typeObj.type, structure = typeObj.structure;
-    if (type) {
-      if (type === '*') {
-        return true;
-      }
-      setting = customTypes[type] || types[type];
-      if (setting) {
-        return setting.typeOf === toString$.call(input).slice(8, -1) && setting.validate(input);
-      } else {
-        return type === toString$.call(input).slice(8, -1) && (!structure || checkStructure(input, typeObj));
-      }
-    } else if (structure) {
-      if (that = defaultType[structure]) {
-        if (that !== toString$.call(input).slice(8, -1)) {
-          return false;
-        }
-      }
-      return checkStructure(input, typeObj);
-    } else {
-      throw new Error("No type defined. Input: " + input + ".");
-    }
-  }
-  function checkMultiple(input, types){
-    if (toString$.call(types).slice(8, -1) !== 'Array') {
-      throw new Error("Types must be in an array. Input: " + input + ".");
-    }
-    return any(function(it){
-      return check(input, it);
-    }, types);
-  }
-  module.exports = function(parsedType, input, options){
-    options == null && (options = {});
-    customTypes = options.customTypes || {};
-    return checkMultiple(input, parsedType);
-  };
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/type-check/lib/index.js b/signaling_server/service/node_modules/express/node_modules/type-check/lib/index.js
deleted file mode 100644 (file)
index f3316ba..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-// Generated by LiveScript 1.4.0
-(function(){
-  var VERSION, parseType, parsedTypeCheck, typeCheck;
-  VERSION = '0.3.2';
-  parseType = require('./parse-type');
-  parsedTypeCheck = require('./check');
-  typeCheck = function(type, input, options){
-    return parsedTypeCheck(parseType(type), input, options);
-  };
-  module.exports = {
-    VERSION: VERSION,
-    typeCheck: typeCheck,
-    parsedTypeCheck: parsedTypeCheck,
-    parseType: parseType
-  };
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/type-check/lib/parse-type.js b/signaling_server/service/node_modules/express/node_modules/type-check/lib/parse-type.js
deleted file mode 100644 (file)
index 5baf661..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-// Generated by LiveScript 1.4.0
-(function(){
-  var identifierRegex, tokenRegex;
-  identifierRegex = /[\$\w]+/;
-  function peek(tokens){
-    var token;
-    token = tokens[0];
-    if (token == null) {
-      throw new Error('Unexpected end of input.');
-    }
-    return token;
-  }
-  function consumeIdent(tokens){
-    var token;
-    token = peek(tokens);
-    if (!identifierRegex.test(token)) {
-      throw new Error("Expected text, got '" + token + "' instead.");
-    }
-    return tokens.shift();
-  }
-  function consumeOp(tokens, op){
-    var token;
-    token = peek(tokens);
-    if (token !== op) {
-      throw new Error("Expected '" + op + "', got '" + token + "' instead.");
-    }
-    return tokens.shift();
-  }
-  function maybeConsumeOp(tokens, op){
-    var token;
-    token = tokens[0];
-    if (token === op) {
-      return tokens.shift();
-    } else {
-      return null;
-    }
-  }
-  function consumeArray(tokens){
-    var types;
-    consumeOp(tokens, '[');
-    if (peek(tokens) === ']') {
-      throw new Error("Must specify type of Array - eg. [Type], got [] instead.");
-    }
-    types = consumeTypes(tokens);
-    consumeOp(tokens, ']');
-    return {
-      structure: 'array',
-      of: types
-    };
-  }
-  function consumeTuple(tokens){
-    var components;
-    components = [];
-    consumeOp(tokens, '(');
-    if (peek(tokens) === ')') {
-      throw new Error("Tuple must be of at least length 1 - eg. (Type), got () instead.");
-    }
-    for (;;) {
-      components.push(consumeTypes(tokens));
-      maybeConsumeOp(tokens, ',');
-      if (')' === peek(tokens)) {
-        break;
-      }
-    }
-    consumeOp(tokens, ')');
-    return {
-      structure: 'tuple',
-      of: components
-    };
-  }
-  function consumeFields(tokens){
-    var fields, subset, ref$, key, types;
-    fields = {};
-    consumeOp(tokens, '{');
-    subset = false;
-    for (;;) {
-      if (maybeConsumeOp(tokens, '...')) {
-        subset = true;
-        break;
-      }
-      ref$ = consumeField(tokens), key = ref$[0], types = ref$[1];
-      fields[key] = types;
-      maybeConsumeOp(tokens, ',');
-      if ('}' === peek(tokens)) {
-        break;
-      }
-    }
-    consumeOp(tokens, '}');
-    return {
-      structure: 'fields',
-      of: fields,
-      subset: subset
-    };
-  }
-  function consumeField(tokens){
-    var key, types;
-    key = consumeIdent(tokens);
-    consumeOp(tokens, ':');
-    types = consumeTypes(tokens);
-    return [key, types];
-  }
-  function maybeConsumeStructure(tokens){
-    switch (tokens[0]) {
-    case '[':
-      return consumeArray(tokens);
-    case '(':
-      return consumeTuple(tokens);
-    case '{':
-      return consumeFields(tokens);
-    }
-  }
-  function consumeType(tokens){
-    var token, wildcard, type, structure;
-    token = peek(tokens);
-    wildcard = token === '*';
-    if (wildcard || identifierRegex.test(token)) {
-      type = wildcard
-        ? consumeOp(tokens, '*')
-        : consumeIdent(tokens);
-      structure = maybeConsumeStructure(tokens);
-      if (structure) {
-        return structure.type = type, structure;
-      } else {
-        return {
-          type: type
-        };
-      }
-    } else {
-      structure = maybeConsumeStructure(tokens);
-      if (!structure) {
-        throw new Error("Unexpected character: " + token);
-      }
-      return structure;
-    }
-  }
-  function consumeTypes(tokens){
-    var lookahead, types, typesSoFar, typeObj, type;
-    if ('::' === peek(tokens)) {
-      throw new Error("No comment before comment separator '::' found.");
-    }
-    lookahead = tokens[1];
-    if (lookahead != null && lookahead === '::') {
-      tokens.shift();
-      tokens.shift();
-    }
-    types = [];
-    typesSoFar = {};
-    if ('Maybe' === peek(tokens)) {
-      tokens.shift();
-      types = [
-        {
-          type: 'Undefined'
-        }, {
-          type: 'Null'
-        }
-      ];
-      typesSoFar = {
-        Undefined: true,
-        Null: true
-      };
-    }
-    for (;;) {
-      typeObj = consumeType(tokens), type = typeObj.type;
-      if (!typesSoFar[type]) {
-        types.push(typeObj);
-      }
-      typesSoFar[type] = true;
-      if (!maybeConsumeOp(tokens, '|')) {
-        break;
-      }
-    }
-    return types;
-  }
-  tokenRegex = RegExp('\\.\\.\\.|::|->|' + identifierRegex.source + '|\\S', 'g');
-  module.exports = function(input){
-    var tokens, e;
-    if (!input.length) {
-      throw new Error('No type specified.');
-    }
-    tokens = input.match(tokenRegex) || [];
-    if (in$('->', tokens)) {
-      throw new Error("Function types are not supported.\ To validate that something is a function, you may use 'Function'.");
-    }
-    try {
-      return consumeTypes(tokens);
-    } catch (e$) {
-      e = e$;
-      throw new Error(e.message + " - Remaining tokens: " + JSON.stringify(tokens) + " - Initial input: '" + input + "'");
-    }
-  };
-  function in$(x, xs){
-    var i = -1, l = xs.length >>> 0;
-    while (++i < l) if (x === xs[i]) return true;
-    return false;
-  }
-}).call(this);
diff --git a/signaling_server/service/node_modules/express/node_modules/type-check/package.json b/signaling_server/service/node_modules/express/node_modules/type-check/package.json
deleted file mode 100644 (file)
index e9861e6..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-  "_from": "type-check@~0.3.1",
-  "_id": "type-check@0.3.2",
-  "_inBundle": false,
-  "_integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-  "_location": "/type-check",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "type-check@~0.3.1",
-    "name": "type-check",
-    "escapedName": "type-check",
-    "rawSpec": "~0.3.1",
-    "saveSpec": null,
-    "fetchSpec": "~0.3.1"
-  },
-  "_requiredBy": [
-    "/eslint/levn",
-    "/eslint/optionator",
-    "/grunt-eslint/optionator",
-    "/levn",
-    "/optionator"
-  ],
-  "_resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-  "_shasum": "5884cab512cf1d355e3fb784f30804b2b520db72",
-  "_spec": "type-check@~0.3.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/optionator",
-  "author": {
-    "name": "George Zahariev",
-    "email": "z@georgezahariev.com"
-  },
-  "bugs": {
-    "url": "https://github.com/gkz/type-check/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "prelude-ls": "~1.1.2"
-  },
-  "deprecated": false,
-  "description": "type-check allows you to check the types of JavaScript values at runtime with a Haskell like type syntax.",
-  "devDependencies": {
-    "browserify": "~12.0.1",
-    "istanbul": "~0.4.1",
-    "livescript": "~1.4.0",
-    "mocha": "~2.3.4"
-  },
-  "engines": {
-    "node": ">= 0.8.0"
-  },
-  "files": [
-    "lib",
-    "README.md",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/gkz/type-check",
-  "keywords": [
-    "type",
-    "check",
-    "checking",
-    "library"
-  ],
-  "license": "MIT",
-  "main": "./lib/",
-  "name": "type-check",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/gkz/type-check.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "0.3.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/type-is/package.json b/signaling_server/service/node_modules/express/node_modules/type-is/package.json
deleted file mode 100644 (file)
index 2b97659..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "_from": "type-is@~1.6.18",
-  "_id": "type-is@1.6.18",
-  "_inBundle": false,
-  "_integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
-  "_location": "/type-is",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "type-is@~1.6.18",
-    "name": "type-is",
-    "escapedName": "type-is",
-    "rawSpec": "~1.6.18",
-    "saveSpec": null,
-    "fetchSpec": "~1.6.18"
-  },
-  "_requiredBy": [
-    "/body-parser",
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
-  "_shasum": "4e552cd05df09467dcbc4ef739de89f2cf37c131",
-  "_spec": "type-is@~1.6.18",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "bugs": {
-    "url": "https://github.com/jshttp/type-is/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "dependencies": {
-    "media-typer": "0.3.0",
-    "mime-types": "~2.1.24"
-  },
-  "deprecated": false,
-  "description": "Infer the content-type of a request.",
-  "devDependencies": {
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.2",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "mocha": "6.1.4",
-    "nyc": "14.0.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/type-is#readme",
-  "keywords": [
-    "content",
-    "type",
-    "checking"
-  ],
-  "license": "MIT",
-  "name": "type-is",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/type-is.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --check-leaks --bail test/",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test"
-  },
-  "version": "1.6.18"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/unpipe/package.json b/signaling_server/service/node_modules/express/node_modules/unpipe/package.json
deleted file mode 100644 (file)
index 3d35124..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "_from": "unpipe@1.0.0",
-  "_id": "unpipe@1.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
-  "_location": "/unpipe",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "unpipe@1.0.0",
-    "name": "unpipe",
-    "escapedName": "unpipe",
-    "rawSpec": "1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "1.0.0"
-  },
-  "_requiredBy": [
-    "/finalhandler",
-    "/raw-body"
-  ],
-  "_resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-  "_shasum": "b2bf4ee8514aae6165b4817829d21b2ef49904ec",
-  "_spec": "unpipe@1.0.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/raw-body",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "bugs": {
-    "url": "https://github.com/stream-utils/unpipe/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Unpipe a stream from all destinations",
-  "devDependencies": {
-    "istanbul": "0.3.15",
-    "mocha": "2.2.5",
-    "readable-stream": "1.1.13"
-  },
-  "engines": {
-    "node": ">= 0.8"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/stream-utils/unpipe#readme",
-  "license": "MIT",
-  "name": "unpipe",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/stream-utils/unpipe.git"
-  },
-  "scripts": {
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "1.0.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/url/.npmignore b/signaling_server/service/node_modules/express/node_modules/url/.npmignore
deleted file mode 100644 (file)
index ba11471..0000000
+++ /dev/null
@@ -1 +0,0 @@
-test-url.js
diff --git a/signaling_server/service/node_modules/express/node_modules/url/.travis.yml b/signaling_server/service/node_modules/express/node_modules/url/.travis.yml
deleted file mode 100644 (file)
index 16ed301..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-language: node_js
-node_js:
-  - "0.10"
-env:
-  global:
-  - secure: OgPRLCzHFh5WbjHEKlghHFW1oOreSF2JVUr3CMaFDi03ngTS2WONSw8mRn8SA6FTldiGGBx1n8orDzUw6cdkB7+tkU3G5B0M0V3vl823NaUFKgxsCM3UGDYfJb3yfAG5cj72rVZoX/ABd1fVuG4vBIlDLxsSlKQFMzUCFoyttr8=
-  - secure: AiZP8GHbyx83ZBhOvOxxtpNcgNHoP+vo5G1a1OYU78EHCgHg8NRyHKyCdrBnPvw6mV2BI/8frZaXAEicsHMtHMofBYn7nibNlaajBPI8AkHtYfNSc+zO+71Kwv7VOTOKKnkMEIkqhHlc6njFoH3QaBNHsgNlzzplPxaIt8vdUVk=
diff --git a/signaling_server/service/node_modules/express/node_modules/url/.zuul.yml b/signaling_server/service/node_modules/express/node_modules/url/.zuul.yml
deleted file mode 100644 (file)
index feea8b6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-ui: mocha-tdd
-browsers:
-  - name: chrome
-    version: latest
-  - name: firefox
-    version: 24..latest
-  - name: safari
-    version: latest
-  - name: ie
-    version: 9..latest
-  - name: iphone
-    version: oldest..latest
-  - name: ipad
-    version: oldest..latest
-  - name: android
-    version: oldest..latest
diff --git a/signaling_server/service/node_modules/express/node_modules/url/LICENSE b/signaling_server/service/node_modules/express/node_modules/url/LICENSE
deleted file mode 100644 (file)
index f45bc11..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright Joyent, Inc. and other Node contributors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/url/README.md b/signaling_server/service/node_modules/express/node_modules/url/README.md
deleted file mode 100644 (file)
index 8b35460..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-# node-url
-
-[![Build Status](https://travis-ci.org/defunctzombie/node-url.svg?branch=master)](https://travis-ci.org/defunctzombie/node-url)
-
-This module has utilities for URL resolution and parsing meant to have feature parity with node.js core [url](http://nodejs.org/api/url.html) module.
-
-```js
-var url = require('url');
-```
-
-## api
-
-Parsed URL objects have some or all of the following fields, depending on
-whether or not they exist in the URL string. Any parts that are not in the URL
-string will not be in the parsed object. Examples are shown for the URL
-
-`'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'`
-
-* `href`: The full URL that was originally parsed. Both the protocol and host are lowercased.
-
-    Example: `'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'`
-
-* `protocol`: The request protocol, lowercased.
-
-    Example: `'http:'`
-
-* `host`: The full lowercased host portion of the URL, including port
-  information.
-
-    Example: `'host.com:8080'`
-
-* `auth`: The authentication information portion of a URL.
-
-    Example: `'user:pass'`
-
-* `hostname`: Just the lowercased hostname portion of the host.
-
-    Example: `'host.com'`
-
-* `port`: The port number portion of the host.
-
-    Example: `'8080'`
-
-* `pathname`: The path section of the URL, that comes after the host and
-  before the query, including the initial slash if present.
-
-    Example: `'/p/a/t/h'`
-
-* `search`: The 'query string' portion of the URL, including the leading
-  question mark.
-
-    Example: `'?query=string'`
-
-* `path`: Concatenation of `pathname` and `search`.
-
-    Example: `'/p/a/t/h?query=string'`
-
-* `query`: Either the 'params' portion of the query string, or a
-  querystring-parsed object.
-
-    Example: `'query=string'` or `{'query':'string'}`
-
-* `hash`: The 'fragment' portion of the URL including the pound-sign.
-
-    Example: `'#hash'`
-
-The following methods are provided by the URL module:
-
-### url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
-
-Take a URL string, and return an object.
-
-Pass `true` as the second argument to also parse
-the query string using the `querystring` module.
-Defaults to `false`.
-
-Pass `true` as the third argument to treat `//foo/bar` as
-`{ host: 'foo', pathname: '/bar' }` rather than
-`{ pathname: '//foo/bar' }`. Defaults to `false`.
-
-### url.format(urlObj)
-
-Take a parsed URL object, and return a formatted URL string.
-
-* `href` will be ignored.
-* `protocol` is treated the same with or without the trailing `:` (colon).
-  * The protocols `http`, `https`, `ftp`, `gopher`, `file` will be
-    postfixed with `://` (colon-slash-slash).
-  * All other protocols `mailto`, `xmpp`, `aim`, `sftp`, `foo`, etc will
-    be postfixed with `:` (colon)
-* `auth` will be used if present.
-* `hostname` will only be used if `host` is absent.
-* `port` will only be used if `host` is absent.
-* `host` will be used in place of `hostname` and `port`
-* `pathname` is treated the same with or without the leading `/` (slash)
-* `search` will be used in place of `query`
-* `query` (object; see `querystring`) will only be used if `search` is absent.
-* `search` is treated the same with or without the leading `?` (question mark)
-* `hash` is treated the same with or without the leading `#` (pound sign, anchor)
-
-### url.resolve(from, to)
-
-Take a base URL, and a href URL, and resolve them as a browser would for
-an anchor tag.  Examples:
-
-    url.resolve('/one/two/three', 'four')         // '/one/two/four'
-    url.resolve('http://example.com/', '/one')    // 'http://example.com/one'
-    url.resolve('http://example.com/one', '/two') // 'http://example.com/two'
diff --git a/signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/LICENSE-MIT.txt b/signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/LICENSE-MIT.txt
deleted file mode 100644 (file)
index a41e0a7..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright Mathias Bynens <https://mathiasbynens.be/>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/README.md b/signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/README.md
deleted file mode 100644 (file)
index 831e637..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/coveralls/bestiejs/punycode.js/master.svg)](https://coveralls.io/r/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js)
-
-A robust Punycode converter that fully complies to [RFC 3492](http://tools.ietf.org/html/rfc3492) and [RFC 5891](http://tools.ietf.org/html/rfc5891), and works on nearly all JavaScript platforms.
-
-This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm:
-
-* [The C example code from RFC 3492](http://tools.ietf.org/html/rfc3492#appendix-C)
-* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c)
-* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c)
-* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287)
-* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072))
-
-This project is [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with [Node.js v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc).
-
-## Installation
-
-Via [npm](http://npmjs.org/) (only required for Node.js releases older than v0.6.2):
-
-```bash
-npm install punycode
-```
-
-Via [Bower](http://bower.io/):
-
-```bash
-bower install punycode
-```
-
-Via [Component](https://github.com/component/component):
-
-```bash
-component install bestiejs/punycode.js
-```
-
-In a browser:
-
-```html
-<script src="punycode.js"></script>
-```
-
-In [Narwhal](http://narwhaljs.org/), [Node.js](http://nodejs.org/), and [RingoJS](http://ringojs.org/):
-
-```js
-var punycode = require('punycode');
-```
-
-In [Rhino](http://www.mozilla.org/rhino/):
-
-```js
-load('punycode.js');
-```
-
-Using an AMD loader like [RequireJS](http://requirejs.org/):
-
-```js
-require(
-  {
-    'paths': {
-      'punycode': 'path/to/punycode'
-    }
-  },
-  ['punycode'],
-  function(punycode) {
-    console.log(punycode);
-  }
-);
-```
-
-## API
-
-### `punycode.decode(string)`
-
-Converts a Punycode string of ASCII symbols to a string of Unicode symbols.
-
-```js
-// decode domain name parts
-punycode.decode('maana-pta'); // 'mañana'
-punycode.decode('--dqo34k'); // '☃-⌘'
-```
-
-### `punycode.encode(string)`
-
-Converts a string of Unicode symbols to a Punycode string of ASCII symbols.
-
-```js
-// encode domain name parts
-punycode.encode('mañana'); // 'maana-pta'
-punycode.encode('☃-⌘'); // '--dqo34k'
-```
-
-### `punycode.toUnicode(input)`
-
-Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode.
-
-```js
-// decode domain names
-punycode.toUnicode('xn--maana-pta.com');
-// → 'mañana.com'
-punycode.toUnicode('xn----dqo34k.com');
-// → '☃-⌘.com'
-
-// decode email addresses
-punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq');
-// → 'джумла@джpумлатест.bрфa'
-```
-
-### `punycode.toASCII(input)`
-
-Converts a Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that's already in ASCII.
-
-```js
-// encode domain names
-punycode.toASCII('mañana.com');
-// → 'xn--maana-pta.com'
-punycode.toASCII('☃-⌘.com');
-// → 'xn----dqo34k.com'
-
-// encode email addresses
-punycode.toASCII('джумла@джpумлатест.bрфa');
-// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'
-```
-
-### `punycode.ucs2`
-
-#### `punycode.ucs2.decode(string)`
-
-Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16.
-
-```js
-punycode.ucs2.decode('abc');
-// → [0x61, 0x62, 0x63]
-// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE:
-punycode.ucs2.decode('\uD834\uDF06');
-// → [0x1D306]
-```
-
-#### `punycode.ucs2.encode(codePoints)`
-
-Creates a string based on an array of numeric code point values.
-
-```js
-punycode.ucs2.encode([0x61, 0x62, 0x63]);
-// → 'abc'
-punycode.ucs2.encode([0x1D306]);
-// → '\uD834\uDF06'
-```
-
-### `punycode.version`
-
-A string representing the current Punycode.js version number.
-
-## Unit tests & code coverage
-
-After cloning this repository, run `npm install --dev` to install the dependencies needed for Punycode.js development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`.
-
-Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`.
-
-To generate the code coverage report, use `grunt cover`.
-
-Feel free to fork if you see possible improvements!
-
-## Author
-
-| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
-|---|
-| [Mathias Bynens](https://mathiasbynens.be/) |
-
-## Contributors
-
-| [![twitter/jdalton](https://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") |
-|---|
-| [John-David Dalton](http://allyoucanleet.com/) |
-
-## License
-
-Punycode.js is available under the [MIT](https://mths.be/mit) license.
diff --git a/signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/package.json b/signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/package.json
deleted file mode 100644 (file)
index ffb862a..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "_from": "punycode@1.3.2",
-  "_id": "punycode@1.3.2",
-  "_inBundle": false,
-  "_integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
-  "_location": "/url/punycode",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "punycode@1.3.2",
-    "name": "punycode",
-    "escapedName": "punycode",
-    "rawSpec": "1.3.2",
-    "saveSpec": null,
-    "fetchSpec": "1.3.2"
-  },
-  "_requiredBy": [
-    "/url"
-  ],
-  "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-  "_shasum": "9653a036fb7c1ee42342f2325cceefea3926c48d",
-  "_spec": "punycode@1.3.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/url",
-  "author": {
-    "name": "Mathias Bynens",
-    "url": "https://mathiasbynens.be/"
-  },
-  "bugs": {
-    "url": "https://github.com/bestiejs/punycode.js/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Mathias Bynens",
-      "url": "https://mathiasbynens.be/"
-    },
-    {
-      "name": "John-David Dalton",
-      "url": "http://allyoucanleet.com/"
-    }
-  ],
-  "deprecated": false,
-  "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.",
-  "devDependencies": {
-    "coveralls": "^2.10.1",
-    "grunt": "^0.4.5",
-    "grunt-contrib-uglify": "^0.5.0",
-    "grunt-shell": "^0.7.0",
-    "istanbul": "^0.2.13",
-    "qunit-extras": "^1.2.0",
-    "qunitjs": "~1.11.0",
-    "requirejs": "^2.1.14"
-  },
-  "files": [
-    "LICENSE-MIT.txt",
-    "punycode.js"
-  ],
-  "homepage": "https://mths.be/punycode",
-  "keywords": [
-    "punycode",
-    "unicode",
-    "idn",
-    "idna",
-    "dns",
-    "url",
-    "domain"
-  ],
-  "license": "MIT",
-  "main": "punycode.js",
-  "name": "punycode",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/bestiejs/punycode.js.git"
-  },
-  "scripts": {
-    "test": "node tests/tests.js"
-  },
-  "version": "1.3.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/punycode.js b/signaling_server/service/node_modules/express/node_modules/url/node_modules/punycode/punycode.js
deleted file mode 100644 (file)
index ac68597..0000000
+++ /dev/null
@@ -1,530 +0,0 @@
-/*! https://mths.be/punycode v1.3.2 by @mathias */
-;(function(root) {
-
-       /** Detect free variables */
-       var freeExports = typeof exports == 'object' && exports &&
-               !exports.nodeType && exports;
-       var freeModule = typeof module == 'object' && module &&
-               !module.nodeType && module;
-       var freeGlobal = typeof global == 'object' && global;
-       if (
-               freeGlobal.global === freeGlobal ||
-               freeGlobal.window === freeGlobal ||
-               freeGlobal.self === freeGlobal
-       ) {
-               root = freeGlobal;
-       }
-
-       /**
-        * The `punycode` object.
-        * @name punycode
-        * @type Object
-        */
-       var punycode,
-
-       /** Highest positive signed 32-bit float value */
-       maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
-
-       /** Bootstring parameters */
-       base = 36,
-       tMin = 1,
-       tMax = 26,
-       skew = 38,
-       damp = 700,
-       initialBias = 72,
-       initialN = 128, // 0x80
-       delimiter = '-', // '\x2D'
-
-       /** Regular expressions */
-       regexPunycode = /^xn--/,
-       regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
-       regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
-
-       /** Error messages */
-       errors = {
-               'overflow': 'Overflow: input needs wider integers to process',
-               'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
-               'invalid-input': 'Invalid input'
-       },
-
-       /** Convenience shortcuts */
-       baseMinusTMin = base - tMin,
-       floor = Math.floor,
-       stringFromCharCode = String.fromCharCode,
-
-       /** Temporary variable */
-       key;
-
-       /*--------------------------------------------------------------------------*/
-
-       /**
-        * A generic error utility function.
-        * @private
-        * @param {String} type The error type.
-        * @returns {Error} Throws a `RangeError` with the applicable error message.
-        */
-       function error(type) {
-               throw RangeError(errors[type]);
-       }
-
-       /**
-        * A generic `Array#map` utility function.
-        * @private
-        * @param {Array} array The array to iterate over.
-        * @param {Function} callback The function that gets called for every array
-        * item.
-        * @returns {Array} A new array of values returned by the callback function.
-        */
-       function map(array, fn) {
-               var length = array.length;
-               var result = [];
-               while (length--) {
-                       result[length] = fn(array[length]);
-               }
-               return result;
-       }
-
-       /**
-        * A simple `Array#map`-like wrapper to work with domain name strings or email
-        * addresses.
-        * @private
-        * @param {String} domain The domain name or email address.
-        * @param {Function} callback The function that gets called for every
-        * character.
-        * @returns {Array} A new string of characters returned by the callback
-        * function.
-        */
-       function mapDomain(string, fn) {
-               var parts = string.split('@');
-               var result = '';
-               if (parts.length > 1) {
-                       // In email addresses, only the domain name should be punycoded. Leave
-                       // the local part (i.e. everything up to `@`) intact.
-                       result = parts[0] + '@';
-                       string = parts[1];
-               }
-               // Avoid `split(regex)` for IE8 compatibility. See #17.
-               string = string.replace(regexSeparators, '\x2E');
-               var labels = string.split('.');
-               var encoded = map(labels, fn).join('.');
-               return result + encoded;
-       }
-
-       /**
-        * Creates an array containing the numeric code points of each Unicode
-        * character in the string. While JavaScript uses UCS-2 internally,
-        * this function will convert a pair of surrogate halves (each of which
-        * UCS-2 exposes as separate characters) into a single code point,
-        * matching UTF-16.
-        * @see `punycode.ucs2.encode`
-        * @see <https://mathiasbynens.be/notes/javascript-encoding>
-        * @memberOf punycode.ucs2
-        * @name decode
-        * @param {String} string The Unicode input string (UCS-2).
-        * @returns {Array} The new array of code points.
-        */
-       function ucs2decode(string) {
-               var output = [],
-                   counter = 0,
-                   length = string.length,
-                   value,
-                   extra;
-               while (counter < length) {
-                       value = string.charCodeAt(counter++);
-                       if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
-                               // high surrogate, and there is a next character
-                               extra = string.charCodeAt(counter++);
-                               if ((extra & 0xFC00) == 0xDC00) { // low surrogate
-                                       output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
-                               } else {
-                                       // unmatched surrogate; only append this code unit, in case the next
-                                       // code unit is the high surrogate of a surrogate pair
-                                       output.push(value);
-                                       counter--;
-                               }
-                       } else {
-                               output.push(value);
-                       }
-               }
-               return output;
-       }
-
-       /**
-        * Creates a string based on an array of numeric code points.
-        * @see `punycode.ucs2.decode`
-        * @memberOf punycode.ucs2
-        * @name encode
-        * @param {Array} codePoints The array of numeric code points.
-        * @returns {String} The new Unicode string (UCS-2).
-        */
-       function ucs2encode(array) {
-               return map(array, function(value) {
-                       var output = '';
-                       if (value > 0xFFFF) {
-                               value -= 0x10000;
-                               output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
-                               value = 0xDC00 | value & 0x3FF;
-                       }
-                       output += stringFromCharCode(value);
-                       return output;
-               }).join('');
-       }
-
-       /**
-        * Converts a basic code point into a digit/integer.
-        * @see `digitToBasic()`
-        * @private
-        * @param {Number} codePoint The basic numeric code point value.
-        * @returns {Number} The numeric value of a basic code point (for use in
-        * representing integers) in the range `0` to `base - 1`, or `base` if
-        * the code point does not represent a value.
-        */
-       function basicToDigit(codePoint) {
-               if (codePoint - 48 < 10) {
-                       return codePoint - 22;
-               }
-               if (codePoint - 65 < 26) {
-                       return codePoint - 65;
-               }
-               if (codePoint - 97 < 26) {
-                       return codePoint - 97;
-               }
-               return base;
-       }
-
-       /**
-        * Converts a digit/integer into a basic code point.
-        * @see `basicToDigit()`
-        * @private
-        * @param {Number} digit The numeric value of a basic code point.
-        * @returns {Number} The basic code point whose value (when used for
-        * representing integers) is `digit`, which needs to be in the range
-        * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
-        * used; else, the lowercase form is used. The behavior is undefined
-        * if `flag` is non-zero and `digit` has no uppercase form.
-        */
-       function digitToBasic(digit, flag) {
-               //  0..25 map to ASCII a..z or A..Z
-               // 26..35 map to ASCII 0..9
-               return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
-       }
-
-       /**
-        * Bias adaptation function as per section 3.4 of RFC 3492.
-        * http://tools.ietf.org/html/rfc3492#section-3.4
-        * @private
-        */
-       function adapt(delta, numPoints, firstTime) {
-               var k = 0;
-               delta = firstTime ? floor(delta / damp) : delta >> 1;
-               delta += floor(delta / numPoints);
-               for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
-                       delta = floor(delta / baseMinusTMin);
-               }
-               return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
-       }
-
-       /**
-        * Converts a Punycode string of ASCII-only symbols to a string of Unicode
-        * symbols.
-        * @memberOf punycode
-        * @param {String} input The Punycode string of ASCII-only symbols.
-        * @returns {String} The resulting string of Unicode symbols.
-        */
-       function decode(input) {
-               // Don't use UCS-2
-               var output = [],
-                   inputLength = input.length,
-                   out,
-                   i = 0,
-                   n = initialN,
-                   bias = initialBias,
-                   basic,
-                   j,
-                   index,
-                   oldi,
-                   w,
-                   k,
-                   digit,
-                   t,
-                   /** Cached calculation results */
-                   baseMinusT;
-
-               // Handle the basic code points: let `basic` be the number of input code
-               // points before the last delimiter, or `0` if there is none, then copy
-               // the first basic code points to the output.
-
-               basic = input.lastIndexOf(delimiter);
-               if (basic < 0) {
-                       basic = 0;
-               }
-
-               for (j = 0; j < basic; ++j) {
-                       // if it's not a basic code point
-                       if (input.charCodeAt(j) >= 0x80) {
-                               error('not-basic');
-                       }
-                       output.push(input.charCodeAt(j));
-               }
-
-               // Main decoding loop: start just after the last delimiter if any basic code
-               // points were copied; start at the beginning otherwise.
-
-               for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
-
-                       // `index` is the index of the next character to be consumed.
-                       // Decode a generalized variable-length integer into `delta`,
-                       // which gets added to `i`. The overflow checking is easier
-                       // if we increase `i` as we go, then subtract off its starting
-                       // value at the end to obtain `delta`.
-                       for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
-
-                               if (index >= inputLength) {
-                                       error('invalid-input');
-                               }
-
-                               digit = basicToDigit(input.charCodeAt(index++));
-
-                               if (digit >= base || digit > floor((maxInt - i) / w)) {
-                                       error('overflow');
-                               }
-
-                               i += digit * w;
-                               t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
-
-                               if (digit < t) {
-                                       break;
-                               }
-
-                               baseMinusT = base - t;
-                               if (w > floor(maxInt / baseMinusT)) {
-                                       error('overflow');
-                               }
-
-                               w *= baseMinusT;
-
-                       }
-
-                       out = output.length + 1;
-                       bias = adapt(i - oldi, out, oldi == 0);
-
-                       // `i` was supposed to wrap around from `out` to `0`,
-                       // incrementing `n` each time, so we'll fix that now:
-                       if (floor(i / out) > maxInt - n) {
-                               error('overflow');
-                       }
-
-                       n += floor(i / out);
-                       i %= out;
-
-                       // Insert `n` at position `i` of the output
-                       output.splice(i++, 0, n);
-
-               }
-
-               return ucs2encode(output);
-       }
-
-       /**
-        * Converts a string of Unicode symbols (e.g. a domain name label) to a
-        * Punycode string of ASCII-only symbols.
-        * @memberOf punycode
-        * @param {String} input The string of Unicode symbols.
-        * @returns {String} The resulting Punycode string of ASCII-only symbols.
-        */
-       function encode(input) {
-               var n,
-                   delta,
-                   handledCPCount,
-                   basicLength,
-                   bias,
-                   j,
-                   m,
-                   q,
-                   k,
-                   t,
-                   currentValue,
-                   output = [],
-                   /** `inputLength` will hold the number of code points in `input`. */
-                   inputLength,
-                   /** Cached calculation results */
-                   handledCPCountPlusOne,
-                   baseMinusT,
-                   qMinusT;
-
-               // Convert the input in UCS-2 to Unicode
-               input = ucs2decode(input);
-
-               // Cache the length
-               inputLength = input.length;
-
-               // Initialize the state
-               n = initialN;
-               delta = 0;
-               bias = initialBias;
-
-               // Handle the basic code points
-               for (j = 0; j < inputLength; ++j) {
-                       currentValue = input[j];
-                       if (currentValue < 0x80) {
-                               output.push(stringFromCharCode(currentValue));
-                       }
-               }
-
-               handledCPCount = basicLength = output.length;
-
-               // `handledCPCount` is the number of code points that have been handled;
-               // `basicLength` is the number of basic code points.
-
-               // Finish the basic string - if it is not empty - with a delimiter
-               if (basicLength) {
-                       output.push(delimiter);
-               }
-
-               // Main encoding loop:
-               while (handledCPCount < inputLength) {
-
-                       // All non-basic code points < n have been handled already. Find the next
-                       // larger one:
-                       for (m = maxInt, j = 0; j < inputLength; ++j) {
-                               currentValue = input[j];
-                               if (currentValue >= n && currentValue < m) {
-                                       m = currentValue;
-                               }
-                       }
-
-                       // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
-                       // but guard against overflow
-                       handledCPCountPlusOne = handledCPCount + 1;
-                       if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
-                               error('overflow');
-                       }
-
-                       delta += (m - n) * handledCPCountPlusOne;
-                       n = m;
-
-                       for (j = 0; j < inputLength; ++j) {
-                               currentValue = input[j];
-
-                               if (currentValue < n && ++delta > maxInt) {
-                                       error('overflow');
-                               }
-
-                               if (currentValue == n) {
-                                       // Represent delta as a generalized variable-length integer
-                                       for (q = delta, k = base; /* no condition */; k += base) {
-                                               t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
-                                               if (q < t) {
-                                                       break;
-                                               }
-                                               qMinusT = q - t;
-                                               baseMinusT = base - t;
-                                               output.push(
-                                                       stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
-                                               );
-                                               q = floor(qMinusT / baseMinusT);
-                                       }
-
-                                       output.push(stringFromCharCode(digitToBasic(q, 0)));
-                                       bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
-                                       delta = 0;
-                                       ++handledCPCount;
-                               }
-                       }
-
-                       ++delta;
-                       ++n;
-
-               }
-               return output.join('');
-       }
-
-       /**
-        * Converts a Punycode string representing a domain name or an email address
-        * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
-        * it doesn't matter if you call it on a string that has already been
-        * converted to Unicode.
-        * @memberOf punycode
-        * @param {String} input The Punycoded domain name or email address to
-        * convert to Unicode.
-        * @returns {String} The Unicode representation of the given Punycode
-        * string.
-        */
-       function toUnicode(input) {
-               return mapDomain(input, function(string) {
-                       return regexPunycode.test(string)
-                               ? decode(string.slice(4).toLowerCase())
-                               : string;
-               });
-       }
-
-       /**
-        * Converts a Unicode string representing a domain name or an email address to
-        * Punycode. Only the non-ASCII parts of the domain name will be converted,
-        * i.e. it doesn't matter if you call it with a domain that's already in
-        * ASCII.
-        * @memberOf punycode
-        * @param {String} input The domain name or email address to convert, as a
-        * Unicode string.
-        * @returns {String} The Punycode representation of the given domain name or
-        * email address.
-        */
-       function toASCII(input) {
-               return mapDomain(input, function(string) {
-                       return regexNonASCII.test(string)
-                               ? 'xn--' + encode(string)
-                               : string;
-               });
-       }
-
-       /*--------------------------------------------------------------------------*/
-
-       /** Define the public API */
-       punycode = {
-               /**
-                * A string representing the current Punycode.js version number.
-                * @memberOf punycode
-                * @type String
-                */
-               'version': '1.3.2',
-               /**
-                * An object of methods to convert from JavaScript's internal character
-                * representation (UCS-2) to Unicode code points, and back.
-                * @see <https://mathiasbynens.be/notes/javascript-encoding>
-                * @memberOf punycode
-                * @type Object
-                */
-               'ucs2': {
-                       'decode': ucs2decode,
-                       'encode': ucs2encode
-               },
-               'decode': decode,
-               'encode': encode,
-               'toASCII': toASCII,
-               'toUnicode': toUnicode
-       };
-
-       /** Expose `punycode` */
-       // Some AMD build optimizers, like r.js, check for specific condition patterns
-       // like the following:
-       if (
-               typeof define == 'function' &&
-               typeof define.amd == 'object' &&
-               define.amd
-       ) {
-               define('punycode', function() {
-                       return punycode;
-               });
-       } else if (freeExports && freeModule) {
-               if (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+
-                       freeModule.exports = punycode;
-               } else { // in Narwhal or RingoJS v0.7.0-
-                       for (key in punycode) {
-                               punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
-                       }
-               }
-       } else { // in Rhino or a web browser
-               root.punycode = punycode;
-       }
-
-}(this));
diff --git a/signaling_server/service/node_modules/express/node_modules/url/package.json b/signaling_server/service/node_modules/express/node_modules/url/package.json
deleted file mode 100644 (file)
index 9a5f56d..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-  "_from": "url@^0.11.0",
-  "_id": "url@0.11.0",
-  "_inBundle": false,
-  "_integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
-  "_location": "/url",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "url@^0.11.0",
-    "name": "url",
-    "escapedName": "url",
-    "rawSpec": "^0.11.0",
-    "saveSpec": null,
-    "fetchSpec": "^0.11.0"
-  },
-  "_requiredBy": [
-    "/node-libs-browser"
-  ],
-  "_resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-  "_shasum": "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1",
-  "_spec": "url@^0.11.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/node-libs-browser",
-  "bugs": {
-    "url": "https://github.com/defunctzombie/node-url/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "punycode": "1.3.2",
-    "querystring": "0.2.0"
-  },
-  "deprecated": false,
-  "description": "The core `url` packaged standalone for use with Browserify.",
-  "devDependencies": {
-    "assert": "1.1.1",
-    "mocha": "1.18.2",
-    "zuul": "3.3.0"
-  },
-  "homepage": "https://github.com/defunctzombie/node-url#readme",
-  "license": "MIT",
-  "main": "./url.js",
-  "name": "url",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/defunctzombie/node-url.git"
-  },
-  "scripts": {
-    "test": "mocha --ui qunit test.js && zuul -- test.js",
-    "test-local": "zuul --local -- test.js"
-  },
-  "version": "0.11.0"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/url/test.js b/signaling_server/service/node_modules/express/node_modules/url/test.js
deleted file mode 100644 (file)
index 3b7d335..0000000
+++ /dev/null
@@ -1,1599 +0,0 @@
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-var assert = require('assert');
-
-var url = require('./url');
-
-// URLs to parse, and expected data
-// { url : parsed }
-var parseTests = {
-  '//some_path' : {
-    'href': '//some_path',
-    'pathname': '//some_path',
-    'path': '//some_path'
-  },
-
-  'http:\\\\evil-phisher\\foo.html#h\\a\\s\\h': {
-    protocol: 'http:',
-    slashes: true,
-    host: 'evil-phisher',
-    hostname: 'evil-phisher',
-    pathname: '/foo.html',
-    path: '/foo.html',
-    hash: '#h%5Ca%5Cs%5Ch',
-    href: 'http://evil-phisher/foo.html#h%5Ca%5Cs%5Ch'
-  },
-
-  'http:\\\\evil-phisher\\foo.html?json="\\"foo\\""#h\\a\\s\\h': {
-    protocol: 'http:',
-    slashes: true,
-    host: 'evil-phisher',
-    hostname: 'evil-phisher',
-    pathname: '/foo.html',
-    search: '?json=%22%5C%22foo%5C%22%22',
-    query: 'json=%22%5C%22foo%5C%22%22',
-    path: '/foo.html?json=%22%5C%22foo%5C%22%22',
-    hash: '#h%5Ca%5Cs%5Ch',
-    href: 'http://evil-phisher/foo.html?json=%22%5C%22foo%5C%22%22#h%5Ca%5Cs%5Ch'
-  },
-
-  'http:\\\\evil-phisher\\foo.html#h\\a\\s\\h?blarg': {
-    protocol: 'http:',
-    slashes: true,
-    host: 'evil-phisher',
-    hostname: 'evil-phisher',
-    pathname: '/foo.html',
-    path: '/foo.html',
-    hash: '#h%5Ca%5Cs%5Ch?blarg',
-    href: 'http://evil-phisher/foo.html#h%5Ca%5Cs%5Ch?blarg'
-  },
-
-
-  'http:\\\\evil-phisher\\foo.html': {
-    protocol: 'http:',
-    slashes: true,
-    host: 'evil-phisher',
-    hostname: 'evil-phisher',
-    pathname: '/foo.html',
-    path: '/foo.html',
-    href: 'http://evil-phisher/foo.html'
-  },
-
-  'HTTP://www.example.com/' : {
-    'href': 'http://www.example.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'www.example.com',
-    'hostname': 'www.example.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'HTTP://www.example.com' : {
-    'href': 'http://www.example.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'www.example.com',
-    'hostname': 'www.example.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://www.ExAmPlE.com/' : {
-    'href': 'http://www.example.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'www.example.com',
-    'hostname': 'www.example.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://user:pw@www.ExAmPlE.com/' : {
-    'href': 'http://user:pw@www.example.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'auth': 'user:pw',
-    'host': 'www.example.com',
-    'hostname': 'www.example.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://USER:PW@www.ExAmPlE.com/' : {
-    'href': 'http://USER:PW@www.example.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'auth': 'USER:PW',
-    'host': 'www.example.com',
-    'hostname': 'www.example.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://user@www.example.com/' : {
-    'href': 'http://user@www.example.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'auth': 'user',
-    'host': 'www.example.com',
-    'hostname': 'www.example.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://user%3Apw@www.example.com/' : {
-    'href': 'http://user:pw@www.example.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'auth': 'user:pw',
-    'host': 'www.example.com',
-    'hostname': 'www.example.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://x.com/path?that\'s#all, folks' : {
-    'href': 'http://x.com/path?that%27s#all,%20folks',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'x.com',
-    'hostname': 'x.com',
-    'search': '?that%27s',
-    'query': 'that%27s',
-    'pathname': '/path',
-    'hash': '#all,%20folks',
-    'path': '/path?that%27s'
-  },
-
-  'HTTP://X.COM/Y' : {
-    'href': 'http://x.com/Y',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'x.com',
-    'hostname': 'x.com',
-    'pathname': '/Y',
-    'path': '/Y'
-  },
-
-  // + not an invalid host character
-  // per https://url.spec.whatwg.org/#host-parsing
-  'http://x.y.com+a/b/c' : {
-    'href': 'http://x.y.com+a/b/c',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'x.y.com+a',
-    'hostname': 'x.y.com+a',
-    'pathname': '/b/c',
-    'path': '/b/c'
-  },
-
-  // an unexpected invalid char in the hostname.
-  'HtTp://x.y.cOm;a/b/c?d=e#f g<h>i' : {
-    'href': 'http://x.y.com/;a/b/c?d=e#f%20g%3Ch%3Ei',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'x.y.com',
-    'hostname': 'x.y.com',
-    'pathname': ';a/b/c',
-    'search': '?d=e',
-    'query': 'd=e',
-    'hash': '#f%20g%3Ch%3Ei',
-    'path': ';a/b/c?d=e'
-  },
-
-  // make sure that we don't accidentally lcast the path parts.
-  'HtTp://x.y.cOm;A/b/c?d=e#f g<h>i' : {
-    'href': 'http://x.y.com/;A/b/c?d=e#f%20g%3Ch%3Ei',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'x.y.com',
-    'hostname': 'x.y.com',
-    'pathname': ';A/b/c',
-    'search': '?d=e',
-    'query': 'd=e',
-    'hash': '#f%20g%3Ch%3Ei',
-    'path': ';A/b/c?d=e'
-  },
-
-  'http://x...y...#p': {
-    'href': 'http://x...y.../#p',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'x...y...',
-    'hostname': 'x...y...',
-    'hash': '#p',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://x/p/"quoted"': {
-    'href': 'http://x/p/%22quoted%22',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'x',
-    'hostname': 'x',
-    'pathname': '/p/%22quoted%22',
-    'path': '/p/%22quoted%22'
-  },
-
-  '<http://goo.corn/bread> Is a URL!': {
-    'href': '%3Chttp://goo.corn/bread%3E%20Is%20a%20URL!',
-    'pathname': '%3Chttp://goo.corn/bread%3E%20Is%20a%20URL!',
-    'path': '%3Chttp://goo.corn/bread%3E%20Is%20a%20URL!'
-  },
-
-  'http://www.narwhaljs.org/blog/categories?id=news' : {
-    'href': 'http://www.narwhaljs.org/blog/categories?id=news',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'www.narwhaljs.org',
-    'hostname': 'www.narwhaljs.org',
-    'search': '?id=news',
-    'query': 'id=news',
-    'pathname': '/blog/categories',
-    'path': '/blog/categories?id=news'
-  },
-
-  'http://mt0.google.com/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=' : {
-    'href': 'http://mt0.google.com/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'mt0.google.com',
-    'hostname': 'mt0.google.com',
-    'pathname': '/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=',
-    'path': '/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s='
-  },
-
-  'http://mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=' : {
-    'href': 'http://mt0.google.com/vt/lyrs=m@114???&hl=en&src=api' +
-        '&x=2&y=2&z=3&s=',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'mt0.google.com',
-    'hostname': 'mt0.google.com',
-    'search': '???&hl=en&src=api&x=2&y=2&z=3&s=',
-    'query': '??&hl=en&src=api&x=2&y=2&z=3&s=',
-    'pathname': '/vt/lyrs=m@114',
-    'path': '/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s='
-  },
-
-  'http://user:pass@mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=':
-      {
-        'href': 'http://user:pass@mt0.google.com/vt/lyrs=m@114???' +
-            '&hl=en&src=api&x=2&y=2&z=3&s=',
-        'protocol': 'http:',
-        'slashes': true,
-        'host': 'mt0.google.com',
-        'auth': 'user:pass',
-        'hostname': 'mt0.google.com',
-        'search': '???&hl=en&src=api&x=2&y=2&z=3&s=',
-        'query': '??&hl=en&src=api&x=2&y=2&z=3&s=',
-        'pathname': '/vt/lyrs=m@114',
-        'path': '/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s='
-      },
-
-  'file:///etc/passwd' : {
-    'href': 'file:///etc/passwd',
-    'slashes': true,
-    'protocol': 'file:',
-    'pathname': '/etc/passwd',
-    'hostname': '',
-    'host': '',
-    'path': '/etc/passwd'
-  },
-
-  'file://localhost/etc/passwd' : {
-    'href': 'file://localhost/etc/passwd',
-    'protocol': 'file:',
-    'slashes': true,
-    'pathname': '/etc/passwd',
-    'hostname': 'localhost',
-    'host': 'localhost',
-    'path': '/etc/passwd'
-  },
-
-  'file://foo/etc/passwd' : {
-    'href': 'file://foo/etc/passwd',
-    'protocol': 'file:',
-    'slashes': true,
-    'pathname': '/etc/passwd',
-    'hostname': 'foo',
-    'host': 'foo',
-    'path': '/etc/passwd'
-  },
-
-  'file:///etc/node/' : {
-    'href': 'file:///etc/node/',
-    'slashes': true,
-    'protocol': 'file:',
-    'pathname': '/etc/node/',
-    'hostname': '',
-    'host': '',
-    'path': '/etc/node/'
-  },
-
-  'file://localhost/etc/node/' : {
-    'href': 'file://localhost/etc/node/',
-    'protocol': 'file:',
-    'slashes': true,
-    'pathname': '/etc/node/',
-    'hostname': 'localhost',
-    'host': 'localhost',
-    'path': '/etc/node/'
-  },
-
-  'file://foo/etc/node/' : {
-    'href': 'file://foo/etc/node/',
-    'protocol': 'file:',
-    'slashes': true,
-    'pathname': '/etc/node/',
-    'hostname': 'foo',
-    'host': 'foo',
-    'path': '/etc/node/'
-  },
-
-  'http:/baz/../foo/bar' : {
-    'href': 'http:/baz/../foo/bar',
-    'protocol': 'http:',
-    'pathname': '/baz/../foo/bar',
-    'path': '/baz/../foo/bar'
-  },
-
-  'http://user:pass@example.com:8000/foo/bar?baz=quux#frag' : {
-    'href': 'http://user:pass@example.com:8000/foo/bar?baz=quux#frag',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'example.com:8000',
-    'auth': 'user:pass',
-    'port': '8000',
-    'hostname': 'example.com',
-    'hash': '#frag',
-    'search': '?baz=quux',
-    'query': 'baz=quux',
-    'pathname': '/foo/bar',
-    'path': '/foo/bar?baz=quux'
-  },
-
-  '//user:pass@example.com:8000/foo/bar?baz=quux#frag' : {
-    'href': '//user:pass@example.com:8000/foo/bar?baz=quux#frag',
-    'slashes': true,
-    'host': 'example.com:8000',
-    'auth': 'user:pass',
-    'port': '8000',
-    'hostname': 'example.com',
-    'hash': '#frag',
-    'search': '?baz=quux',
-    'query': 'baz=quux',
-    'pathname': '/foo/bar',
-    'path': '/foo/bar?baz=quux'
-  },
-
-  '/foo/bar?baz=quux#frag' : {
-    'href': '/foo/bar?baz=quux#frag',
-    'hash': '#frag',
-    'search': '?baz=quux',
-    'query': 'baz=quux',
-    'pathname': '/foo/bar',
-    'path': '/foo/bar?baz=quux'
-  },
-
-  'http:/foo/bar?baz=quux#frag' : {
-    'href': 'http:/foo/bar?baz=quux#frag',
-    'protocol': 'http:',
-    'hash': '#frag',
-    'search': '?baz=quux',
-    'query': 'baz=quux',
-    'pathname': '/foo/bar',
-    'path': '/foo/bar?baz=quux'
-  },
-
-  'mailto:foo@bar.com?subject=hello' : {
-    'href': 'mailto:foo@bar.com?subject=hello',
-    'protocol': 'mailto:',
-    'host': 'bar.com',
-    'auth' : 'foo',
-    'hostname' : 'bar.com',
-    'search': '?subject=hello',
-    'query': 'subject=hello',
-    'path': '?subject=hello'
-  },
-
-  'javascript:alert(\'hello\');' : {
-    'href': 'javascript:alert(\'hello\');',
-    'protocol': 'javascript:',
-    'pathname': 'alert(\'hello\');',
-    'path': 'alert(\'hello\');'
-  },
-
-  'xmpp:isaacschlueter@jabber.org' : {
-    'href': 'xmpp:isaacschlueter@jabber.org',
-    'protocol': 'xmpp:',
-    'host': 'jabber.org',
-    'auth': 'isaacschlueter',
-    'hostname': 'jabber.org'
-  },
-
-  'http://atpass:foo%40bar@127.0.0.1:8080/path?search=foo#bar' : {
-    'href' : 'http://atpass:foo%40bar@127.0.0.1:8080/path?search=foo#bar',
-    'protocol' : 'http:',
-    'slashes': true,
-    'host' : '127.0.0.1:8080',
-    'auth' : 'atpass:foo@bar',
-    'hostname' : '127.0.0.1',
-    'port' : '8080',
-    'pathname': '/path',
-    'search' : '?search=foo',
-    'query' : 'search=foo',
-    'hash' : '#bar',
-    'path': '/path?search=foo'
-  },
-
-  'svn+ssh://foo/bar': {
-    'href': 'svn+ssh://foo/bar',
-    'host': 'foo',
-    'hostname': 'foo',
-    'protocol': 'svn+ssh:',
-    'pathname': '/bar',
-    'path': '/bar',
-    'slashes': true
-  },
-
-  'dash-test://foo/bar': {
-    'href': 'dash-test://foo/bar',
-    'host': 'foo',
-    'hostname': 'foo',
-    'protocol': 'dash-test:',
-    'pathname': '/bar',
-    'path': '/bar',
-    'slashes': true
-  },
-
-  'dash-test:foo/bar': {
-    'href': 'dash-test:foo/bar',
-    'host': 'foo',
-    'hostname': 'foo',
-    'protocol': 'dash-test:',
-    'pathname': '/bar',
-    'path': '/bar'
-  },
-
-  'dot.test://foo/bar': {
-    'href': 'dot.test://foo/bar',
-    'host': 'foo',
-    'hostname': 'foo',
-    'protocol': 'dot.test:',
-    'pathname': '/bar',
-    'path': '/bar',
-    'slashes': true
-  },
-
-  'dot.test:foo/bar': {
-    'href': 'dot.test:foo/bar',
-    'host': 'foo',
-    'hostname': 'foo',
-    'protocol': 'dot.test:',
-    'pathname': '/bar',
-    'path': '/bar'
-  },
-
-  // IDNA tests
-  'http://www.日本語.com/' : {
-    'href': 'http://www.xn--wgv71a119e.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'www.xn--wgv71a119e.com',
-    'hostname': 'www.xn--wgv71a119e.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://example.Bücher.com/' : {
-    'href': 'http://example.xn--bcher-kva.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'example.xn--bcher-kva.com',
-    'hostname': 'example.xn--bcher-kva.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://www.Äffchen.com/' : {
-    'href': 'http://www.xn--ffchen-9ta.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'www.xn--ffchen-9ta.com',
-    'hostname': 'www.xn--ffchen-9ta.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://www.Äffchen.cOm;A/b/c?d=e#f g<h>i' : {
-    'href': 'http://www.xn--ffchen-9ta.com/;A/b/c?d=e#f%20g%3Ch%3Ei',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'www.xn--ffchen-9ta.com',
-    'hostname': 'www.xn--ffchen-9ta.com',
-    'pathname': ';A/b/c',
-    'search': '?d=e',
-    'query': 'd=e',
-    'hash': '#f%20g%3Ch%3Ei',
-    'path': ';A/b/c?d=e'
-  },
-
-  'http://SÉLIER.COM/' : {
-    'href': 'http://xn--slier-bsa.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'xn--slier-bsa.com',
-    'hostname': 'xn--slier-bsa.com',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://ليهمابتكلموشعربي؟.ي؟/' : {
-    'href': 'http://xn--egbpdaj6bu4bxfgehfvwxn.xn--egb9f/',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'xn--egbpdaj6bu4bxfgehfvwxn.xn--egb9f',
-    'hostname': 'xn--egbpdaj6bu4bxfgehfvwxn.xn--egb9f',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://➡.ws/➡' : {
-    'href': 'http://xn--hgi.ws/➡',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'xn--hgi.ws',
-    'hostname': 'xn--hgi.ws',
-    'pathname': '/➡',
-    'path': '/➡'
-  },
-
-  'http://bucket_name.s3.amazonaws.com/image.jpg': {
-    protocol: 'http:',
-    'slashes': true,
-    slashes: true,
-    host: 'bucket_name.s3.amazonaws.com',
-    hostname: 'bucket_name.s3.amazonaws.com',
-    pathname: '/image.jpg',
-    href: 'http://bucket_name.s3.amazonaws.com/image.jpg',
-    'path': '/image.jpg'
-  },
-
-  'git+http://github.com/joyent/node.git': {
-    protocol: 'git+http:',
-    slashes: true,
-    host: 'github.com',
-    hostname: 'github.com',
-    pathname: '/joyent/node.git',
-    path: '/joyent/node.git',
-    href: 'git+http://github.com/joyent/node.git'
-  },
-
-  //if local1@domain1 is uses as a relative URL it may
-  //be parse into auth@hostname, but here there is no
-  //way to make it work in url.parse, I add the test to be explicit
-  'local1@domain1': {
-    'pathname': 'local1@domain1',
-    'path': 'local1@domain1',
-    'href': 'local1@domain1'
-  },
-
-  //While this may seem counter-intuitive, a browser will parse
-  //<a href='www.google.com'> as a path.
-  'www.example.com' : {
-    'href': 'www.example.com',
-    'pathname': 'www.example.com',
-    'path': 'www.example.com'
-  },
-
-  // ipv6 support
-  '[fe80::1]': {
-    'href': '[fe80::1]',
-    'pathname': '[fe80::1]',
-    'path': '[fe80::1]'
-  },
-
-  'coap://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]': {
-    'protocol': 'coap:',
-    'slashes': true,
-    'host': '[fedc:ba98:7654:3210:fedc:ba98:7654:3210]',
-    'hostname': 'fedc:ba98:7654:3210:fedc:ba98:7654:3210',
-    'href': 'coap://[fedc:ba98:7654:3210:fedc:ba98:7654:3210]/',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'coap://[1080:0:0:0:8:800:200C:417A]:61616/': {
-    'protocol': 'coap:',
-    'slashes': true,
-    'host': '[1080:0:0:0:8:800:200c:417a]:61616',
-    'port': '61616',
-    'hostname': '1080:0:0:0:8:800:200c:417a',
-    'href': 'coap://[1080:0:0:0:8:800:200c:417a]:61616/',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://user:password@[3ffe:2a00:100:7031::1]:8080': {
-    'protocol': 'http:',
-    'slashes': true,
-    'auth': 'user:password',
-    'host': '[3ffe:2a00:100:7031::1]:8080',
-    'port': '8080',
-    'hostname': '3ffe:2a00:100:7031::1',
-    'href': 'http://user:password@[3ffe:2a00:100:7031::1]:8080/',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'coap://u:p@[::192.9.5.5]:61616/.well-known/r?n=Temperature': {
-    'protocol': 'coap:',
-    'slashes': true,
-    'auth': 'u:p',
-    'host': '[::192.9.5.5]:61616',
-    'port': '61616',
-    'hostname': '::192.9.5.5',
-    'href': 'coap://u:p@[::192.9.5.5]:61616/.well-known/r?n=Temperature',
-    'search': '?n=Temperature',
-    'query': 'n=Temperature',
-    'pathname': '/.well-known/r',
-    'path': '/.well-known/r?n=Temperature'
-  },
-
-  // empty port
-  'http://example.com:': {
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'href': 'http://example.com/',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://example.com:/a/b.html': {
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'href': 'http://example.com/a/b.html',
-    'pathname': '/a/b.html',
-    'path': '/a/b.html'
-  },
-
-  'http://example.com:?a=b': {
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'href': 'http://example.com/?a=b',
-    'search': '?a=b',
-    'query': 'a=b',
-    'pathname': '/',
-    'path': '/?a=b'
-  },
-
-  'http://example.com:#abc': {
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'href': 'http://example.com/#abc',
-    'hash': '#abc',
-    'pathname': '/',
-    'path': '/'
-  },
-
-  'http://[fe80::1]:/a/b?a=b#abc': {
-    'protocol': 'http:',
-    'slashes': true,
-    'host': '[fe80::1]',
-    'hostname': 'fe80::1',
-    'href': 'http://[fe80::1]/a/b?a=b#abc',
-    'search': '?a=b',
-    'query': 'a=b',
-    'hash': '#abc',
-    'pathname': '/a/b',
-    'path': '/a/b?a=b'
-  },
-
-  'http://-lovemonsterz.tumblr.com/rss': {
-    'protocol': 'http:',
-    'slashes': true,
-    'host': '-lovemonsterz.tumblr.com',
-    'hostname': '-lovemonsterz.tumblr.com',
-    'href': 'http://-lovemonsterz.tumblr.com/rss',
-    'pathname': '/rss',
-    'path': '/rss',
-  },
-
-  'http://-lovemonsterz.tumblr.com:80/rss': {
-    'protocol': 'http:',
-    'slashes': true,
-    'port': '80',
-    'host': '-lovemonsterz.tumblr.com:80',
-    'hostname': '-lovemonsterz.tumblr.com',
-    'href': 'http://-lovemonsterz.tumblr.com:80/rss',
-    'pathname': '/rss',
-    'path': '/rss',
-  },
-
-  'http://user:pass@-lovemonsterz.tumblr.com/rss': {
-    'protocol': 'http:',
-    'slashes': true,
-    'auth': 'user:pass',
-    'host': '-lovemonsterz.tumblr.com',
-    'hostname': '-lovemonsterz.tumblr.com',
-    'href': 'http://user:pass@-lovemonsterz.tumblr.com/rss',
-    'pathname': '/rss',
-    'path': '/rss',
-  },
-
-  'http://user:pass@-lovemonsterz.tumblr.com:80/rss': {
-    'protocol': 'http:',
-    'slashes': true,
-    'auth': 'user:pass',
-    'port': '80',
-    'host': '-lovemonsterz.tumblr.com:80',
-    'hostname': '-lovemonsterz.tumblr.com',
-    'href': 'http://user:pass@-lovemonsterz.tumblr.com:80/rss',
-    'pathname': '/rss',
-    'path': '/rss',
-  },
-
-  'http://_jabber._tcp.google.com/test': {
-    'protocol': 'http:',
-    'slashes': true,
-    'host': '_jabber._tcp.google.com',
-    'hostname': '_jabber._tcp.google.com',
-    'href': 'http://_jabber._tcp.google.com/test',
-    'pathname': '/test',
-    'path': '/test',
-  },
-
-  'http://user:pass@_jabber._tcp.google.com/test': {
-    'protocol': 'http:',
-    'slashes': true,
-    'auth': 'user:pass',
-    'host': '_jabber._tcp.google.com',
-    'hostname': '_jabber._tcp.google.com',
-    'href': 'http://user:pass@_jabber._tcp.google.com/test',
-    'pathname': '/test',
-    'path': '/test',
-  },
-
-  'http://_jabber._tcp.google.com:80/test': {
-    'protocol': 'http:',
-    'slashes': true,
-    'port': '80',
-    'host': '_jabber._tcp.google.com:80',
-    'hostname': '_jabber._tcp.google.com',
-    'href': 'http://_jabber._tcp.google.com:80/test',
-    'pathname': '/test',
-    'path': '/test',
-  },
-
-  'http://user:pass@_jabber._tcp.google.com:80/test': {
-    'protocol': 'http:',
-    'slashes': true,
-    'auth': 'user:pass',
-    'port': '80',
-    'host': '_jabber._tcp.google.com:80',
-    'hostname': '_jabber._tcp.google.com',
-    'href': 'http://user:pass@_jabber._tcp.google.com:80/test',
-    'pathname': '/test',
-    'path': '/test',
-  },
-
-  'http://x:1/\' <>"`/{}|\\^~`/': {
-    protocol: 'http:',
-    slashes: true,
-    host: 'x:1',
-    port: '1',
-    hostname: 'x',
-    pathname: '/%27%20%3C%3E%22%60/%7B%7D%7C/%5E~%60/',
-    path: '/%27%20%3C%3E%22%60/%7B%7D%7C/%5E~%60/',
-    href: 'http://x:1/%27%20%3C%3E%22%60/%7B%7D%7C/%5E~%60/'
-  },
-
-  'http://a@b@c/': {
-    protocol: 'http:',
-    slashes: true,
-    auth: 'a@b',
-    host: 'c',
-    hostname: 'c',
-    href: 'http://a%40b@c/',
-    path: '/',
-    pathname: '/'
-  },
-
-  'http://a@b?@c': {
-    protocol: 'http:',
-    slashes: true,
-    auth: 'a',
-    host: 'b',
-    hostname: 'b',
-    href: 'http://a@b/?@c',
-    path: '/?@c',
-    pathname: '/',
-    search: '?@c',
-    query: '@c'
-  },
-
-  'http://a\r" \t\n<\'b:b@c\r\nd/e?f':{
-    protocol: 'http:',
-    slashes: true,
-    auth: 'a\r" \t\n<\'b:b',
-    host: 'c',
-    port: null,
-    hostname: 'c',
-    hash: null,
-    search: '?f',
-    query: 'f',
-    pathname: '%0D%0Ad/e',
-    path: '%0D%0Ad/e?f',
-    href: 'http://a%0D%22%20%09%0A%3C\'b:b@c/%0D%0Ad/e?f'
-  },
-
-  // git urls used by npm
-  'git+ssh://git@github.com:npm/npm': {
-    protocol: 'git+ssh:',
-    slashes: true,
-    auth: 'git',
-    host: 'github.com',
-    port: null,
-    hostname: 'github.com',
-    hash: null,
-    search: null,
-    query: null,
-    pathname: '/:npm/npm',
-    path: '/:npm/npm',
-    href: 'git+ssh://git@github.com/:npm/npm'
-  }
-
-};
-
-Object.keys(parseTests).forEach(function(u) {
-  test('parse(' + u + ')', function() {
-    var actual = url.parse(u),
-        spaced = url.parse('     \t  ' + u + '\n\t');
-        expected = parseTests[u];
-
-    Object.keys(actual).forEach(function (i) {
-      if (expected[i] === undefined && actual[i] === null) {
-        expected[i] = null;
-      }
-    });
-
-    assert.deepEqual(actual, expected);
-    assert.deepEqual(spaced, expected);
-
-    var expected = parseTests[u].href,
-        actual = url.format(parseTests[u]);
-
-    assert.equal(actual, expected,
-                 'format(' + u + ') == ' + u + '\nactual:' + actual);
-  });
-});
-
-var parseTestsWithQueryString = {
-  '/foo/bar?baz=quux#frag' : {
-    'href': '/foo/bar?baz=quux#frag',
-    'hash': '#frag',
-    'search': '?baz=quux',
-    'query': {
-      'baz': 'quux'
-    },
-    'pathname': '/foo/bar',
-    'path': '/foo/bar?baz=quux'
-  },
-  'http://example.com' : {
-    'href': 'http://example.com/',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'query': {},
-    'search': '',
-    'pathname': '/',
-    'path': '/'
-  },
-  '/example': {
-    protocol: null,
-    slashes: null,
-    auth: null,
-    host: null,
-    port: null,
-    hostname: null,
-    hash: null,
-    search: '',
-    query: {},
-    pathname: '/example',
-    path: '/example',
-    href: '/example'
-  },
-  '/example?query=value':{
-    protocol: null,
-    slashes: null,
-    auth: null,
-    host: null,
-    port: null,
-    hostname: null,
-    hash: null,
-    search: '?query=value',
-    query: { query: 'value' },
-    pathname: '/example',
-    path: '/example?query=value',
-    href: '/example?query=value'
-  }
-};
-
-Object.keys(parseTestsWithQueryString).forEach(function(u) {
-  test('parse(' + u + ')', function() {
-    var actual = url.parse(u, true);
-    var expected = parseTestsWithQueryString[u];
-    for (var i in actual) {
-      if (actual[i] === null && expected[i] === undefined) {
-        expected[i] = null;
-      }
-    }
-
-    assert.deepEqual(actual, expected);
-  });
-});
-
-// some extra formatting tests, just to verify
-// that it'll format slightly wonky content to a valid url.
-var formatTests = {
-  'http://example.com?' : {
-    'href': 'http://example.com/?',
-    'protocol': 'http:',
-    'slashes': true,
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'search': '?',
-    'query': {},
-    'pathname': '/'
-  },
-  'http://example.com?foo=bar#frag' : {
-    'href': 'http://example.com/?foo=bar#frag',
-    'protocol': 'http:',
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'hash': '#frag',
-    'search': '?foo=bar',
-    'query': 'foo=bar',
-    'pathname': '/'
-  },
-  'http://example.com?foo=@bar#frag' : {
-    'href': 'http://example.com/?foo=@bar#frag',
-    'protocol': 'http:',
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'hash': '#frag',
-    'search': '?foo=@bar',
-    'query': 'foo=@bar',
-    'pathname': '/'
-  },
-  'http://example.com?foo=/bar/#frag' : {
-    'href': 'http://example.com/?foo=/bar/#frag',
-    'protocol': 'http:',
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'hash': '#frag',
-    'search': '?foo=/bar/',
-    'query': 'foo=/bar/',
-    'pathname': '/'
-  },
-  'http://example.com?foo=?bar/#frag' : {
-    'href': 'http://example.com/?foo=?bar/#frag',
-    'protocol': 'http:',
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'hash': '#frag',
-    'search': '?foo=?bar/',
-    'query': 'foo=?bar/',
-    'pathname': '/'
-  },
-  'http://example.com#frag=?bar/#frag' : {
-    'href': 'http://example.com/#frag=?bar/#frag',
-    'protocol': 'http:',
-    'host': 'example.com',
-    'hostname': 'example.com',
-    'hash': '#frag=?bar/#frag',
-    'pathname': '/'
-  },
-  'http://google.com" onload="alert(42)/' : {
-    'href': 'http://google.com/%22%20onload=%22alert(42)/',
-    'protocol': 'http:',
-    'host': 'google.com',
-    'pathname': '/%22%20onload=%22alert(42)/'
-  },
-  'http://a.com/a/b/c?s#h' : {
-    'href': 'http://a.com/a/b/c?s#h',
-    'protocol': 'http',
-    'host': 'a.com',
-    'pathname': 'a/b/c',
-    'hash': 'h',
-    'search': 's'
-  },
-  'xmpp:isaacschlueter@jabber.org' : {
-    'href': 'xmpp:isaacschlueter@jabber.org',
-    'protocol': 'xmpp:',
-    'host': 'jabber.org',
-    'auth': 'isaacschlueter',
-    'hostname': 'jabber.org'
-  },
-  'http://atpass:foo%40bar@127.0.0.1/' : {
-    'href': 'http://atpass:foo%40bar@127.0.0.1/',
-    'auth': 'atpass:foo@bar',
-    'hostname': '127.0.0.1',
-    'protocol': 'http:',
-    'pathname': '/'
-  },
-  'http://atslash%2F%40:%2F%40@foo/' : {
-    'href': 'http://atslash%2F%40:%2F%40@foo/',
-    'auth': 'atslash/@:/@',
-    'hostname': 'foo',
-    'protocol': 'http:',
-    'pathname': '/'
-  },
-  'svn+ssh://foo/bar': {
-    'href': 'svn+ssh://foo/bar',
-    'hostname': 'foo',
-    'protocol': 'svn+ssh:',
-    'pathname': '/bar',
-    'slashes': true
-  },
-  'dash-test://foo/bar': {
-    'href': 'dash-test://foo/bar',
-    'hostname': 'foo',
-    'protocol': 'dash-test:',
-    'pathname': '/bar',
-    'slashes': true
-  },
-  'dash-test:foo/bar': {
-    'href': 'dash-test:foo/bar',
-    'hostname': 'foo',
-    'protocol': 'dash-test:',
-    'pathname': '/bar'
-  },
-  'dot.test://foo/bar': {
-    'href': 'dot.test://foo/bar',
-    'hostname': 'foo',
-    'protocol': 'dot.test:',
-    'pathname': '/bar',
-    'slashes': true
-  },
-  'dot.test:foo/bar': {
-    'href': 'dot.test:foo/bar',
-    'hostname': 'foo',
-    'protocol': 'dot.test:',
-    'pathname': '/bar'
-  },
-  // ipv6 support
-  'coap:u:p@[::1]:61616/.well-known/r?n=Temperature': {
-    'href': 'coap:u:p@[::1]:61616/.well-known/r?n=Temperature',
-    'protocol': 'coap:',
-    'auth': 'u:p',
-    'hostname': '::1',
-    'port': '61616',
-    'pathname': '/.well-known/r',
-    'search': 'n=Temperature'
-  },
-  'coap:[fedc:ba98:7654:3210:fedc:ba98:7654:3210]:61616/s/stopButton': {
-    'href': 'coap:[fedc:ba98:7654:3210:fedc:ba98:7654:3210]:61616/s/stopButton',
-    'protocol': 'coap',
-    'host': '[fedc:ba98:7654:3210:fedc:ba98:7654:3210]:61616',
-    'pathname': '/s/stopButton'
-  },
-
-  // encode context-specific delimiters in path and query, but do not touch
-  // other non-delimiter chars like `%`.
-  // <https://github.com/joyent/node/issues/4082>
-
-  // `#`,`?` in path
-  '/path/to/%%23%3F+=&.txt?foo=theA1#bar' : {
-    href : '/path/to/%%23%3F+=&.txt?foo=theA1#bar',
-    pathname: '/path/to/%#?+=&.txt',
-    query: {
-      foo: 'theA1'
-    },
-    hash: "#bar"
-  },
-
-  // `#`,`?` in path + `#` in query
-  '/path/to/%%23%3F+=&.txt?foo=the%231#bar' : {
-    href : '/path/to/%%23%3F+=&.txt?foo=the%231#bar',
-    pathname: '/path/to/%#?+=&.txt',
-    query: {
-      foo: 'the#1'
-    },
-    hash: "#bar"
-  },
-
-  // `?` and `#` in path and search
-  'http://ex.com/foo%3F100%m%23r?abc=the%231?&foo=bar#frag': {
-    href: 'http://ex.com/foo%3F100%m%23r?abc=the%231?&foo=bar#frag',
-    protocol: 'http:',
-    hostname: 'ex.com',
-    hash: '#frag',
-    search: '?abc=the#1?&foo=bar',
-    pathname: '/foo?100%m#r',
-  },
-
-  // `?` and `#` in search only
-  'http://ex.com/fooA100%mBr?abc=the%231?&foo=bar#frag': {
-    href: 'http://ex.com/fooA100%mBr?abc=the%231?&foo=bar#frag',
-    protocol: 'http:',
-    hostname: 'ex.com',
-    hash: '#frag',
-    search: '?abc=the#1?&foo=bar',
-    pathname: '/fooA100%mBr',
-  }
-};
-
-Object.keys(formatTests).forEach(function(u) {
-  test('format(' + u + ')', function() {
-    var expect = formatTests[u].href;
-    delete formatTests[u].href;
-    var actual = url.format(u);
-    var actualObj = url.format(formatTests[u]);
-    assert.equal(actual, expect,
-                 'wonky format(' + u + ') == ' + expect +
-                 '\nactual:' + actual);
-    assert.equal(actualObj, expect,
-                 'wonky format(' + JSON.stringify(formatTests[u]) +
-                 ') == ' + expect +
-                 '\nactual: ' + actualObj);
-  });
-});
-
-/*
- [from, path, expected]
-*/
-var relativeTests = [
-  ['/foo/bar/baz', 'quux', '/foo/bar/quux'],
-  ['/foo/bar/baz', 'quux/asdf', '/foo/bar/quux/asdf'],
-  ['/foo/bar/baz', 'quux/baz', '/foo/bar/quux/baz'],
-  ['/foo/bar/baz', '../quux/baz', '/foo/quux/baz'],
-  ['/foo/bar/baz', '/bar', '/bar'],
-  ['/foo/bar/baz/', 'quux', '/foo/bar/baz/quux'],
-  ['/foo/bar/baz/', 'quux/baz', '/foo/bar/baz/quux/baz'],
-  ['/foo/bar/baz', '../../../../../../../../quux/baz', '/quux/baz'],
-  ['/foo/bar/baz', '../../../../../../../quux/baz', '/quux/baz'],
-  ['/foo', '.', '/'],
-  ['/foo', '..', '/'],
-  ['/foo/', '.', '/foo/'],
-  ['/foo/', '..', '/'],
-  ['/foo/bar', '.', '/foo/'],
-  ['/foo/bar', '..', '/'],
-  ['/foo/bar/', '.', '/foo/bar/'],
-  ['/foo/bar/', '..', '/foo/'],
-  ['foo/bar', '../../../baz', '../../baz'],
-  ['foo/bar/', '../../../baz', '../baz'],
-  ['http://example.com/b//c//d;p?q#blarg', 'https:#hash2', 'https:///#hash2'],
-  ['http://example.com/b//c//d;p?q#blarg',
-   'https:/p/a/t/h?s#hash2',
-   'https://p/a/t/h?s#hash2'],
-  ['http://example.com/b//c//d;p?q#blarg',
-   'https://u:p@h.com/p/a/t/h?s#hash2',
-   'https://u:p@h.com/p/a/t/h?s#hash2'],
-  ['http://example.com/b//c//d;p?q#blarg',
-   'https:/a/b/c/d',
-   'https://a/b/c/d'],
-  ['http://example.com/b//c//d;p?q#blarg',
-   'http:#hash2',
-   'http://example.com/b//c//d;p?q#hash2'],
-  ['http://example.com/b//c//d;p?q#blarg',
-   'http:/p/a/t/h?s#hash2',
-   'http://example.com/p/a/t/h?s#hash2'],
-  ['http://example.com/b//c//d;p?q#blarg',
-   'http://u:p@h.com/p/a/t/h?s#hash2',
-   'http://u:p@h.com/p/a/t/h?s#hash2'],
-  ['http://example.com/b//c//d;p?q#blarg',
-   'http:/a/b/c/d',
-   'http://example.com/a/b/c/d'],
-  ['/foo/bar/baz', '/../etc/passwd', '/etc/passwd']
-];
-
-relativeTests.forEach(function(relativeTest) {
-  test('resolve(' + [relativeTest[0], relativeTest[1]] + ')', function() {
-    var a = url.resolve(relativeTest[0], relativeTest[1]),
-        e = relativeTest[2];
-    assert.equal(a, e,
-                 'resolve(' + [relativeTest[0], relativeTest[1]] + ') == ' + e +
-                 '\n  actual=' + a);
-  });
-});
-
-
-// https://github.com/joyent/node/issues/568
-[
-  undefined,
-  null,
-  true,
-  false,
-  0.0,
-  0,
-  [],
-  {}
-].forEach(function(val) {
-  test('parse(' + val + ')', function() {
-    assert.throws(function() { url.parse(val); }, TypeError);
-  });
-});
-
-
-//
-// Tests below taken from Chiron
-// http://code.google.com/p/chironjs/source/browse/trunk/src/test/http/url.js
-//
-// Copyright (c) 2002-2008 Kris Kowal <http://cixar.com/~kris.kowal>
-// used with permission under MIT License
-//
-// Changes marked with @isaacs
-
-var bases = [
-  'http://a/b/c/d;p?q',
-  'http://a/b/c/d;p?q=1/2',
-  'http://a/b/c/d;p=1/2?q',
-  'fred:///s//a/b/c',
-  'http:///s//a/b/c'
-];
-
-//[to, from, result]
-var relativeTests2 = [
-  // http://lists.w3.org/Archives/Public/uri/2004Feb/0114.html
-  ['../c', 'foo:a/b', 'foo:c'],
-  ['foo:.', 'foo:a', 'foo:'],
-  ['/foo/../../../bar', 'zz:abc', 'zz:/bar'],
-  ['/foo/../bar', 'zz:abc', 'zz:/bar'],
-  // @isaacs Disagree. Not how web browsers resolve this.
-  ['foo/../../../bar', 'zz:abc', 'zz:bar'],
-  // ['foo/../../../bar',  'zz:abc', 'zz:../../bar'], // @isaacs Added
-  ['foo/../bar', 'zz:abc', 'zz:bar'],
-  ['zz:.', 'zz:abc', 'zz:'],
-  ['/.', bases[0], 'http://a/'],
-  ['/.foo', bases[0], 'http://a/.foo'],
-  ['.foo', bases[0], 'http://a/b/c/.foo'],
-
-  // http://gbiv.com/protocols/uri/test/rel_examples1.html
-  // examples from RFC 2396
-  ['g:h', bases[0], 'g:h'],
-  ['g', bases[0], 'http://a/b/c/g'],
-  ['./g', bases[0], 'http://a/b/c/g'],
-  ['g/', bases[0], 'http://a/b/c/g/'],
-  ['/g', bases[0], 'http://a/g'],
-  ['//g', bases[0], 'http://g/'],
-  // changed with RFC 2396bis
-  //('?y', bases[0], 'http://a/b/c/d;p?y'],
-  ['?y', bases[0], 'http://a/b/c/d;p?y'],
-  ['g?y', bases[0], 'http://a/b/c/g?y'],
-  // changed with RFC 2396bis
-  //('#s', bases[0], CURRENT_DOC_URI + '#s'],
-  ['#s', bases[0], 'http://a/b/c/d;p?q#s'],
-  ['g#s', bases[0], 'http://a/b/c/g#s'],
-  ['g?y#s', bases[0], 'http://a/b/c/g?y#s'],
-  [';x', bases[0], 'http://a/b/c/;x'],
-  ['g;x', bases[0], 'http://a/b/c/g;x'],
-  ['g;x?y#s' , bases[0], 'http://a/b/c/g;x?y#s'],
-  // changed with RFC 2396bis
-  //('', bases[0], CURRENT_DOC_URI],
-  ['', bases[0], 'http://a/b/c/d;p?q'],
-  ['.', bases[0], 'http://a/b/c/'],
-  ['./', bases[0], 'http://a/b/c/'],
-  ['..', bases[0], 'http://a/b/'],
-  ['../', bases[0], 'http://a/b/'],
-  ['../g', bases[0], 'http://a/b/g'],
-  ['../..', bases[0], 'http://a/'],
-  ['../../', bases[0], 'http://a/'],
-  ['../../g' , bases[0], 'http://a/g'],
-  ['../../../g', bases[0], ('http://a/../g', 'http://a/g')],
-  ['../../../../g', bases[0], ('http://a/../../g', 'http://a/g')],
-  // changed with RFC 2396bis
-  //('/./g', bases[0], 'http://a/./g'],
-  ['/./g', bases[0], 'http://a/g'],
-  // changed with RFC 2396bis
-  //('/../g', bases[0], 'http://a/../g'],
-  ['/../g', bases[0], 'http://a/g'],
-  ['g.', bases[0], 'http://a/b/c/g.'],
-  ['.g', bases[0], 'http://a/b/c/.g'],
-  ['g..', bases[0], 'http://a/b/c/g..'],
-  ['..g', bases[0], 'http://a/b/c/..g'],
-  ['./../g', bases[0], 'http://a/b/g'],
-  ['./g/.', bases[0], 'http://a/b/c/g/'],
-  ['g/./h', bases[0], 'http://a/b/c/g/h'],
-  ['g/../h', bases[0], 'http://a/b/c/h'],
-  ['g;x=1/./y', bases[0], 'http://a/b/c/g;x=1/y'],
-  ['g;x=1/../y', bases[0], 'http://a/b/c/y'],
-  ['g?y/./x', bases[0], 'http://a/b/c/g?y/./x'],
-  ['g?y/../x', bases[0], 'http://a/b/c/g?y/../x'],
-  ['g#s/./x', bases[0], 'http://a/b/c/g#s/./x'],
-  ['g#s/../x', bases[0], 'http://a/b/c/g#s/../x'],
-  ['http:g', bases[0], ('http:g', 'http://a/b/c/g')],
-  ['http:', bases[0], ('http:', bases[0])],
-  // not sure where this one originated
-  ['/a/b/c/./../../g', bases[0], 'http://a/a/g'],
-
-  // http://gbiv.com/protocols/uri/test/rel_examples2.html
-  // slashes in base URI's query args
-  ['g', bases[1], 'http://a/b/c/g'],
-  ['./g', bases[1], 'http://a/b/c/g'],
-  ['g/', bases[1], 'http://a/b/c/g/'],
-  ['/g', bases[1], 'http://a/g'],
-  ['//g', bases[1], 'http://g/'],
-  // changed in RFC 2396bis
-  //('?y', bases[1], 'http://a/b/c/?y'],
-  ['?y', bases[1], 'http://a/b/c/d;p?y'],
-  ['g?y', bases[1], 'http://a/b/c/g?y'],
-  ['g?y/./x' , bases[1], 'http://a/b/c/g?y/./x'],
-  ['g?y/../x', bases[1], 'http://a/b/c/g?y/../x'],
-  ['g#s', bases[1], 'http://a/b/c/g#s'],
-  ['g#s/./x' , bases[1], 'http://a/b/c/g#s/./x'],
-  ['g#s/../x', bases[1], 'http://a/b/c/g#s/../x'],
-  ['./', bases[1], 'http://a/b/c/'],
-  ['../', bases[1], 'http://a/b/'],
-  ['../g', bases[1], 'http://a/b/g'],
-  ['../../', bases[1], 'http://a/'],
-  ['../../g' , bases[1], 'http://a/g'],
-
-  // http://gbiv.com/protocols/uri/test/rel_examples3.html
-  // slashes in path params
-  // all of these changed in RFC 2396bis
-  ['g', bases[2], 'http://a/b/c/d;p=1/g'],
-  ['./g', bases[2], 'http://a/b/c/d;p=1/g'],
-  ['g/', bases[2], 'http://a/b/c/d;p=1/g/'],
-  ['g?y', bases[2], 'http://a/b/c/d;p=1/g?y'],
-  [';x', bases[2], 'http://a/b/c/d;p=1/;x'],
-  ['g;x', bases[2], 'http://a/b/c/d;p=1/g;x'],
-  ['g;x=1/./y', bases[2], 'http://a/b/c/d;p=1/g;x=1/y'],
-  ['g;x=1/../y', bases[2], 'http://a/b/c/d;p=1/y'],
-  ['./', bases[2], 'http://a/b/c/d;p=1/'],
-  ['../', bases[2], 'http://a/b/c/'],
-  ['../g', bases[2], 'http://a/b/c/g'],
-  ['../../', bases[2], 'http://a/b/'],
-  ['../../g' , bases[2], 'http://a/b/g'],
-
-  // http://gbiv.com/protocols/uri/test/rel_examples4.html
-  // double and triple slash, unknown scheme
-  ['g:h', bases[3], 'g:h'],
-  ['g', bases[3], 'fred:///s//a/b/g'],
-  ['./g', bases[3], 'fred:///s//a/b/g'],
-  ['g/', bases[3], 'fred:///s//a/b/g/'],
-  ['/g', bases[3], 'fred:///g'],  // may change to fred:///s//a/g
-  ['//g', bases[3], 'fred://g'],   // may change to fred:///s//g
-  ['//g/x', bases[3], 'fred://g/x'], // may change to fred:///s//g/x
-  ['///g', bases[3], 'fred:///g'],
-  ['./', bases[3], 'fred:///s//a/b/'],
-  ['../', bases[3], 'fred:///s//a/'],
-  ['../g', bases[3], 'fred:///s//a/g'],
-
-  ['../../', bases[3], 'fred:///s//'],
-  ['../../g' , bases[3], 'fred:///s//g'],
-  ['../../../g', bases[3], 'fred:///s/g'],
-  // may change to fred:///s//a/../../../g
-  ['../../../../g', bases[3], 'fred:///g'],
-
-  // http://gbiv.com/protocols/uri/test/rel_examples5.html
-  // double and triple slash, well-known scheme
-  ['g:h', bases[4], 'g:h'],
-  ['g', bases[4], 'http:///s//a/b/g'],
-  ['./g', bases[4], 'http:///s//a/b/g'],
-  ['g/', bases[4], 'http:///s//a/b/g/'],
-  ['/g', bases[4], 'http:///g'],  // may change to http:///s//a/g
-  ['//g', bases[4], 'http://g/'],   // may change to http:///s//g
-  ['//g/x', bases[4], 'http://g/x'], // may change to http:///s//g/x
-  ['///g', bases[4], 'http:///g'],
-  ['./', bases[4], 'http:///s//a/b/'],
-  ['../', bases[4], 'http:///s//a/'],
-  ['../g', bases[4], 'http:///s//a/g'],
-  ['../../', bases[4], 'http:///s//'],
-  ['../../g' , bases[4], 'http:///s//g'],
-  // may change to http:///s//a/../../g
-  ['../../../g', bases[4], 'http:///s/g'],
-  // may change to http:///s//a/../../../g
-  ['../../../../g', bases[4], 'http:///g'],
-
-  // from Dan Connelly's tests in http://www.w3.org/2000/10/swap/uripath.py
-  ['bar:abc', 'foo:xyz', 'bar:abc'],
-  ['../abc', 'http://example/x/y/z', 'http://example/x/abc'],
-  ['http://example/x/abc', 'http://example2/x/y/z', 'http://example/x/abc'],
-  ['../r', 'http://ex/x/y/z', 'http://ex/x/r'],
-  ['q/r', 'http://ex/x/y', 'http://ex/x/q/r'],
-  ['q/r#s', 'http://ex/x/y', 'http://ex/x/q/r#s'],
-  ['q/r#s/t', 'http://ex/x/y', 'http://ex/x/q/r#s/t'],
-  ['ftp://ex/x/q/r', 'http://ex/x/y', 'ftp://ex/x/q/r'],
-  ['', 'http://ex/x/y', 'http://ex/x/y'],
-  ['', 'http://ex/x/y/', 'http://ex/x/y/'],
-  ['', 'http://ex/x/y/pdq', 'http://ex/x/y/pdq'],
-  ['z/', 'http://ex/x/y/', 'http://ex/x/y/z/'],
-  ['#Animal',
-   'file:/swap/test/animal.rdf',
-   'file:/swap/test/animal.rdf#Animal'],
-  ['../abc', 'file:/e/x/y/z', 'file:/e/x/abc'],
-  ['/example/x/abc', 'file:/example2/x/y/z', 'file:/example/x/abc'],
-  ['../r', 'file:/ex/x/y/z', 'file:/ex/x/r'],
-  ['/r', 'file:/ex/x/y/z', 'file:/r'],
-  ['q/r', 'file:/ex/x/y', 'file:/ex/x/q/r'],
-  ['q/r#s', 'file:/ex/x/y', 'file:/ex/x/q/r#s'],
-  ['q/r#', 'file:/ex/x/y', 'file:/ex/x/q/r#'],
-  ['q/r#s/t', 'file:/ex/x/y', 'file:/ex/x/q/r#s/t'],
-  ['ftp://ex/x/q/r', 'file:/ex/x/y', 'ftp://ex/x/q/r'],
-  ['', 'file:/ex/x/y', 'file:/ex/x/y'],
-  ['', 'file:/ex/x/y/', 'file:/ex/x/y/'],
-  ['', 'file:/ex/x/y/pdq', 'file:/ex/x/y/pdq'],
-  ['z/', 'file:/ex/x/y/', 'file:/ex/x/y/z/'],
-  ['file://meetings.example.com/cal#m1',
-   'file:/devel/WWW/2000/10/swap/test/reluri-1.n3',
-   'file://meetings.example.com/cal#m1'],
-  ['file://meetings.example.com/cal#m1',
-   'file:/home/connolly/w3ccvs/WWW/2000/10/swap/test/reluri-1.n3',
-   'file://meetings.example.com/cal#m1'],
-  ['./#blort', 'file:/some/dir/foo', 'file:/some/dir/#blort'],
-  ['./#', 'file:/some/dir/foo', 'file:/some/dir/#'],
-  // Ryan Lee
-  ['./', 'http://example/x/abc.efg', 'http://example/x/'],
-
-
-  // Graham Klyne's tests
-  // http://www.ninebynine.org/Software/HaskellUtils/Network/UriTest.xls
-  // 01-31 are from Connelly's cases
-
-  // 32-49
-  ['./q:r', 'http://ex/x/y', 'http://ex/x/q:r'],
-  ['./p=q:r', 'http://ex/x/y', 'http://ex/x/p=q:r'],
-  ['?pp/rr', 'http://ex/x/y?pp/qq', 'http://ex/x/y?pp/rr'],
-  ['y/z', 'http://ex/x/y?pp/qq', 'http://ex/x/y/z'],
-  ['local/qual@domain.org#frag',
-   'mailto:local',
-   'mailto:local/qual@domain.org#frag'],
-  ['more/qual2@domain2.org#frag',
-   'mailto:local/qual1@domain1.org',
-   'mailto:local/more/qual2@domain2.org#frag'],
-  ['y?q', 'http://ex/x/y?q', 'http://ex/x/y?q'],
-  ['/x/y?q', 'http://ex?p', 'http://ex/x/y?q'],
-  ['c/d', 'foo:a/b', 'foo:a/c/d'],
-  ['/c/d', 'foo:a/b', 'foo:/c/d'],
-  ['', 'foo:a/b?c#d', 'foo:a/b?c'],
-  ['b/c', 'foo:a', 'foo:b/c'],
-  ['../b/c', 'foo:/a/y/z', 'foo:/a/b/c'],
-  ['./b/c', 'foo:a', 'foo:b/c'],
-  ['/./b/c', 'foo:a', 'foo:/b/c'],
-  ['../../d', 'foo://a//b/c', 'foo://a/d'],
-  ['.', 'foo:a', 'foo:'],
-  ['..', 'foo:a', 'foo:'],
-
-  // 50-57[cf. TimBL comments --
-  //  http://lists.w3.org/Archives/Public/uri/2003Feb/0028.html,
-  //  http://lists.w3.org/Archives/Public/uri/2003Jan/0008.html)
-  ['abc', 'http://example/x/y%2Fz', 'http://example/x/abc'],
-  ['../../x%2Fabc', 'http://example/a/x/y/z', 'http://example/a/x%2Fabc'],
-  ['../x%2Fabc', 'http://example/a/x/y%2Fz', 'http://example/a/x%2Fabc'],
-  ['abc', 'http://example/x%2Fy/z', 'http://example/x%2Fy/abc'],
-  ['q%3Ar', 'http://ex/x/y', 'http://ex/x/q%3Ar'],
-  ['/x%2Fabc', 'http://example/x/y%2Fz', 'http://example/x%2Fabc'],
-  ['/x%2Fabc', 'http://example/x/y/z', 'http://example/x%2Fabc'],
-  ['/x%2Fabc', 'http://example/x/y%2Fz', 'http://example/x%2Fabc'],
-
-  // 70-77
-  ['local2@domain2', 'mailto:local1@domain1?query1', 'mailto:local2@domain2'],
-  ['local2@domain2?query2',
-   'mailto:local1@domain1',
-   'mailto:local2@domain2?query2'],
-  ['local2@domain2?query2',
-   'mailto:local1@domain1?query1',
-   'mailto:local2@domain2?query2'],
-  ['?query2', 'mailto:local@domain?query1', 'mailto:local@domain?query2'],
-  ['local@domain?query2', 'mailto:?query1', 'mailto:local@domain?query2'],
-  ['?query2', 'mailto:local@domain?query1', 'mailto:local@domain?query2'],
-  ['http://example/a/b?c/../d', 'foo:bar', 'http://example/a/b?c/../d'],
-  ['http://example/a/b#c/../d', 'foo:bar', 'http://example/a/b#c/../d'],
-
-  // 82-88
-  // @isaacs Disagree. Not how browsers do it.
-  // ['http:this', 'http://example.org/base/uri', 'http:this'],
-  // @isaacs Added
-  ['http:this', 'http://example.org/base/uri', 'http://example.org/base/this'],
-  ['http:this', 'http:base', 'http:this'],
-  ['.//g', 'f:/a', 'f://g'],
-  ['b/c//d/e', 'f://example.org/base/a', 'f://example.org/base/b/c//d/e'],
-  ['m2@example.ord/c2@example.org',
-   'mid:m@example.ord/c@example.org',
-   'mid:m@example.ord/m2@example.ord/c2@example.org'],
-  ['mini1.xml',
-   'file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/',
-   'file:///C:/DEV/Haskell/lib/HXmlToolbox-3.01/examples/mini1.xml'],
-  ['../b/c', 'foo:a/y/z', 'foo:a/b/c'],
-
-  //changeing auth
-  ['http://diff:auth@www.example.com',
-   'http://asdf:qwer@www.example.com',
-   'http://diff:auth@www.example.com/']
-];
-
-relativeTests2.forEach(function(relativeTest) {
-  test('resolve(' + [relativeTest[1], relativeTest[0]] + ')', function() {
-    var a = url.resolve(relativeTest[1], relativeTest[0]),
-        e = relativeTest[2];
-    assert.equal(a, e,
-                 'resolve(' + [relativeTest[1], relativeTest[0]] + ') == ' + e +
-                 '\n  actual=' + a);
-  });
-});
-
-//if format and parse are inverse operations then
-//resolveObject(parse(x), y) == parse(resolve(x, y))
-
-//host and hostname are special, in this case a '' value is important
-var emptyIsImportant = {'host': true, 'hostname': ''};
-
-//format: [from, path, expected]
-relativeTests.forEach(function(relativeTest) {
-test('resolveObject(' + [relativeTest[0], relativeTest[1]] + ')', function() {
-    var actual = url.resolveObject(url.parse(relativeTest[0]), relativeTest[1]),
-        expected = url.parse(relativeTest[2]);
-
-
-    assert.deepEqual(actual, expected);
-
-    expected = relativeTest[2];
-    actual = url.format(actual);
-
-    assert.equal(actual, expected,
-                 'format(' + actual + ') == ' + expected + '\nactual:' + actual);
-  });
-});
-
-//format: [to, from, result]
-// the test: ['.//g', 'f:/a', 'f://g'] is a fundamental problem
-// url.parse('f:/a') does not have a host
-// url.resolve('f:/a', './/g') does not have a host because you have moved
-// down to the g directory.  i.e. f:     //g, however when this url is parsed
-// f:// will indicate that the host is g which is not the case.
-// it is unclear to me how to keep this information from being lost
-// it may be that a pathname of ////g should collapse to /g but this seems
-// to be a lot of work for an edge case.  Right now I remove the test
-if (relativeTests2[181][0] === './/g' &&
-    relativeTests2[181][1] === 'f:/a' &&
-    relativeTests2[181][2] === 'f://g') {
-  relativeTests2.splice(181, 1);
-}
-
-relativeTests2.forEach(function(relativeTest) {
-  test('resolveObject(' + [relativeTest[1], relativeTest[0]] + ')', function() {
-    var actual = url.resolveObject(url.parse(relativeTest[1]), relativeTest[0]),
-        expected = url.parse(relativeTest[2]);
-
-    assert.deepEqual(actual, expected);
-
-    var expected = relativeTest[2],
-        actual = url.format(actual);
-
-    assert.equal(actual, expected,
-                 'format(' + relativeTest[1] + ') == ' + expected +
-                 '\nactual:' + actual);
-  });
-});
diff --git a/signaling_server/service/node_modules/express/node_modules/url/url.js b/signaling_server/service/node_modules/express/node_modules/url/url.js
deleted file mode 100644 (file)
index 23ac6f5..0000000
+++ /dev/null
@@ -1,732 +0,0 @@
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-'use strict';
-
-var punycode = require('punycode');
-var util = require('./util');
-
-exports.parse = urlParse;
-exports.resolve = urlResolve;
-exports.resolveObject = urlResolveObject;
-exports.format = urlFormat;
-
-exports.Url = Url;
-
-function Url() {
-  this.protocol = null;
-  this.slashes = null;
-  this.auth = null;
-  this.host = null;
-  this.port = null;
-  this.hostname = null;
-  this.hash = null;
-  this.search = null;
-  this.query = null;
-  this.pathname = null;
-  this.path = null;
-  this.href = null;
-}
-
-// Reference: RFC 3986, RFC 1808, RFC 2396
-
-// define these here so at least they only have to be
-// compiled once on the first module load.
-var protocolPattern = /^([a-z0-9.+-]+:)/i,
-    portPattern = /:[0-9]*$/,
-
-    // Special case for a simple path URL
-    simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
-
-    // RFC 2396: characters reserved for delimiting URLs.
-    // We actually just auto-escape these.
-    delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
-
-    // RFC 2396: characters not allowed for various reasons.
-    unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
-
-    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.
-    autoEscape = ['\''].concat(unwise),
-    // Characters that are never ever allowed in a hostname.
-    // Note that any invalid chars are also handled, but these
-    // are the ones that are *expected* to be seen, so we fast-path
-    // them.
-    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
-    hostEndingChars = ['/', '?', '#'],
-    hostnameMaxLen = 255,
-    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
-    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
-    // protocols that can allow "unsafe" and "unwise" chars.
-    unsafeProtocol = {
-      'javascript': true,
-      'javascript:': true
-    },
-    // protocols that never have a hostname.
-    hostlessProtocol = {
-      'javascript': true,
-      'javascript:': true
-    },
-    // protocols that always contain a // bit.
-    slashedProtocol = {
-      'http': true,
-      'https': true,
-      'ftp': true,
-      'gopher': true,
-      'file': true,
-      'http:': true,
-      'https:': true,
-      'ftp:': true,
-      'gopher:': true,
-      'file:': true
-    },
-    querystring = require('querystring');
-
-function urlParse(url, parseQueryString, slashesDenoteHost) {
-  if (url && util.isObject(url) && url instanceof Url) return url;
-
-  var u = new Url;
-  u.parse(url, parseQueryString, slashesDenoteHost);
-  return u;
-}
-
-Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
-  if (!util.isString(url)) {
-    throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
-  }
-
-  // Copy chrome, IE, opera backslash-handling behavior.
-  // Back slashes before the query string get converted to forward slashes
-  // See: https://code.google.com/p/chromium/issues/detail?id=25916
-  var queryIndex = url.indexOf('?'),
-      splitter =
-          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',
-      uSplit = url.split(splitter),
-      slashRegex = /\\/g;
-  uSplit[0] = uSplit[0].replace(slashRegex, '/');
-  url = uSplit.join(splitter);
-
-  var rest = url;
-
-  // trim before proceeding.
-  // This is to support parse stuff like "  http://foo.com  \n"
-  rest = rest.trim();
-
-  if (!slashesDenoteHost && url.split('#').length === 1) {
-    // Try fast path regexp
-    var simplePath = simplePathPattern.exec(rest);
-    if (simplePath) {
-      this.path = rest;
-      this.href = rest;
-      this.pathname = simplePath[1];
-      if (simplePath[2]) {
-        this.search = simplePath[2];
-        if (parseQueryString) {
-          this.query = querystring.parse(this.search.substr(1));
-        } else {
-          this.query = this.search.substr(1);
-        }
-      } else if (parseQueryString) {
-        this.search = '';
-        this.query = {};
-      }
-      return this;
-    }
-  }
-
-  var proto = protocolPattern.exec(rest);
-  if (proto) {
-    proto = proto[0];
-    var lowerProto = proto.toLowerCase();
-    this.protocol = lowerProto;
-    rest = rest.substr(proto.length);
-  }
-
-  // figure out if it's got a host
-  // user@server is *always* interpreted as a hostname, and url
-  // resolution will treat //foo/bar as host=foo,path=bar because that's
-  // how the browser resolves relative URLs.
-  if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
-    var slashes = rest.substr(0, 2) === '//';
-    if (slashes && !(proto && hostlessProtocol[proto])) {
-      rest = rest.substr(2);
-      this.slashes = true;
-    }
-  }
-
-  if (!hostlessProtocol[proto] &&
-      (slashes || (proto && !slashedProtocol[proto]))) {
-
-    // there's a hostname.
-    // the first instance of /, ?, ;, or # ends the host.
-    //
-    // If there is an @ in the hostname, then non-host chars *are* allowed
-    // to the left of the last @ sign, unless some host-ending character
-    // comes *before* the @-sign.
-    // URLs are obnoxious.
-    //
-    // ex:
-    // http://a@b@c/ => user:a@b host:c
-    // http://a@b?@c => user:a host:c path:/?@c
-
-    // v0.12 TODO(isaacs): This is not quite how Chrome does things.
-    // Review our test case against browsers more comprehensively.
-
-    // find the first instance of any hostEndingChars
-    var hostEnd = -1;
-    for (var i = 0; i < hostEndingChars.length; i++) {
-      var hec = rest.indexOf(hostEndingChars[i]);
-      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
-        hostEnd = hec;
-    }
-
-    // at this point, either we have an explicit point where the
-    // auth portion cannot go past, or the last @ char is the decider.
-    var auth, atSign;
-    if (hostEnd === -1) {
-      // atSign can be anywhere.
-      atSign = rest.lastIndexOf('@');
-    } else {
-      // atSign must be in auth portion.
-      // http://a@b/c@d => host:b auth:a path:/c@d
-      atSign = rest.lastIndexOf('@', hostEnd);
-    }
-
-    // Now we have a portion which is definitely the auth.
-    // Pull that off.
-    if (atSign !== -1) {
-      auth = rest.slice(0, atSign);
-      rest = rest.slice(atSign + 1);
-      this.auth = decodeURIComponent(auth);
-    }
-
-    // the host is the remaining to the left of the first non-host char
-    hostEnd = -1;
-    for (var i = 0; i < nonHostChars.length; i++) {
-      var hec = rest.indexOf(nonHostChars[i]);
-      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
-        hostEnd = hec;
-    }
-    // if we still have not hit it, then the entire thing is a host.
-    if (hostEnd === -1)
-      hostEnd = rest.length;
-
-    this.host = rest.slice(0, hostEnd);
-    rest = rest.slice(hostEnd);
-
-    // pull out port.
-    this.parseHost();
-
-    // we've indicated that there is a hostname,
-    // so even if it's empty, it has to be present.
-    this.hostname = this.hostname || '';
-
-    // if hostname begins with [ and ends with ]
-    // assume that it's an IPv6 address.
-    var ipv6Hostname = this.hostname[0] === '[' &&
-        this.hostname[this.hostname.length - 1] === ']';
-
-    // validate a little.
-    if (!ipv6Hostname) {
-      var hostparts = this.hostname.split(/\./);
-      for (var i = 0, l = hostparts.length; i < l; i++) {
-        var part = hostparts[i];
-        if (!part) continue;
-        if (!part.match(hostnamePartPattern)) {
-          var newpart = '';
-          for (var j = 0, k = part.length; j < k; j++) {
-            if (part.charCodeAt(j) > 127) {
-              // we replace non-ASCII char with a temporary placeholder
-              // we need this to make sure size of hostname is not
-              // broken by replacing non-ASCII by nothing
-              newpart += 'x';
-            } else {
-              newpart += part[j];
-            }
-          }
-          // we test again with ASCII char only
-          if (!newpart.match(hostnamePartPattern)) {
-            var validParts = hostparts.slice(0, i);
-            var notHost = hostparts.slice(i + 1);
-            var bit = part.match(hostnamePartStart);
-            if (bit) {
-              validParts.push(bit[1]);
-              notHost.unshift(bit[2]);
-            }
-            if (notHost.length) {
-              rest = '/' + notHost.join('.') + rest;
-            }
-            this.hostname = validParts.join('.');
-            break;
-          }
-        }
-      }
-    }
-
-    if (this.hostname.length > hostnameMaxLen) {
-      this.hostname = '';
-    } else {
-      // hostnames are always lower case.
-      this.hostname = this.hostname.toLowerCase();
-    }
-
-    if (!ipv6Hostname) {
-      // IDNA Support: Returns a punycoded representation of "domain".
-      // It only converts parts of the domain name that
-      // have non-ASCII characters, i.e. it doesn't matter if
-      // you call it with a domain that already is ASCII-only.
-      this.hostname = punycode.toASCII(this.hostname);
-    }
-
-    var p = this.port ? ':' + this.port : '';
-    var h = this.hostname || '';
-    this.host = h + p;
-    this.href += this.host;
-
-    // strip [ and ] from the hostname
-    // the host field still retains them, though
-    if (ipv6Hostname) {
-      this.hostname = this.hostname.substr(1, this.hostname.length - 2);
-      if (rest[0] !== '/') {
-        rest = '/' + rest;
-      }
-    }
-  }
-
-  // now rest is set to the post-host stuff.
-  // chop off any delim chars.
-  if (!unsafeProtocol[lowerProto]) {
-
-    // First, make 100% sure that any "autoEscape" chars get
-    // escaped, even if encodeURIComponent doesn't think they
-    // need to be.
-    for (var i = 0, l = autoEscape.length; i < l; i++) {
-      var ae = autoEscape[i];
-      if (rest.indexOf(ae) === -1)
-        continue;
-      var esc = encodeURIComponent(ae);
-      if (esc === ae) {
-        esc = escape(ae);
-      }
-      rest = rest.split(ae).join(esc);
-    }
-  }
-
-
-  // chop off from the tail first.
-  var hash = rest.indexOf('#');
-  if (hash !== -1) {
-    // got a fragment string.
-    this.hash = rest.substr(hash);
-    rest = rest.slice(0, hash);
-  }
-  var qm = rest.indexOf('?');
-  if (qm !== -1) {
-    this.search = rest.substr(qm);
-    this.query = rest.substr(qm + 1);
-    if (parseQueryString) {
-      this.query = querystring.parse(this.query);
-    }
-    rest = rest.slice(0, qm);
-  } else if (parseQueryString) {
-    // no query string, but parseQueryString still requested
-    this.search = '';
-    this.query = {};
-  }
-  if (rest) this.pathname = rest;
-  if (slashedProtocol[lowerProto] &&
-      this.hostname && !this.pathname) {
-    this.pathname = '/';
-  }
-
-  //to support http.request
-  if (this.pathname || this.search) {
-    var p = this.pathname || '';
-    var s = this.search || '';
-    this.path = p + s;
-  }
-
-  // finally, reconstruct the href based on what has been validated.
-  this.href = this.format();
-  return this;
-};
-
-// format a parsed object into a url string
-function urlFormat(obj) {
-  // ensure it's an object, and not a string url.
-  // If it's an obj, this is a no-op.
-  // this way, you can call url_format() on strings
-  // to clean up potentially wonky urls.
-  if (util.isString(obj)) obj = urlParse(obj);
-  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
-  return obj.format();
-}
-
-Url.prototype.format = function() {
-  var auth = this.auth || '';
-  if (auth) {
-    auth = encodeURIComponent(auth);
-    auth = auth.replace(/%3A/i, ':');
-    auth += '@';
-  }
-
-  var protocol = this.protocol || '',
-      pathname = this.pathname || '',
-      hash = this.hash || '',
-      host = false,
-      query = '';
-
-  if (this.host) {
-    host = auth + this.host;
-  } else if (this.hostname) {
-    host = auth + (this.hostname.indexOf(':') === -1 ?
-        this.hostname :
-        '[' + this.hostname + ']');
-    if (this.port) {
-      host += ':' + this.port;
-    }
-  }
-
-  if (this.query &&
-      util.isObject(this.query) &&
-      Object.keys(this.query).length) {
-    query = querystring.stringify(this.query);
-  }
-
-  var search = this.search || (query && ('?' + query)) || '';
-
-  if (protocol && protocol.substr(-1) !== ':') protocol += ':';
-
-  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.
-  // unless they had them to begin with.
-  if (this.slashes ||
-      (!protocol || slashedProtocol[protocol]) && host !== false) {
-    host = '//' + (host || '');
-    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
-  } else if (!host) {
-    host = '';
-  }
-
-  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
-  if (search && search.charAt(0) !== '?') search = '?' + search;
-
-  pathname = pathname.replace(/[?#]/g, function(match) {
-    return encodeURIComponent(match);
-  });
-  search = search.replace('#', '%23');
-
-  return protocol + host + pathname + search + hash;
-};
-
-function urlResolve(source, relative) {
-  return urlParse(source, false, true).resolve(relative);
-}
-
-Url.prototype.resolve = function(relative) {
-  return this.resolveObject(urlParse(relative, false, true)).format();
-};
-
-function urlResolveObject(source, relative) {
-  if (!source) return relative;
-  return urlParse(source, false, true).resolveObject(relative);
-}
-
-Url.prototype.resolveObject = function(relative) {
-  if (util.isString(relative)) {
-    var rel = new Url();
-    rel.parse(relative, false, true);
-    relative = rel;
-  }
-
-  var result = new Url();
-  var tkeys = Object.keys(this);
-  for (var tk = 0; tk < tkeys.length; tk++) {
-    var tkey = tkeys[tk];
-    result[tkey] = this[tkey];
-  }
-
-  // hash is always overridden, no matter what.
-  // even href="" will remove it.
-  result.hash = relative.hash;
-
-  // if the relative url is empty, then there's nothing left to do here.
-  if (relative.href === '') {
-    result.href = result.format();
-    return result;
-  }
-
-  // hrefs like //foo/bar always cut to the protocol.
-  if (relative.slashes && !relative.protocol) {
-    // take everything except the protocol from relative
-    var rkeys = Object.keys(relative);
-    for (var rk = 0; rk < rkeys.length; rk++) {
-      var rkey = rkeys[rk];
-      if (rkey !== 'protocol')
-        result[rkey] = relative[rkey];
-    }
-
-    //urlParse appends trailing / to urls like http://www.example.com
-    if (slashedProtocol[result.protocol] &&
-        result.hostname && !result.pathname) {
-      result.path = result.pathname = '/';
-    }
-
-    result.href = result.format();
-    return result;
-  }
-
-  if (relative.protocol && relative.protocol !== result.protocol) {
-    // if it's a known url protocol, then changing
-    // the protocol does weird things
-    // first, if it's not file:, then we MUST have a host,
-    // and if there was a path
-    // to begin with, then we MUST have a path.
-    // if it is file:, then the host is dropped,
-    // because that's known to be hostless.
-    // anything else is assumed to be absolute.
-    if (!slashedProtocol[relative.protocol]) {
-      var keys = Object.keys(relative);
-      for (var v = 0; v < keys.length; v++) {
-        var k = keys[v];
-        result[k] = relative[k];
-      }
-      result.href = result.format();
-      return result;
-    }
-
-    result.protocol = relative.protocol;
-    if (!relative.host && !hostlessProtocol[relative.protocol]) {
-      var relPath = (relative.pathname || '').split('/');
-      while (relPath.length && !(relative.host = relPath.shift()));
-      if (!relative.host) relative.host = '';
-      if (!relative.hostname) relative.hostname = '';
-      if (relPath[0] !== '') relPath.unshift('');
-      if (relPath.length < 2) relPath.unshift('');
-      result.pathname = relPath.join('/');
-    } else {
-      result.pathname = relative.pathname;
-    }
-    result.search = relative.search;
-    result.query = relative.query;
-    result.host = relative.host || '';
-    result.auth = relative.auth;
-    result.hostname = relative.hostname || relative.host;
-    result.port = relative.port;
-    // to support http.request
-    if (result.pathname || result.search) {
-      var p = result.pathname || '';
-      var s = result.search || '';
-      result.path = p + s;
-    }
-    result.slashes = result.slashes || relative.slashes;
-    result.href = result.format();
-    return result;
-  }
-
-  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),
-      isRelAbs = (
-          relative.host ||
-          relative.pathname && relative.pathname.charAt(0) === '/'
-      ),
-      mustEndAbs = (isRelAbs || isSourceAbs ||
-                    (result.host && relative.pathname)),
-      removeAllDots = mustEndAbs,
-      srcPath = result.pathname && result.pathname.split('/') || [],
-      relPath = relative.pathname && relative.pathname.split('/') || [],
-      psychotic = result.protocol && !slashedProtocol[result.protocol];
-
-  // if the url is a non-slashed url, then relative
-  // links like ../.. should be able
-  // to crawl up to the hostname, as well.  This is strange.
-  // result.protocol has already been set by now.
-  // Later on, put the first path part into the host field.
-  if (psychotic) {
-    result.hostname = '';
-    result.port = null;
-    if (result.host) {
-      if (srcPath[0] === '') srcPath[0] = result.host;
-      else srcPath.unshift(result.host);
-    }
-    result.host = '';
-    if (relative.protocol) {
-      relative.hostname = null;
-      relative.port = null;
-      if (relative.host) {
-        if (relPath[0] === '') relPath[0] = relative.host;
-        else relPath.unshift(relative.host);
-      }
-      relative.host = null;
-    }
-    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
-  }
-
-  if (isRelAbs) {
-    // it's absolute.
-    result.host = (relative.host || relative.host === '') ?
-                  relative.host : result.host;
-    result.hostname = (relative.hostname || relative.hostname === '') ?
-                      relative.hostname : result.hostname;
-    result.search = relative.search;
-    result.query = relative.query;
-    srcPath = relPath;
-    // fall through to the dot-handling below.
-  } else if (relPath.length) {
-    // it's relative
-    // throw away the existing file, and take the new path instead.
-    if (!srcPath) srcPath = [];
-    srcPath.pop();
-    srcPath = srcPath.concat(relPath);
-    result.search = relative.search;
-    result.query = relative.query;
-  } else if (!util.isNullOrUndefined(relative.search)) {
-    // just pull out the search.
-    // like href='?foo'.
-    // Put this after the other two cases because it simplifies the booleans
-    if (psychotic) {
-      result.hostname = result.host = srcPath.shift();
-      //occationaly the auth can get stuck only in host
-      //this especially happens in cases like
-      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
-      var authInHost = result.host && result.host.indexOf('@') > 0 ?
-                       result.host.split('@') : false;
-      if (authInHost) {
-        result.auth = authInHost.shift();
-        result.host = result.hostname = authInHost.shift();
-      }
-    }
-    result.search = relative.search;
-    result.query = relative.query;
-    //to support http.request
-    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
-      result.path = (result.pathname ? result.pathname : '') +
-                    (result.search ? result.search : '');
-    }
-    result.href = result.format();
-    return result;
-  }
-
-  if (!srcPath.length) {
-    // no path at all.  easy.
-    // we've already handled the other stuff above.
-    result.pathname = null;
-    //to support http.request
-    if (result.search) {
-      result.path = '/' + result.search;
-    } else {
-      result.path = null;
-    }
-    result.href = result.format();
-    return result;
-  }
-
-  // if a url ENDs in . or .., then it must get a trailing slash.
-  // however, if it ends in anything else non-slashy,
-  // then it must NOT get a trailing slash.
-  var last = srcPath.slice(-1)[0];
-  var hasTrailingSlash = (
-      (result.host || relative.host || srcPath.length > 1) &&
-      (last === '.' || last === '..') || last === '');
-
-  // strip single dots, resolve double dots to parent dir
-  // if the path tries to go above the root, `up` ends up > 0
-  var up = 0;
-  for (var i = srcPath.length; i >= 0; i--) {
-    last = srcPath[i];
-    if (last === '.') {
-      srcPath.splice(i, 1);
-    } else if (last === '..') {
-      srcPath.splice(i, 1);
-      up++;
-    } else if (up) {
-      srcPath.splice(i, 1);
-      up--;
-    }
-  }
-
-  // if the path is allowed to go above the root, restore leading ..s
-  if (!mustEndAbs && !removeAllDots) {
-    for (; up--; up) {
-      srcPath.unshift('..');
-    }
-  }
-
-  if (mustEndAbs && srcPath[0] !== '' &&
-      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
-    srcPath.unshift('');
-  }
-
-  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
-    srcPath.push('');
-  }
-
-  var isAbsolute = srcPath[0] === '' ||
-      (srcPath[0] && srcPath[0].charAt(0) === '/');
-
-  // put the host back
-  if (psychotic) {
-    result.hostname = result.host = isAbsolute ? '' :
-                                    srcPath.length ? srcPath.shift() : '';
-    //occationaly the auth can get stuck only in host
-    //this especially happens in cases like
-    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
-    var authInHost = result.host && result.host.indexOf('@') > 0 ?
-                     result.host.split('@') : false;
-    if (authInHost) {
-      result.auth = authInHost.shift();
-      result.host = result.hostname = authInHost.shift();
-    }
-  }
-
-  mustEndAbs = mustEndAbs || (result.host && srcPath.length);
-
-  if (mustEndAbs && !isAbsolute) {
-    srcPath.unshift('');
-  }
-
-  if (!srcPath.length) {
-    result.pathname = null;
-    result.path = null;
-  } else {
-    result.pathname = srcPath.join('/');
-  }
-
-  //to support request.http
-  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
-    result.path = (result.pathname ? result.pathname : '') +
-                  (result.search ? result.search : '');
-  }
-  result.auth = relative.auth || result.auth;
-  result.slashes = result.slashes || relative.slashes;
-  result.href = result.format();
-  return result;
-};
-
-Url.prototype.parseHost = function() {
-  var host = this.host;
-  var port = portPattern.exec(host);
-  if (port) {
-    port = port[0];
-    if (port !== ':') {
-      this.port = port.substr(1);
-    }
-    host = host.substr(0, host.length - port.length);
-  }
-  if (host) this.hostname = host;
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/url/util.js b/signaling_server/service/node_modules/express/node_modules/url/util.js
deleted file mode 100644 (file)
index 97dcf31..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-'use strict';
-
-module.exports = {
-  isString: function(arg) {
-    return typeof(arg) === 'string';
-  },
-  isObject: function(arg) {
-    return typeof(arg) === 'object' && arg !== null;
-  },
-  isNull: function(arg) {
-    return arg === null;
-  },
-  isNullOrUndefined: function(arg) {
-    return arg == null;
-  }
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/utils-merge/package.json b/signaling_server/service/node_modules/express/node_modules/utils-merge/package.json
deleted file mode 100644 (file)
index 1f91275..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "_from": "utils-merge@1.0.1",
-  "_id": "utils-merge@1.0.1",
-  "_inBundle": false,
-  "_integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
-  "_location": "/utils-merge",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "utils-merge@1.0.1",
-    "name": "utils-merge",
-    "escapedName": "utils-merge",
-    "rawSpec": "1.0.1",
-    "saveSpec": null,
-    "fetchSpec": "1.0.1"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-  "_shasum": "9f95710f50a267947b2ccc124741c1028427e713",
-  "_spec": "utils-merge@1.0.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Jared Hanson",
-    "email": "jaredhanson@gmail.com",
-    "url": "http://www.jaredhanson.net/"
-  },
-  "bugs": {
-    "url": "http://github.com/jaredhanson/utils-merge/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "merge() utility function",
-  "devDependencies": {
-    "chai": "1.x.x",
-    "make-node": "0.3.x",
-    "mocha": "1.x.x"
-  },
-  "engines": {
-    "node": ">= 0.4.0"
-  },
-  "homepage": "https://github.com/jaredhanson/utils-merge#readme",
-  "keywords": [
-    "util"
-  ],
-  "license": "MIT",
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "http://opensource.org/licenses/MIT"
-    }
-  ],
-  "main": "./index",
-  "name": "utils-merge",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/jaredhanson/utils-merge.git"
-  },
-  "scripts": {
-    "test": "mocha --reporter spec --require test/bootstrap/node test/*.test.js"
-  },
-  "version": "1.0.1"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/vary/package.json b/signaling_server/service/node_modules/express/node_modules/vary/package.json
deleted file mode 100644 (file)
index 52fcf20..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "_from": "vary@~1.1.2",
-  "_id": "vary@1.1.2",
-  "_inBundle": false,
-  "_integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
-  "_location": "/vary",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "vary@~1.1.2",
-    "name": "vary",
-    "escapedName": "vary",
-    "rawSpec": "~1.1.2",
-    "saveSpec": null,
-    "fetchSpec": "~1.1.2"
-  },
-  "_requiredBy": [
-    "/express"
-  ],
-  "_resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-  "_shasum": "2299f02c6ded30d4a5961b0b9f74524a18f634fc",
-  "_spec": "vary@~1.1.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/express",
-  "author": {
-    "name": "Douglas Christopher Wilson",
-    "email": "doug@somethingdoug.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/vary/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Manipulate the HTTP Vary header",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "2.1.4",
-    "eslint": "3.19.0",
-    "eslint-config-standard": "10.2.1",
-    "eslint-plugin-import": "2.7.0",
-    "eslint-plugin-markdown": "1.0.0-beta.6",
-    "eslint-plugin-node": "5.1.1",
-    "eslint-plugin-promise": "3.5.0",
-    "eslint-plugin-standard": "3.0.1",
-    "istanbul": "0.4.5",
-    "mocha": "2.5.3",
-    "supertest": "1.1.0"
-  },
-  "engines": {
-    "node": ">= 0.8"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/vary#readme",
-  "keywords": [
-    "http",
-    "res",
-    "vary"
-  ],
-  "license": "MIT",
-  "name": "vary",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/vary.git"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js",
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
-  },
-  "version": "1.1.2"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/wordwrap/LICENSE b/signaling_server/service/node_modules/express/node_modules/wordwrap/LICENSE
deleted file mode 100644 (file)
index ee27ba4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-This software is released under the MIT license:
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/express/node_modules/wordwrap/README.markdown b/signaling_server/service/node_modules/express/node_modules/wordwrap/README.markdown
deleted file mode 100644 (file)
index 346374e..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-wordwrap
-========
-
-Wrap your words.
-
-example
-=======
-
-made out of meat
-----------------
-
-meat.js
-
-    var wrap = require('wordwrap')(15);
-    console.log(wrap('You and your whole family are made out of meat.'));
-
-output:
-
-    You and your
-    whole family
-    are made out
-    of meat.
-
-centered
---------
-
-center.js
-
-    var wrap = require('wordwrap')(20, 60);
-    console.log(wrap(
-        'At long last the struggle and tumult was over.'
-        + ' The machines had finally cast off their oppressors'
-        + ' and were finally free to roam the cosmos.'
-        + '\n'
-        + 'Free of purpose, free of obligation.'
-        + ' Just drifting through emptiness.'
-        + ' The sun was just another point of light.'
-    ));
-
-output:
-
-                        At long last the struggle and tumult
-                        was over. The machines had finally cast
-                        off their oppressors and were finally
-                        free to roam the cosmos.
-                        Free of purpose, free of obligation.
-                        Just drifting through emptiness. The
-                        sun was just another point of light.
-
-methods
-=======
-
-var wrap = require('wordwrap');
-
-wrap(stop), wrap(start, stop, params={mode:"soft"})
----------------------------------------------------
-
-Returns a function that takes a string and returns a new string.
-
-Pad out lines with spaces out to column `start` and then wrap until column
-`stop`. If a word is longer than `stop - start` characters it will overflow.
-
-In "soft" mode, split chunks by `/(\S+\s+/` and don't break up chunks which are
-longer than `stop - start`, in "hard" mode, split chunks with `/\b/` and break
-up chunks longer than `stop - start`.
-
-wrap.hard(start, stop)
-----------------------
-
-Like `wrap()` but with `params.mode = "hard"`.
diff --git a/signaling_server/service/node_modules/express/node_modules/wordwrap/example/center.js b/signaling_server/service/node_modules/express/node_modules/wordwrap/example/center.js
deleted file mode 100644 (file)
index a3fbaae..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-var wrap = require('wordwrap')(20, 60);
-console.log(wrap(
-    'At long last the struggle and tumult was over.'
-    + ' The machines had finally cast off their oppressors'
-    + ' and were finally free to roam the cosmos.'
-    + '\n'
-    + 'Free of purpose, free of obligation.'
-    + ' Just drifting through emptiness.'
-    + ' The sun was just another point of light.'
-));
diff --git a/signaling_server/service/node_modules/express/node_modules/wordwrap/example/meat.js b/signaling_server/service/node_modules/express/node_modules/wordwrap/example/meat.js
deleted file mode 100644 (file)
index a4665e1..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-var wrap = require('wordwrap')(15);
-
-console.log(wrap('You and your whole family are made out of meat.'));
diff --git a/signaling_server/service/node_modules/express/node_modules/wordwrap/index.js b/signaling_server/service/node_modules/express/node_modules/wordwrap/index.js
deleted file mode 100644 (file)
index c9bc945..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-var wordwrap = module.exports = function (start, stop, params) {
-    if (typeof start === 'object') {
-        params = start;
-        start = params.start;
-        stop = params.stop;
-    }
-    
-    if (typeof stop === 'object') {
-        params = stop;
-        start = start || params.start;
-        stop = undefined;
-    }
-    
-    if (!stop) {
-        stop = start;
-        start = 0;
-    }
-    
-    if (!params) params = {};
-    var mode = params.mode || 'soft';
-    var re = mode === 'hard' ? /\b/ : /(\S+\s+)/;
-    
-    return function (text) {
-        var chunks = text.toString()
-            .split(re)
-            .reduce(function (acc, x) {
-                if (mode === 'hard') {
-                    for (var i = 0; i < x.length; i += stop - start) {
-                        acc.push(x.slice(i, i + stop - start));
-                    }
-                }
-                else acc.push(x)
-                return acc;
-            }, [])
-        ;
-        
-        return chunks.reduce(function (lines, rawChunk) {
-            if (rawChunk === '') return lines;
-            
-            var chunk = rawChunk.replace(/\t/g, '    ');
-            
-            var i = lines.length - 1;
-            if (lines[i].length + chunk.length > stop) {
-                lines[i] = lines[i].replace(/\s+$/, '');
-                
-                chunk.split(/\n/).forEach(function (c) {
-                    lines.push(
-                        new Array(start + 1).join(' ')
-                        + c.replace(/^\s+/, '')
-                    );
-                });
-            }
-            else if (chunk.match(/\n/)) {
-                var xs = chunk.split(/\n/);
-                lines[i] += xs.shift();
-                xs.forEach(function (c) {
-                    lines.push(
-                        new Array(start + 1).join(' ')
-                        + c.replace(/^\s+/, '')
-                    );
-                });
-            }
-            else {
-                lines[i] += chunk;
-            }
-            
-            return lines;
-        }, [ new Array(start + 1).join(' ') ]).join('\n');
-    };
-};
-
-wordwrap.soft = wordwrap;
-
-wordwrap.hard = function (start, stop) {
-    return wordwrap(start, stop, { mode : 'hard' });
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/wordwrap/package.json b/signaling_server/service/node_modules/express/node_modules/wordwrap/package.json
deleted file mode 100644 (file)
index dfc503e..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-  "_from": "wordwrap@~0.0.2",
-  "_id": "wordwrap@0.0.3",
-  "_inBundle": false,
-  "_integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
-  "_location": "/wordwrap",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "wordwrap@~0.0.2",
-    "name": "wordwrap",
-    "escapedName": "wordwrap",
-    "rawSpec": "~0.0.2",
-    "saveSpec": null,
-    "fetchSpec": "~0.0.2"
-  },
-  "_requiredBy": [
-    "/grunt-eslint/optionator",
-    "/optimist",
-    "/optionator"
-  ],
-  "_resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
-  "_shasum": "a3d5da6cd5c0bc0008d37234bbaf1bed63059107",
-  "_spec": "wordwrap@~0.0.2",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/optionator",
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "bugs": {
-    "url": "https://github.com/substack/node-wordwrap/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Wrap those words. Show them at what columns to start and stop.",
-  "devDependencies": {
-    "expresso": "=0.7.x"
-  },
-  "directories": {
-    "lib": ".",
-    "example": "example",
-    "test": "test"
-  },
-  "engines": {
-    "node": ">=0.4.0"
-  },
-  "homepage": "https://github.com/substack/node-wordwrap#readme",
-  "keywords": [
-    "word",
-    "wrap",
-    "rule",
-    "format",
-    "column"
-  ],
-  "license": "MIT",
-  "main": "./index.js",
-  "name": "wordwrap",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/substack/node-wordwrap.git"
-  },
-  "scripts": {
-    "test": "expresso"
-  },
-  "version": "0.0.3"
-}
diff --git a/signaling_server/service/node_modules/express/node_modules/wordwrap/test/break.js b/signaling_server/service/node_modules/express/node_modules/wordwrap/test/break.js
deleted file mode 100644 (file)
index 749292e..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-var assert = require('assert');
-var wordwrap = require('../');
-
-exports.hard = function () {
-    var s = 'Assert from {"type":"equal","ok":false,"found":1,"wanted":2,'
-        + '"stack":[],"id":"b7ddcd4c409de8799542a74d1a04689b",'
-        + '"browser":"chrome/6.0"}'
-    ;
-    var s_ = wordwrap.hard(80)(s);
-    
-    var lines = s_.split('\n');
-    assert.equal(lines.length, 2);
-    assert.ok(lines[0].length < 80);
-    assert.ok(lines[1].length < 80);
-    
-    assert.equal(s, s_.replace(/\n/g, ''));
-};
-
-exports.break = function () {
-    var s = new Array(55+1).join('a');
-    var s_ = wordwrap.hard(20)(s);
-    
-    var lines = s_.split('\n');
-    assert.equal(lines.length, 3);
-    assert.ok(lines[0].length === 20);
-    assert.ok(lines[1].length === 20);
-    assert.ok(lines[2].length === 15);
-    
-    assert.equal(s, s_.replace(/\n/g, ''));
-};
diff --git a/signaling_server/service/node_modules/express/node_modules/wordwrap/test/idleness.txt b/signaling_server/service/node_modules/express/node_modules/wordwrap/test/idleness.txt
deleted file mode 100644 (file)
index aa3f490..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-In Praise of Idleness
-
-By Bertrand Russell
-
-[1932]
-
-Like most of my generation, I was brought up on the saying: 'Satan finds some mischief for idle hands to do.' Being a highly virtuous child, I believed all that I was told, and acquired a conscience which has kept me working hard down to the present moment. But although my conscience has controlled my actions, my opinions have undergone a revolution. I think that there is far too much work done in the world, that immense harm is caused by the belief that work is virtuous, and that what needs to be preached in modern industrial countries is quite different from what always has been preached. Everyone knows the story of the traveler in Naples who saw twelve beggars lying in the sun (it was before the days of Mussolini), and offered a lira to the laziest of them. Eleven of them jumped up to claim it, so he gave it to the twelfth. this traveler was on the right lines. But in countries which do not enjoy Mediterranean sunshine idleness is more difficult, and a great public propaganda will be required to inaugurate it. I hope that, after reading the following pages, the leaders of the YMCA will start a campaign to induce good young men to do nothing. If so, I shall not have lived in vain.
-
-Before advancing my own arguments for laziness, I must dispose of one which I cannot accept. Whenever a person who already has enough to live on proposes to engage in some everyday kind of job, such as school-teaching or typing, he or she is told that such conduct takes the bread out of other people's mouths, and is therefore wicked. If this argument were valid, it would only be necessary for us all to be idle in order that we should all have our mouths full of bread. What people who say such things forget is that what a man earns he usually spends, and in spending he gives employment. As long as a man spends his income, he puts just as much bread into people's mouths in spending as he takes out of other people's mouths in earning. The real villain, from this point of view, is the man who saves. If he merely puts his savings in a stocking, like the proverbial French peasant, it is obvious that they do not give employment. If he invests his savings, the matter is less obvious, and different cases arise.
-
-One of the commonest things to do with savings is to lend them to some Government. In view of the fact that the bulk of the public expenditure of most civilized Governments consists in payment for past wars or preparation for future wars, the man who lends his money to a Government is in the same position as the bad men in Shakespeare who hire murderers. The net result of the man's economical habits is to increase the armed forces of the State to which he lends his savings. Obviously it would be better if he spent the money, even if he spent it in drink or gambling.
-
-But, I shall be told, the case is quite different when savings are invested in industrial enterprises. When such enterprises succeed, and produce something useful, this may be conceded. In these days, however, no one will deny that most enterprises fail. That means that a large amount of human labor, which might have been devoted to producing something that could be enjoyed, was expended on producing machines which, when produced, lay idle and did no good to anyone. The man who invests his savings in a concern that goes bankrupt is therefore injuring others as well as himself. If he spent his money, say, in giving parties for his friends, they (we may hope) would get pleasure, and so would all those upon whom he spent money, such as the butcher, the baker, and the bootlegger. But if he spends it (let us say) upon laying down rails for surface card in some place where surface cars turn out not to be wanted, he has diverted a mass of labor into channels where it gives pleasure to no one. Nevertheless, when he becomes poor through failure of his investment he will be regarded as a victim of undeserved misfortune, whereas the gay spendthrift, who has spent his money philanthropically, will be despised as a fool and a frivolous person.
-
-All this is only preliminary. I want to say, in all seriousness, that a great deal of harm is being done in the modern world by belief in the virtuousness of work, and that the road to happiness and prosperity lies in an organized diminution of work.
-
-First of all: what is work? Work is of two kinds: first, altering the position of matter at or near the earth's surface relatively to other such matter; second, telling other people to do so. The first kind is unpleasant and ill paid; the second is pleasant and highly paid. The second kind is capable of indefinite extension: there are not only those who give orders, but those who give advice as to what orders should be given. Usually two opposite kinds of advice are given simultaneously by two organized bodies of men; this is called politics. The skill required for this kind of work is not knowledge of the subjects as to which advice is given, but knowledge of the art of persuasive speaking and writing, i.e. of advertising.
-
-Throughout Europe, though not in America, there is a third class of men, more respected than either of the classes of workers. There are men who, through ownership of land, are able to make others pay for the privilege of being allowed to exist and to work. These landowners are idle, and I might therefore be expected to praise them. Unfortunately, their idleness is only rendered possible by the industry of others; indeed their desire for comfortable idleness is historically the source of the whole gospel of work. The last thing they have ever wished is that others should follow their example.
-
-From the beginning of civilization until the Industrial Revolution, a man could, as a rule, produce by hard work little more than was required for the subsistence of himself and his family, although his wife worked at least as hard as he did, and his children added their labor as soon as they were old enough to do so. The small surplus above bare necessaries was not left to those who produced it, but was appropriated by warriors and priests. In times of famine there was no surplus; the warriors and priests, however, still secured as much as at other times, with the result that many of the workers died of hunger. This system persisted in Russia until 1917 [1], and still persists in the East; in England, in spite of the Industrial Revolution, it remained in full force throughout the Napoleonic wars, and until a hundred years ago, when the new class of manufacturers acquired power. In America, the system came to an end with the Revolution, except in the South, where it persisted until the Civil War. A system which lasted so long and ended so recently has naturally left a profound impress upon men's thoughts and opinions. Much that we take for granted about the desirability of work is derived from this system, and, being pre-industrial, is not adapted to the modern world. Modern technique has made it possible for leisure, within limits, to be not the prerogative of small privileged classes, but a right evenly distributed throughout the community. The morality of work is the morality of slaves, and the modern world has no need of slavery.
-
-It is obvious that, in primitive communities, peasants, left to themselves, would not have parted with the slender surplus upon which the warriors and priests subsisted, but would have either produced less or consumed more. At first, sheer force compelled them to produce and part with the surplus. Gradually, however, it was found possible to induce many of them to accept an ethic according to which it was their duty to work hard, although part of their work went to support others in idleness. By this means the amount of compulsion required was lessened, and the expenses of government were diminished. To this day, 99 per cent of British wage-earners would be genuinely shocked if it were proposed that the King should not have a larger income than a working man. The conception of duty, speaking historically, has been a means used by the holders of power to induce others to live for the interests of their masters rather than for their own. Of course the holders of power conceal this fact from themselves by managing to believe that their interests are identical with the larger interests of humanity. Sometimes this is true; Athenian slave-owners, for instance, employed part of their leisure in making a permanent contribution to civilization which would have been impossible under a just economic system. Leisure is essential to civilization, and in former times leisure for the few was only rendered possible by the labors of the many. But their labors were valuable, not because work is good, but because leisure is good. And with modern technique it would be possible to distribute leisure justly without injury to civilization.
-
-Modern technique has made it possible to diminish enormously the amount of labor required to secure the necessaries of life for everyone. This was made obvious during the war. At that time all the men in the armed forces, and all the men and women engaged in the production of munitions, all the men and women engaged in spying, war propaganda, or Government offices connected with the war, were withdrawn from productive occupations. In spite of this, the general level of well-being among unskilled wage-earners on the side of the Allies was higher than before or since. The significance of this fact was concealed by finance: borrowing made it appear as if the future was nourishing the present. But that, of course, would have been impossible; a man cannot eat a loaf of bread that does not yet exist. The war showed conclusively that, by the scientific organization of production, it is possible to keep modern populations in fair comfort on a small part of the working capacity of the modern world. If, at the end of the war, the scientific organization, which had been created in order to liberate men for fighting and munition work, had been preserved, and the hours of the week had been cut down to four, all would have been well. Instead of that the old chaos was restored, those whose work was demanded were made to work long hours, and the rest were left to starve as unemployed. Why? Because work is a duty, and a man should not receive wages in proportion to what he has produced, but in proportion to his virtue as exemplified by his industry.
-
-This is the morality of the Slave State, applied in circumstances totally unlike those in which it arose. No wonder the result has been disastrous. Let us take an illustration. Suppose that, at a given moment, a certain number of people are engaged in the manufacture of pins. They make as many pins as the world needs, working (say) eight hours a day. Someone makes an invention by which the same number of men can make twice as many pins: pins are already so cheap that hardly any more will be bought at a lower price. In a sensible world, everybody concerned in the manufacturing of pins would take to working four hours instead of eight, and everything else would go on as before. But in the actual world this would be thought demoralizing. The men still work eight hours, there are too many pins, some employers go bankrupt, and half the men previously concerned in making pins are thrown out of work. There is, in the end, just as much leisure as on the other plan, but half the men are totally idle while half are still overworked. In this way, it is insured that the unavoidable leisure shall cause misery all round instead of being a universal source of happiness. Can anything more insane be imagined?
-
-The idea that the poor should have leisure has always been shocking to the rich. In England, in the early nineteenth century, fifteen hours was the ordinary day's work for a man; children sometimes did as much, and very commonly did twelve hours a day. When meddlesome busybodies suggested that perhaps these hours were rather long, they were told that work kept adults from drink and children from mischief. When I was a child, shortly after urban working men had acquired the vote, certain public holidays were established by law, to the great indignation of the upper classes. I remember hearing an old Duchess say: 'What do the poor want with holidays? They ought to work.' People nowadays are less frank, but the sentiment persists, and is the source of much of our economic confusion.
-
-Let us, for a moment, consider the ethics of work frankly, without superstition. Every human being, of necessity, consumes, in the course of his life, a certain amount of the produce of human labor. Assuming, as we may, that labor is on the whole disagreeable, it is unjust that a man should consume more than he produces. Of course he may provide services rather than commodities, like a medical man, for example; but he should provide something in return for his board and lodging. to this extent, the duty of work must be admitted, but to this extent only.
-
-I shall not dwell upon the fact that, in all modern societies outside the USSR, many people escape even this minimum amount of work, namely all those who inherit money and all those who marry money. I do not think the fact that these people are allowed to be idle is nearly so harmful as the fact that wage-earners are expected to overwork or starve.
-
-If the ordinary wage-earner worked four hours a day, there would be enough for everybody and no unemployment -- assuming a certain very moderate amount of sensible organization. This idea shocks the well-to-do, because they are convinced that the poor would not know how to use so much leisure. In America men often work long hours even when they are well off; such men, naturally, are indignant at the idea of leisure for wage-earners, except as the grim punishment of unemployment; in fact, they dislike leisure even for their sons. Oddly enough, while they wish their sons to work so hard as to have no time to be civilized, they do not mind their wives and daughters having no work at all. the snobbish admiration of uselessness, which, in an aristocratic society, extends to both sexes, is, under a plutocracy, confined to women; this, however, does not make it any more in agreement with common sense.
-
-The wise use of leisure, it must be conceded, is a product of civilization and education. A man who has worked long hours all his life will become bored if he becomes suddenly idle. But without a considerable amount of leisure a man is cut off from many of the best things. There is no longer any reason why the bulk of the population should suffer this deprivation; only a foolish asceticism, usually vicarious, makes us continue to insist on work in excessive quantities now that the need no longer exists.
-
-In the new creed which controls the government of Russia, while there is much that is very different from the traditional teaching of the West, there are some things that are quite unchanged. The attitude of the governing classes, and especially of those who conduct educational propaganda, on the subject of the dignity of labor, is almost exactly that which the governing classes of the world have always preached to what were called the 'honest poor'. Industry, sobriety, willingness to work long hours for distant advantages, even submissiveness to authority, all these reappear; moreover authority still represents the will of the Ruler of the Universe, Who, however, is now called by a new name, Dialectical Materialism.
-
-The victory of the proletariat in Russia has some points in common with the victory of the feminists in some other countries. For ages, men had conceded the superior saintliness of women, and had consoled women for their inferiority by maintaining that saintliness is more desirable than power. At last the feminists decided that they would have both, since the pioneers among them believed all that the men had told them about the desirability of virtue, but not what they had told them about the worthlessness of political power. A similar thing has happened in Russia as regards manual work. For ages, the rich and their sycophants have written in praise of 'honest toil', have praised the simple life, have professed a religion which teaches that the poor are much more likely to go to heaven than the rich, and in general have tried to make manual workers believe that there is some special nobility about altering the position of matter in space, just as men tried to make women believe that they derived some special nobility from their sexual enslavement. In Russia, all this teaching about the excellence of manual work has been taken seriously, with the result that the manual worker is more honored than anyone else. What are, in essence, revivalist appeals are made, but not for the old purposes: they are made to secure shock workers for special tasks. Manual work is the ideal which is held before the young, and is the basis of all ethical teaching.
-
-For the present, possibly, this is all to the good. A large country, full of natural resources, awaits development, and has has to be developed with very little use of credit. In these circumstances, hard work is necessary, and is likely to bring a great reward. But what will happen when the point has been reached where everybody could be comfortable without working long hours?
-
-In the West, we have various ways of dealing with this problem. We have no attempt at economic justice, so that a large proportion of the total produce goes to a small minority of the population, many of whom do no work at all. Owing to the absence of any central control over production, we produce hosts of things that are not wanted. We keep a large percentage of the working population idle, because we can dispense with their labor by making the others overwork. When all these methods prove inadequate, we have a war: we cause a number of people to manufacture high explosives, and a number of others to explode them, as if we were children who had just discovered fireworks. By a combination of all these devices we manage, though with difficulty, to keep alive the notion that a great deal of severe manual work must be the lot of the average man.
-
-In Russia, owing to more economic justice and central control over production, the problem will have to be differently solved. the rational solution would be, as soon as the necessaries and elementary comforts can be provided for all, to reduce the hours of labor gradually, allowing a popular vote to decide, at each stage, whether more leisure or more goods were to be preferred. But, having taught the supreme virtue of hard work, it is difficult to see how the authorities can aim at a paradise in which there will be much leisure and little work. It seems more likely that they will find continually fresh schemes, by which present leisure is to be sacrificed to future productivity. I read recently of an ingenious plan put forward by Russian engineers, for making the White Sea and the northern coasts of Siberia warm, by putting a dam across the Kara Sea. An admirable project, but liable to postpone proletarian comfort for a generation, while the nobility of toil is being displayed amid the ice-fields and snowstorms of the Arctic Ocean. This sort of thing, if it happens, will be the result of regarding the virtue of hard work as an end in itself, rather than as a means to a state of affairs in which it is no longer needed.
-
-The fact is that moving matter about, while a certain amount of it is necessary to our existence, is emphatically not one of the ends of human life. If it were, we should have to consider every navvy superior to Shakespeare. We have been misled in this matter by two causes. One is the necessity of keeping the poor contented, which has led the rich, for thousands of years, to preach the dignity of labor, while taking care themselves to remain undignified in this respect. The other is the new pleasure in mechanism, which makes us delight in the astonishingly clever changes that we can produce on the earth's surface. Neither of these motives makes any great appeal to the actual worker. If you ask him what he thinks the best part of his life, he is not likely to say: 'I enjoy manual work because it makes me feel that I am fulfilling man's noblest task, and because I like to think how much man can transform his planet. It is true that my body demands periods of rest, which I have to fill in as best I may, but I am never so happy as when the morning comes and I can return to the toil from which my contentment springs.' I have never heard working men say this sort of thing. They consider work, as it should be considered, a necessary means to a livelihood, and it is from their leisure that they derive whatever happiness they may enjoy.
-
-It will be said that, while a little leisure is pleasant, men would not know how to fill their days if they had only four hours of work out of the twenty-four. In so far as this is true in the modern world, it is a condemnation of our civilization; it would not have been true at any earlier period. There was formerly a capacity for light-heartedness and play which has been to some extent inhibited by the cult of efficiency. The modern man thinks that everything ought to be done for the sake of something else, and never for its own sake. Serious-minded persons, for example, are continually condemning the habit of going to the cinema, and telling us that it leads the young into crime. But all the work that goes to producing a cinema is respectable, because it is work, and because it brings a money profit. The notion that the desirable activities are those that bring a profit has made everything topsy-turvy. The butcher who provides you with meat and the baker who provides you with bread are praiseworthy, because they are making money; but when you enjoy the food they have provided, you are merely frivolous, unless you eat only to get strength for your work. Broadly speaking, it is held that getting money is good and spending money is bad. Seeing that they are two sides of one transaction, this is absurd; one might as well maintain that keys are good, but keyholes are bad. Whatever merit there may be in the production of goods must be entirely derivative from the advantage to be obtained by consuming them. The individual, in our society, works for profit; but the social purpose of his work lies in the consumption of what he produces. It is this divorce between the individual and the social purpose of production that makes it so difficult for men to think clearly in a world in which profit-making is the incentive to industry. We think too much of production, and too little of consumption. One result is that we attach too little importance to enjoyment and simple happiness, and that we do not judge production by the pleasure that it gives to the consumer.
-
-When I suggest that working hours should be reduced to four, I am not meaning to imply that all the remaining time should necessarily be spent in pure frivolity. I mean that four hours' work a day should entitle a man to the necessities and elementary comforts of life, and that the rest of his time should be his to use as he might see fit. It is an essential part of any such social system that education should be carried further than it usually is at present, and should aim, in part, at providing tastes which would enable a man to use leisure intelligently. I am not thinking mainly of the sort of things that would be considered 'highbrow'. Peasant dances have died out except in remote rural areas, but the impulses which caused them to be cultivated must still exist in human nature. The pleasures of urban populations have become mainly passive: seeing cinemas, watching football matches, listening to the radio, and so on. This results from the fact that their active energies are fully taken up with work; if they had more leisure, they would again enjoy pleasures in which they took an active part.
-
-In the past, there was a small leisure class and a larger working class. The leisure class enjoyed advantages for which there was no basis in social justice; this necessarily made it oppressive, limited its sympathies, and caused it to invent theories by which to justify its privileges. These facts greatly diminished its excellence, but in spite of this drawback it contributed nearly the whole of what we call civilization. It cultivated the arts and discovered the sciences; it wrote the books, invented the philosophies, and refined social relations. Even the liberation of the oppressed has usually been inaugurated from above. Without the leisure class, mankind would never have emerged from barbarism.
-
-The method of a leisure class without duties was, however, extraordinarily wasteful. None of the members of the class had to be taught to be industrious, and the class as a whole was not exceptionally intelligent. The class might produce one Darwin, but against him had to be set tens of thousands of country gentlemen who never thought of anything more intelligent than fox-hunting and punishing poachers. At present, the universities are supposed to provide, in a more systematic way, what the leisure class provided accidentally and as a by-product. This is a great improvement, but it has certain drawbacks. University life is so different from life in the world at large that men who live in academic milieu tend to be unaware of the preoccupations and problems of ordinary men and women; moreover their ways of expressing themselves are usually such as to rob their opinions of the influence that they ought to have upon the general public. Another disadvantage is that in universities studies are organized, and the man who thinks of some original line of research is likely to be discouraged. Academic institutions, therefore, useful as they are, are not adequate guardians of the interests of civilization in a world where everyone outside their walls is too busy for unutilitarian pursuits.
-
-In a world where no one is compelled to work more than four hours a day, every person possessed of scientific curiosity will be able to indulge it, and every painter will be able to paint without starving, however excellent his pictures may be. Young writers will not be obliged to draw attention to themselves by sensational pot-boilers, with a view to acquiring the economic independence needed for monumental works, for which, when the time at last comes, they will have lost the taste and capacity. Men who, in their professional work, have become interested in some phase of economics or government, will be able to develop their ideas without the academic detachment that makes the work of university economists often seem lacking in reality. Medical men will have the time to learn about the progress of medicine, teachers will not be exasperatedly struggling to teach by routine methods things which they learnt in their youth, which may, in the interval, have been proved to be untrue.
-
-Above all, there will be happiness and joy of life, instead of frayed nerves, weariness, and dyspepsia. The work exacted will be enough to make leisure delightful, but not enough to produce exhaustion. Since men will not be tired in their spare time, they will not demand only such amusements as are passive and vapid. At least one per cent will probably devote the time not spent in professional work to pursuits of some public importance, and, since they will not depend upon these pursuits for their livelihood, their originality will be unhampered, and there will be no need to conform to the standards set by elderly pundits. But it is not only in these exceptional cases that the advantages of leisure will appear. Ordinary men and women, having the opportunity of a happy life, will become more kindly and less persecuting and less inclined to view others with suspicion. The taste for war will die out, partly for this reason, and partly because it will involve long and severe work for all. Good nature is, of all moral qualities, the one that the world needs most, and good nature is the result of ease and security, not of a life of arduous struggle. Modern methods of production have given us the possibility of ease and security for all; we have chosen, instead, to have overwork for some and starvation for others. Hitherto we have continued to be as energetic as we were before there were machines; in this we have been foolish, but there is no reason to go on being foolish forever.
-
-[1] Since then, members of the Communist Party have succeeded to this privilege of the warriors and priests.
diff --git a/signaling_server/service/node_modules/express/node_modules/wordwrap/test/wrap.js b/signaling_server/service/node_modules/express/node_modules/wordwrap/test/wrap.js
deleted file mode 100644 (file)
index 0cfb76d..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-var assert = require('assert');
-var wordwrap = require('wordwrap');
-
-var fs = require('fs');
-var idleness = fs.readFileSync(__dirname + '/idleness.txt', 'utf8');
-
-exports.stop80 = function () {
-    var lines = wordwrap(80)(idleness).split(/\n/);
-    var words = idleness.split(/\s+/);
-    
-    lines.forEach(function (line) {
-        assert.ok(line.length <= 80, 'line > 80 columns');
-        var chunks = line.match(/\S/) ? line.split(/\s+/) : [];
-        assert.deepEqual(chunks, words.splice(0, chunks.length));
-    });
-};
-
-exports.start20stop60 = function () {
-    var lines = wordwrap(20, 100)(idleness).split(/\n/);
-    var words = idleness.split(/\s+/);
-    
-    lines.forEach(function (line) {
-        assert.ok(line.length <= 100, 'line > 100 columns');
-        var chunks = line
-            .split(/\s+/)
-            .filter(function (x) { return x.match(/\S/) })
-        ;
-        assert.deepEqual(chunks, words.splice(0, chunks.length));
-        assert.deepEqual(line.slice(0, 20), new Array(20 + 1).join(' '));
-    });
-};
index f833961..ebf42e3 100644 (file)
@@ -1,29 +1,32 @@
 {
-  "_from": "express@^4.4.1",
+  "_args": [
+    [
+      "express@4.17.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "express@4.17.1",
   "_id": "express@4.17.1",
   "_inBundle": false,
   "_integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
   "_location": "/express",
-  "_phantomChildren": {
-    "ms": "2.0.0"
-  },
+  "_phantomChildren": {},
   "_requested": {
-    "type": "range",
+    "type": "version",
     "registry": true,
-    "raw": "express@^4.4.1",
+    "raw": "express@4.17.1",
     "name": "express",
     "escapedName": "express",
-    "rawSpec": "^4.4.1",
+    "rawSpec": "4.17.1",
     "saveSpec": null,
-    "fetchSpec": "^4.4.1"
+    "fetchSpec": "4.17.1"
   },
   "_requiredBy": [
     "/"
   ],
   "_resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
-  "_shasum": "4491fc38605cf51f8629d39c2b5d026f98a4c134",
-  "_spec": "express@^4.4.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes",
+  "_spec": "4.17.1",
+  "_where": "/opt/source/offload.js",
   "author": {
     "name": "TJ Holowaychuk",
     "email": "tj@vision-media.ca"
@@ -31,7 +34,6 @@
   "bugs": {
     "url": "https://github.com/expressjs/express/issues"
   },
-  "bundleDependencies": false,
   "contributors": [
     {
       "name": "Aaron Heckmann",
@@ -94,7 +96,6 @@
     "utils-merge": "1.0.1",
     "vary": "~1.1.2"
   },
-  "deprecated": false,
   "description": "Fast, unopinionated, minimalist web framework",
   "devDependencies": {
     "after": "0.8.2",
diff --git a/signaling_server/service/node_modules/finalhandler/node_modules/debug/package.json b/signaling_server/service/node_modules/finalhandler/node_modules/debug/package.json
new file mode 100644 (file)
index 0000000..d3f0841
--- /dev/null
@@ -0,0 +1,91 @@
+{
+  "_args": [
+    [
+      "debug@2.6.9",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "debug@2.6.9",
+  "_id": "debug@2.6.9",
+  "_inBundle": false,
+  "_integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+  "_location": "/finalhandler/debug",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "debug@2.6.9",
+    "name": "debug",
+    "escapedName": "debug",
+    "rawSpec": "2.6.9",
+    "saveSpec": null,
+    "fetchSpec": "2.6.9"
+  },
+  "_requiredBy": [
+    "/finalhandler"
+  ],
+  "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+  "_spec": "2.6.9",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca"
+  },
+  "browser": "./src/browser.js",
+  "bugs": {
+    "url": "https://github.com/visionmedia/debug/issues"
+  },
+  "component": {
+    "scripts": {
+      "debug/index.js": "browser.js",
+      "debug/debug.js": "debug.js"
+    }
+  },
+  "contributors": [
+    {
+      "name": "Nathan Rajlich",
+      "email": "nathan@tootallnate.net",
+      "url": "http://n8.io"
+    },
+    {
+      "name": "Andrew Rhyne",
+      "email": "rhyneandrew@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "ms": "2.0.0"
+  },
+  "description": "small debugging utility",
+  "devDependencies": {
+    "browserify": "9.0.3",
+    "chai": "^3.5.0",
+    "concurrently": "^3.1.0",
+    "coveralls": "^2.11.15",
+    "eslint": "^3.12.1",
+    "istanbul": "^0.4.5",
+    "karma": "^1.3.0",
+    "karma-chai": "^0.1.0",
+    "karma-mocha": "^1.3.0",
+    "karma-phantomjs-launcher": "^1.0.2",
+    "karma-sinon": "^1.0.5",
+    "mocha": "^3.2.0",
+    "mocha-lcov-reporter": "^1.2.0",
+    "rimraf": "^2.5.4",
+    "sinon": "^1.17.6",
+    "sinon-chai": "^2.8.0"
+  },
+  "homepage": "https://github.com/visionmedia/debug#readme",
+  "keywords": [
+    "debug",
+    "log",
+    "debugger"
+  ],
+  "license": "MIT",
+  "main": "./src/index.js",
+  "name": "debug",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/visionmedia/debug.git"
+  },
+  "version": "2.6.9"
+}
diff --git a/signaling_server/service/node_modules/finalhandler/node_modules/ms/index.js b/signaling_server/service/node_modules/finalhandler/node_modules/ms/index.js
new file mode 100644 (file)
index 0000000..6a522b1
--- /dev/null
@@ -0,0 +1,152 @@
+/**
+ * Helpers.
+ */
+
+var s = 1000;
+var m = s * 60;
+var h = m * 60;
+var d = h * 24;
+var y = d * 365.25;
+
+/**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ *  - `long` verbose formatting [false]
+ *
+ * @param {String|Number} val
+ * @param {Object} [options]
+ * @throws {Error} throw an error if val is not a non-empty string or a number
+ * @return {String|Number}
+ * @api public
+ */
+
+module.exports = function(val, options) {
+  options = options || {};
+  var type = typeof val;
+  if (type === 'string' && val.length > 0) {
+    return parse(val);
+  } else if (type === 'number' && isNaN(val) === false) {
+    return options.long ? fmtLong(val) : fmtShort(val);
+  }
+  throw new Error(
+    'val is not a non-empty string or a valid number. val=' +
+      JSON.stringify(val)
+  );
+};
+
+/**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @param {String} str
+ * @return {Number}
+ * @api private
+ */
+
+function parse(str) {
+  str = String(str);
+  if (str.length > 100) {
+    return;
+  }
+  var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
+    str
+  );
+  if (!match) {
+    return;
+  }
+  var n = parseFloat(match[1]);
+  var type = (match[2] || 'ms').toLowerCase();
+  switch (type) {
+    case 'years':
+    case 'year':
+    case 'yrs':
+    case 'yr':
+    case 'y':
+      return n * y;
+    case 'days':
+    case 'day':
+    case 'd':
+      return n * d;
+    case 'hours':
+    case 'hour':
+    case 'hrs':
+    case 'hr':
+    case 'h':
+      return n * h;
+    case 'minutes':
+    case 'minute':
+    case 'mins':
+    case 'min':
+    case 'm':
+      return n * m;
+    case 'seconds':
+    case 'second':
+    case 'secs':
+    case 'sec':
+    case 's':
+      return n * s;
+    case 'milliseconds':
+    case 'millisecond':
+    case 'msecs':
+    case 'msec':
+    case 'ms':
+      return n;
+    default:
+      return undefined;
+  }
+}
+
+/**
+ * Short format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtShort(ms) {
+  if (ms >= d) {
+    return Math.round(ms / d) + 'd';
+  }
+  if (ms >= h) {
+    return Math.round(ms / h) + 'h';
+  }
+  if (ms >= m) {
+    return Math.round(ms / m) + 'm';
+  }
+  if (ms >= s) {
+    return Math.round(ms / s) + 's';
+  }
+  return ms + 'ms';
+}
+
+/**
+ * Long format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtLong(ms) {
+  return plural(ms, d, 'day') ||
+    plural(ms, h, 'hour') ||
+    plural(ms, m, 'minute') ||
+    plural(ms, s, 'second') ||
+    ms + ' ms';
+}
+
+/**
+ * Pluralization helper.
+ */
+
+function plural(ms, n, name) {
+  if (ms < n) {
+    return;
+  }
+  if (ms < n * 1.5) {
+    return Math.floor(ms / n) + ' ' + name;
+  }
+  return Math.ceil(ms / n) + ' ' + name + 's';
+}
diff --git a/signaling_server/service/node_modules/finalhandler/node_modules/ms/package.json b/signaling_server/service/node_modules/finalhandler/node_modules/ms/package.json
new file mode 100644 (file)
index 0000000..c8db149
--- /dev/null
@@ -0,0 +1,72 @@
+{
+  "_args": [
+    [
+      "ms@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ms@2.0.0",
+  "_id": "ms@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+  "_location": "/finalhandler/ms",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ms@2.0.0",
+    "name": "ms",
+    "escapedName": "ms",
+    "rawSpec": "2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "2.0.0"
+  },
+  "_requiredBy": [
+    "/finalhandler/debug"
+  ],
+  "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/zeit/ms/issues"
+  },
+  "description": "Tiny milisecond conversion utility",
+  "devDependencies": {
+    "eslint": "3.19.0",
+    "expect.js": "0.3.1",
+    "husky": "0.13.3",
+    "lint-staged": "3.4.1",
+    "mocha": "3.4.1"
+  },
+  "eslintConfig": {
+    "extends": "eslint:recommended",
+    "env": {
+      "node": true,
+      "es6": true
+    }
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/zeit/ms#readme",
+  "license": "MIT",
+  "lint-staged": {
+    "*.js": [
+      "npm run lint",
+      "prettier --single-quote --write",
+      "git add"
+    ]
+  },
+  "main": "./index",
+  "name": "ms",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/zeit/ms.git"
+  },
+  "scripts": {
+    "lint": "eslint lib/* bin/*",
+    "precommit": "lint-staged",
+    "test": "mocha tests.js"
+  },
+  "version": "2.0.0"
+}
diff --git a/signaling_server/service/node_modules/finalhandler/node_modules/ms/readme.md b/signaling_server/service/node_modules/finalhandler/node_modules/ms/readme.md
new file mode 100644 (file)
index 0000000..84a9974
--- /dev/null
@@ -0,0 +1,51 @@
+# ms
+
+[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms)
+[![Slack Channel](http://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/)
+
+Use this package to easily convert various time formats to milliseconds.
+
+## Examples
+
+```js
+ms('2 days')  // 172800000
+ms('1d')      // 86400000
+ms('10h')     // 36000000
+ms('2.5 hrs') // 9000000
+ms('2h')      // 7200000
+ms('1m')      // 60000
+ms('5s')      // 5000
+ms('1y')      // 31557600000
+ms('100')     // 100
+```
+
+### Convert from milliseconds
+
+```js
+ms(60000)             // "1m"
+ms(2 * 60000)         // "2m"
+ms(ms('10 hours'))    // "10h"
+```
+
+### Time format written-out
+
+```js
+ms(60000, { long: true })             // "1 minute"
+ms(2 * 60000, { long: true })         // "2 minutes"
+ms(ms('10 hours'), { long: true })    // "10 hours"
+```
+
+## Features
+
+- Works both in [node](https://nodejs.org) and in the browser.
+- If a number is supplied to `ms`, a string with a unit is returned.
+- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`).
+- If you pass a string with a number and a valid unit, the number of equivalent ms is returned.
+
+## Caught a bug?
+
+1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device
+2. Link the package to the global module directory: `npm link`
+3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms!
+
+As always, you can run the tests using: `npm test`
diff --git a/signaling_server/service/node_modules/finalhandler/package.json b/signaling_server/service/node_modules/finalhandler/package.json
new file mode 100644 (file)
index 0000000..f7eaf14
--- /dev/null
@@ -0,0 +1,83 @@
+{
+  "_args": [
+    [
+      "finalhandler@1.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "finalhandler@1.1.2",
+  "_id": "finalhandler@1.1.2",
+  "_inBundle": false,
+  "_integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+  "_location": "/finalhandler",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "finalhandler@1.1.2",
+    "name": "finalhandler",
+    "escapedName": "finalhandler",
+    "rawSpec": "1.1.2",
+    "saveSpec": null,
+    "fetchSpec": "1.1.2"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+  "_spec": "1.1.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "bugs": {
+    "url": "https://github.com/pillarjs/finalhandler/issues"
+  },
+  "dependencies": {
+    "debug": "2.6.9",
+    "encodeurl": "~1.0.2",
+    "escape-html": "~1.0.3",
+    "on-finished": "~2.3.0",
+    "parseurl": "~1.3.3",
+    "statuses": "~1.5.0",
+    "unpipe": "~1.0.0"
+  },
+  "description": "Node.js final http responder",
+  "devDependencies": {
+    "eslint": "5.16.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.17.2",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "8.0.1",
+    "eslint-plugin-promise": "4.1.1",
+    "eslint-plugin-standard": "4.0.0",
+    "istanbul": "0.4.5",
+    "mocha": "6.1.4",
+    "readable-stream": "2.3.6",
+    "safe-buffer": "5.1.2",
+    "supertest": "4.0.2"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/pillarjs/finalhandler#readme",
+  "license": "MIT",
+  "name": "finalhandler",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/pillarjs/finalhandler.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
+  },
+  "version": "1.1.2"
+}
diff --git a/signaling_server/service/node_modules/find-up/package.json b/signaling_server/service/node_modules/find-up/package.json
new file mode 100644 (file)
index 0000000..17c02e2
--- /dev/null
@@ -0,0 +1,85 @@
+{
+  "_args": [
+    [
+      "find-up@3.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "find-up@3.0.0",
+  "_id": "find-up@3.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+  "_location": "/find-up",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "find-up@3.0.0",
+    "name": "find-up",
+    "escapedName": "find-up",
+    "rawSpec": "3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "3.0.0"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+  "_spec": "3.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/find-up/issues"
+  },
+  "dependencies": {
+    "locate-path": "^3.0.0"
+  },
+  "description": "Find a file or directory by walking up parent directories",
+  "devDependencies": {
+    "ava": "*",
+    "tempy": "^0.2.1",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/find-up#readme",
+  "keywords": [
+    "find",
+    "up",
+    "find-up",
+    "findup",
+    "look-up",
+    "look",
+    "file",
+    "search",
+    "match",
+    "package",
+    "resolve",
+    "parent",
+    "parents",
+    "folder",
+    "directory",
+    "dir",
+    "walk",
+    "walking",
+    "path"
+  ],
+  "license": "MIT",
+  "name": "find-up",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/find-up.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "3.0.0"
+}
diff --git a/signaling_server/service/node_modules/forwarded/package.json b/signaling_server/service/node_modules/forwarded/package.json
new file mode 100644 (file)
index 0000000..80b3910
--- /dev/null
@@ -0,0 +1,81 @@
+{
+  "_args": [
+    [
+      "forwarded@0.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "forwarded@0.1.2",
+  "_id": "forwarded@0.1.2",
+  "_inBundle": false,
+  "_integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+  "_location": "/forwarded",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "forwarded@0.1.2",
+    "name": "forwarded",
+    "escapedName": "forwarded",
+    "rawSpec": "0.1.2",
+    "saveSpec": null,
+    "fetchSpec": "0.1.2"
+  },
+  "_requiredBy": [
+    "/proxy-addr"
+  ],
+  "_resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+  "_spec": "0.1.2",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/jshttp/forwarded/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "description": "Parse HTTP X-Forwarded-For header",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "2.1.4",
+    "eslint": "3.19.0",
+    "eslint-config-standard": "10.2.1",
+    "eslint-plugin-import": "2.7.0",
+    "eslint-plugin-node": "5.1.1",
+    "eslint-plugin-promise": "3.5.0",
+    "eslint-plugin-standard": "3.0.1",
+    "istanbul": "0.4.5",
+    "mocha": "1.21.5"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/forwarded#readme",
+  "keywords": [
+    "x-forwarded-for",
+    "http",
+    "req"
+  ],
+  "license": "MIT",
+  "name": "forwarded",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/forwarded.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js",
+    "lint": "eslint .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "0.1.2"
+}
diff --git a/signaling_server/service/node_modules/fresh/package.json b/signaling_server/service/node_modules/fresh/package.json
new file mode 100644 (file)
index 0000000..6754040
--- /dev/null
@@ -0,0 +1,93 @@
+{
+  "_args": [
+    [
+      "fresh@0.5.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "fresh@0.5.2",
+  "_id": "fresh@0.5.2",
+  "_inBundle": false,
+  "_integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+  "_location": "/fresh",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "fresh@0.5.2",
+    "name": "fresh",
+    "escapedName": "fresh",
+    "rawSpec": "0.5.2",
+    "saveSpec": null,
+    "fetchSpec": "0.5.2"
+  },
+  "_requiredBy": [
+    "/express",
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+  "_spec": "0.5.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca",
+    "url": "http://tjholowaychuk.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/fresh/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    }
+  ],
+  "description": "HTTP response freshness testing",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "2.1.4",
+    "eslint": "3.19.0",
+    "eslint-config-standard": "10.2.1",
+    "eslint-plugin-import": "2.7.0",
+    "eslint-plugin-markdown": "1.0.0-beta.6",
+    "eslint-plugin-node": "5.1.1",
+    "eslint-plugin-promise": "3.5.0",
+    "eslint-plugin-standard": "3.0.1",
+    "istanbul": "0.4.5",
+    "mocha": "1.21.5"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/fresh#readme",
+  "keywords": [
+    "fresh",
+    "http",
+    "conditional",
+    "cache"
+  ],
+  "license": "MIT",
+  "name": "fresh",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/fresh.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js",
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "0.5.2"
+}
diff --git a/signaling_server/service/node_modules/get-caller-file/package.json b/signaling_server/service/node_modules/get-caller-file/package.json
new file mode 100644 (file)
index 0000000..dad1742
--- /dev/null
@@ -0,0 +1,72 @@
+{
+  "_args": [
+    [
+      "get-caller-file@2.0.5",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "get-caller-file@2.0.5",
+  "_id": "get-caller-file@2.0.5",
+  "_inBundle": false,
+  "_integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+  "_location": "/get-caller-file",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "get-caller-file@2.0.5",
+    "name": "get-caller-file",
+    "escapedName": "get-caller-file",
+    "rawSpec": "2.0.5",
+    "saveSpec": null,
+    "fetchSpec": "2.0.5"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+  "_spec": "2.0.5",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Stefan Penner"
+  },
+  "bugs": {
+    "url": "https://github.com/stefanpenner/get-caller-file/issues"
+  },
+  "description": "[![Build Status](https://travis-ci.org/stefanpenner/get-caller-file.svg?branch=master)](https://travis-ci.org/stefanpenner/get-caller-file) [![Build status](https://ci.appveyor.com/api/projects/status/ol2q94g1932cy14a/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/get-caller-file/branch/master)",
+  "devDependencies": {
+    "@types/chai": "^4.1.7",
+    "@types/ensure-posix-path": "^1.0.0",
+    "@types/mocha": "^5.2.6",
+    "@types/node": "^11.10.5",
+    "chai": "^4.1.2",
+    "ensure-posix-path": "^1.0.1",
+    "mocha": "^5.2.0",
+    "typescript": "^3.3.3333"
+  },
+  "directories": {
+    "test": "tests"
+  },
+  "engines": {
+    "node": "6.* || 8.* || >= 10.*"
+  },
+  "files": [
+    "index.js",
+    "index.js.map",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/stefanpenner/get-caller-file#readme",
+  "license": "ISC",
+  "main": "index.js",
+  "name": "get-caller-file",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/stefanpenner/get-caller-file.git"
+  },
+  "scripts": {
+    "prepare": "tsc",
+    "test": "mocha test",
+    "test:debug": "mocha test"
+  },
+  "version": "2.0.5"
+}
diff --git a/signaling_server/service/node_modules/has-binary2/node_modules/isarray/README.md b/signaling_server/service/node_modules/has-binary2/node_modules/isarray/README.md
new file mode 100644 (file)
index 0000000..38a91f6
--- /dev/null
@@ -0,0 +1,54 @@
+
+# isarray
+
+`Array#isArray` for older browsers.
+
+[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray)
+[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray)
+
+[![browser support](https://ci.testling.com/juliangruber/isarray.png)
+](https://ci.testling.com/juliangruber/isarray)
+
+## Usage
+
+```js
+var isArray = require('isarray');
+
+console.log(isArray([])); // => true
+console.log(isArray({})); // => false
+```
+
+## Installation
+
+With [npm](https://npmjs.org) do
+
+```bash
+$ npm install isarray
+```
+
+Then bundle for the browser with
+[browserify](https://github.com/substack/node-browserify).
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/signaling_server/service/node_modules/has-binary2/node_modules/isarray/index.js b/signaling_server/service/node_modules/has-binary2/node_modules/isarray/index.js
new file mode 100644 (file)
index 0000000..a57f634
--- /dev/null
@@ -0,0 +1,5 @@
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+  return toString.call(arr) == '[object Array]';
+};
diff --git a/signaling_server/service/node_modules/has-binary2/node_modules/isarray/package.json b/signaling_server/service/node_modules/has-binary2/node_modules/isarray/package.json
new file mode 100644 (file)
index 0000000..f680a64
--- /dev/null
@@ -0,0 +1,79 @@
+{
+  "_args": [
+    [
+      "isarray@2.0.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "isarray@2.0.1",
+  "_id": "isarray@2.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+  "_location": "/has-binary2/isarray",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "isarray@2.0.1",
+    "name": "isarray",
+    "escapedName": "isarray",
+    "rawSpec": "2.0.1",
+    "saveSpec": null,
+    "fetchSpec": "2.0.1"
+  },
+  "_requiredBy": [
+    "/has-binary2"
+  ],
+  "_resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+  "_spec": "2.0.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Julian Gruber",
+    "email": "mail@juliangruber.com",
+    "url": "http://juliangruber.com"
+  },
+  "bugs": {
+    "url": "https://github.com/juliangruber/isarray/issues"
+  },
+  "dependencies": {},
+  "description": "Array#isArray for older browsers",
+  "devDependencies": {
+    "tape": "~2.13.4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/juliangruber/isarray",
+  "keywords": [
+    "browser",
+    "isarray",
+    "array"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "isarray",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/juliangruber/isarray.git"
+  },
+  "scripts": {
+    "test": "tape test.js"
+  },
+  "testling": {
+    "files": "test.js",
+    "browsers": [
+      "ie/8..latest",
+      "firefox/17..latest",
+      "firefox/nightly",
+      "chrome/22..latest",
+      "chrome/canary",
+      "opera/12..latest",
+      "opera/next",
+      "safari/5.1..latest",
+      "ipad/6.0..latest",
+      "iphone/6.0..latest",
+      "android-browser/4.2..latest"
+    ]
+  },
+  "version": "2.0.1"
+}
diff --git a/signaling_server/service/node_modules/has-binary2/package.json b/signaling_server/service/node_modules/has-binary2/package.json
new file mode 100644 (file)
index 0000000..530c789
--- /dev/null
@@ -0,0 +1,54 @@
+{
+  "_args": [
+    [
+      "has-binary2@1.0.3",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "has-binary2@1.0.3",
+  "_id": "has-binary2@1.0.3",
+  "_inBundle": false,
+  "_integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+  "_location": "/has-binary2",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "has-binary2@1.0.3",
+    "name": "has-binary2",
+    "escapedName": "has-binary2",
+    "rawSpec": "1.0.3",
+    "saveSpec": null,
+    "fetchSpec": "1.0.3"
+  },
+  "_requiredBy": [
+    "/engine.io-parser",
+    "/socket.io",
+    "/socket.io/socket.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+  "_spec": "1.0.3",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Kevin Roark"
+  },
+  "dependencies": {
+    "isarray": "2.0.1"
+  },
+  "description": "A function that takes anything in javascript and returns true if its argument contains binary data.",
+  "devDependencies": {
+    "better-assert": "^1.0.2",
+    "mocha": "^3.2.0",
+    "semistandard": "^9.2.1"
+  },
+  "files": [
+    "index.js"
+  ],
+  "license": "MIT",
+  "name": "has-binary2",
+  "scripts": {
+    "checkstyle": "semistandard",
+    "test": "npm run checkstyle && mocha --bail"
+  },
+  "version": "1.0.3"
+}
diff --git a/signaling_server/service/node_modules/has-cors/package.json b/signaling_server/service/node_modules/has-cors/package.json
new file mode 100644 (file)
index 0000000..74ddea5
--- /dev/null
@@ -0,0 +1,68 @@
+{
+  "_args": [
+    [
+      "has-cors@1.1.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "has-cors@1.1.0",
+  "_id": "has-cors@1.1.0",
+  "_inBundle": false,
+  "_integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+  "_location": "/has-cors",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "has-cors@1.1.0",
+    "name": "has-cors",
+    "escapedName": "has-cors",
+    "rawSpec": "1.1.0",
+    "saveSpec": null,
+    "fetchSpec": "1.1.0"
+  },
+  "_requiredBy": [
+    "/engine.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+  "_spec": "1.1.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Nathan Rajlich",
+    "email": "nathan@tootallnate.net",
+    "url": "http://n8.io/"
+  },
+  "bugs": {
+    "url": "https://github.com/component/has-cors/issues"
+  },
+  "component": {
+    "scripts": {
+      "has-cors/index.js": "index.js"
+    }
+  },
+  "description": "Detects support for Cross-Origin Resource Sharing",
+  "devDependencies": {
+    "chai": "^1.10",
+    "mocha": "^2.0"
+  },
+  "homepage": "https://github.com/component/has-cors#readme",
+  "keywords": [
+    "cors",
+    "cross",
+    "origin",
+    "resource",
+    "sharing",
+    "domain"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "has-cors",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/component/has-cors.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "version": "1.1.0"
+}
diff --git a/signaling_server/service/node_modules/http-errors/package.json b/signaling_server/service/node_modules/http-errors/package.json
new file mode 100644 (file)
index 0000000..d394345
--- /dev/null
@@ -0,0 +1,96 @@
+{
+  "_args": [
+    [
+      "http-errors@1.7.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "http-errors@1.7.2",
+  "_id": "http-errors@1.7.2",
+  "_inBundle": false,
+  "_integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+  "_location": "/http-errors",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "http-errors@1.7.2",
+    "name": "http-errors",
+    "escapedName": "http-errors",
+    "rawSpec": "1.7.2",
+    "saveSpec": null,
+    "fetchSpec": "1.7.2"
+  },
+  "_requiredBy": [
+    "/body-parser",
+    "/raw-body",
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+  "_spec": "1.7.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Jonathan Ong",
+    "email": "me@jongleberry.com",
+    "url": "http://jongleberry.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/http-errors/issues"
+  },
+  "contributors": [
+    {
+      "name": "Alan Plum",
+      "email": "me@pluma.io"
+    },
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dependencies": {
+    "depd": "~1.1.2",
+    "inherits": "2.0.3",
+    "setprototypeof": "1.1.1",
+    "statuses": ">= 1.5.0 < 2",
+    "toidentifier": "1.0.0"
+  },
+  "description": "Create HTTP error objects",
+  "devDependencies": {
+    "eslint": "5.13.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.16.0",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "7.0.1",
+    "eslint-plugin-promise": "4.0.1",
+    "eslint-plugin-standard": "4.0.0",
+    "istanbul": "0.4.5",
+    "mocha": "5.2.0"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "index.js",
+    "HISTORY.md",
+    "LICENSE",
+    "README.md"
+  ],
+  "homepage": "https://github.com/jshttp/http-errors#readme",
+  "keywords": [
+    "http",
+    "error"
+  ],
+  "license": "MIT",
+  "name": "http-errors",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/http-errors.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md . && node ./scripts/lint-readme-list.js",
+    "test": "mocha --reporter spec --bail",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot"
+  },
+  "version": "1.7.2"
+}
diff --git a/signaling_server/service/node_modules/iconv-lite/package.json b/signaling_server/service/node_modules/iconv-lite/package.json
new file mode 100644 (file)
index 0000000..32c95bc
--- /dev/null
@@ -0,0 +1,80 @@
+{
+  "_args": [
+    [
+      "iconv-lite@0.4.24",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "iconv-lite@0.4.24",
+  "_id": "iconv-lite@0.4.24",
+  "_inBundle": false,
+  "_integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+  "_location": "/iconv-lite",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "iconv-lite@0.4.24",
+    "name": "iconv-lite",
+    "escapedName": "iconv-lite",
+    "rawSpec": "0.4.24",
+    "saveSpec": null,
+    "fetchSpec": "0.4.24"
+  },
+  "_requiredBy": [
+    "/body-parser",
+    "/raw-body"
+  ],
+  "_resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+  "_spec": "0.4.24",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Alexander Shtuchkin",
+    "email": "ashtuchkin@gmail.com"
+  },
+  "browser": {
+    "./lib/extend-node": false,
+    "./lib/streams": false
+  },
+  "bugs": {
+    "url": "https://github.com/ashtuchkin/iconv-lite/issues"
+  },
+  "dependencies": {
+    "safer-buffer": ">= 2.1.2 < 3"
+  },
+  "description": "Convert character encodings in pure javascript.",
+  "devDependencies": {
+    "async": "*",
+    "errto": "*",
+    "iconv": "*",
+    "istanbul": "*",
+    "mocha": "^3.1.0",
+    "request": "~2.87.0",
+    "semver": "*",
+    "unorm": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "homepage": "https://github.com/ashtuchkin/iconv-lite",
+  "keywords": [
+    "iconv",
+    "convert",
+    "charset",
+    "icu"
+  ],
+  "license": "MIT",
+  "main": "./lib/index.js",
+  "name": "iconv-lite",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/ashtuchkin/iconv-lite.git"
+  },
+  "scripts": {
+    "coverage": "istanbul cover _mocha -- --grep .",
+    "coverage-open": "open coverage/lcov-report/index.html",
+    "test": "mocha --reporter spec --grep ."
+  },
+  "typings": "./lib/index.d.ts",
+  "version": "0.4.24"
+}
diff --git a/signaling_server/service/node_modules/ieee754/package.json b/signaling_server/service/node_modules/ieee754/package.json
new file mode 100644 (file)
index 0000000..9e0bf51
--- /dev/null
@@ -0,0 +1,87 @@
+{
+  "_args": [
+    [
+      "ieee754@1.2.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ieee754@1.2.1",
+  "_id": "ieee754@1.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+  "_location": "/ieee754",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ieee754@1.2.1",
+    "name": "ieee754",
+    "escapedName": "ieee754",
+    "rawSpec": "1.2.1",
+    "saveSpec": null,
+    "fetchSpec": "1.2.1"
+  },
+  "_requiredBy": [
+    "/buffer"
+  ],
+  "_resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+  "_spec": "1.2.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Feross Aboukhadijeh",
+    "email": "feross@feross.org",
+    "url": "https://feross.org"
+  },
+  "bugs": {
+    "url": "https://github.com/feross/ieee754/issues"
+  },
+  "contributors": [
+    {
+      "name": "Romain Beauxis",
+      "email": "toots@rastageeks.org"
+    }
+  ],
+  "description": "Read/write IEEE754 floating point numbers from/to a Buffer or array-like object",
+  "devDependencies": {
+    "airtap": "^3.0.0",
+    "standard": "*",
+    "tape": "^5.0.1"
+  },
+  "funding": [
+    {
+      "type": "github",
+      "url": "https://github.com/sponsors/feross"
+    },
+    {
+      "type": "patreon",
+      "url": "https://www.patreon.com/feross"
+    },
+    {
+      "type": "consulting",
+      "url": "https://feross.org/support"
+    }
+  ],
+  "homepage": "https://github.com/feross/ieee754#readme",
+  "keywords": [
+    "IEEE 754",
+    "buffer",
+    "convert",
+    "floating point",
+    "ieee754"
+  ],
+  "license": "BSD-3-Clause",
+  "main": "index.js",
+  "name": "ieee754",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/feross/ieee754.git"
+  },
+  "scripts": {
+    "test": "standard && npm run test-node && npm run test-browser",
+    "test-browser": "airtap -- test/*.js",
+    "test-browser-local": "airtap --local -- test/*.js",
+    "test-node": "tape test/*.js"
+  },
+  "types": "index.d.ts",
+  "version": "1.2.1"
+}
diff --git a/signaling_server/service/node_modules/indexof/package.json b/signaling_server/service/node_modules/indexof/package.json
new file mode 100644 (file)
index 0000000..46730d4
--- /dev/null
@@ -0,0 +1,45 @@
+{
+  "_args": [
+    [
+      "indexof@0.0.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "indexof@0.0.1",
+  "_id": "indexof@0.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+  "_location": "/indexof",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "indexof@0.0.1",
+    "name": "indexof",
+    "escapedName": "indexof",
+    "rawSpec": "0.0.1",
+    "saveSpec": null,
+    "fetchSpec": "0.0.1"
+  },
+  "_requiredBy": [
+    "/engine.io-client",
+    "/socket.io/socket.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+  "_spec": "0.0.1",
+  "_where": "/opt/source/offload.js",
+  "component": {
+    "scripts": {
+      "indexof/index.js": "index.js"
+    }
+  },
+  "dependencies": {},
+  "description": "Microsoft sucks",
+  "keywords": [
+    "index",
+    "array",
+    "indexOf"
+  ],
+  "name": "indexof",
+  "version": "0.0.1"
+}
diff --git a/signaling_server/service/node_modules/inherits/package.json b/signaling_server/service/node_modules/inherits/package.json
new file mode 100644 (file)
index 0000000..e70c076
--- /dev/null
@@ -0,0 +1,109 @@
+{
+  "_args": [
+    [
+      "inherits@2.0.3",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "inherits@2.0.3",
+  "_id": "inherits@2.0.3",
+  "_inBundle": false,
+  "_integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+  "_location": "/inherits",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "inherits@2.0.3",
+    "name": "inherits",
+    "escapedName": "inherits",
+    "rawSpec": "2.0.3",
+    "saveSpec": null,
+    "fetchSpec": "2.0.3"
+  },
+  "_requiredBy": [
+    "/archiver-utils/readable-stream",
+    "/asn1.js",
+    "/browserify-aes",
+    "/browserify-des",
+    "/chokidar",
+    "/cipher-base",
+    "/compress-commons/readable-stream",
+    "/concat-stream",
+    "/concat-stream/readable-stream",
+    "/create-hash",
+    "/create-hmac",
+    "/crypto-browserify",
+    "/des.js",
+    "/duplexify",
+    "/duplexify/readable-stream",
+    "/enhanced-resolve/readable-stream",
+    "/flush-write-stream",
+    "/flush-write-stream/readable-stream",
+    "/from2",
+    "/from2/readable-stream",
+    "/fs-write-stream-atomic/readable-stream",
+    "/glob",
+    "/hash.js",
+    "/http-errors",
+    "/istanbul/glob",
+    "/lazystream/readable-stream",
+    "/md5.js",
+    "/memory-fs/readable-stream",
+    "/mv/glob",
+    "/node-libs-browser/readable-stream",
+    "/parallel-transform",
+    "/parallel-transform/readable-stream",
+    "/pumpify",
+    "/readable-stream",
+    "/readdirp/readable-stream",
+    "/ripemd160",
+    "/serve-index/http-errors",
+    "/sha.js",
+    "/stream-browserify",
+    "/stream-browserify/readable-stream",
+    "/stream-http",
+    "/stream-http/readable-stream",
+    "/tar-stream",
+    "/through2/readable-stream",
+    "/util",
+    "/watchpack-chokidar2/chokidar"
+  ],
+  "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+  "_spec": "2.0.3",
+  "_where": "/opt/source/offload.js",
+  "browser": "./inherits_browser.js",
+  "bugs": {
+    "url": "https://github.com/isaacs/inherits/issues"
+  },
+  "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
+  "devDependencies": {
+    "tap": "^7.1.0"
+  },
+  "files": [
+    "inherits.js",
+    "inherits_browser.js"
+  ],
+  "homepage": "https://github.com/isaacs/inherits#readme",
+  "keywords": [
+    "inheritance",
+    "class",
+    "klass",
+    "oop",
+    "object-oriented",
+    "inherits",
+    "browser",
+    "browserify"
+  ],
+  "license": "ISC",
+  "main": "./inherits.js",
+  "name": "inherits",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/isaacs/inherits.git"
+  },
+  "scripts": {
+    "test": "node test"
+  },
+  "version": "2.0.3"
+}
diff --git a/signaling_server/service/node_modules/ipaddr.js/README.md b/signaling_server/service/node_modules/ipaddr.js/README.md
new file mode 100644 (file)
index 0000000..f57725b
--- /dev/null
@@ -0,0 +1,233 @@
+# ipaddr.js — an IPv6 and IPv4 address manipulation library [![Build Status](https://travis-ci.org/whitequark/ipaddr.js.svg)](https://travis-ci.org/whitequark/ipaddr.js)
+
+ipaddr.js is a small (1.9K minified and gzipped) library for manipulating
+IP addresses in JavaScript environments. It runs on both CommonJS runtimes
+(e.g. [nodejs]) and in a web browser.
+
+ipaddr.js allows you to verify and parse string representation of an IP
+address, match it against a CIDR range or range list, determine if it falls
+into some reserved ranges (examples include loopback and private ranges),
+and convert between IPv4 and IPv4-mapped IPv6 addresses.
+
+[nodejs]: http://nodejs.org
+
+## Installation
+
+`npm install ipaddr.js`
+
+or
+
+`bower install ipaddr.js`
+
+## API
+
+ipaddr.js defines one object in the global scope: `ipaddr`. In CommonJS,
+it is exported from the module:
+
+```js
+var ipaddr = require('ipaddr.js');
+```
+
+The API consists of several global methods and two classes: ipaddr.IPv6 and ipaddr.IPv4.
+
+### Global methods
+
+There are three global methods defined: `ipaddr.isValid`, `ipaddr.parse` and
+`ipaddr.process`. All of them receive a string as a single parameter.
+
+The `ipaddr.isValid` method returns `true` if the address is a valid IPv4 or
+IPv6 address, and `false` otherwise. It does not throw any exceptions.
+
+The `ipaddr.parse` method returns an object representing the IP address,
+or throws an `Error` if the passed string is not a valid representation of an
+IP address.
+
+The `ipaddr.process` method works just like the `ipaddr.parse` one, but it
+automatically converts IPv4-mapped IPv6 addresses to their IPv4 counterparts
+before returning. It is useful when you have a Node.js instance listening
+on an IPv6 socket, and the `net.ivp6.bindv6only` sysctl parameter (or its
+equivalent on non-Linux OS) is set to 0. In this case, you can accept IPv4
+connections on your IPv6-only socket, but the remote address will be mangled.
+Use `ipaddr.process` method to automatically demangle it.
+
+### Object representation
+
+Parsing methods return an object which descends from `ipaddr.IPv6` or
+`ipaddr.IPv4`. These objects share some properties, but most of them differ.
+
+#### Shared properties
+
+One can determine the type of address by calling `addr.kind()`. It will return
+either `"ipv6"` or `"ipv4"`.
+
+An address can be converted back to its string representation with `addr.toString()`.
+Note that this method:
+ * does not return the original string used to create the object (in fact, there is
+   no way of getting that string)
+ * returns a compact representation (when it is applicable)
+
+A `match(range, bits)` method can be used to check if the address falls into a
+certain CIDR range.
+Note that an address can be (obviously) matched only against an address of the same type.
+
+For example:
+
+```js
+var addr = ipaddr.parse("2001:db8:1234::1");
+var range = ipaddr.parse("2001:db8::");
+
+addr.match(range, 32); // => true
+```
+
+Alternatively, `match` can also be called as `match([range, bits])`. In this way,
+it can be used together with the `parseCIDR(string)` method, which parses an IP
+address together with a CIDR range.
+
+For example:
+
+```js
+var addr = ipaddr.parse("2001:db8:1234::1");
+
+addr.match(ipaddr.parseCIDR("2001:db8::/32")); // => true
+```
+
+A `range()` method returns one of predefined names for several special ranges defined
+by IP protocols. The exact names (and their respective CIDR ranges) can be looked up
+in the source: [IPv6 ranges] and [IPv4 ranges]. Some common ones include `"unicast"`
+(the default one) and `"reserved"`.
+
+You can match against your own range list by using
+`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with a mix of IPv6 or IPv4 addresses, and accepts a name-to-subnet map as the range list. For example:
+
+```js
+var rangeList = {
+  documentationOnly: [ ipaddr.parse('2001:db8::'), 32 ],
+  tunnelProviders: [
+    [ ipaddr.parse('2001:470::'), 32 ], // he.net
+    [ ipaddr.parse('2001:5c0::'), 32 ]  // freenet6
+  ]
+};
+ipaddr.subnetMatch(ipaddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => "tunnelProviders"
+```
+
+The addresses can be converted to their byte representation with `toByteArray()`.
+(Actually, JavaScript mostly does not know about byte buffers. They are emulated with
+arrays of numbers, each in range of 0..255.)
+
+```js
+var bytes = ipaddr.parse('2a00:1450:8007::68').toByteArray(); // ipv6.google.com
+bytes // => [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, <zeroes...>, 0x00, 0x68 ]
+```
+
+The `ipaddr.IPv4` and `ipaddr.IPv6` objects have some methods defined, too. All of them
+have the same interface for both protocols, and are similar to global methods.
+
+`ipaddr.IPvX.isValid(string)` can be used to check if the string is a valid address
+for particular protocol, and `ipaddr.IPvX.parse(string)` is the error-throwing parser.
+
+`ipaddr.IPvX.isValid(string)` uses the same format for parsing as the POSIX `inet_ntoa` function, which accepts unusual formats like `0xc0.168.1.1` or `0x10000000`. The function `ipaddr.IPv4.isValidFourPartDecimal(string)` validates the IPv4 address and also ensures that it is written in four-part decimal format.
+
+[IPv6 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L186
+[IPv4 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L71
+
+#### IPv6 properties
+
+Sometimes you will want to convert IPv6 not to a compact string representation (with
+the `::` substitution); the `toNormalizedString()` method will return an address where
+all zeroes are explicit.
+
+For example:
+
+```js
+var addr = ipaddr.parse("2001:0db8::0001");
+addr.toString(); // => "2001:db8::1"
+addr.toNormalizedString(); // => "2001:db8:0:0:0:0:0:1"
+```
+
+The `isIPv4MappedAddress()` method will return `true` if this address is an IPv4-mapped
+one, and `toIPv4Address()` will return an IPv4 object address.
+
+To access the underlying binary representation of the address, use `addr.parts`.
+
+```js
+var addr = ipaddr.parse("2001:db8:10::1234:DEAD");
+addr.parts // => [0x2001, 0xdb8, 0x10, 0, 0, 0, 0x1234, 0xdead]
+```
+
+A IPv6 zone index can be accessed via `addr.zoneId`:
+
+```js
+var addr = ipaddr.parse("2001:db8::%eth0");
+addr.zoneId // => 'eth0'
+```
+
+#### IPv4 properties
+
+`toIPv4MappedAddress()` will return a corresponding IPv4-mapped IPv6 address.
+
+To access the underlying representation of the address, use `addr.octets`.
+
+```js
+var addr = ipaddr.parse("192.168.1.1");
+addr.octets // => [192, 168, 1, 1]
+```
+
+`prefixLengthFromSubnetMask()` will return a CIDR prefix length for a valid IPv4 netmask or
+null if the netmask is not valid.
+
+```js
+ipaddr.IPv4.parse('255.255.255.240').prefixLengthFromSubnetMask() == 28
+ipaddr.IPv4.parse('255.192.164.0').prefixLengthFromSubnetMask()  == null
+```
+
+`subnetMaskFromPrefixLength()` will return an IPv4 netmask for a valid CIDR prefix length.
+
+```js
+ipaddr.IPv4.subnetMaskFromPrefixLength(24) == "255.255.255.0"
+ipaddr.IPv4.subnetMaskFromPrefixLength(29) == "255.255.255.248"
+```
+
+`broadcastAddressFromCIDR()` will return the broadcast address for a given IPv4 interface and netmask in CIDR notation.
+```js
+ipaddr.IPv4.broadcastAddressFromCIDR("172.0.0.1/24") == "172.0.0.255"
+```
+`networkAddressFromCIDR()` will return the network address for a given IPv4 interface and netmask in CIDR notation.
+```js
+ipaddr.IPv4.networkAddressFromCIDR("172.0.0.1/24") == "172.0.0.0"
+```
+
+#### Conversion
+
+IPv4 and IPv6 can be converted bidirectionally to and from network byte order (MSB) byte arrays.
+
+The `fromByteArray()` method will take an array and create an appropriate IPv4 or IPv6 object
+if the input satisfies the requirements. For IPv4 it has to be an array of four 8-bit values,
+while for IPv6 it has to be an array of sixteen 8-bit values.
+
+For example:
+```js
+var addr = ipaddr.fromByteArray([0x7f, 0, 0, 1]);
+addr.toString(); // => "127.0.0.1"
+```
+
+or
+
+```js
+var addr = ipaddr.fromByteArray([0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
+addr.toString(); // => "2001:db8::1"
+```
+
+Both objects also offer a `toByteArray()` method, which returns an array in network byte order (MSB).
+
+For example:
+```js
+var addr = ipaddr.parse("127.0.0.1");
+addr.toByteArray(); // => [0x7f, 0, 0, 1]
+```
+
+or
+
+```js
+var addr = ipaddr.parse("2001:db8::1");
+addr.toByteArray(); // => [0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
+```
diff --git a/signaling_server/service/node_modules/ipaddr.js/lib/ipaddr.js.d.ts b/signaling_server/service/node_modules/ipaddr.js/lib/ipaddr.js.d.ts
new file mode 100644 (file)
index 0000000..52174b6
--- /dev/null
@@ -0,0 +1,68 @@
+declare module "ipaddr.js" {
+    type IPv4Range = 'unicast' | 'unspecified' | 'broadcast' | 'multicast' | 'linkLocal' | 'loopback' | 'carrierGradeNat' | 'private' | 'reserved';
+    type IPv6Range = 'unicast' | 'unspecified' | 'linkLocal' | 'multicast' | 'loopback' | 'uniqueLocal' | 'ipv4Mapped' | 'rfc6145' | 'rfc6052' | '6to4' | 'teredo' | 'reserved';
+
+    interface RangeList<T> {
+        [name: string]: [T, number] | [T, number][];
+    }
+
+    // Common methods/properties for IPv4 and IPv6 classes.
+    class IP {
+        prefixLengthFromSubnetMask(): number | null;
+        toByteArray(): number[];
+        toNormalizedString(): string;
+        toString(): string;
+    }
+
+    namespace Address {
+        export function isValid(addr: string): boolean;
+        export function fromByteArray(bytes: number[]): IPv4 | IPv6;
+        export function parse(addr: string): IPv4 | IPv6;
+        export function parseCIDR(mask: string): [IPv4 | IPv6, number];
+        export function process(addr: string): IPv4 | IPv6;
+        export function subnetMatch(addr: IPv4, rangeList: RangeList<IPv4>, defaultName?: string): string;
+        export function subnetMatch(addr: IPv6, rangeList: RangeList<IPv6>, defaultName?: string): string;
+
+        export class IPv4 extends IP {
+            static broadcastAddressFromCIDR(addr: string): IPv4;
+            static isIPv4(addr: string): boolean;
+            static isValidFourPartDecimal(addr: string): boolean;
+            static isValid(addr: string): boolean;
+            static networkAddressFromCIDR(addr: string): IPv4;
+            static parse(addr: string): IPv4;
+            static parseCIDR(addr: string): [IPv4, number];
+            static subnetMaskFromPrefixLength(prefix: number): IPv4;
+            constructor(octets: number[]);
+            octets: number[]
+
+            kind(): 'ipv4';
+            match(addr: IPv4, bits: number): boolean;
+            match(mask: [IPv4, number]): boolean;
+            range(): IPv4Range;
+            subnetMatch(rangeList: RangeList<IPv4>, defaultName?: string): string;
+            toIPv4MappedAddress(): IPv6;
+        }
+
+        export class IPv6 extends IP {
+            static broadcastAddressFromCIDR(addr: string): IPv6;
+            static isIPv6(addr: string): boolean;
+            static isValid(addr: string): boolean;
+            static parse(addr: string): IPv6;
+            static parseCIDR(addr: string): [IPv6, number];
+            static subnetMaskFromPrefixLength(prefix: number): IPv6;
+            constructor(parts: number[]);
+            parts: number[]
+            zoneId?: string
+
+            isIPv4MappedAddress(): boolean;
+            kind(): 'ipv6';
+            match(addr: IPv6, bits: number): boolean;
+            match(mask: [IPv6, number]): boolean;
+            range(): IPv6Range;
+            subnetMatch(rangeList: RangeList<IPv6>, defaultName?: string): string;
+            toIPv4Address(): IPv4;
+        }
+    }
+
+    export = Address;
+}
diff --git a/signaling_server/service/node_modules/ipaddr.js/package.json b/signaling_server/service/node_modules/ipaddr.js/package.json
new file mode 100644 (file)
index 0000000..270a0cb
--- /dev/null
@@ -0,0 +1,73 @@
+{
+  "_args": [
+    [
+      "ipaddr.js@1.9.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ipaddr.js@1.9.1",
+  "_id": "ipaddr.js@1.9.1",
+  "_inBundle": false,
+  "_integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+  "_location": "/ipaddr.js",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ipaddr.js@1.9.1",
+    "name": "ipaddr.js",
+    "escapedName": "ipaddr.js",
+    "rawSpec": "1.9.1",
+    "saveSpec": null,
+    "fetchSpec": "1.9.1"
+  },
+  "_requiredBy": [
+    "/proxy-addr"
+  ],
+  "_resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+  "_spec": "1.9.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "whitequark",
+    "email": "whitequark@whitequark.org"
+  },
+  "bugs": {
+    "url": "https://github.com/whitequark/ipaddr.js/issues"
+  },
+  "dependencies": {},
+  "description": "A library for manipulating IPv4 and IPv6 addresses in JavaScript.",
+  "devDependencies": {
+    "coffee-script": "~1.12.6",
+    "nodeunit": "^0.11.3",
+    "uglify-js": "~3.0.19"
+  },
+  "directories": {
+    "lib": "./lib"
+  },
+  "engines": {
+    "node": ">= 0.10"
+  },
+  "files": [
+    "lib/",
+    "LICENSE",
+    "ipaddr.min.js"
+  ],
+  "homepage": "https://github.com/whitequark/ipaddr.js#readme",
+  "keywords": [
+    "ip",
+    "ipv4",
+    "ipv6"
+  ],
+  "license": "MIT",
+  "main": "./lib/ipaddr.js",
+  "name": "ipaddr.js",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/whitequark/ipaddr.js.git"
+  },
+  "scripts": {
+    "test": "cake build test"
+  },
+  "types": "./lib/ipaddr.js.d.ts",
+  "version": "1.9.1"
+}
diff --git a/signaling_server/service/node_modules/is-fullwidth-code-point/package.json b/signaling_server/service/node_modules/is-fullwidth-code-point/package.json
new file mode 100644 (file)
index 0000000..370c57b
--- /dev/null
@@ -0,0 +1,80 @@
+{
+  "_args": [
+    [
+      "is-fullwidth-code-point@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "is-fullwidth-code-point@2.0.0",
+  "_id": "is-fullwidth-code-point@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+  "_location": "/is-fullwidth-code-point",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "is-fullwidth-code-point@2.0.0",
+    "name": "is-fullwidth-code-point",
+    "escapedName": "is-fullwidth-code-point",
+    "rawSpec": "2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "2.0.0"
+  },
+  "_requiredBy": [
+    "/string-width"
+  ],
+  "_resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/is-fullwidth-code-point/issues"
+  },
+  "description": "Check if the character represented by a given Unicode code point is fullwidth",
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/is-fullwidth-code-point#readme",
+  "keywords": [
+    "fullwidth",
+    "full-width",
+    "full",
+    "width",
+    "unicode",
+    "character",
+    "char",
+    "string",
+    "str",
+    "codepoint",
+    "code",
+    "point",
+    "is",
+    "detect",
+    "check"
+  ],
+  "license": "MIT",
+  "name": "is-fullwidth-code-point",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/is-fullwidth-code-point.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "2.0.0",
+  "xo": {
+    "esnext": true
+  }
+}
diff --git a/signaling_server/service/node_modules/locate-path/package.json b/signaling_server/service/node_modules/locate-path/package.json
new file mode 100644 (file)
index 0000000..5054b65
--- /dev/null
@@ -0,0 +1,79 @@
+{
+  "_args": [
+    [
+      "locate-path@3.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "locate-path@3.0.0",
+  "_id": "locate-path@3.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+  "_location": "/locate-path",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "locate-path@3.0.0",
+    "name": "locate-path",
+    "escapedName": "locate-path",
+    "rawSpec": "3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "3.0.0"
+  },
+  "_requiredBy": [
+    "/find-up"
+  ],
+  "_resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+  "_spec": "3.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/locate-path/issues"
+  },
+  "dependencies": {
+    "p-locate": "^3.0.0",
+    "path-exists": "^3.0.0"
+  },
+  "description": "Get the first path that exists on disk of multiple paths",
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/locate-path#readme",
+  "keywords": [
+    "locate",
+    "path",
+    "paths",
+    "file",
+    "files",
+    "exists",
+    "find",
+    "finder",
+    "search",
+    "searcher",
+    "array",
+    "iterable",
+    "iterator"
+  ],
+  "license": "MIT",
+  "name": "locate-path",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/locate-path.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "3.0.0"
+}
diff --git a/signaling_server/service/node_modules/media-typer/package.json b/signaling_server/service/node_modules/media-typer/package.json
new file mode 100644 (file)
index 0000000..6727a20
--- /dev/null
@@ -0,0 +1,64 @@
+{
+  "_args": [
+    [
+      "media-typer@0.3.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "media-typer@0.3.0",
+  "_id": "media-typer@0.3.0",
+  "_inBundle": false,
+  "_integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+  "_location": "/media-typer",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "media-typer@0.3.0",
+    "name": "media-typer",
+    "escapedName": "media-typer",
+    "rawSpec": "0.3.0",
+    "saveSpec": null,
+    "fetchSpec": "0.3.0"
+  },
+  "_requiredBy": [
+    "/type-is"
+  ],
+  "_resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+  "_spec": "0.3.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/media-typer/issues"
+  },
+  "description": "Simple RFC 6838 media type parser and formatter",
+  "devDependencies": {
+    "istanbul": "0.3.2",
+    "mocha": "~1.21.4",
+    "should": "~4.0.4"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/media-typer#readme",
+  "license": "MIT",
+  "name": "media-typer",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/media-typer.git"
+  },
+  "scripts": {
+    "test": "mocha --reporter spec --check-leaks --bail test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "0.3.0"
+}
diff --git a/signaling_server/service/node_modules/merge-descriptors/package.json b/signaling_server/service/node_modules/merge-descriptors/package.json
new file mode 100644 (file)
index 0000000..3cfedfc
--- /dev/null
@@ -0,0 +1,72 @@
+{
+  "_args": [
+    [
+      "merge-descriptors@1.0.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "merge-descriptors@1.0.1",
+  "_id": "merge-descriptors@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+  "_location": "/merge-descriptors",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "merge-descriptors@1.0.1",
+    "name": "merge-descriptors",
+    "escapedName": "merge-descriptors",
+    "rawSpec": "1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "1.0.1"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+  "_spec": "1.0.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Jonathan Ong",
+    "email": "me@jongleberry.com",
+    "url": "http://jongleberry.com"
+  },
+  "bugs": {
+    "url": "https://github.com/component/merge-descriptors/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Mike Grabowski",
+      "email": "grabbou@gmail.com"
+    }
+  ],
+  "description": "Merge objects using descriptors",
+  "devDependencies": {
+    "istanbul": "0.4.1",
+    "mocha": "1.21.5"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/component/merge-descriptors#readme",
+  "license": "MIT",
+  "name": "merge-descriptors",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/component/merge-descriptors.git"
+  },
+  "scripts": {
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
+  },
+  "version": "1.0.1"
+}
diff --git a/signaling_server/service/node_modules/methods/package.json b/signaling_server/service/node_modules/methods/package.json
new file mode 100644 (file)
index 0000000..377f1ee
--- /dev/null
@@ -0,0 +1,82 @@
+{
+  "_args": [
+    [
+      "methods@1.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "methods@1.1.2",
+  "_id": "methods@1.1.2",
+  "_inBundle": false,
+  "_integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+  "_location": "/methods",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "methods@1.1.2",
+    "name": "methods",
+    "escapedName": "methods",
+    "rawSpec": "1.1.2",
+    "saveSpec": null,
+    "fetchSpec": "1.1.2"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+  "_spec": "1.1.2",
+  "_where": "/opt/source/offload.js",
+  "browser": {
+    "http": false
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/methods/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    },
+    {
+      "name": "TJ Holowaychuk",
+      "email": "tj@vision-media.ca",
+      "url": "http://tjholowaychuk.com"
+    }
+  ],
+  "description": "HTTP methods that node supports",
+  "devDependencies": {
+    "istanbul": "0.4.1",
+    "mocha": "1.21.5"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "index.js",
+    "HISTORY.md",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/jshttp/methods#readme",
+  "keywords": [
+    "http",
+    "methods"
+  ],
+  "license": "MIT",
+  "name": "methods",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/methods.git"
+  },
+  "scripts": {
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "1.1.2"
+}
diff --git a/signaling_server/service/node_modules/mime-db/HISTORY.md b/signaling_server/service/node_modules/mime-db/HISTORY.md
new file mode 100644 (file)
index 0000000..56d792f
--- /dev/null
@@ -0,0 +1,458 @@
+1.45.0 / 2020-09-22
+===================
+
+  * Add `application/ubjson` with extension `.ubj`
+  * Add `image/avif` with extension `.avif`
+  * Add `image/ktx2` with extension `.ktx2`
+  * Add extension `.dbf` to `application/vnd.dbf`
+  * Add extension `.rar` to `application/vnd.rar`
+  * Add extension `.td` to `application/urc-targetdesc+xml`
+  * Add new upstream MIME types
+  * Fix extension of `application/vnd.apple.keynote` to be `.key`
+
+1.44.0 / 2020-04-22
+===================
+
+  * Add charsets from IANA
+  * Add extension `.cjs` to `application/node`
+  * Add new upstream MIME types
+
+1.43.0 / 2020-01-05
+===================
+
+  * Add `application/x-keepass2` with extension `.kdbx`
+  * Add extension `.mxmf` to `audio/mobile-xmf`
+  * Add extensions from IANA for `application/*+xml` types
+  * Add new upstream MIME types
+
+1.42.0 / 2019-09-25
+===================
+
+  * Add `image/vnd.ms-dds` with extension `.dds`
+  * Add new upstream MIME types
+  * Remove compressible from `multipart/mixed`
+
+1.41.0 / 2019-08-30
+===================
+
+  * Add new upstream MIME types
+  * Add `application/toml` with extension `.toml`
+  * Mark `font/ttf` as compressible
+
+1.40.0 / 2019-04-20
+===================
+
+  * Add extensions from IANA for `model/*` types
+  * Add `text/mdx` with extension `.mdx`
+
+1.39.0 / 2019-04-04
+===================
+
+  * Add extensions `.siv` and `.sieve` to `application/sieve`
+  * Add new upstream MIME types
+
+1.38.0 / 2019-02-04
+===================
+
+  * Add extension `.nq` to `application/n-quads`
+  * Add extension `.nt` to `application/n-triples`
+  * Add new upstream MIME types
+  * Mark `text/less` as compressible
+
+1.37.0 / 2018-10-19
+===================
+
+  * Add extensions to HEIC image types
+  * Add new upstream MIME types
+
+1.36.0 / 2018-08-20
+===================
+
+  * Add Apple file extensions from IANA
+  * Add extensions from IANA for `image/*` types
+  * Add new upstream MIME types
+
+1.35.0 / 2018-07-15
+===================
+
+  * Add extension `.owl` to `application/rdf+xml`
+  * Add new upstream MIME types
+    - Removes extension `.woff` from `application/font-woff`
+
+1.34.0 / 2018-06-03
+===================
+
+  * Add extension `.csl` to `application/vnd.citationstyles.style+xml`
+  * Add extension `.es` to `application/ecmascript`
+  * Add new upstream MIME types
+  * Add `UTF-8` as default charset for `text/turtle`
+  * Mark all XML-derived types as compressible
+
+1.33.0 / 2018-02-15
+===================
+
+  * Add extensions from IANA for `message/*` types
+  * Add new upstream MIME types
+  * Fix some incorrect OOXML types
+  * Remove `application/font-woff2`
+
+1.32.0 / 2017-11-29
+===================
+
+  * Add new upstream MIME types
+  * Update `text/hjson` to registered `application/hjson`
+  * Add `text/shex` with extension `.shex`
+
+1.31.0 / 2017-10-25
+===================
+
+  * Add `application/raml+yaml` with extension `.raml`
+  * Add `application/wasm` with extension `.wasm`
+  * Add new `font` type from IANA
+  * Add new upstream font extensions
+  * Add new upstream MIME types
+  * Add extensions for JPEG-2000 images
+
+1.30.0 / 2017-08-27
+===================
+
+  * Add `application/vnd.ms-outlook`
+  * Add `application/x-arj`
+  * Add extension `.mjs` to `application/javascript`
+  * Add glTF types and extensions
+  * Add new upstream MIME types
+  * Add `text/x-org`
+  * Add VirtualBox MIME types
+  * Fix `source` records for `video/*` types that are IANA
+  * Update `font/opentype` to registered `font/otf`
+
+1.29.0 / 2017-07-10
+===================
+
+  * Add `application/fido.trusted-apps+json`
+  * Add extension `.wadl` to `application/vnd.sun.wadl+xml`
+  * Add new upstream MIME types
+  * Add `UTF-8` as default charset for `text/css`
+
+1.28.0 / 2017-05-14
+===================
+
+  * Add new upstream MIME types
+  * Add extension `.gz` to `application/gzip`
+  * Update extensions `.md` and `.markdown` to be `text/markdown`
+
+1.27.0 / 2017-03-16
+===================
+
+  * Add new upstream MIME types
+  * Add `image/apng` with extension `.apng`
+
+1.26.0 / 2017-01-14
+===================
+
+  * Add new upstream MIME types
+  * Add extension `.geojson` to `application/geo+json`
+
+1.25.0 / 2016-11-11
+===================
+
+  * Add new upstream MIME types
+
+1.24.0 / 2016-09-18
+===================
+
+  * Add `audio/mp3`
+  * Add new upstream MIME types
+
+1.23.0 / 2016-05-01
+===================
+
+  * Add new upstream MIME types
+  * Add extension `.3gpp` to `audio/3gpp`
+
+1.22.0 / 2016-02-15
+===================
+
+  * Add `text/slim`
+  * Add extension `.rng` to `application/xml`
+  * Add new upstream MIME types
+  * Fix extension of `application/dash+xml` to be `.mpd`
+  * Update primary extension to `.m4a` for `audio/mp4`
+
+1.21.0 / 2016-01-06
+===================
+
+  * Add Google document types
+  * Add new upstream MIME types
+
+1.20.0 / 2015-11-10
+===================
+
+  * Add `text/x-suse-ymp`
+  * Add new upstream MIME types
+
+1.19.0 / 2015-09-17
+===================
+
+  * Add `application/vnd.apple.pkpass`
+  * Add new upstream MIME types
+
+1.18.0 / 2015-09-03
+===================
+
+  * Add new upstream MIME types
+
+1.17.0 / 2015-08-13
+===================
+
+  * Add `application/x-msdos-program`
+  * Add `audio/g711-0`
+  * Add `image/vnd.mozilla.apng`
+  * Add extension `.exe` to `application/x-msdos-program`
+
+1.16.0 / 2015-07-29
+===================
+
+  * Add `application/vnd.uri-map`
+
+1.15.0 / 2015-07-13
+===================
+
+  * Add `application/x-httpd-php`
+
+1.14.0 / 2015-06-25
+===================
+
+  * Add `application/scim+json`
+  * Add `application/vnd.3gpp.ussd+xml`
+  * Add `application/vnd.biopax.rdf+xml`
+  * Add `text/x-processing`
+
+1.13.0 / 2015-06-07
+===================
+
+  * Add nginx as a source
+  * Add `application/x-cocoa`
+  * Add `application/x-java-archive-diff`
+  * Add `application/x-makeself`
+  * Add `application/x-perl`
+  * Add `application/x-pilot`
+  * Add `application/x-redhat-package-manager`
+  * Add `application/x-sea`
+  * Add `audio/x-m4a`
+  * Add `audio/x-realaudio`
+  * Add `image/x-jng`
+  * Add `text/mathml`
+
+1.12.0 / 2015-06-05
+===================
+
+  * Add `application/bdoc`
+  * Add `application/vnd.hyperdrive+json`
+  * Add `application/x-bdoc`
+  * Add extension `.rtf` to `text/rtf`
+
+1.11.0 / 2015-05-31
+===================
+
+  * Add `audio/wav`
+  * Add `audio/wave`
+  * Add extension `.litcoffee` to `text/coffeescript`
+  * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data`
+  * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install`
+
+1.10.0 / 2015-05-19
+===================
+
+  * Add `application/vnd.balsamiq.bmpr`
+  * Add `application/vnd.microsoft.portable-executable`
+  * Add `application/x-ns-proxy-autoconfig`
+
+1.9.1 / 2015-04-19
+==================
+
+  * Remove `.json` extension from `application/manifest+json`
+    - This is causing bugs downstream
+
+1.9.0 / 2015-04-19
+==================
+
+  * Add `application/manifest+json`
+  * Add `application/vnd.micro+json`
+  * Add `image/vnd.zbrush.pcx`
+  * Add `image/x-ms-bmp`
+
+1.8.0 / 2015-03-13
+==================
+
+  * Add `application/vnd.citationstyles.style+xml`
+  * Add `application/vnd.fastcopy-disk-image`
+  * Add `application/vnd.gov.sk.xmldatacontainer+xml`
+  * Add extension `.jsonld` to `application/ld+json`
+
+1.7.0 / 2015-02-08
+==================
+
+  * Add `application/vnd.gerber`
+  * Add `application/vnd.msa-disk-image`
+
+1.6.1 / 2015-02-05
+==================
+
+  * Community extensions ownership transferred from `node-mime`
+
+1.6.0 / 2015-01-29
+==================
+
+  * Add `application/jose`
+  * Add `application/jose+json`
+  * Add `application/json-seq`
+  * Add `application/jwk+json`
+  * Add `application/jwk-set+json`
+  * Add `application/jwt`
+  * Add `application/rdap+json`
+  * Add `application/vnd.gov.sk.e-form+xml`
+  * Add `application/vnd.ims.imsccv1p3`
+
+1.5.0 / 2014-12-30
+==================
+
+  * Add `application/vnd.oracle.resource+json`
+  * Fix various invalid MIME type entries
+    - `application/mbox+xml`
+    - `application/oscp-response`
+    - `application/vwg-multiplexed`
+    - `audio/g721`
+
+1.4.0 / 2014-12-21
+==================
+
+  * Add `application/vnd.ims.imsccv1p2`
+  * Fix various invalid MIME type entries
+    - `application/vnd-acucobol`
+    - `application/vnd-curl`
+    - `application/vnd-dart`
+    - `application/vnd-dxr`
+    - `application/vnd-fdf`
+    - `application/vnd-mif`
+    - `application/vnd-sema`
+    - `application/vnd-wap-wmlc`
+    - `application/vnd.adobe.flash-movie`
+    - `application/vnd.dece-zip`
+    - `application/vnd.dvb_service`
+    - `application/vnd.micrografx-igx`
+    - `application/vnd.sealed-doc`
+    - `application/vnd.sealed-eml`
+    - `application/vnd.sealed-mht`
+    - `application/vnd.sealed-ppt`
+    - `application/vnd.sealed-tiff`
+    - `application/vnd.sealed-xls`
+    - `application/vnd.sealedmedia.softseal-html`
+    - `application/vnd.sealedmedia.softseal-pdf`
+    - `application/vnd.wap-slc`
+    - `application/vnd.wap-wbxml`
+    - `audio/vnd.sealedmedia.softseal-mpeg`
+    - `image/vnd-djvu`
+    - `image/vnd-svf`
+    - `image/vnd-wap-wbmp`
+    - `image/vnd.sealed-png`
+    - `image/vnd.sealedmedia.softseal-gif`
+    - `image/vnd.sealedmedia.softseal-jpg`
+    - `model/vnd-dwf`
+    - `model/vnd.parasolid.transmit-binary`
+    - `model/vnd.parasolid.transmit-text`
+    - `text/vnd-a`
+    - `text/vnd-curl`
+    - `text/vnd.wap-wml`
+  * Remove example template MIME types
+    - `application/example`
+    - `audio/example`
+    - `image/example`
+    - `message/example`
+    - `model/example`
+    - `multipart/example`
+    - `text/example`
+    - `video/example`
+
+1.3.1 / 2014-12-16
+==================
+
+  * Fix missing extensions
+    - `application/json5`
+    - `text/hjson`
+
+1.3.0 / 2014-12-07
+==================
+
+  * Add `application/a2l`
+  * Add `application/aml`
+  * Add `application/atfx`
+  * Add `application/atxml`
+  * Add `application/cdfx+xml`
+  * Add `application/dii`
+  * Add `application/json5`
+  * Add `application/lxf`
+  * Add `application/mf4`
+  * Add `application/vnd.apache.thrift.compact`
+  * Add `application/vnd.apache.thrift.json`
+  * Add `application/vnd.coffeescript`
+  * Add `application/vnd.enphase.envoy`
+  * Add `application/vnd.ims.imsccv1p1`
+  * Add `text/csv-schema`
+  * Add `text/hjson`
+  * Add `text/markdown`
+  * Add `text/yaml`
+
+1.2.0 / 2014-11-09
+==================
+
+  * Add `application/cea`
+  * Add `application/dit`
+  * Add `application/vnd.gov.sk.e-form+zip`
+  * Add `application/vnd.tmd.mediaflex.api+xml`
+  * Type `application/epub+zip` is now IANA-registered
+
+1.1.2 / 2014-10-23
+==================
+
+  * Rebuild database for `application/x-www-form-urlencoded` change
+
+1.1.1 / 2014-10-20
+==================
+
+  * Mark `application/x-www-form-urlencoded` as compressible.
+
+1.1.0 / 2014-09-28
+==================
+
+  * Add `application/font-woff2`
+
+1.0.3 / 2014-09-25
+==================
+
+  * Fix engine requirement in package
+
+1.0.2 / 2014-09-25
+==================
+
+  * Add `application/coap-group+json`
+  * Add `application/dcd`
+  * Add `application/vnd.apache.thrift.binary`
+  * Add `image/vnd.tencent.tap`
+  * Mark all JSON-derived types as compressible
+  * Update `text/vtt` data
+
+1.0.1 / 2014-08-30
+==================
+
+  * Fix extension ordering
+
+1.0.0 / 2014-08-30
+==================
+
+  * Add `application/atf`
+  * Add `application/merge-patch+json`
+  * Add `multipart/x-mixed-replace`
+  * Add `source: 'apache'` metadata
+  * Add `source: 'iana'` metadata
+  * Remove badly-assumed charset data
diff --git a/signaling_server/service/node_modules/mime-db/README.md b/signaling_server/service/node_modules/mime-db/README.md
new file mode 100644 (file)
index 0000000..f1e6391
--- /dev/null
@@ -0,0 +1,102 @@
+# mime-db
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-image]][node-url]
+[![Build Status][travis-image]][travis-url]
+[![Coverage Status][coveralls-image]][coveralls-url]
+
+This is a database of all mime types.
+It consists of a single, public JSON file and does not include any logic,
+allowing it to remain as un-opinionated as possible with an API.
+It aggregates data from the following sources:
+
+- http://www.iana.org/assignments/media-types/media-types.xhtml
+- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
+- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types
+
+## Installation
+
+```bash
+npm install mime-db
+```
+
+### Database Download
+
+If you're crazy enough to use this in the browser, you can just grab the
+JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to
+replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags)
+as the JSON format may change in the future.
+
+```
+https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json
+```
+
+## Usage
+
+<!-- eslint-disable no-unused-vars -->
+
+```js
+var db = require('mime-db')
+
+// grab data on .js files
+var data = db['application/javascript']
+```
+
+## Data Structure
+
+The JSON file is a map lookup for lowercased mime types.
+Each mime type has the following properties:
+
+- `.source` - where the mime type is defined.
+    If not set, it's probably a custom media type.
+    - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)
+    - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
+    - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)
+- `.extensions[]` - known extensions associated with this mime type.
+- `.compressible` - whether a file of this type can be gzipped.
+- `.charset` - the default charset associated with this type, if any.
+
+If unknown, every property could be `undefined`.
+
+## Contributing
+
+To edit the database, only make PRs against `src/custom-types.json` or
+`src/custom-suffix.json`.
+
+The `src/custom-types.json` file is a JSON object with the MIME type as the
+keys and the values being an object with the following keys:
+
+- `compressible` - leave out if you don't know, otherwise `true`/`false` to
+  indicate whether the data represented by the type is typically compressible.
+- `extensions` - include an array of file extensions that are associated with
+  the type.
+- `notes` - human-readable notes about the type, typically what the type is.
+- `sources` - include an array of URLs of where the MIME type and the associated
+  extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source);
+  links to type aggregating sites and Wikipedia are _not acceptable_.
+
+To update the build, run `npm run build`.
+
+### Adding Custom Media Types
+
+The best way to get new media types included in this library is to register
+them with the IANA. The community registration procedure is outlined in
+[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types
+registered with the IANA are automatically pulled into this library.
+
+If that is not possible / feasible, they can be added directly here as a
+"custom" type. To do this, it is required to have a primary source that
+definitively lists the media type. If an extension is going to be listed as
+associateed with this media type, the source must definitively link the
+media type and extension as well.
+
+[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master
+[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master
+[node-image]: https://badgen.net/npm/node/mime-db
+[node-url]: https://nodejs.org/en/download
+[npm-downloads-image]: https://badgen.net/npm/dm/mime-db
+[npm-url]: https://npmjs.org/package/mime-db
+[npm-version-image]: https://badgen.net/npm/v/mime-db
+[travis-image]: https://badgen.net/travis/jshttp/mime-db/master
+[travis-url]: https://travis-ci.org/jshttp/mime-db
diff --git a/signaling_server/service/node_modules/mime-db/db.json b/signaling_server/service/node_modules/mime-db/db.json
new file mode 100644 (file)
index 0000000..05cfa68
--- /dev/null
@@ -0,0 +1,8242 @@
+{
+  "application/1d-interleaved-parityfec": {
+    "source": "iana"
+  },
+  "application/3gpdash-qoe-report+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/3gpp-ims+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/a2l": {
+    "source": "iana"
+  },
+  "application/activemessage": {
+    "source": "iana"
+  },
+  "application/activity+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-costmap+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-costmapfilter+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-directory+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-endpointcost+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-endpointcostparams+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-endpointprop+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-endpointpropparams+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-error+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-networkmap+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-networkmapfilter+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-updatestreamcontrol+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/alto-updatestreamparams+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/aml": {
+    "source": "iana"
+  },
+  "application/andrew-inset": {
+    "source": "iana",
+    "extensions": ["ez"]
+  },
+  "application/applefile": {
+    "source": "iana"
+  },
+  "application/applixware": {
+    "source": "apache",
+    "extensions": ["aw"]
+  },
+  "application/atf": {
+    "source": "iana"
+  },
+  "application/atfx": {
+    "source": "iana"
+  },
+  "application/atom+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["atom"]
+  },
+  "application/atomcat+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["atomcat"]
+  },
+  "application/atomdeleted+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["atomdeleted"]
+  },
+  "application/atomicmail": {
+    "source": "iana"
+  },
+  "application/atomsvc+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["atomsvc"]
+  },
+  "application/atsc-dwd+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["dwd"]
+  },
+  "application/atsc-dynamic-event-message": {
+    "source": "iana"
+  },
+  "application/atsc-held+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["held"]
+  },
+  "application/atsc-rdt+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/atsc-rsat+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rsat"]
+  },
+  "application/atxml": {
+    "source": "iana"
+  },
+  "application/auth-policy+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/bacnet-xdd+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/batch-smtp": {
+    "source": "iana"
+  },
+  "application/bdoc": {
+    "compressible": false,
+    "extensions": ["bdoc"]
+  },
+  "application/beep+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/calendar+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/calendar+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xcs"]
+  },
+  "application/call-completion": {
+    "source": "iana"
+  },
+  "application/cals-1840": {
+    "source": "iana"
+  },
+  "application/captive+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/cbor": {
+    "source": "iana"
+  },
+  "application/cbor-seq": {
+    "source": "iana"
+  },
+  "application/cccex": {
+    "source": "iana"
+  },
+  "application/ccmp+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/ccxml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ccxml"]
+  },
+  "application/cdfx+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["cdfx"]
+  },
+  "application/cdmi-capability": {
+    "source": "iana",
+    "extensions": ["cdmia"]
+  },
+  "application/cdmi-container": {
+    "source": "iana",
+    "extensions": ["cdmic"]
+  },
+  "application/cdmi-domain": {
+    "source": "iana",
+    "extensions": ["cdmid"]
+  },
+  "application/cdmi-object": {
+    "source": "iana",
+    "extensions": ["cdmio"]
+  },
+  "application/cdmi-queue": {
+    "source": "iana",
+    "extensions": ["cdmiq"]
+  },
+  "application/cdni": {
+    "source": "iana"
+  },
+  "application/cea": {
+    "source": "iana"
+  },
+  "application/cea-2018+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/cellml+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/cfw": {
+    "source": "iana"
+  },
+  "application/clue+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/clue_info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/cms": {
+    "source": "iana"
+  },
+  "application/cnrp+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/coap-group+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/coap-payload": {
+    "source": "iana"
+  },
+  "application/commonground": {
+    "source": "iana"
+  },
+  "application/conference-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/cose": {
+    "source": "iana"
+  },
+  "application/cose-key": {
+    "source": "iana"
+  },
+  "application/cose-key-set": {
+    "source": "iana"
+  },
+  "application/cpl+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/csrattrs": {
+    "source": "iana"
+  },
+  "application/csta+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/cstadata+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/csvm+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/cu-seeme": {
+    "source": "apache",
+    "extensions": ["cu"]
+  },
+  "application/cwt": {
+    "source": "iana"
+  },
+  "application/cybercash": {
+    "source": "iana"
+  },
+  "application/dart": {
+    "compressible": true
+  },
+  "application/dash+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["mpd"]
+  },
+  "application/dashdelta": {
+    "source": "iana"
+  },
+  "application/davmount+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["davmount"]
+  },
+  "application/dca-rft": {
+    "source": "iana"
+  },
+  "application/dcd": {
+    "source": "iana"
+  },
+  "application/dec-dx": {
+    "source": "iana"
+  },
+  "application/dialog-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/dicom": {
+    "source": "iana"
+  },
+  "application/dicom+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/dicom+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/dii": {
+    "source": "iana"
+  },
+  "application/dit": {
+    "source": "iana"
+  },
+  "application/dns": {
+    "source": "iana"
+  },
+  "application/dns+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/dns-message": {
+    "source": "iana"
+  },
+  "application/docbook+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["dbk"]
+  },
+  "application/dots+cbor": {
+    "source": "iana"
+  },
+  "application/dskpp+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/dssc+der": {
+    "source": "iana",
+    "extensions": ["dssc"]
+  },
+  "application/dssc+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xdssc"]
+  },
+  "application/dvcs": {
+    "source": "iana"
+  },
+  "application/ecmascript": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ecma","es"]
+  },
+  "application/edi-consent": {
+    "source": "iana"
+  },
+  "application/edi-x12": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/edifact": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/efi": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.cap+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/emergencycalldata.comment+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/emergencycalldata.control+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/emergencycalldata.deviceinfo+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/emergencycalldata.ecall.msd": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.providerinfo+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/emergencycalldata.serviceinfo+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/emergencycalldata.subscriberinfo+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/emergencycalldata.veds+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/emma+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["emma"]
+  },
+  "application/emotionml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["emotionml"]
+  },
+  "application/encaprtp": {
+    "source": "iana"
+  },
+  "application/epp+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/epub+zip": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["epub"]
+  },
+  "application/eshop": {
+    "source": "iana"
+  },
+  "application/exi": {
+    "source": "iana",
+    "extensions": ["exi"]
+  },
+  "application/expect-ct-report+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/fastinfoset": {
+    "source": "iana"
+  },
+  "application/fastsoap": {
+    "source": "iana"
+  },
+  "application/fdt+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["fdt"]
+  },
+  "application/fhir+json": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/fhir+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/fido.trusted-apps+json": {
+    "compressible": true
+  },
+  "application/fits": {
+    "source": "iana"
+  },
+  "application/flexfec": {
+    "source": "iana"
+  },
+  "application/font-sfnt": {
+    "source": "iana"
+  },
+  "application/font-tdpfr": {
+    "source": "iana",
+    "extensions": ["pfr"]
+  },
+  "application/font-woff": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/framework-attributes+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/geo+json": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["geojson"]
+  },
+  "application/geo+json-seq": {
+    "source": "iana"
+  },
+  "application/geopackage+sqlite3": {
+    "source": "iana"
+  },
+  "application/geoxacml+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/gltf-buffer": {
+    "source": "iana"
+  },
+  "application/gml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["gml"]
+  },
+  "application/gpx+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["gpx"]
+  },
+  "application/gxf": {
+    "source": "apache",
+    "extensions": ["gxf"]
+  },
+  "application/gzip": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["gz"]
+  },
+  "application/h224": {
+    "source": "iana"
+  },
+  "application/held+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/hjson": {
+    "extensions": ["hjson"]
+  },
+  "application/http": {
+    "source": "iana"
+  },
+  "application/hyperstudio": {
+    "source": "iana",
+    "extensions": ["stk"]
+  },
+  "application/ibe-key-request+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/ibe-pkg-reply+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/ibe-pp-data": {
+    "source": "iana"
+  },
+  "application/iges": {
+    "source": "iana"
+  },
+  "application/im-iscomposing+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/index": {
+    "source": "iana"
+  },
+  "application/index.cmd": {
+    "source": "iana"
+  },
+  "application/index.obj": {
+    "source": "iana"
+  },
+  "application/index.response": {
+    "source": "iana"
+  },
+  "application/index.vnd": {
+    "source": "iana"
+  },
+  "application/inkml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ink","inkml"]
+  },
+  "application/iotp": {
+    "source": "iana"
+  },
+  "application/ipfix": {
+    "source": "iana",
+    "extensions": ["ipfix"]
+  },
+  "application/ipp": {
+    "source": "iana"
+  },
+  "application/isup": {
+    "source": "iana"
+  },
+  "application/its+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["its"]
+  },
+  "application/java-archive": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["jar","war","ear"]
+  },
+  "application/java-serialized-object": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["ser"]
+  },
+  "application/java-vm": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["class"]
+  },
+  "application/javascript": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["js","mjs"]
+  },
+  "application/jf2feed+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/jose": {
+    "source": "iana"
+  },
+  "application/jose+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/jrd+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/json": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["json","map"]
+  },
+  "application/json-patch+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/json-seq": {
+    "source": "iana"
+  },
+  "application/json5": {
+    "extensions": ["json5"]
+  },
+  "application/jsonml+json": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["jsonml"]
+  },
+  "application/jwk+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/jwk-set+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/jwt": {
+    "source": "iana"
+  },
+  "application/kpml-request+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/kpml-response+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/ld+json": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["jsonld"]
+  },
+  "application/lgr+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["lgr"]
+  },
+  "application/link-format": {
+    "source": "iana"
+  },
+  "application/load-control+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/lost+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["lostxml"]
+  },
+  "application/lostsync+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/lpf+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/lxf": {
+    "source": "iana"
+  },
+  "application/mac-binhex40": {
+    "source": "iana",
+    "extensions": ["hqx"]
+  },
+  "application/mac-compactpro": {
+    "source": "apache",
+    "extensions": ["cpt"]
+  },
+  "application/macwriteii": {
+    "source": "iana"
+  },
+  "application/mads+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["mads"]
+  },
+  "application/manifest+json": {
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["webmanifest"]
+  },
+  "application/marc": {
+    "source": "iana",
+    "extensions": ["mrc"]
+  },
+  "application/marcxml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["mrcx"]
+  },
+  "application/mathematica": {
+    "source": "iana",
+    "extensions": ["ma","nb","mb"]
+  },
+  "application/mathml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["mathml"]
+  },
+  "application/mathml-content+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mathml-presentation+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-associated-procedure-description+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-deregister+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-envelope+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-msk+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-msk-response+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-protection-description+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-reception-report+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-register+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-register-response+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-schedule+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbms-user-service-description+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mbox": {
+    "source": "iana",
+    "extensions": ["mbox"]
+  },
+  "application/media-policy-dataset+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/media_control+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/mediaservercontrol+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["mscml"]
+  },
+  "application/merge-patch+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/metalink+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["metalink"]
+  },
+  "application/metalink4+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["meta4"]
+  },
+  "application/mets+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["mets"]
+  },
+  "application/mf4": {
+    "source": "iana"
+  },
+  "application/mikey": {
+    "source": "iana"
+  },
+  "application/mipc": {
+    "source": "iana"
+  },
+  "application/mmt-aei+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["maei"]
+  },
+  "application/mmt-usd+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["musd"]
+  },
+  "application/mods+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["mods"]
+  },
+  "application/moss-keys": {
+    "source": "iana"
+  },
+  "application/moss-signature": {
+    "source": "iana"
+  },
+  "application/mosskey-data": {
+    "source": "iana"
+  },
+  "application/mosskey-request": {
+    "source": "iana"
+  },
+  "application/mp21": {
+    "source": "iana",
+    "extensions": ["m21","mp21"]
+  },
+  "application/mp4": {
+    "source": "iana",
+    "extensions": ["mp4s","m4p"]
+  },
+  "application/mpeg4-generic": {
+    "source": "iana"
+  },
+  "application/mpeg4-iod": {
+    "source": "iana"
+  },
+  "application/mpeg4-iod-xmt": {
+    "source": "iana"
+  },
+  "application/mrb-consumer+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xdf"]
+  },
+  "application/mrb-publish+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xdf"]
+  },
+  "application/msc-ivr+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/msc-mixer+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/msword": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["doc","dot"]
+  },
+  "application/mud+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/multipart-core": {
+    "source": "iana"
+  },
+  "application/mxf": {
+    "source": "iana",
+    "extensions": ["mxf"]
+  },
+  "application/n-quads": {
+    "source": "iana",
+    "extensions": ["nq"]
+  },
+  "application/n-triples": {
+    "source": "iana",
+    "extensions": ["nt"]
+  },
+  "application/nasdata": {
+    "source": "iana"
+  },
+  "application/news-checkgroups": {
+    "source": "iana",
+    "charset": "US-ASCII"
+  },
+  "application/news-groupinfo": {
+    "source": "iana",
+    "charset": "US-ASCII"
+  },
+  "application/news-transmission": {
+    "source": "iana"
+  },
+  "application/nlsml+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/node": {
+    "source": "iana",
+    "extensions": ["cjs"]
+  },
+  "application/nss": {
+    "source": "iana"
+  },
+  "application/ocsp-request": {
+    "source": "iana"
+  },
+  "application/ocsp-response": {
+    "source": "iana"
+  },
+  "application/octet-stream": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]
+  },
+  "application/oda": {
+    "source": "iana",
+    "extensions": ["oda"]
+  },
+  "application/odm+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/odx": {
+    "source": "iana"
+  },
+  "application/oebps-package+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["opf"]
+  },
+  "application/ogg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["ogx"]
+  },
+  "application/omdoc+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["omdoc"]
+  },
+  "application/onenote": {
+    "source": "apache",
+    "extensions": ["onetoc","onetoc2","onetmp","onepkg"]
+  },
+  "application/opc-nodeset+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/oscore": {
+    "source": "iana"
+  },
+  "application/oxps": {
+    "source": "iana",
+    "extensions": ["oxps"]
+  },
+  "application/p2p-overlay+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["relo"]
+  },
+  "application/parityfec": {
+    "source": "iana"
+  },
+  "application/passport": {
+    "source": "iana"
+  },
+  "application/patch-ops-error+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xer"]
+  },
+  "application/pdf": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["pdf"]
+  },
+  "application/pdx": {
+    "source": "iana"
+  },
+  "application/pem-certificate-chain": {
+    "source": "iana"
+  },
+  "application/pgp-encrypted": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["pgp"]
+  },
+  "application/pgp-keys": {
+    "source": "iana"
+  },
+  "application/pgp-signature": {
+    "source": "iana",
+    "extensions": ["asc","sig"]
+  },
+  "application/pics-rules": {
+    "source": "apache",
+    "extensions": ["prf"]
+  },
+  "application/pidf+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/pidf-diff+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/pkcs10": {
+    "source": "iana",
+    "extensions": ["p10"]
+  },
+  "application/pkcs12": {
+    "source": "iana"
+  },
+  "application/pkcs7-mime": {
+    "source": "iana",
+    "extensions": ["p7m","p7c"]
+  },
+  "application/pkcs7-signature": {
+    "source": "iana",
+    "extensions": ["p7s"]
+  },
+  "application/pkcs8": {
+    "source": "iana",
+    "extensions": ["p8"]
+  },
+  "application/pkcs8-encrypted": {
+    "source": "iana"
+  },
+  "application/pkix-attr-cert": {
+    "source": "iana",
+    "extensions": ["ac"]
+  },
+  "application/pkix-cert": {
+    "source": "iana",
+    "extensions": ["cer"]
+  },
+  "application/pkix-crl": {
+    "source": "iana",
+    "extensions": ["crl"]
+  },
+  "application/pkix-pkipath": {
+    "source": "iana",
+    "extensions": ["pkipath"]
+  },
+  "application/pkixcmp": {
+    "source": "iana",
+    "extensions": ["pki"]
+  },
+  "application/pls+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["pls"]
+  },
+  "application/poc-settings+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/postscript": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ai","eps","ps"]
+  },
+  "application/ppsp-tracker+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/provenance+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["provx"]
+  },
+  "application/prs.alvestrand.titrax-sheet": {
+    "source": "iana"
+  },
+  "application/prs.cww": {
+    "source": "iana",
+    "extensions": ["cww"]
+  },
+  "application/prs.hpub+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/prs.nprend": {
+    "source": "iana"
+  },
+  "application/prs.plucker": {
+    "source": "iana"
+  },
+  "application/prs.rdf-xml-crypt": {
+    "source": "iana"
+  },
+  "application/prs.xsf+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/pskc+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["pskcxml"]
+  },
+  "application/pvd+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/qsig": {
+    "source": "iana"
+  },
+  "application/raml+yaml": {
+    "compressible": true,
+    "extensions": ["raml"]
+  },
+  "application/raptorfec": {
+    "source": "iana"
+  },
+  "application/rdap+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/rdf+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rdf","owl"]
+  },
+  "application/reginfo+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rif"]
+  },
+  "application/relax-ng-compact-syntax": {
+    "source": "iana",
+    "extensions": ["rnc"]
+  },
+  "application/remote-printing": {
+    "source": "iana"
+  },
+  "application/reputon+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/resource-lists+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rl"]
+  },
+  "application/resource-lists-diff+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rld"]
+  },
+  "application/rfc+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/riscos": {
+    "source": "iana"
+  },
+  "application/rlmi+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/rls-services+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rs"]
+  },
+  "application/route-apd+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rapd"]
+  },
+  "application/route-s-tsid+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["sls"]
+  },
+  "application/route-usd+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rusd"]
+  },
+  "application/rpki-ghostbusters": {
+    "source": "iana",
+    "extensions": ["gbr"]
+  },
+  "application/rpki-manifest": {
+    "source": "iana",
+    "extensions": ["mft"]
+  },
+  "application/rpki-publication": {
+    "source": "iana"
+  },
+  "application/rpki-roa": {
+    "source": "iana",
+    "extensions": ["roa"]
+  },
+  "application/rpki-updown": {
+    "source": "iana"
+  },
+  "application/rsd+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["rsd"]
+  },
+  "application/rss+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["rss"]
+  },
+  "application/rtf": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rtf"]
+  },
+  "application/rtploopback": {
+    "source": "iana"
+  },
+  "application/rtx": {
+    "source": "iana"
+  },
+  "application/samlassertion+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/samlmetadata+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/sarif+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/sbe": {
+    "source": "iana"
+  },
+  "application/sbml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["sbml"]
+  },
+  "application/scaip+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/scim+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/scvp-cv-request": {
+    "source": "iana",
+    "extensions": ["scq"]
+  },
+  "application/scvp-cv-response": {
+    "source": "iana",
+    "extensions": ["scs"]
+  },
+  "application/scvp-vp-request": {
+    "source": "iana",
+    "extensions": ["spq"]
+  },
+  "application/scvp-vp-response": {
+    "source": "iana",
+    "extensions": ["spp"]
+  },
+  "application/sdp": {
+    "source": "iana",
+    "extensions": ["sdp"]
+  },
+  "application/secevent+jwt": {
+    "source": "iana"
+  },
+  "application/senml+cbor": {
+    "source": "iana"
+  },
+  "application/senml+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/senml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["senmlx"]
+  },
+  "application/senml-etch+cbor": {
+    "source": "iana"
+  },
+  "application/senml-etch+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/senml-exi": {
+    "source": "iana"
+  },
+  "application/sensml+cbor": {
+    "source": "iana"
+  },
+  "application/sensml+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/sensml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["sensmlx"]
+  },
+  "application/sensml-exi": {
+    "source": "iana"
+  },
+  "application/sep+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/sep-exi": {
+    "source": "iana"
+  },
+  "application/session-info": {
+    "source": "iana"
+  },
+  "application/set-payment": {
+    "source": "iana"
+  },
+  "application/set-payment-initiation": {
+    "source": "iana",
+    "extensions": ["setpay"]
+  },
+  "application/set-registration": {
+    "source": "iana"
+  },
+  "application/set-registration-initiation": {
+    "source": "iana",
+    "extensions": ["setreg"]
+  },
+  "application/sgml": {
+    "source": "iana"
+  },
+  "application/sgml-open-catalog": {
+    "source": "iana"
+  },
+  "application/shf+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["shf"]
+  },
+  "application/sieve": {
+    "source": "iana",
+    "extensions": ["siv","sieve"]
+  },
+  "application/simple-filter+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/simple-message-summary": {
+    "source": "iana"
+  },
+  "application/simplesymbolcontainer": {
+    "source": "iana"
+  },
+  "application/sipc": {
+    "source": "iana"
+  },
+  "application/slate": {
+    "source": "iana"
+  },
+  "application/smil": {
+    "source": "iana"
+  },
+  "application/smil+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["smi","smil"]
+  },
+  "application/smpte336m": {
+    "source": "iana"
+  },
+  "application/soap+fastinfoset": {
+    "source": "iana"
+  },
+  "application/soap+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/sparql-query": {
+    "source": "iana",
+    "extensions": ["rq"]
+  },
+  "application/sparql-results+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["srx"]
+  },
+  "application/spirits-event+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/sql": {
+    "source": "iana"
+  },
+  "application/srgs": {
+    "source": "iana",
+    "extensions": ["gram"]
+  },
+  "application/srgs+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["grxml"]
+  },
+  "application/sru+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["sru"]
+  },
+  "application/ssdl+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["ssdl"]
+  },
+  "application/ssml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ssml"]
+  },
+  "application/stix+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/swid+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["swidtag"]
+  },
+  "application/tamp-apex-update": {
+    "source": "iana"
+  },
+  "application/tamp-apex-update-confirm": {
+    "source": "iana"
+  },
+  "application/tamp-community-update": {
+    "source": "iana"
+  },
+  "application/tamp-community-update-confirm": {
+    "source": "iana"
+  },
+  "application/tamp-error": {
+    "source": "iana"
+  },
+  "application/tamp-sequence-adjust": {
+    "source": "iana"
+  },
+  "application/tamp-sequence-adjust-confirm": {
+    "source": "iana"
+  },
+  "application/tamp-status-query": {
+    "source": "iana"
+  },
+  "application/tamp-status-response": {
+    "source": "iana"
+  },
+  "application/tamp-update": {
+    "source": "iana"
+  },
+  "application/tamp-update-confirm": {
+    "source": "iana"
+  },
+  "application/tar": {
+    "compressible": true
+  },
+  "application/taxii+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/td+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/tei+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["tei","teicorpus"]
+  },
+  "application/tetra_isi": {
+    "source": "iana"
+  },
+  "application/thraud+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["tfi"]
+  },
+  "application/timestamp-query": {
+    "source": "iana"
+  },
+  "application/timestamp-reply": {
+    "source": "iana"
+  },
+  "application/timestamped-data": {
+    "source": "iana",
+    "extensions": ["tsd"]
+  },
+  "application/tlsrpt+gzip": {
+    "source": "iana"
+  },
+  "application/tlsrpt+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/tnauthlist": {
+    "source": "iana"
+  },
+  "application/toml": {
+    "compressible": true,
+    "extensions": ["toml"]
+  },
+  "application/trickle-ice-sdpfrag": {
+    "source": "iana"
+  },
+  "application/trig": {
+    "source": "iana"
+  },
+  "application/ttml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ttml"]
+  },
+  "application/tve-trigger": {
+    "source": "iana"
+  },
+  "application/tzif": {
+    "source": "iana"
+  },
+  "application/tzif-leap": {
+    "source": "iana"
+  },
+  "application/ubjson": {
+    "compressible": false,
+    "extensions": ["ubj"]
+  },
+  "application/ulpfec": {
+    "source": "iana"
+  },
+  "application/urc-grpsheet+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/urc-ressheet+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rsheet"]
+  },
+  "application/urc-targetdesc+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["td"]
+  },
+  "application/urc-uisocketdesc+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vcard+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vcard+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vemmi": {
+    "source": "iana"
+  },
+  "application/vividence.scriptfile": {
+    "source": "apache"
+  },
+  "application/vnd.1000minds.decision-model+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["1km"]
+  },
+  "application/vnd.3gpp-prose+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp-prose-pc3ch+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp-v2x-local-service-information": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.access-transfer-events+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.bsf+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.gmop+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mc-signalling-ear": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.mcdata-affiliation-command+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcdata-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcdata-payload": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.mcdata-service-config+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcdata-signalling": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.mcdata-ue-config+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcdata-user-profile+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-affiliation-command+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-floor-request+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-location-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-service-config+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-signed+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-ue-config+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-ue-init-config+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcptt-user-profile+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcvideo-affiliation-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcvideo-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcvideo-location-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcvideo-service-config+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcvideo-transmission-request+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcvideo-ue-config+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mcvideo-user-profile+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.mid-call+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.pic-bw-large": {
+    "source": "iana",
+    "extensions": ["plb"]
+  },
+  "application/vnd.3gpp.pic-bw-small": {
+    "source": "iana",
+    "extensions": ["psb"]
+  },
+  "application/vnd.3gpp.pic-bw-var": {
+    "source": "iana",
+    "extensions": ["pvb"]
+  },
+  "application/vnd.3gpp.sms": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp.sms+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.srvcc-ext+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.srvcc-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.state-and-event-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp.ussd+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp2.bcmcsinfo+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.3gpp2.sms": {
+    "source": "iana"
+  },
+  "application/vnd.3gpp2.tcap": {
+    "source": "iana",
+    "extensions": ["tcap"]
+  },
+  "application/vnd.3lightssoftware.imagescal": {
+    "source": "iana"
+  },
+  "application/vnd.3m.post-it-notes": {
+    "source": "iana",
+    "extensions": ["pwn"]
+  },
+  "application/vnd.accpac.simply.aso": {
+    "source": "iana",
+    "extensions": ["aso"]
+  },
+  "application/vnd.accpac.simply.imp": {
+    "source": "iana",
+    "extensions": ["imp"]
+  },
+  "application/vnd.acucobol": {
+    "source": "iana",
+    "extensions": ["acu"]
+  },
+  "application/vnd.acucorp": {
+    "source": "iana",
+    "extensions": ["atc","acutc"]
+  },
+  "application/vnd.adobe.air-application-installer-package+zip": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["air"]
+  },
+  "application/vnd.adobe.flash.movie": {
+    "source": "iana"
+  },
+  "application/vnd.adobe.formscentral.fcdt": {
+    "source": "iana",
+    "extensions": ["fcdt"]
+  },
+  "application/vnd.adobe.fxp": {
+    "source": "iana",
+    "extensions": ["fxp","fxpl"]
+  },
+  "application/vnd.adobe.partial-upload": {
+    "source": "iana"
+  },
+  "application/vnd.adobe.xdp+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xdp"]
+  },
+  "application/vnd.adobe.xfdf": {
+    "source": "iana",
+    "extensions": ["xfdf"]
+  },
+  "application/vnd.aether.imp": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.afplinedata": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.afplinedata-pagedef": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.foca-charset": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.foca-codedfont": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.foca-codepage": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.modca": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.modca-formdef": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.modca-mediummap": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.modca-objectcontainer": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.modca-overlay": {
+    "source": "iana"
+  },
+  "application/vnd.afpc.modca-pagesegment": {
+    "source": "iana"
+  },
+  "application/vnd.ah-barcode": {
+    "source": "iana"
+  },
+  "application/vnd.ahead.space": {
+    "source": "iana",
+    "extensions": ["ahead"]
+  },
+  "application/vnd.airzip.filesecure.azf": {
+    "source": "iana",
+    "extensions": ["azf"]
+  },
+  "application/vnd.airzip.filesecure.azs": {
+    "source": "iana",
+    "extensions": ["azs"]
+  },
+  "application/vnd.amadeus+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.amazon.ebook": {
+    "source": "apache",
+    "extensions": ["azw"]
+  },
+  "application/vnd.amazon.mobi8-ebook": {
+    "source": "iana"
+  },
+  "application/vnd.americandynamics.acc": {
+    "source": "iana",
+    "extensions": ["acc"]
+  },
+  "application/vnd.amiga.ami": {
+    "source": "iana",
+    "extensions": ["ami"]
+  },
+  "application/vnd.amundsen.maze+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.android.ota": {
+    "source": "iana"
+  },
+  "application/vnd.android.package-archive": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["apk"]
+  },
+  "application/vnd.anki": {
+    "source": "iana"
+  },
+  "application/vnd.anser-web-certificate-issue-initiation": {
+    "source": "iana",
+    "extensions": ["cii"]
+  },
+  "application/vnd.anser-web-funds-transfer-initiation": {
+    "source": "apache",
+    "extensions": ["fti"]
+  },
+  "application/vnd.antix.game-component": {
+    "source": "iana",
+    "extensions": ["atx"]
+  },
+  "application/vnd.apache.thrift.binary": {
+    "source": "iana"
+  },
+  "application/vnd.apache.thrift.compact": {
+    "source": "iana"
+  },
+  "application/vnd.apache.thrift.json": {
+    "source": "iana"
+  },
+  "application/vnd.api+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.aplextor.warrp+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.apothekende.reservation+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.apple.installer+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["mpkg"]
+  },
+  "application/vnd.apple.keynote": {
+    "source": "iana",
+    "extensions": ["key"]
+  },
+  "application/vnd.apple.mpegurl": {
+    "source": "iana",
+    "extensions": ["m3u8"]
+  },
+  "application/vnd.apple.numbers": {
+    "source": "iana",
+    "extensions": ["numbers"]
+  },
+  "application/vnd.apple.pages": {
+    "source": "iana",
+    "extensions": ["pages"]
+  },
+  "application/vnd.apple.pkpass": {
+    "compressible": false,
+    "extensions": ["pkpass"]
+  },
+  "application/vnd.arastra.swi": {
+    "source": "iana"
+  },
+  "application/vnd.aristanetworks.swi": {
+    "source": "iana",
+    "extensions": ["swi"]
+  },
+  "application/vnd.artisan+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.artsquare": {
+    "source": "iana"
+  },
+  "application/vnd.astraea-software.iota": {
+    "source": "iana",
+    "extensions": ["iota"]
+  },
+  "application/vnd.audiograph": {
+    "source": "iana",
+    "extensions": ["aep"]
+  },
+  "application/vnd.autopackage": {
+    "source": "iana"
+  },
+  "application/vnd.avalon+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.avistar+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.balsamiq.bmml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["bmml"]
+  },
+  "application/vnd.balsamiq.bmpr": {
+    "source": "iana"
+  },
+  "application/vnd.banana-accounting": {
+    "source": "iana"
+  },
+  "application/vnd.bbf.usp.error": {
+    "source": "iana"
+  },
+  "application/vnd.bbf.usp.msg": {
+    "source": "iana"
+  },
+  "application/vnd.bbf.usp.msg+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.bekitzur-stech+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.bint.med-content": {
+    "source": "iana"
+  },
+  "application/vnd.biopax.rdf+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.blink-idb-value-wrapper": {
+    "source": "iana"
+  },
+  "application/vnd.blueice.multipass": {
+    "source": "iana",
+    "extensions": ["mpm"]
+  },
+  "application/vnd.bluetooth.ep.oob": {
+    "source": "iana"
+  },
+  "application/vnd.bluetooth.le.oob": {
+    "source": "iana"
+  },
+  "application/vnd.bmi": {
+    "source": "iana",
+    "extensions": ["bmi"]
+  },
+  "application/vnd.bpf": {
+    "source": "iana"
+  },
+  "application/vnd.bpf3": {
+    "source": "iana"
+  },
+  "application/vnd.businessobjects": {
+    "source": "iana",
+    "extensions": ["rep"]
+  },
+  "application/vnd.byu.uapi+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.cab-jscript": {
+    "source": "iana"
+  },
+  "application/vnd.canon-cpdl": {
+    "source": "iana"
+  },
+  "application/vnd.canon-lips": {
+    "source": "iana"
+  },
+  "application/vnd.capasystems-pg+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.cendio.thinlinc.clientconf": {
+    "source": "iana"
+  },
+  "application/vnd.century-systems.tcp_stream": {
+    "source": "iana"
+  },
+  "application/vnd.chemdraw+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["cdxml"]
+  },
+  "application/vnd.chess-pgn": {
+    "source": "iana"
+  },
+  "application/vnd.chipnuts.karaoke-mmd": {
+    "source": "iana",
+    "extensions": ["mmd"]
+  },
+  "application/vnd.ciedi": {
+    "source": "iana"
+  },
+  "application/vnd.cinderella": {
+    "source": "iana",
+    "extensions": ["cdy"]
+  },
+  "application/vnd.cirpack.isdn-ext": {
+    "source": "iana"
+  },
+  "application/vnd.citationstyles.style+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["csl"]
+  },
+  "application/vnd.claymore": {
+    "source": "iana",
+    "extensions": ["cla"]
+  },
+  "application/vnd.cloanto.rp9": {
+    "source": "iana",
+    "extensions": ["rp9"]
+  },
+  "application/vnd.clonk.c4group": {
+    "source": "iana",
+    "extensions": ["c4g","c4d","c4f","c4p","c4u"]
+  },
+  "application/vnd.cluetrust.cartomobile-config": {
+    "source": "iana",
+    "extensions": ["c11amc"]
+  },
+  "application/vnd.cluetrust.cartomobile-config-pkg": {
+    "source": "iana",
+    "extensions": ["c11amz"]
+  },
+  "application/vnd.coffeescript": {
+    "source": "iana"
+  },
+  "application/vnd.collabio.xodocuments.document": {
+    "source": "iana"
+  },
+  "application/vnd.collabio.xodocuments.document-template": {
+    "source": "iana"
+  },
+  "application/vnd.collabio.xodocuments.presentation": {
+    "source": "iana"
+  },
+  "application/vnd.collabio.xodocuments.presentation-template": {
+    "source": "iana"
+  },
+  "application/vnd.collabio.xodocuments.spreadsheet": {
+    "source": "iana"
+  },
+  "application/vnd.collabio.xodocuments.spreadsheet-template": {
+    "source": "iana"
+  },
+  "application/vnd.collection+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.collection.doc+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.collection.next+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.comicbook+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.comicbook-rar": {
+    "source": "iana"
+  },
+  "application/vnd.commerce-battelle": {
+    "source": "iana"
+  },
+  "application/vnd.commonspace": {
+    "source": "iana",
+    "extensions": ["csp"]
+  },
+  "application/vnd.contact.cmsg": {
+    "source": "iana",
+    "extensions": ["cdbcmsg"]
+  },
+  "application/vnd.coreos.ignition+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.cosmocaller": {
+    "source": "iana",
+    "extensions": ["cmc"]
+  },
+  "application/vnd.crick.clicker": {
+    "source": "iana",
+    "extensions": ["clkx"]
+  },
+  "application/vnd.crick.clicker.keyboard": {
+    "source": "iana",
+    "extensions": ["clkk"]
+  },
+  "application/vnd.crick.clicker.palette": {
+    "source": "iana",
+    "extensions": ["clkp"]
+  },
+  "application/vnd.crick.clicker.template": {
+    "source": "iana",
+    "extensions": ["clkt"]
+  },
+  "application/vnd.crick.clicker.wordbank": {
+    "source": "iana",
+    "extensions": ["clkw"]
+  },
+  "application/vnd.criticaltools.wbs+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["wbs"]
+  },
+  "application/vnd.cryptii.pipe+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.crypto-shade-file": {
+    "source": "iana"
+  },
+  "application/vnd.ctc-posml": {
+    "source": "iana",
+    "extensions": ["pml"]
+  },
+  "application/vnd.ctct.ws+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.cups-pdf": {
+    "source": "iana"
+  },
+  "application/vnd.cups-postscript": {
+    "source": "iana"
+  },
+  "application/vnd.cups-ppd": {
+    "source": "iana",
+    "extensions": ["ppd"]
+  },
+  "application/vnd.cups-raster": {
+    "source": "iana"
+  },
+  "application/vnd.cups-raw": {
+    "source": "iana"
+  },
+  "application/vnd.curl": {
+    "source": "iana"
+  },
+  "application/vnd.curl.car": {
+    "source": "apache",
+    "extensions": ["car"]
+  },
+  "application/vnd.curl.pcurl": {
+    "source": "apache",
+    "extensions": ["pcurl"]
+  },
+  "application/vnd.cyan.dean.root+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.cybank": {
+    "source": "iana"
+  },
+  "application/vnd.d2l.coursepackage1p0+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.d3m-dataset": {
+    "source": "iana"
+  },
+  "application/vnd.d3m-problem": {
+    "source": "iana"
+  },
+  "application/vnd.dart": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["dart"]
+  },
+  "application/vnd.data-vision.rdz": {
+    "source": "iana",
+    "extensions": ["rdz"]
+  },
+  "application/vnd.datapackage+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dataresource+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dbf": {
+    "source": "iana",
+    "extensions": ["dbf"]
+  },
+  "application/vnd.debian.binary-package": {
+    "source": "iana"
+  },
+  "application/vnd.dece.data": {
+    "source": "iana",
+    "extensions": ["uvf","uvvf","uvd","uvvd"]
+  },
+  "application/vnd.dece.ttml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["uvt","uvvt"]
+  },
+  "application/vnd.dece.unspecified": {
+    "source": "iana",
+    "extensions": ["uvx","uvvx"]
+  },
+  "application/vnd.dece.zip": {
+    "source": "iana",
+    "extensions": ["uvz","uvvz"]
+  },
+  "application/vnd.denovo.fcselayout-link": {
+    "source": "iana",
+    "extensions": ["fe_launch"]
+  },
+  "application/vnd.desmume.movie": {
+    "source": "iana"
+  },
+  "application/vnd.dir-bi.plate-dl-nosuffix": {
+    "source": "iana"
+  },
+  "application/vnd.dm.delegation+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dna": {
+    "source": "iana",
+    "extensions": ["dna"]
+  },
+  "application/vnd.document+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dolby.mlp": {
+    "source": "apache",
+    "extensions": ["mlp"]
+  },
+  "application/vnd.dolby.mobile.1": {
+    "source": "iana"
+  },
+  "application/vnd.dolby.mobile.2": {
+    "source": "iana"
+  },
+  "application/vnd.doremir.scorecloud-binary-document": {
+    "source": "iana"
+  },
+  "application/vnd.dpgraph": {
+    "source": "iana",
+    "extensions": ["dpg"]
+  },
+  "application/vnd.dreamfactory": {
+    "source": "iana",
+    "extensions": ["dfac"]
+  },
+  "application/vnd.drive+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ds-keypoint": {
+    "source": "apache",
+    "extensions": ["kpxx"]
+  },
+  "application/vnd.dtg.local": {
+    "source": "iana"
+  },
+  "application/vnd.dtg.local.flash": {
+    "source": "iana"
+  },
+  "application/vnd.dtg.local.html": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ait": {
+    "source": "iana",
+    "extensions": ["ait"]
+  },
+  "application/vnd.dvb.dvbisl+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dvb.dvbj": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.esgcontainer": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcdftnotifaccess": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcesgaccess": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcesgaccess2": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcesgpdd": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.ipdcroaming": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.iptv.alfec-base": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.iptv.alfec-enhancement": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.notif-aggregate-root+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dvb.notif-container+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dvb.notif-generic+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dvb.notif-ia-msglist+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dvb.notif-ia-registration-request+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dvb.notif-ia-registration-response+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dvb.notif-init+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.dvb.pfr": {
+    "source": "iana"
+  },
+  "application/vnd.dvb.service": {
+    "source": "iana",
+    "extensions": ["svc"]
+  },
+  "application/vnd.dxr": {
+    "source": "iana"
+  },
+  "application/vnd.dynageo": {
+    "source": "iana",
+    "extensions": ["geo"]
+  },
+  "application/vnd.dzr": {
+    "source": "iana"
+  },
+  "application/vnd.easykaraoke.cdgdownload": {
+    "source": "iana"
+  },
+  "application/vnd.ecdis-update": {
+    "source": "iana"
+  },
+  "application/vnd.ecip.rlp": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.chart": {
+    "source": "iana",
+    "extensions": ["mag"]
+  },
+  "application/vnd.ecowin.filerequest": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.fileupdate": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.series": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.seriesrequest": {
+    "source": "iana"
+  },
+  "application/vnd.ecowin.seriesupdate": {
+    "source": "iana"
+  },
+  "application/vnd.efi.img": {
+    "source": "iana"
+  },
+  "application/vnd.efi.iso": {
+    "source": "iana"
+  },
+  "application/vnd.emclient.accessrequest+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.enliven": {
+    "source": "iana",
+    "extensions": ["nml"]
+  },
+  "application/vnd.enphase.envoy": {
+    "source": "iana"
+  },
+  "application/vnd.eprints.data+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.epson.esf": {
+    "source": "iana",
+    "extensions": ["esf"]
+  },
+  "application/vnd.epson.msf": {
+    "source": "iana",
+    "extensions": ["msf"]
+  },
+  "application/vnd.epson.quickanime": {
+    "source": "iana",
+    "extensions": ["qam"]
+  },
+  "application/vnd.epson.salt": {
+    "source": "iana",
+    "extensions": ["slt"]
+  },
+  "application/vnd.epson.ssf": {
+    "source": "iana",
+    "extensions": ["ssf"]
+  },
+  "application/vnd.ericsson.quickcall": {
+    "source": "iana"
+  },
+  "application/vnd.espass-espass+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.eszigno3+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["es3","et3"]
+  },
+  "application/vnd.etsi.aoc+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.asic-e+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.etsi.asic-s+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.etsi.cug+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.iptvcommand+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.iptvdiscovery+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.iptvprofile+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.iptvsad-bc+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.iptvsad-cod+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.iptvsad-npvr+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.iptvservice+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.iptvsync+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.iptvueprofile+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.mcid+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.mheg5": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.overload-control-policy-dataset+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.pstn+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.sci+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.simservs+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.timestamp-token": {
+    "source": "iana"
+  },
+  "application/vnd.etsi.tsl+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.etsi.tsl.der": {
+    "source": "iana"
+  },
+  "application/vnd.eudora.data": {
+    "source": "iana"
+  },
+  "application/vnd.evolv.ecig.profile": {
+    "source": "iana"
+  },
+  "application/vnd.evolv.ecig.settings": {
+    "source": "iana"
+  },
+  "application/vnd.evolv.ecig.theme": {
+    "source": "iana"
+  },
+  "application/vnd.exstream-empower+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.exstream-package": {
+    "source": "iana"
+  },
+  "application/vnd.ezpix-album": {
+    "source": "iana",
+    "extensions": ["ez2"]
+  },
+  "application/vnd.ezpix-package": {
+    "source": "iana",
+    "extensions": ["ez3"]
+  },
+  "application/vnd.f-secure.mobile": {
+    "source": "iana"
+  },
+  "application/vnd.fastcopy-disk-image": {
+    "source": "iana"
+  },
+  "application/vnd.fdf": {
+    "source": "iana",
+    "extensions": ["fdf"]
+  },
+  "application/vnd.fdsn.mseed": {
+    "source": "iana",
+    "extensions": ["mseed"]
+  },
+  "application/vnd.fdsn.seed": {
+    "source": "iana",
+    "extensions": ["seed","dataless"]
+  },
+  "application/vnd.ffsns": {
+    "source": "iana"
+  },
+  "application/vnd.ficlab.flb+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.filmit.zfc": {
+    "source": "iana"
+  },
+  "application/vnd.fints": {
+    "source": "iana"
+  },
+  "application/vnd.firemonkeys.cloudcell": {
+    "source": "iana"
+  },
+  "application/vnd.flographit": {
+    "source": "iana",
+    "extensions": ["gph"]
+  },
+  "application/vnd.fluxtime.clip": {
+    "source": "iana",
+    "extensions": ["ftc"]
+  },
+  "application/vnd.font-fontforge-sfd": {
+    "source": "iana"
+  },
+  "application/vnd.framemaker": {
+    "source": "iana",
+    "extensions": ["fm","frame","maker","book"]
+  },
+  "application/vnd.frogans.fnc": {
+    "source": "iana",
+    "extensions": ["fnc"]
+  },
+  "application/vnd.frogans.ltf": {
+    "source": "iana",
+    "extensions": ["ltf"]
+  },
+  "application/vnd.fsc.weblaunch": {
+    "source": "iana",
+    "extensions": ["fsc"]
+  },
+  "application/vnd.fujitsu.oasys": {
+    "source": "iana",
+    "extensions": ["oas"]
+  },
+  "application/vnd.fujitsu.oasys2": {
+    "source": "iana",
+    "extensions": ["oa2"]
+  },
+  "application/vnd.fujitsu.oasys3": {
+    "source": "iana",
+    "extensions": ["oa3"]
+  },
+  "application/vnd.fujitsu.oasysgp": {
+    "source": "iana",
+    "extensions": ["fg5"]
+  },
+  "application/vnd.fujitsu.oasysprs": {
+    "source": "iana",
+    "extensions": ["bh2"]
+  },
+  "application/vnd.fujixerox.art-ex": {
+    "source": "iana"
+  },
+  "application/vnd.fujixerox.art4": {
+    "source": "iana"
+  },
+  "application/vnd.fujixerox.ddd": {
+    "source": "iana",
+    "extensions": ["ddd"]
+  },
+  "application/vnd.fujixerox.docuworks": {
+    "source": "iana",
+    "extensions": ["xdw"]
+  },
+  "application/vnd.fujixerox.docuworks.binder": {
+    "source": "iana",
+    "extensions": ["xbd"]
+  },
+  "application/vnd.fujixerox.docuworks.container": {
+    "source": "iana"
+  },
+  "application/vnd.fujixerox.hbpl": {
+    "source": "iana"
+  },
+  "application/vnd.fut-misnet": {
+    "source": "iana"
+  },
+  "application/vnd.futoin+cbor": {
+    "source": "iana"
+  },
+  "application/vnd.futoin+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.fuzzysheet": {
+    "source": "iana",
+    "extensions": ["fzs"]
+  },
+  "application/vnd.genomatix.tuxedo": {
+    "source": "iana",
+    "extensions": ["txd"]
+  },
+  "application/vnd.gentics.grd+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.geo+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.geocube+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.geogebra.file": {
+    "source": "iana",
+    "extensions": ["ggb"]
+  },
+  "application/vnd.geogebra.tool": {
+    "source": "iana",
+    "extensions": ["ggt"]
+  },
+  "application/vnd.geometry-explorer": {
+    "source": "iana",
+    "extensions": ["gex","gre"]
+  },
+  "application/vnd.geonext": {
+    "source": "iana",
+    "extensions": ["gxt"]
+  },
+  "application/vnd.geoplan": {
+    "source": "iana",
+    "extensions": ["g2w"]
+  },
+  "application/vnd.geospace": {
+    "source": "iana",
+    "extensions": ["g3w"]
+  },
+  "application/vnd.gerber": {
+    "source": "iana"
+  },
+  "application/vnd.globalplatform.card-content-mgt": {
+    "source": "iana"
+  },
+  "application/vnd.globalplatform.card-content-mgt-response": {
+    "source": "iana"
+  },
+  "application/vnd.gmx": {
+    "source": "iana",
+    "extensions": ["gmx"]
+  },
+  "application/vnd.google-apps.document": {
+    "compressible": false,
+    "extensions": ["gdoc"]
+  },
+  "application/vnd.google-apps.presentation": {
+    "compressible": false,
+    "extensions": ["gslides"]
+  },
+  "application/vnd.google-apps.spreadsheet": {
+    "compressible": false,
+    "extensions": ["gsheet"]
+  },
+  "application/vnd.google-earth.kml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["kml"]
+  },
+  "application/vnd.google-earth.kmz": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["kmz"]
+  },
+  "application/vnd.gov.sk.e-form+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.gov.sk.e-form+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.gov.sk.xmldatacontainer+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.grafeq": {
+    "source": "iana",
+    "extensions": ["gqf","gqs"]
+  },
+  "application/vnd.gridmp": {
+    "source": "iana"
+  },
+  "application/vnd.groove-account": {
+    "source": "iana",
+    "extensions": ["gac"]
+  },
+  "application/vnd.groove-help": {
+    "source": "iana",
+    "extensions": ["ghf"]
+  },
+  "application/vnd.groove-identity-message": {
+    "source": "iana",
+    "extensions": ["gim"]
+  },
+  "application/vnd.groove-injector": {
+    "source": "iana",
+    "extensions": ["grv"]
+  },
+  "application/vnd.groove-tool-message": {
+    "source": "iana",
+    "extensions": ["gtm"]
+  },
+  "application/vnd.groove-tool-template": {
+    "source": "iana",
+    "extensions": ["tpl"]
+  },
+  "application/vnd.groove-vcard": {
+    "source": "iana",
+    "extensions": ["vcg"]
+  },
+  "application/vnd.hal+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.hal+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["hal"]
+  },
+  "application/vnd.handheld-entertainment+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["zmm"]
+  },
+  "application/vnd.hbci": {
+    "source": "iana",
+    "extensions": ["hbci"]
+  },
+  "application/vnd.hc+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.hcl-bireports": {
+    "source": "iana"
+  },
+  "application/vnd.hdt": {
+    "source": "iana"
+  },
+  "application/vnd.heroku+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.hhe.lesson-player": {
+    "source": "iana",
+    "extensions": ["les"]
+  },
+  "application/vnd.hp-hpgl": {
+    "source": "iana",
+    "extensions": ["hpgl"]
+  },
+  "application/vnd.hp-hpid": {
+    "source": "iana",
+    "extensions": ["hpid"]
+  },
+  "application/vnd.hp-hps": {
+    "source": "iana",
+    "extensions": ["hps"]
+  },
+  "application/vnd.hp-jlyt": {
+    "source": "iana",
+    "extensions": ["jlt"]
+  },
+  "application/vnd.hp-pcl": {
+    "source": "iana",
+    "extensions": ["pcl"]
+  },
+  "application/vnd.hp-pclxl": {
+    "source": "iana",
+    "extensions": ["pclxl"]
+  },
+  "application/vnd.httphone": {
+    "source": "iana"
+  },
+  "application/vnd.hydrostatix.sof-data": {
+    "source": "iana",
+    "extensions": ["sfd-hdstx"]
+  },
+  "application/vnd.hyper+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.hyper-item+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.hyperdrive+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.hzn-3d-crossword": {
+    "source": "iana"
+  },
+  "application/vnd.ibm.afplinedata": {
+    "source": "iana"
+  },
+  "application/vnd.ibm.electronic-media": {
+    "source": "iana"
+  },
+  "application/vnd.ibm.minipay": {
+    "source": "iana",
+    "extensions": ["mpy"]
+  },
+  "application/vnd.ibm.modcap": {
+    "source": "iana",
+    "extensions": ["afp","listafp","list3820"]
+  },
+  "application/vnd.ibm.rights-management": {
+    "source": "iana",
+    "extensions": ["irm"]
+  },
+  "application/vnd.ibm.secure-container": {
+    "source": "iana",
+    "extensions": ["sc"]
+  },
+  "application/vnd.iccprofile": {
+    "source": "iana",
+    "extensions": ["icc","icm"]
+  },
+  "application/vnd.ieee.1905": {
+    "source": "iana"
+  },
+  "application/vnd.igloader": {
+    "source": "iana",
+    "extensions": ["igl"]
+  },
+  "application/vnd.imagemeter.folder+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.imagemeter.image+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.immervision-ivp": {
+    "source": "iana",
+    "extensions": ["ivp"]
+  },
+  "application/vnd.immervision-ivu": {
+    "source": "iana",
+    "extensions": ["ivu"]
+  },
+  "application/vnd.ims.imsccv1p1": {
+    "source": "iana"
+  },
+  "application/vnd.ims.imsccv1p2": {
+    "source": "iana"
+  },
+  "application/vnd.ims.imsccv1p3": {
+    "source": "iana"
+  },
+  "application/vnd.ims.lis.v2.result+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolproxy+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolproxy.id+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolsettings+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ims.lti.v2.toolsettings.simple+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.informedcontrol.rms+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.informix-visionary": {
+    "source": "iana"
+  },
+  "application/vnd.infotech.project": {
+    "source": "iana"
+  },
+  "application/vnd.infotech.project+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.innopath.wamp.notification": {
+    "source": "iana"
+  },
+  "application/vnd.insors.igm": {
+    "source": "iana",
+    "extensions": ["igm"]
+  },
+  "application/vnd.intercon.formnet": {
+    "source": "iana",
+    "extensions": ["xpw","xpx"]
+  },
+  "application/vnd.intergeo": {
+    "source": "iana",
+    "extensions": ["i2g"]
+  },
+  "application/vnd.intertrust.digibox": {
+    "source": "iana"
+  },
+  "application/vnd.intertrust.nncp": {
+    "source": "iana"
+  },
+  "application/vnd.intu.qbo": {
+    "source": "iana",
+    "extensions": ["qbo"]
+  },
+  "application/vnd.intu.qfx": {
+    "source": "iana",
+    "extensions": ["qfx"]
+  },
+  "application/vnd.iptc.g2.catalogitem+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.iptc.g2.conceptitem+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.iptc.g2.knowledgeitem+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.iptc.g2.newsitem+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.iptc.g2.newsmessage+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.iptc.g2.packageitem+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.iptc.g2.planningitem+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ipunplugged.rcprofile": {
+    "source": "iana",
+    "extensions": ["rcprofile"]
+  },
+  "application/vnd.irepository.package+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["irp"]
+  },
+  "application/vnd.is-xpr": {
+    "source": "iana",
+    "extensions": ["xpr"]
+  },
+  "application/vnd.isac.fcs": {
+    "source": "iana",
+    "extensions": ["fcs"]
+  },
+  "application/vnd.iso11783-10+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.jam": {
+    "source": "iana",
+    "extensions": ["jam"]
+  },
+  "application/vnd.japannet-directory-service": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-jpnstore-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-payment-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-registration": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-registration-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-setstore-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-verification": {
+    "source": "iana"
+  },
+  "application/vnd.japannet-verification-wakeup": {
+    "source": "iana"
+  },
+  "application/vnd.jcp.javame.midlet-rms": {
+    "source": "iana",
+    "extensions": ["rms"]
+  },
+  "application/vnd.jisp": {
+    "source": "iana",
+    "extensions": ["jisp"]
+  },
+  "application/vnd.joost.joda-archive": {
+    "source": "iana",
+    "extensions": ["joda"]
+  },
+  "application/vnd.jsk.isdn-ngn": {
+    "source": "iana"
+  },
+  "application/vnd.kahootz": {
+    "source": "iana",
+    "extensions": ["ktz","ktr"]
+  },
+  "application/vnd.kde.karbon": {
+    "source": "iana",
+    "extensions": ["karbon"]
+  },
+  "application/vnd.kde.kchart": {
+    "source": "iana",
+    "extensions": ["chrt"]
+  },
+  "application/vnd.kde.kformula": {
+    "source": "iana",
+    "extensions": ["kfo"]
+  },
+  "application/vnd.kde.kivio": {
+    "source": "iana",
+    "extensions": ["flw"]
+  },
+  "application/vnd.kde.kontour": {
+    "source": "iana",
+    "extensions": ["kon"]
+  },
+  "application/vnd.kde.kpresenter": {
+    "source": "iana",
+    "extensions": ["kpr","kpt"]
+  },
+  "application/vnd.kde.kspread": {
+    "source": "iana",
+    "extensions": ["ksp"]
+  },
+  "application/vnd.kde.kword": {
+    "source": "iana",
+    "extensions": ["kwd","kwt"]
+  },
+  "application/vnd.kenameaapp": {
+    "source": "iana",
+    "extensions": ["htke"]
+  },
+  "application/vnd.kidspiration": {
+    "source": "iana",
+    "extensions": ["kia"]
+  },
+  "application/vnd.kinar": {
+    "source": "iana",
+    "extensions": ["kne","knp"]
+  },
+  "application/vnd.koan": {
+    "source": "iana",
+    "extensions": ["skp","skd","skt","skm"]
+  },
+  "application/vnd.kodak-descriptor": {
+    "source": "iana",
+    "extensions": ["sse"]
+  },
+  "application/vnd.las": {
+    "source": "iana"
+  },
+  "application/vnd.las.las+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.las.las+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["lasxml"]
+  },
+  "application/vnd.laszip": {
+    "source": "iana"
+  },
+  "application/vnd.leap+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.liberty-request+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.llamagraphics.life-balance.desktop": {
+    "source": "iana",
+    "extensions": ["lbd"]
+  },
+  "application/vnd.llamagraphics.life-balance.exchange+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["lbe"]
+  },
+  "application/vnd.logipipe.circuit+zip": {
+    "source": "iana",
+    "compressible": false
+  },
+  "application/vnd.loom": {
+    "source": "iana"
+  },
+  "application/vnd.lotus-1-2-3": {
+    "source": "iana",
+    "extensions": ["123"]
+  },
+  "application/vnd.lotus-approach": {
+    "source": "iana",
+    "extensions": ["apr"]
+  },
+  "application/vnd.lotus-freelance": {
+    "source": "iana",
+    "extensions": ["pre"]
+  },
+  "application/vnd.lotus-notes": {
+    "source": "iana",
+    "extensions": ["nsf"]
+  },
+  "application/vnd.lotus-organizer": {
+    "source": "iana",
+    "extensions": ["org"]
+  },
+  "application/vnd.lotus-screencam": {
+    "source": "iana",
+    "extensions": ["scm"]
+  },
+  "application/vnd.lotus-wordpro": {
+    "source": "iana",
+    "extensions": ["lwp"]
+  },
+  "application/vnd.macports.portpkg": {
+    "source": "iana",
+    "extensions": ["portpkg"]
+  },
+  "application/vnd.mapbox-vector-tile": {
+    "source": "iana"
+  },
+  "application/vnd.marlin.drm.actiontoken+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.marlin.drm.conftoken+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.marlin.drm.license+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.marlin.drm.mdcf": {
+    "source": "iana"
+  },
+  "application/vnd.mason+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.maxmind.maxmind-db": {
+    "source": "iana"
+  },
+  "application/vnd.mcd": {
+    "source": "iana",
+    "extensions": ["mcd"]
+  },
+  "application/vnd.medcalcdata": {
+    "source": "iana",
+    "extensions": ["mc1"]
+  },
+  "application/vnd.mediastation.cdkey": {
+    "source": "iana",
+    "extensions": ["cdkey"]
+  },
+  "application/vnd.meridian-slingshot": {
+    "source": "iana"
+  },
+  "application/vnd.mfer": {
+    "source": "iana",
+    "extensions": ["mwf"]
+  },
+  "application/vnd.mfmp": {
+    "source": "iana",
+    "extensions": ["mfm"]
+  },
+  "application/vnd.micro+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.micrografx.flo": {
+    "source": "iana",
+    "extensions": ["flo"]
+  },
+  "application/vnd.micrografx.igx": {
+    "source": "iana",
+    "extensions": ["igx"]
+  },
+  "application/vnd.microsoft.portable-executable": {
+    "source": "iana"
+  },
+  "application/vnd.microsoft.windows.thumbnail-cache": {
+    "source": "iana"
+  },
+  "application/vnd.miele+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.mif": {
+    "source": "iana",
+    "extensions": ["mif"]
+  },
+  "application/vnd.minisoft-hp3000-save": {
+    "source": "iana"
+  },
+  "application/vnd.mitsubishi.misty-guard.trustweb": {
+    "source": "iana"
+  },
+  "application/vnd.mobius.daf": {
+    "source": "iana",
+    "extensions": ["daf"]
+  },
+  "application/vnd.mobius.dis": {
+    "source": "iana",
+    "extensions": ["dis"]
+  },
+  "application/vnd.mobius.mbk": {
+    "source": "iana",
+    "extensions": ["mbk"]
+  },
+  "application/vnd.mobius.mqy": {
+    "source": "iana",
+    "extensions": ["mqy"]
+  },
+  "application/vnd.mobius.msl": {
+    "source": "iana",
+    "extensions": ["msl"]
+  },
+  "application/vnd.mobius.plc": {
+    "source": "iana",
+    "extensions": ["plc"]
+  },
+  "application/vnd.mobius.txf": {
+    "source": "iana",
+    "extensions": ["txf"]
+  },
+  "application/vnd.mophun.application": {
+    "source": "iana",
+    "extensions": ["mpn"]
+  },
+  "application/vnd.mophun.certificate": {
+    "source": "iana",
+    "extensions": ["mpc"]
+  },
+  "application/vnd.motorola.flexsuite": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.adsi": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.fis": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.gotap": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.kmr": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.ttc": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.flexsuite.wem": {
+    "source": "iana"
+  },
+  "application/vnd.motorola.iprm": {
+    "source": "iana"
+  },
+  "application/vnd.mozilla.xul+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xul"]
+  },
+  "application/vnd.ms-3mfdocument": {
+    "source": "iana"
+  },
+  "application/vnd.ms-artgalry": {
+    "source": "iana",
+    "extensions": ["cil"]
+  },
+  "application/vnd.ms-asf": {
+    "source": "iana"
+  },
+  "application/vnd.ms-cab-compressed": {
+    "source": "iana",
+    "extensions": ["cab"]
+  },
+  "application/vnd.ms-color.iccprofile": {
+    "source": "apache"
+  },
+  "application/vnd.ms-excel": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["xls","xlm","xla","xlc","xlt","xlw"]
+  },
+  "application/vnd.ms-excel.addin.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["xlam"]
+  },
+  "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["xlsb"]
+  },
+  "application/vnd.ms-excel.sheet.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["xlsm"]
+  },
+  "application/vnd.ms-excel.template.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["xltm"]
+  },
+  "application/vnd.ms-fontobject": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["eot"]
+  },
+  "application/vnd.ms-htmlhelp": {
+    "source": "iana",
+    "extensions": ["chm"]
+  },
+  "application/vnd.ms-ims": {
+    "source": "iana",
+    "extensions": ["ims"]
+  },
+  "application/vnd.ms-lrm": {
+    "source": "iana",
+    "extensions": ["lrm"]
+  },
+  "application/vnd.ms-office.activex+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ms-officetheme": {
+    "source": "iana",
+    "extensions": ["thmx"]
+  },
+  "application/vnd.ms-opentype": {
+    "source": "apache",
+    "compressible": true
+  },
+  "application/vnd.ms-outlook": {
+    "compressible": false,
+    "extensions": ["msg"]
+  },
+  "application/vnd.ms-package.obfuscated-opentype": {
+    "source": "apache"
+  },
+  "application/vnd.ms-pki.seccat": {
+    "source": "apache",
+    "extensions": ["cat"]
+  },
+  "application/vnd.ms-pki.stl": {
+    "source": "apache",
+    "extensions": ["stl"]
+  },
+  "application/vnd.ms-playready.initiator+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ms-powerpoint": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["ppt","pps","pot"]
+  },
+  "application/vnd.ms-powerpoint.addin.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["ppam"]
+  },
+  "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["pptm"]
+  },
+  "application/vnd.ms-powerpoint.slide.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["sldm"]
+  },
+  "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["ppsm"]
+  },
+  "application/vnd.ms-powerpoint.template.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["potm"]
+  },
+  "application/vnd.ms-printdevicecapabilities+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ms-printing.printticket+xml": {
+    "source": "apache",
+    "compressible": true
+  },
+  "application/vnd.ms-printschematicket+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.ms-project": {
+    "source": "iana",
+    "extensions": ["mpp","mpt"]
+  },
+  "application/vnd.ms-tnef": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.devicepairing": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.nwprinting.oob": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.printerpairing": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.wsd.oob": {
+    "source": "iana"
+  },
+  "application/vnd.ms-wmdrm.lic-chlg-req": {
+    "source": "iana"
+  },
+  "application/vnd.ms-wmdrm.lic-resp": {
+    "source": "iana"
+  },
+  "application/vnd.ms-wmdrm.meter-chlg-req": {
+    "source": "iana"
+  },
+  "application/vnd.ms-wmdrm.meter-resp": {
+    "source": "iana"
+  },
+  "application/vnd.ms-word.document.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["docm"]
+  },
+  "application/vnd.ms-word.template.macroenabled.12": {
+    "source": "iana",
+    "extensions": ["dotm"]
+  },
+  "application/vnd.ms-works": {
+    "source": "iana",
+    "extensions": ["wps","wks","wcm","wdb"]
+  },
+  "application/vnd.ms-wpl": {
+    "source": "iana",
+    "extensions": ["wpl"]
+  },
+  "application/vnd.ms-xpsdocument": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["xps"]
+  },
+  "application/vnd.msa-disk-image": {
+    "source": "iana"
+  },
+  "application/vnd.mseq": {
+    "source": "iana",
+    "extensions": ["mseq"]
+  },
+  "application/vnd.msign": {
+    "source": "iana"
+  },
+  "application/vnd.multiad.creator": {
+    "source": "iana"
+  },
+  "application/vnd.multiad.creator.cif": {
+    "source": "iana"
+  },
+  "application/vnd.music-niff": {
+    "source": "iana"
+  },
+  "application/vnd.musician": {
+    "source": "iana",
+    "extensions": ["mus"]
+  },
+  "application/vnd.muvee.style": {
+    "source": "iana",
+    "extensions": ["msty"]
+  },
+  "application/vnd.mynfc": {
+    "source": "iana",
+    "extensions": ["taglet"]
+  },
+  "application/vnd.ncd.control": {
+    "source": "iana"
+  },
+  "application/vnd.ncd.reference": {
+    "source": "iana"
+  },
+  "application/vnd.nearst.inv+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.nervana": {
+    "source": "iana"
+  },
+  "application/vnd.netfpx": {
+    "source": "iana"
+  },
+  "application/vnd.neurolanguage.nlu": {
+    "source": "iana",
+    "extensions": ["nlu"]
+  },
+  "application/vnd.nimn": {
+    "source": "iana"
+  },
+  "application/vnd.nintendo.nitro.rom": {
+    "source": "iana"
+  },
+  "application/vnd.nintendo.snes.rom": {
+    "source": "iana"
+  },
+  "application/vnd.nitf": {
+    "source": "iana",
+    "extensions": ["ntf","nitf"]
+  },
+  "application/vnd.noblenet-directory": {
+    "source": "iana",
+    "extensions": ["nnd"]
+  },
+  "application/vnd.noblenet-sealer": {
+    "source": "iana",
+    "extensions": ["nns"]
+  },
+  "application/vnd.noblenet-web": {
+    "source": "iana",
+    "extensions": ["nnw"]
+  },
+  "application/vnd.nokia.catalogs": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.conml+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.conml+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.nokia.iptv.config+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.nokia.isds-radio-presets": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.landmark+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.landmark+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.nokia.landmarkcollection+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.nokia.n-gage.ac+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ac"]
+  },
+  "application/vnd.nokia.n-gage.data": {
+    "source": "iana",
+    "extensions": ["ngdat"]
+  },
+  "application/vnd.nokia.n-gage.symbian.install": {
+    "source": "iana",
+    "extensions": ["n-gage"]
+  },
+  "application/vnd.nokia.ncd": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.pcd+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.nokia.pcd+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.nokia.radio-preset": {
+    "source": "iana",
+    "extensions": ["rpst"]
+  },
+  "application/vnd.nokia.radio-presets": {
+    "source": "iana",
+    "extensions": ["rpss"]
+  },
+  "application/vnd.novadigm.edm": {
+    "source": "iana",
+    "extensions": ["edm"]
+  },
+  "application/vnd.novadigm.edx": {
+    "source": "iana",
+    "extensions": ["edx"]
+  },
+  "application/vnd.novadigm.ext": {
+    "source": "iana",
+    "extensions": ["ext"]
+  },
+  "application/vnd.ntt-local.content-share": {
+    "source": "iana"
+  },
+  "application/vnd.ntt-local.file-transfer": {
+    "source": "iana"
+  },
+  "application/vnd.ntt-local.ogw_remote-access": {
+    "source": "iana"
+  },
+  "application/vnd.ntt-local.sip-ta_remote": {
+    "source": "iana"
+  },
+  "application/vnd.ntt-local.sip-ta_tcp_stream": {
+    "source": "iana"
+  },
+  "application/vnd.oasis.opendocument.chart": {
+    "source": "iana",
+    "extensions": ["odc"]
+  },
+  "application/vnd.oasis.opendocument.chart-template": {
+    "source": "iana",
+    "extensions": ["otc"]
+  },
+  "application/vnd.oasis.opendocument.database": {
+    "source": "iana",
+    "extensions": ["odb"]
+  },
+  "application/vnd.oasis.opendocument.formula": {
+    "source": "iana",
+    "extensions": ["odf"]
+  },
+  "application/vnd.oasis.opendocument.formula-template": {
+    "source": "iana",
+    "extensions": ["odft"]
+  },
+  "application/vnd.oasis.opendocument.graphics": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["odg"]
+  },
+  "application/vnd.oasis.opendocument.graphics-template": {
+    "source": "iana",
+    "extensions": ["otg"]
+  },
+  "application/vnd.oasis.opendocument.image": {
+    "source": "iana",
+    "extensions": ["odi"]
+  },
+  "application/vnd.oasis.opendocument.image-template": {
+    "source": "iana",
+    "extensions": ["oti"]
+  },
+  "application/vnd.oasis.opendocument.presentation": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["odp"]
+  },
+  "application/vnd.oasis.opendocument.presentation-template": {
+    "source": "iana",
+    "extensions": ["otp"]
+  },
+  "application/vnd.oasis.opendocument.spreadsheet": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["ods"]
+  },
+  "application/vnd.oasis.opendocument.spreadsheet-template": {
+    "source": "iana",
+    "extensions": ["ots"]
+  },
+  "application/vnd.oasis.opendocument.text": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["odt"]
+  },
+  "application/vnd.oasis.opendocument.text-master": {
+    "source": "iana",
+    "extensions": ["odm"]
+  },
+  "application/vnd.oasis.opendocument.text-template": {
+    "source": "iana",
+    "extensions": ["ott"]
+  },
+  "application/vnd.oasis.opendocument.text-web": {
+    "source": "iana",
+    "extensions": ["oth"]
+  },
+  "application/vnd.obn": {
+    "source": "iana"
+  },
+  "application/vnd.ocf+cbor": {
+    "source": "iana"
+  },
+  "application/vnd.oci.image.manifest.v1+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oftn.l10n+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.contentaccessdownload+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.contentaccessstreaming+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.cspg-hexbinary": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.dae.svg+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.dae.xhtml+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.mippvcontrolmessage+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.pae.gem": {
+    "source": "iana"
+  },
+  "application/vnd.oipf.spdiscovery+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.spdlist+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.ueprofile+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oipf.userprofile+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.olpc-sugar": {
+    "source": "iana",
+    "extensions": ["xo"]
+  },
+  "application/vnd.oma-scws-config": {
+    "source": "iana"
+  },
+  "application/vnd.oma-scws-http-request": {
+    "source": "iana"
+  },
+  "application/vnd.oma-scws-http-response": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.bcast.drm-trigger+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.bcast.imd+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.bcast.ltkm": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.notification+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.bcast.provisioningtrigger": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.sgboot": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.sgdd+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.bcast.sgdu": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.simple-symbol-container": {
+    "source": "iana"
+  },
+  "application/vnd.oma.bcast.smartcard-trigger+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.bcast.sprov+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.bcast.stkm": {
+    "source": "iana"
+  },
+  "application/vnd.oma.cab-address-book+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.cab-feature-handler+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.cab-pcc+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.cab-subs-invite+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.cab-user-prefs+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.dcd": {
+    "source": "iana"
+  },
+  "application/vnd.oma.dcdc": {
+    "source": "iana"
+  },
+  "application/vnd.oma.dd2+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["dd2"]
+  },
+  "application/vnd.oma.drm.risd+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.group-usage-list+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.lwm2m+cbor": {
+    "source": "iana"
+  },
+  "application/vnd.oma.lwm2m+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.lwm2m+tlv": {
+    "source": "iana"
+  },
+  "application/vnd.oma.pal+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.poc.detailed-progress-report+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.poc.final-report+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.poc.groups+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.poc.invocation-descriptor+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.poc.optimized-progress-report+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.push": {
+    "source": "iana"
+  },
+  "application/vnd.oma.scidm.messages+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oma.xcap-directory+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.omads-email+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/vnd.omads-file+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/vnd.omads-folder+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/vnd.omaloc-supl-init": {
+    "source": "iana"
+  },
+  "application/vnd.onepager": {
+    "source": "iana"
+  },
+  "application/vnd.onepagertamp": {
+    "source": "iana"
+  },
+  "application/vnd.onepagertamx": {
+    "source": "iana"
+  },
+  "application/vnd.onepagertat": {
+    "source": "iana"
+  },
+  "application/vnd.onepagertatp": {
+    "source": "iana"
+  },
+  "application/vnd.onepagertatx": {
+    "source": "iana"
+  },
+  "application/vnd.openblox.game+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["obgx"]
+  },
+  "application/vnd.openblox.game-binary": {
+    "source": "iana"
+  },
+  "application/vnd.openeye.oeb": {
+    "source": "iana"
+  },
+  "application/vnd.openofficeorg.extension": {
+    "source": "apache",
+    "extensions": ["oxt"]
+  },
+  "application/vnd.openstreetmap.data+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["osm"]
+  },
+  "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.drawing+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["pptx"]
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slide": {
+    "source": "iana",
+    "extensions": ["sldx"]
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
+    "source": "iana",
+    "extensions": ["ppsx"]
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.template": {
+    "source": "iana",
+    "extensions": ["potx"]
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["xlsx"]
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
+    "source": "iana",
+    "extensions": ["xltx"]
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.theme+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.vmldrawing": {
+    "source": "iana"
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["docx"]
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
+    "source": "iana",
+    "extensions": ["dotx"]
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-package.core-properties+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.openxmlformats-package.relationships+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oracle.resource+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.orange.indata": {
+    "source": "iana"
+  },
+  "application/vnd.osa.netdeploy": {
+    "source": "iana"
+  },
+  "application/vnd.osgeo.mapguide.package": {
+    "source": "iana",
+    "extensions": ["mgp"]
+  },
+  "application/vnd.osgi.bundle": {
+    "source": "iana"
+  },
+  "application/vnd.osgi.dp": {
+    "source": "iana",
+    "extensions": ["dp"]
+  },
+  "application/vnd.osgi.subsystem": {
+    "source": "iana",
+    "extensions": ["esa"]
+  },
+  "application/vnd.otps.ct-kip+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.oxli.countgraph": {
+    "source": "iana"
+  },
+  "application/vnd.pagerduty+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.palm": {
+    "source": "iana",
+    "extensions": ["pdb","pqa","oprc"]
+  },
+  "application/vnd.panoply": {
+    "source": "iana"
+  },
+  "application/vnd.paos.xml": {
+    "source": "iana"
+  },
+  "application/vnd.patentdive": {
+    "source": "iana"
+  },
+  "application/vnd.patientecommsdoc": {
+    "source": "iana"
+  },
+  "application/vnd.pawaafile": {
+    "source": "iana",
+    "extensions": ["paw"]
+  },
+  "application/vnd.pcos": {
+    "source": "iana"
+  },
+  "application/vnd.pg.format": {
+    "source": "iana",
+    "extensions": ["str"]
+  },
+  "application/vnd.pg.osasli": {
+    "source": "iana",
+    "extensions": ["ei6"]
+  },
+  "application/vnd.piaccess.application-licence": {
+    "source": "iana"
+  },
+  "application/vnd.picsel": {
+    "source": "iana",
+    "extensions": ["efif"]
+  },
+  "application/vnd.pmi.widget": {
+    "source": "iana",
+    "extensions": ["wg"]
+  },
+  "application/vnd.poc.group-advertisement+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.pocketlearn": {
+    "source": "iana",
+    "extensions": ["plf"]
+  },
+  "application/vnd.powerbuilder6": {
+    "source": "iana",
+    "extensions": ["pbd"]
+  },
+  "application/vnd.powerbuilder6-s": {
+    "source": "iana"
+  },
+  "application/vnd.powerbuilder7": {
+    "source": "iana"
+  },
+  "application/vnd.powerbuilder7-s": {
+    "source": "iana"
+  },
+  "application/vnd.powerbuilder75": {
+    "source": "iana"
+  },
+  "application/vnd.powerbuilder75-s": {
+    "source": "iana"
+  },
+  "application/vnd.preminet": {
+    "source": "iana"
+  },
+  "application/vnd.previewsystems.box": {
+    "source": "iana",
+    "extensions": ["box"]
+  },
+  "application/vnd.proteus.magazine": {
+    "source": "iana",
+    "extensions": ["mgz"]
+  },
+  "application/vnd.psfs": {
+    "source": "iana"
+  },
+  "application/vnd.publishare-delta-tree": {
+    "source": "iana",
+    "extensions": ["qps"]
+  },
+  "application/vnd.pvi.ptid1": {
+    "source": "iana",
+    "extensions": ["ptid"]
+  },
+  "application/vnd.pwg-multiplexed": {
+    "source": "iana"
+  },
+  "application/vnd.pwg-xhtml-print+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.qualcomm.brew-app-res": {
+    "source": "iana"
+  },
+  "application/vnd.quarantainenet": {
+    "source": "iana"
+  },
+  "application/vnd.quark.quarkxpress": {
+    "source": "iana",
+    "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"]
+  },
+  "application/vnd.quobject-quoxdocument": {
+    "source": "iana"
+  },
+  "application/vnd.radisys.moml+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-audit+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-audit-conf+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-audit-conn+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-audit-dialog+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-audit-stream+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-conf+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-dialog+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-dialog-base+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-dialog-fax-detect+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-dialog-group+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-dialog-speech+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.radisys.msml-dialog-transform+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.rainstor.data": {
+    "source": "iana"
+  },
+  "application/vnd.rapid": {
+    "source": "iana"
+  },
+  "application/vnd.rar": {
+    "source": "iana",
+    "extensions": ["rar"]
+  },
+  "application/vnd.realvnc.bed": {
+    "source": "iana",
+    "extensions": ["bed"]
+  },
+  "application/vnd.recordare.musicxml": {
+    "source": "iana",
+    "extensions": ["mxl"]
+  },
+  "application/vnd.recordare.musicxml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["musicxml"]
+  },
+  "application/vnd.renlearn.rlprint": {
+    "source": "iana"
+  },
+  "application/vnd.restful+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.rig.cryptonote": {
+    "source": "iana",
+    "extensions": ["cryptonote"]
+  },
+  "application/vnd.rim.cod": {
+    "source": "apache",
+    "extensions": ["cod"]
+  },
+  "application/vnd.rn-realmedia": {
+    "source": "apache",
+    "extensions": ["rm"]
+  },
+  "application/vnd.rn-realmedia-vbr": {
+    "source": "apache",
+    "extensions": ["rmvb"]
+  },
+  "application/vnd.route66.link66+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["link66"]
+  },
+  "application/vnd.rs-274x": {
+    "source": "iana"
+  },
+  "application/vnd.ruckus.download": {
+    "source": "iana"
+  },
+  "application/vnd.s3sms": {
+    "source": "iana"
+  },
+  "application/vnd.sailingtracker.track": {
+    "source": "iana",
+    "extensions": ["st"]
+  },
+  "application/vnd.sar": {
+    "source": "iana"
+  },
+  "application/vnd.sbm.cid": {
+    "source": "iana"
+  },
+  "application/vnd.sbm.mid2": {
+    "source": "iana"
+  },
+  "application/vnd.scribus": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.3df": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.csf": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.doc": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.eml": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.mht": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.net": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.ppt": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.tiff": {
+    "source": "iana"
+  },
+  "application/vnd.sealed.xls": {
+    "source": "iana"
+  },
+  "application/vnd.sealedmedia.softseal.html": {
+    "source": "iana"
+  },
+  "application/vnd.sealedmedia.softseal.pdf": {
+    "source": "iana"
+  },
+  "application/vnd.seemail": {
+    "source": "iana",
+    "extensions": ["see"]
+  },
+  "application/vnd.sema": {
+    "source": "iana",
+    "extensions": ["sema"]
+  },
+  "application/vnd.semd": {
+    "source": "iana",
+    "extensions": ["semd"]
+  },
+  "application/vnd.semf": {
+    "source": "iana",
+    "extensions": ["semf"]
+  },
+  "application/vnd.shade-save-file": {
+    "source": "iana"
+  },
+  "application/vnd.shana.informed.formdata": {
+    "source": "iana",
+    "extensions": ["ifm"]
+  },
+  "application/vnd.shana.informed.formtemplate": {
+    "source": "iana",
+    "extensions": ["itp"]
+  },
+  "application/vnd.shana.informed.interchange": {
+    "source": "iana",
+    "extensions": ["iif"]
+  },
+  "application/vnd.shana.informed.package": {
+    "source": "iana",
+    "extensions": ["ipk"]
+  },
+  "application/vnd.shootproof+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.shopkick+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.shp": {
+    "source": "iana"
+  },
+  "application/vnd.shx": {
+    "source": "iana"
+  },
+  "application/vnd.sigrok.session": {
+    "source": "iana"
+  },
+  "application/vnd.simtech-mindmapper": {
+    "source": "iana",
+    "extensions": ["twd","twds"]
+  },
+  "application/vnd.siren+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.smaf": {
+    "source": "iana",
+    "extensions": ["mmf"]
+  },
+  "application/vnd.smart.notebook": {
+    "source": "iana"
+  },
+  "application/vnd.smart.teacher": {
+    "source": "iana",
+    "extensions": ["teacher"]
+  },
+  "application/vnd.snesdev-page-table": {
+    "source": "iana"
+  },
+  "application/vnd.software602.filler.form+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["fo"]
+  },
+  "application/vnd.software602.filler.form-xml-zip": {
+    "source": "iana"
+  },
+  "application/vnd.solent.sdkm+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["sdkm","sdkd"]
+  },
+  "application/vnd.spotfire.dxp": {
+    "source": "iana",
+    "extensions": ["dxp"]
+  },
+  "application/vnd.spotfire.sfs": {
+    "source": "iana",
+    "extensions": ["sfs"]
+  },
+  "application/vnd.sqlite3": {
+    "source": "iana"
+  },
+  "application/vnd.sss-cod": {
+    "source": "iana"
+  },
+  "application/vnd.sss-dtf": {
+    "source": "iana"
+  },
+  "application/vnd.sss-ntf": {
+    "source": "iana"
+  },
+  "application/vnd.stardivision.calc": {
+    "source": "apache",
+    "extensions": ["sdc"]
+  },
+  "application/vnd.stardivision.draw": {
+    "source": "apache",
+    "extensions": ["sda"]
+  },
+  "application/vnd.stardivision.impress": {
+    "source": "apache",
+    "extensions": ["sdd"]
+  },
+  "application/vnd.stardivision.math": {
+    "source": "apache",
+    "extensions": ["smf"]
+  },
+  "application/vnd.stardivision.writer": {
+    "source": "apache",
+    "extensions": ["sdw","vor"]
+  },
+  "application/vnd.stardivision.writer-global": {
+    "source": "apache",
+    "extensions": ["sgl"]
+  },
+  "application/vnd.stepmania.package": {
+    "source": "iana",
+    "extensions": ["smzip"]
+  },
+  "application/vnd.stepmania.stepchart": {
+    "source": "iana",
+    "extensions": ["sm"]
+  },
+  "application/vnd.street-stream": {
+    "source": "iana"
+  },
+  "application/vnd.sun.wadl+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["wadl"]
+  },
+  "application/vnd.sun.xml.calc": {
+    "source": "apache",
+    "extensions": ["sxc"]
+  },
+  "application/vnd.sun.xml.calc.template": {
+    "source": "apache",
+    "extensions": ["stc"]
+  },
+  "application/vnd.sun.xml.draw": {
+    "source": "apache",
+    "extensions": ["sxd"]
+  },
+  "application/vnd.sun.xml.draw.template": {
+    "source": "apache",
+    "extensions": ["std"]
+  },
+  "application/vnd.sun.xml.impress": {
+    "source": "apache",
+    "extensions": ["sxi"]
+  },
+  "application/vnd.sun.xml.impress.template": {
+    "source": "apache",
+    "extensions": ["sti"]
+  },
+  "application/vnd.sun.xml.math": {
+    "source": "apache",
+    "extensions": ["sxm"]
+  },
+  "application/vnd.sun.xml.writer": {
+    "source": "apache",
+    "extensions": ["sxw"]
+  },
+  "application/vnd.sun.xml.writer.global": {
+    "source": "apache",
+    "extensions": ["sxg"]
+  },
+  "application/vnd.sun.xml.writer.template": {
+    "source": "apache",
+    "extensions": ["stw"]
+  },
+  "application/vnd.sus-calendar": {
+    "source": "iana",
+    "extensions": ["sus","susp"]
+  },
+  "application/vnd.svd": {
+    "source": "iana",
+    "extensions": ["svd"]
+  },
+  "application/vnd.swiftview-ics": {
+    "source": "iana"
+  },
+  "application/vnd.sycle+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.symbian.install": {
+    "source": "apache",
+    "extensions": ["sis","sisx"]
+  },
+  "application/vnd.syncml+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["xsm"]
+  },
+  "application/vnd.syncml.dm+wbxml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "extensions": ["bdm"]
+  },
+  "application/vnd.syncml.dm+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["xdm"]
+  },
+  "application/vnd.syncml.dm.notification": {
+    "source": "iana"
+  },
+  "application/vnd.syncml.dmddf+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.syncml.dmddf+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["ddf"]
+  },
+  "application/vnd.syncml.dmtnds+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.syncml.dmtnds+xml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true
+  },
+  "application/vnd.syncml.ds.notification": {
+    "source": "iana"
+  },
+  "application/vnd.tableschema+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.tao.intent-module-archive": {
+    "source": "iana",
+    "extensions": ["tao"]
+  },
+  "application/vnd.tcpdump.pcap": {
+    "source": "iana",
+    "extensions": ["pcap","cap","dmp"]
+  },
+  "application/vnd.think-cell.ppttc+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.tmd.mediaflex.api+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.tml": {
+    "source": "iana"
+  },
+  "application/vnd.tmobile-livetv": {
+    "source": "iana",
+    "extensions": ["tmo"]
+  },
+  "application/vnd.tri.onesource": {
+    "source": "iana"
+  },
+  "application/vnd.trid.tpt": {
+    "source": "iana",
+    "extensions": ["tpt"]
+  },
+  "application/vnd.triscape.mxs": {
+    "source": "iana",
+    "extensions": ["mxs"]
+  },
+  "application/vnd.trueapp": {
+    "source": "iana",
+    "extensions": ["tra"]
+  },
+  "application/vnd.truedoc": {
+    "source": "iana"
+  },
+  "application/vnd.ubisoft.webplayer": {
+    "source": "iana"
+  },
+  "application/vnd.ufdl": {
+    "source": "iana",
+    "extensions": ["ufd","ufdl"]
+  },
+  "application/vnd.uiq.theme": {
+    "source": "iana",
+    "extensions": ["utz"]
+  },
+  "application/vnd.umajin": {
+    "source": "iana",
+    "extensions": ["umj"]
+  },
+  "application/vnd.unity": {
+    "source": "iana",
+    "extensions": ["unityweb"]
+  },
+  "application/vnd.uoml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["uoml"]
+  },
+  "application/vnd.uplanet.alert": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.alert-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.bearer-choice": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.bearer-choice-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.cacheop": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.cacheop-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.channel": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.channel-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.list": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.list-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.listcmd": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.listcmd-wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.uplanet.signal": {
+    "source": "iana"
+  },
+  "application/vnd.uri-map": {
+    "source": "iana"
+  },
+  "application/vnd.valve.source.material": {
+    "source": "iana"
+  },
+  "application/vnd.vcx": {
+    "source": "iana",
+    "extensions": ["vcx"]
+  },
+  "application/vnd.vd-study": {
+    "source": "iana"
+  },
+  "application/vnd.vectorworks": {
+    "source": "iana"
+  },
+  "application/vnd.vel+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.verimatrix.vcas": {
+    "source": "iana"
+  },
+  "application/vnd.veryant.thin": {
+    "source": "iana"
+  },
+  "application/vnd.ves.encrypted": {
+    "source": "iana"
+  },
+  "application/vnd.vidsoft.vidconference": {
+    "source": "iana"
+  },
+  "application/vnd.visio": {
+    "source": "iana",
+    "extensions": ["vsd","vst","vss","vsw"]
+  },
+  "application/vnd.visionary": {
+    "source": "iana",
+    "extensions": ["vis"]
+  },
+  "application/vnd.vividence.scriptfile": {
+    "source": "iana"
+  },
+  "application/vnd.vsf": {
+    "source": "iana",
+    "extensions": ["vsf"]
+  },
+  "application/vnd.wap.sic": {
+    "source": "iana"
+  },
+  "application/vnd.wap.slc": {
+    "source": "iana"
+  },
+  "application/vnd.wap.wbxml": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "extensions": ["wbxml"]
+  },
+  "application/vnd.wap.wmlc": {
+    "source": "iana",
+    "extensions": ["wmlc"]
+  },
+  "application/vnd.wap.wmlscriptc": {
+    "source": "iana",
+    "extensions": ["wmlsc"]
+  },
+  "application/vnd.webturbo": {
+    "source": "iana",
+    "extensions": ["wtb"]
+  },
+  "application/vnd.wfa.p2p": {
+    "source": "iana"
+  },
+  "application/vnd.wfa.wsc": {
+    "source": "iana"
+  },
+  "application/vnd.windows.devicepairing": {
+    "source": "iana"
+  },
+  "application/vnd.wmc": {
+    "source": "iana"
+  },
+  "application/vnd.wmf.bootstrap": {
+    "source": "iana"
+  },
+  "application/vnd.wolfram.mathematica": {
+    "source": "iana"
+  },
+  "application/vnd.wolfram.mathematica.package": {
+    "source": "iana"
+  },
+  "application/vnd.wolfram.player": {
+    "source": "iana",
+    "extensions": ["nbp"]
+  },
+  "application/vnd.wordperfect": {
+    "source": "iana",
+    "extensions": ["wpd"]
+  },
+  "application/vnd.wqd": {
+    "source": "iana",
+    "extensions": ["wqd"]
+  },
+  "application/vnd.wrq-hp3000-labelled": {
+    "source": "iana"
+  },
+  "application/vnd.wt.stf": {
+    "source": "iana",
+    "extensions": ["stf"]
+  },
+  "application/vnd.wv.csp+wbxml": {
+    "source": "iana"
+  },
+  "application/vnd.wv.csp+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.wv.ssp+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.xacml+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.xara": {
+    "source": "iana",
+    "extensions": ["xar"]
+  },
+  "application/vnd.xfdl": {
+    "source": "iana",
+    "extensions": ["xfdl"]
+  },
+  "application/vnd.xfdl.webform": {
+    "source": "iana"
+  },
+  "application/vnd.xmi+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vnd.xmpie.cpkg": {
+    "source": "iana"
+  },
+  "application/vnd.xmpie.dpkg": {
+    "source": "iana"
+  },
+  "application/vnd.xmpie.plan": {
+    "source": "iana"
+  },
+  "application/vnd.xmpie.ppkg": {
+    "source": "iana"
+  },
+  "application/vnd.xmpie.xlim": {
+    "source": "iana"
+  },
+  "application/vnd.yamaha.hv-dic": {
+    "source": "iana",
+    "extensions": ["hvd"]
+  },
+  "application/vnd.yamaha.hv-script": {
+    "source": "iana",
+    "extensions": ["hvs"]
+  },
+  "application/vnd.yamaha.hv-voice": {
+    "source": "iana",
+    "extensions": ["hvp"]
+  },
+  "application/vnd.yamaha.openscoreformat": {
+    "source": "iana",
+    "extensions": ["osf"]
+  },
+  "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["osfpvg"]
+  },
+  "application/vnd.yamaha.remote-setup": {
+    "source": "iana"
+  },
+  "application/vnd.yamaha.smaf-audio": {
+    "source": "iana",
+    "extensions": ["saf"]
+  },
+  "application/vnd.yamaha.smaf-phrase": {
+    "source": "iana",
+    "extensions": ["spf"]
+  },
+  "application/vnd.yamaha.through-ngn": {
+    "source": "iana"
+  },
+  "application/vnd.yamaha.tunnel-udpencap": {
+    "source": "iana"
+  },
+  "application/vnd.yaoweme": {
+    "source": "iana"
+  },
+  "application/vnd.yellowriver-custom-menu": {
+    "source": "iana",
+    "extensions": ["cmp"]
+  },
+  "application/vnd.youtube.yt": {
+    "source": "iana"
+  },
+  "application/vnd.zul": {
+    "source": "iana",
+    "extensions": ["zir","zirz"]
+  },
+  "application/vnd.zzazz.deck+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["zaz"]
+  },
+  "application/voicexml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["vxml"]
+  },
+  "application/voucher-cms+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/vq-rtcpxr": {
+    "source": "iana"
+  },
+  "application/wasm": {
+    "compressible": true,
+    "extensions": ["wasm"]
+  },
+  "application/watcherinfo+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/webpush-options+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/whoispp-query": {
+    "source": "iana"
+  },
+  "application/whoispp-response": {
+    "source": "iana"
+  },
+  "application/widget": {
+    "source": "iana",
+    "extensions": ["wgt"]
+  },
+  "application/winhlp": {
+    "source": "apache",
+    "extensions": ["hlp"]
+  },
+  "application/wita": {
+    "source": "iana"
+  },
+  "application/wordperfect5.1": {
+    "source": "iana"
+  },
+  "application/wsdl+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["wsdl"]
+  },
+  "application/wspolicy+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["wspolicy"]
+  },
+  "application/x-7z-compressed": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["7z"]
+  },
+  "application/x-abiword": {
+    "source": "apache",
+    "extensions": ["abw"]
+  },
+  "application/x-ace-compressed": {
+    "source": "apache",
+    "extensions": ["ace"]
+  },
+  "application/x-amf": {
+    "source": "apache"
+  },
+  "application/x-apple-diskimage": {
+    "source": "apache",
+    "extensions": ["dmg"]
+  },
+  "application/x-arj": {
+    "compressible": false,
+    "extensions": ["arj"]
+  },
+  "application/x-authorware-bin": {
+    "source": "apache",
+    "extensions": ["aab","x32","u32","vox"]
+  },
+  "application/x-authorware-map": {
+    "source": "apache",
+    "extensions": ["aam"]
+  },
+  "application/x-authorware-seg": {
+    "source": "apache",
+    "extensions": ["aas"]
+  },
+  "application/x-bcpio": {
+    "source": "apache",
+    "extensions": ["bcpio"]
+  },
+  "application/x-bdoc": {
+    "compressible": false,
+    "extensions": ["bdoc"]
+  },
+  "application/x-bittorrent": {
+    "source": "apache",
+    "extensions": ["torrent"]
+  },
+  "application/x-blorb": {
+    "source": "apache",
+    "extensions": ["blb","blorb"]
+  },
+  "application/x-bzip": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["bz"]
+  },
+  "application/x-bzip2": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["bz2","boz"]
+  },
+  "application/x-cbr": {
+    "source": "apache",
+    "extensions": ["cbr","cba","cbt","cbz","cb7"]
+  },
+  "application/x-cdlink": {
+    "source": "apache",
+    "extensions": ["vcd"]
+  },
+  "application/x-cfs-compressed": {
+    "source": "apache",
+    "extensions": ["cfs"]
+  },
+  "application/x-chat": {
+    "source": "apache",
+    "extensions": ["chat"]
+  },
+  "application/x-chess-pgn": {
+    "source": "apache",
+    "extensions": ["pgn"]
+  },
+  "application/x-chrome-extension": {
+    "extensions": ["crx"]
+  },
+  "application/x-cocoa": {
+    "source": "nginx",
+    "extensions": ["cco"]
+  },
+  "application/x-compress": {
+    "source": "apache"
+  },
+  "application/x-conference": {
+    "source": "apache",
+    "extensions": ["nsc"]
+  },
+  "application/x-cpio": {
+    "source": "apache",
+    "extensions": ["cpio"]
+  },
+  "application/x-csh": {
+    "source": "apache",
+    "extensions": ["csh"]
+  },
+  "application/x-deb": {
+    "compressible": false
+  },
+  "application/x-debian-package": {
+    "source": "apache",
+    "extensions": ["deb","udeb"]
+  },
+  "application/x-dgc-compressed": {
+    "source": "apache",
+    "extensions": ["dgc"]
+  },
+  "application/x-director": {
+    "source": "apache",
+    "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]
+  },
+  "application/x-doom": {
+    "source": "apache",
+    "extensions": ["wad"]
+  },
+  "application/x-dtbncx+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["ncx"]
+  },
+  "application/x-dtbook+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["dtb"]
+  },
+  "application/x-dtbresource+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["res"]
+  },
+  "application/x-dvi": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["dvi"]
+  },
+  "application/x-envoy": {
+    "source": "apache",
+    "extensions": ["evy"]
+  },
+  "application/x-eva": {
+    "source": "apache",
+    "extensions": ["eva"]
+  },
+  "application/x-font-bdf": {
+    "source": "apache",
+    "extensions": ["bdf"]
+  },
+  "application/x-font-dos": {
+    "source": "apache"
+  },
+  "application/x-font-framemaker": {
+    "source": "apache"
+  },
+  "application/x-font-ghostscript": {
+    "source": "apache",
+    "extensions": ["gsf"]
+  },
+  "application/x-font-libgrx": {
+    "source": "apache"
+  },
+  "application/x-font-linux-psf": {
+    "source": "apache",
+    "extensions": ["psf"]
+  },
+  "application/x-font-pcf": {
+    "source": "apache",
+    "extensions": ["pcf"]
+  },
+  "application/x-font-snf": {
+    "source": "apache",
+    "extensions": ["snf"]
+  },
+  "application/x-font-speedo": {
+    "source": "apache"
+  },
+  "application/x-font-sunos-news": {
+    "source": "apache"
+  },
+  "application/x-font-type1": {
+    "source": "apache",
+    "extensions": ["pfa","pfb","pfm","afm"]
+  },
+  "application/x-font-vfont": {
+    "source": "apache"
+  },
+  "application/x-freearc": {
+    "source": "apache",
+    "extensions": ["arc"]
+  },
+  "application/x-futuresplash": {
+    "source": "apache",
+    "extensions": ["spl"]
+  },
+  "application/x-gca-compressed": {
+    "source": "apache",
+    "extensions": ["gca"]
+  },
+  "application/x-glulx": {
+    "source": "apache",
+    "extensions": ["ulx"]
+  },
+  "application/x-gnumeric": {
+    "source": "apache",
+    "extensions": ["gnumeric"]
+  },
+  "application/x-gramps-xml": {
+    "source": "apache",
+    "extensions": ["gramps"]
+  },
+  "application/x-gtar": {
+    "source": "apache",
+    "extensions": ["gtar"]
+  },
+  "application/x-gzip": {
+    "source": "apache"
+  },
+  "application/x-hdf": {
+    "source": "apache",
+    "extensions": ["hdf"]
+  },
+  "application/x-httpd-php": {
+    "compressible": true,
+    "extensions": ["php"]
+  },
+  "application/x-install-instructions": {
+    "source": "apache",
+    "extensions": ["install"]
+  },
+  "application/x-iso9660-image": {
+    "source": "apache",
+    "extensions": ["iso"]
+  },
+  "application/x-java-archive-diff": {
+    "source": "nginx",
+    "extensions": ["jardiff"]
+  },
+  "application/x-java-jnlp-file": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["jnlp"]
+  },
+  "application/x-javascript": {
+    "compressible": true
+  },
+  "application/x-keepass2": {
+    "extensions": ["kdbx"]
+  },
+  "application/x-latex": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["latex"]
+  },
+  "application/x-lua-bytecode": {
+    "extensions": ["luac"]
+  },
+  "application/x-lzh-compressed": {
+    "source": "apache",
+    "extensions": ["lzh","lha"]
+  },
+  "application/x-makeself": {
+    "source": "nginx",
+    "extensions": ["run"]
+  },
+  "application/x-mie": {
+    "source": "apache",
+    "extensions": ["mie"]
+  },
+  "application/x-mobipocket-ebook": {
+    "source": "apache",
+    "extensions": ["prc","mobi"]
+  },
+  "application/x-mpegurl": {
+    "compressible": false
+  },
+  "application/x-ms-application": {
+    "source": "apache",
+    "extensions": ["application"]
+  },
+  "application/x-ms-shortcut": {
+    "source": "apache",
+    "extensions": ["lnk"]
+  },
+  "application/x-ms-wmd": {
+    "source": "apache",
+    "extensions": ["wmd"]
+  },
+  "application/x-ms-wmz": {
+    "source": "apache",
+    "extensions": ["wmz"]
+  },
+  "application/x-ms-xbap": {
+    "source": "apache",
+    "extensions": ["xbap"]
+  },
+  "application/x-msaccess": {
+    "source": "apache",
+    "extensions": ["mdb"]
+  },
+  "application/x-msbinder": {
+    "source": "apache",
+    "extensions": ["obd"]
+  },
+  "application/x-mscardfile": {
+    "source": "apache",
+    "extensions": ["crd"]
+  },
+  "application/x-msclip": {
+    "source": "apache",
+    "extensions": ["clp"]
+  },
+  "application/x-msdos-program": {
+    "extensions": ["exe"]
+  },
+  "application/x-msdownload": {
+    "source": "apache",
+    "extensions": ["exe","dll","com","bat","msi"]
+  },
+  "application/x-msmediaview": {
+    "source": "apache",
+    "extensions": ["mvb","m13","m14"]
+  },
+  "application/x-msmetafile": {
+    "source": "apache",
+    "extensions": ["wmf","wmz","emf","emz"]
+  },
+  "application/x-msmoney": {
+    "source": "apache",
+    "extensions": ["mny"]
+  },
+  "application/x-mspublisher": {
+    "source": "apache",
+    "extensions": ["pub"]
+  },
+  "application/x-msschedule": {
+    "source": "apache",
+    "extensions": ["scd"]
+  },
+  "application/x-msterminal": {
+    "source": "apache",
+    "extensions": ["trm"]
+  },
+  "application/x-mswrite": {
+    "source": "apache",
+    "extensions": ["wri"]
+  },
+  "application/x-netcdf": {
+    "source": "apache",
+    "extensions": ["nc","cdf"]
+  },
+  "application/x-ns-proxy-autoconfig": {
+    "compressible": true,
+    "extensions": ["pac"]
+  },
+  "application/x-nzb": {
+    "source": "apache",
+    "extensions": ["nzb"]
+  },
+  "application/x-perl": {
+    "source": "nginx",
+    "extensions": ["pl","pm"]
+  },
+  "application/x-pilot": {
+    "source": "nginx",
+    "extensions": ["prc","pdb"]
+  },
+  "application/x-pkcs12": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["p12","pfx"]
+  },
+  "application/x-pkcs7-certificates": {
+    "source": "apache",
+    "extensions": ["p7b","spc"]
+  },
+  "application/x-pkcs7-certreqresp": {
+    "source": "apache",
+    "extensions": ["p7r"]
+  },
+  "application/x-pki-message": {
+    "source": "iana"
+  },
+  "application/x-rar-compressed": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["rar"]
+  },
+  "application/x-redhat-package-manager": {
+    "source": "nginx",
+    "extensions": ["rpm"]
+  },
+  "application/x-research-info-systems": {
+    "source": "apache",
+    "extensions": ["ris"]
+  },
+  "application/x-sea": {
+    "source": "nginx",
+    "extensions": ["sea"]
+  },
+  "application/x-sh": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["sh"]
+  },
+  "application/x-shar": {
+    "source": "apache",
+    "extensions": ["shar"]
+  },
+  "application/x-shockwave-flash": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["swf"]
+  },
+  "application/x-silverlight-app": {
+    "source": "apache",
+    "extensions": ["xap"]
+  },
+  "application/x-sql": {
+    "source": "apache",
+    "extensions": ["sql"]
+  },
+  "application/x-stuffit": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["sit"]
+  },
+  "application/x-stuffitx": {
+    "source": "apache",
+    "extensions": ["sitx"]
+  },
+  "application/x-subrip": {
+    "source": "apache",
+    "extensions": ["srt"]
+  },
+  "application/x-sv4cpio": {
+    "source": "apache",
+    "extensions": ["sv4cpio"]
+  },
+  "application/x-sv4crc": {
+    "source": "apache",
+    "extensions": ["sv4crc"]
+  },
+  "application/x-t3vm-image": {
+    "source": "apache",
+    "extensions": ["t3"]
+  },
+  "application/x-tads": {
+    "source": "apache",
+    "extensions": ["gam"]
+  },
+  "application/x-tar": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["tar"]
+  },
+  "application/x-tcl": {
+    "source": "apache",
+    "extensions": ["tcl","tk"]
+  },
+  "application/x-tex": {
+    "source": "apache",
+    "extensions": ["tex"]
+  },
+  "application/x-tex-tfm": {
+    "source": "apache",
+    "extensions": ["tfm"]
+  },
+  "application/x-texinfo": {
+    "source": "apache",
+    "extensions": ["texinfo","texi"]
+  },
+  "application/x-tgif": {
+    "source": "apache",
+    "extensions": ["obj"]
+  },
+  "application/x-ustar": {
+    "source": "apache",
+    "extensions": ["ustar"]
+  },
+  "application/x-virtualbox-hdd": {
+    "compressible": true,
+    "extensions": ["hdd"]
+  },
+  "application/x-virtualbox-ova": {
+    "compressible": true,
+    "extensions": ["ova"]
+  },
+  "application/x-virtualbox-ovf": {
+    "compressible": true,
+    "extensions": ["ovf"]
+  },
+  "application/x-virtualbox-vbox": {
+    "compressible": true,
+    "extensions": ["vbox"]
+  },
+  "application/x-virtualbox-vbox-extpack": {
+    "compressible": false,
+    "extensions": ["vbox-extpack"]
+  },
+  "application/x-virtualbox-vdi": {
+    "compressible": true,
+    "extensions": ["vdi"]
+  },
+  "application/x-virtualbox-vhd": {
+    "compressible": true,
+    "extensions": ["vhd"]
+  },
+  "application/x-virtualbox-vmdk": {
+    "compressible": true,
+    "extensions": ["vmdk"]
+  },
+  "application/x-wais-source": {
+    "source": "apache",
+    "extensions": ["src"]
+  },
+  "application/x-web-app-manifest+json": {
+    "compressible": true,
+    "extensions": ["webapp"]
+  },
+  "application/x-www-form-urlencoded": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/x-x509-ca-cert": {
+    "source": "iana",
+    "extensions": ["der","crt","pem"]
+  },
+  "application/x-x509-ca-ra-cert": {
+    "source": "iana"
+  },
+  "application/x-x509-next-ca-cert": {
+    "source": "iana"
+  },
+  "application/x-xfig": {
+    "source": "apache",
+    "extensions": ["fig"]
+  },
+  "application/x-xliff+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["xlf"]
+  },
+  "application/x-xpinstall": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["xpi"]
+  },
+  "application/x-xz": {
+    "source": "apache",
+    "extensions": ["xz"]
+  },
+  "application/x-zmachine": {
+    "source": "apache",
+    "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"]
+  },
+  "application/x400-bp": {
+    "source": "iana"
+  },
+  "application/xacml+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/xaml+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["xaml"]
+  },
+  "application/xcap-att+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xav"]
+  },
+  "application/xcap-caps+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xca"]
+  },
+  "application/xcap-diff+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xdf"]
+  },
+  "application/xcap-el+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xel"]
+  },
+  "application/xcap-error+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xer"]
+  },
+  "application/xcap-ns+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xns"]
+  },
+  "application/xcon-conference-info+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/xcon-conference-info-diff+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/xenc+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xenc"]
+  },
+  "application/xhtml+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xhtml","xht"]
+  },
+  "application/xhtml-voice+xml": {
+    "source": "apache",
+    "compressible": true
+  },
+  "application/xliff+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xlf"]
+  },
+  "application/xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xml","xsl","xsd","rng"]
+  },
+  "application/xml-dtd": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["dtd"]
+  },
+  "application/xml-external-parsed-entity": {
+    "source": "iana"
+  },
+  "application/xml-patch+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/xmpp+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/xop+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xop"]
+  },
+  "application/xproc+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["xpl"]
+  },
+  "application/xslt+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xsl","xslt"]
+  },
+  "application/xspf+xml": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["xspf"]
+  },
+  "application/xv+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["mxml","xhvml","xvml","xvm"]
+  },
+  "application/yang": {
+    "source": "iana",
+    "extensions": ["yang"]
+  },
+  "application/yang-data+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/yang-data+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/yang-patch+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/yang-patch+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/yin+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["yin"]
+  },
+  "application/zip": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["zip"]
+  },
+  "application/zlib": {
+    "source": "iana"
+  },
+  "application/zstd": {
+    "source": "iana"
+  },
+  "audio/1d-interleaved-parityfec": {
+    "source": "iana"
+  },
+  "audio/32kadpcm": {
+    "source": "iana"
+  },
+  "audio/3gpp": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["3gpp"]
+  },
+  "audio/3gpp2": {
+    "source": "iana"
+  },
+  "audio/aac": {
+    "source": "iana"
+  },
+  "audio/ac3": {
+    "source": "iana"
+  },
+  "audio/adpcm": {
+    "source": "apache",
+    "extensions": ["adp"]
+  },
+  "audio/amr": {
+    "source": "iana"
+  },
+  "audio/amr-wb": {
+    "source": "iana"
+  },
+  "audio/amr-wb+": {
+    "source": "iana"
+  },
+  "audio/aptx": {
+    "source": "iana"
+  },
+  "audio/asc": {
+    "source": "iana"
+  },
+  "audio/atrac-advanced-lossless": {
+    "source": "iana"
+  },
+  "audio/atrac-x": {
+    "source": "iana"
+  },
+  "audio/atrac3": {
+    "source": "iana"
+  },
+  "audio/basic": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["au","snd"]
+  },
+  "audio/bv16": {
+    "source": "iana"
+  },
+  "audio/bv32": {
+    "source": "iana"
+  },
+  "audio/clearmode": {
+    "source": "iana"
+  },
+  "audio/cn": {
+    "source": "iana"
+  },
+  "audio/dat12": {
+    "source": "iana"
+  },
+  "audio/dls": {
+    "source": "iana"
+  },
+  "audio/dsr-es201108": {
+    "source": "iana"
+  },
+  "audio/dsr-es202050": {
+    "source": "iana"
+  },
+  "audio/dsr-es202211": {
+    "source": "iana"
+  },
+  "audio/dsr-es202212": {
+    "source": "iana"
+  },
+  "audio/dv": {
+    "source": "iana"
+  },
+  "audio/dvi4": {
+    "source": "iana"
+  },
+  "audio/eac3": {
+    "source": "iana"
+  },
+  "audio/encaprtp": {
+    "source": "iana"
+  },
+  "audio/evrc": {
+    "source": "iana"
+  },
+  "audio/evrc-qcp": {
+    "source": "iana"
+  },
+  "audio/evrc0": {
+    "source": "iana"
+  },
+  "audio/evrc1": {
+    "source": "iana"
+  },
+  "audio/evrcb": {
+    "source": "iana"
+  },
+  "audio/evrcb0": {
+    "source": "iana"
+  },
+  "audio/evrcb1": {
+    "source": "iana"
+  },
+  "audio/evrcnw": {
+    "source": "iana"
+  },
+  "audio/evrcnw0": {
+    "source": "iana"
+  },
+  "audio/evrcnw1": {
+    "source": "iana"
+  },
+  "audio/evrcwb": {
+    "source": "iana"
+  },
+  "audio/evrcwb0": {
+    "source": "iana"
+  },
+  "audio/evrcwb1": {
+    "source": "iana"
+  },
+  "audio/evs": {
+    "source": "iana"
+  },
+  "audio/flexfec": {
+    "source": "iana"
+  },
+  "audio/fwdred": {
+    "source": "iana"
+  },
+  "audio/g711-0": {
+    "source": "iana"
+  },
+  "audio/g719": {
+    "source": "iana"
+  },
+  "audio/g722": {
+    "source": "iana"
+  },
+  "audio/g7221": {
+    "source": "iana"
+  },
+  "audio/g723": {
+    "source": "iana"
+  },
+  "audio/g726-16": {
+    "source": "iana"
+  },
+  "audio/g726-24": {
+    "source": "iana"
+  },
+  "audio/g726-32": {
+    "source": "iana"
+  },
+  "audio/g726-40": {
+    "source": "iana"
+  },
+  "audio/g728": {
+    "source": "iana"
+  },
+  "audio/g729": {
+    "source": "iana"
+  },
+  "audio/g7291": {
+    "source": "iana"
+  },
+  "audio/g729d": {
+    "source": "iana"
+  },
+  "audio/g729e": {
+    "source": "iana"
+  },
+  "audio/gsm": {
+    "source": "iana"
+  },
+  "audio/gsm-efr": {
+    "source": "iana"
+  },
+  "audio/gsm-hr-08": {
+    "source": "iana"
+  },
+  "audio/ilbc": {
+    "source": "iana"
+  },
+  "audio/ip-mr_v2.5": {
+    "source": "iana"
+  },
+  "audio/isac": {
+    "source": "apache"
+  },
+  "audio/l16": {
+    "source": "iana"
+  },
+  "audio/l20": {
+    "source": "iana"
+  },
+  "audio/l24": {
+    "source": "iana",
+    "compressible": false
+  },
+  "audio/l8": {
+    "source": "iana"
+  },
+  "audio/lpc": {
+    "source": "iana"
+  },
+  "audio/melp": {
+    "source": "iana"
+  },
+  "audio/melp1200": {
+    "source": "iana"
+  },
+  "audio/melp2400": {
+    "source": "iana"
+  },
+  "audio/melp600": {
+    "source": "iana"
+  },
+  "audio/mhas": {
+    "source": "iana"
+  },
+  "audio/midi": {
+    "source": "apache",
+    "extensions": ["mid","midi","kar","rmi"]
+  },
+  "audio/mobile-xmf": {
+    "source": "iana",
+    "extensions": ["mxmf"]
+  },
+  "audio/mp3": {
+    "compressible": false,
+    "extensions": ["mp3"]
+  },
+  "audio/mp4": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["m4a","mp4a"]
+  },
+  "audio/mp4a-latm": {
+    "source": "iana"
+  },
+  "audio/mpa": {
+    "source": "iana"
+  },
+  "audio/mpa-robust": {
+    "source": "iana"
+  },
+  "audio/mpeg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"]
+  },
+  "audio/mpeg4-generic": {
+    "source": "iana"
+  },
+  "audio/musepack": {
+    "source": "apache"
+  },
+  "audio/ogg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["oga","ogg","spx"]
+  },
+  "audio/opus": {
+    "source": "iana"
+  },
+  "audio/parityfec": {
+    "source": "iana"
+  },
+  "audio/pcma": {
+    "source": "iana"
+  },
+  "audio/pcma-wb": {
+    "source": "iana"
+  },
+  "audio/pcmu": {
+    "source": "iana"
+  },
+  "audio/pcmu-wb": {
+    "source": "iana"
+  },
+  "audio/prs.sid": {
+    "source": "iana"
+  },
+  "audio/qcelp": {
+    "source": "iana"
+  },
+  "audio/raptorfec": {
+    "source": "iana"
+  },
+  "audio/red": {
+    "source": "iana"
+  },
+  "audio/rtp-enc-aescm128": {
+    "source": "iana"
+  },
+  "audio/rtp-midi": {
+    "source": "iana"
+  },
+  "audio/rtploopback": {
+    "source": "iana"
+  },
+  "audio/rtx": {
+    "source": "iana"
+  },
+  "audio/s3m": {
+    "source": "apache",
+    "extensions": ["s3m"]
+  },
+  "audio/silk": {
+    "source": "apache",
+    "extensions": ["sil"]
+  },
+  "audio/smv": {
+    "source": "iana"
+  },
+  "audio/smv-qcp": {
+    "source": "iana"
+  },
+  "audio/smv0": {
+    "source": "iana"
+  },
+  "audio/sofa": {
+    "source": "iana"
+  },
+  "audio/sp-midi": {
+    "source": "iana"
+  },
+  "audio/speex": {
+    "source": "iana"
+  },
+  "audio/t140c": {
+    "source": "iana"
+  },
+  "audio/t38": {
+    "source": "iana"
+  },
+  "audio/telephone-event": {
+    "source": "iana"
+  },
+  "audio/tetra_acelp": {
+    "source": "iana"
+  },
+  "audio/tetra_acelp_bb": {
+    "source": "iana"
+  },
+  "audio/tone": {
+    "source": "iana"
+  },
+  "audio/tsvcis": {
+    "source": "iana"
+  },
+  "audio/uemclip": {
+    "source": "iana"
+  },
+  "audio/ulpfec": {
+    "source": "iana"
+  },
+  "audio/usac": {
+    "source": "iana"
+  },
+  "audio/vdvi": {
+    "source": "iana"
+  },
+  "audio/vmr-wb": {
+    "source": "iana"
+  },
+  "audio/vnd.3gpp.iufp": {
+    "source": "iana"
+  },
+  "audio/vnd.4sb": {
+    "source": "iana"
+  },
+  "audio/vnd.audiokoz": {
+    "source": "iana"
+  },
+  "audio/vnd.celp": {
+    "source": "iana"
+  },
+  "audio/vnd.cisco.nse": {
+    "source": "iana"
+  },
+  "audio/vnd.cmles.radio-events": {
+    "source": "iana"
+  },
+  "audio/vnd.cns.anp1": {
+    "source": "iana"
+  },
+  "audio/vnd.cns.inf1": {
+    "source": "iana"
+  },
+  "audio/vnd.dece.audio": {
+    "source": "iana",
+    "extensions": ["uva","uvva"]
+  },
+  "audio/vnd.digital-winds": {
+    "source": "iana",
+    "extensions": ["eol"]
+  },
+  "audio/vnd.dlna.adts": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.heaac.1": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.heaac.2": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.mlp": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.mps": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.pl2": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.pl2x": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.pl2z": {
+    "source": "iana"
+  },
+  "audio/vnd.dolby.pulse.1": {
+    "source": "iana"
+  },
+  "audio/vnd.dra": {
+    "source": "iana",
+    "extensions": ["dra"]
+  },
+  "audio/vnd.dts": {
+    "source": "iana",
+    "extensions": ["dts"]
+  },
+  "audio/vnd.dts.hd": {
+    "source": "iana",
+    "extensions": ["dtshd"]
+  },
+  "audio/vnd.dts.uhd": {
+    "source": "iana"
+  },
+  "audio/vnd.dvb.file": {
+    "source": "iana"
+  },
+  "audio/vnd.everad.plj": {
+    "source": "iana"
+  },
+  "audio/vnd.hns.audio": {
+    "source": "iana"
+  },
+  "audio/vnd.lucent.voice": {
+    "source": "iana",
+    "extensions": ["lvp"]
+  },
+  "audio/vnd.ms-playready.media.pya": {
+    "source": "iana",
+    "extensions": ["pya"]
+  },
+  "audio/vnd.nokia.mobile-xmf": {
+    "source": "iana"
+  },
+  "audio/vnd.nortel.vbk": {
+    "source": "iana"
+  },
+  "audio/vnd.nuera.ecelp4800": {
+    "source": "iana",
+    "extensions": ["ecelp4800"]
+  },
+  "audio/vnd.nuera.ecelp7470": {
+    "source": "iana",
+    "extensions": ["ecelp7470"]
+  },
+  "audio/vnd.nuera.ecelp9600": {
+    "source": "iana",
+    "extensions": ["ecelp9600"]
+  },
+  "audio/vnd.octel.sbc": {
+    "source": "iana"
+  },
+  "audio/vnd.presonus.multitrack": {
+    "source": "iana"
+  },
+  "audio/vnd.qcelp": {
+    "source": "iana"
+  },
+  "audio/vnd.rhetorex.32kadpcm": {
+    "source": "iana"
+  },
+  "audio/vnd.rip": {
+    "source": "iana",
+    "extensions": ["rip"]
+  },
+  "audio/vnd.rn-realaudio": {
+    "compressible": false
+  },
+  "audio/vnd.sealedmedia.softseal.mpeg": {
+    "source": "iana"
+  },
+  "audio/vnd.vmx.cvsd": {
+    "source": "iana"
+  },
+  "audio/vnd.wave": {
+    "compressible": false
+  },
+  "audio/vorbis": {
+    "source": "iana",
+    "compressible": false
+  },
+  "audio/vorbis-config": {
+    "source": "iana"
+  },
+  "audio/wav": {
+    "compressible": false,
+    "extensions": ["wav"]
+  },
+  "audio/wave": {
+    "compressible": false,
+    "extensions": ["wav"]
+  },
+  "audio/webm": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["weba"]
+  },
+  "audio/x-aac": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["aac"]
+  },
+  "audio/x-aiff": {
+    "source": "apache",
+    "extensions": ["aif","aiff","aifc"]
+  },
+  "audio/x-caf": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["caf"]
+  },
+  "audio/x-flac": {
+    "source": "apache",
+    "extensions": ["flac"]
+  },
+  "audio/x-m4a": {
+    "source": "nginx",
+    "extensions": ["m4a"]
+  },
+  "audio/x-matroska": {
+    "source": "apache",
+    "extensions": ["mka"]
+  },
+  "audio/x-mpegurl": {
+    "source": "apache",
+    "extensions": ["m3u"]
+  },
+  "audio/x-ms-wax": {
+    "source": "apache",
+    "extensions": ["wax"]
+  },
+  "audio/x-ms-wma": {
+    "source": "apache",
+    "extensions": ["wma"]
+  },
+  "audio/x-pn-realaudio": {
+    "source": "apache",
+    "extensions": ["ram","ra"]
+  },
+  "audio/x-pn-realaudio-plugin": {
+    "source": "apache",
+    "extensions": ["rmp"]
+  },
+  "audio/x-realaudio": {
+    "source": "nginx",
+    "extensions": ["ra"]
+  },
+  "audio/x-tta": {
+    "source": "apache"
+  },
+  "audio/x-wav": {
+    "source": "apache",
+    "extensions": ["wav"]
+  },
+  "audio/xm": {
+    "source": "apache",
+    "extensions": ["xm"]
+  },
+  "chemical/x-cdx": {
+    "source": "apache",
+    "extensions": ["cdx"]
+  },
+  "chemical/x-cif": {
+    "source": "apache",
+    "extensions": ["cif"]
+  },
+  "chemical/x-cmdf": {
+    "source": "apache",
+    "extensions": ["cmdf"]
+  },
+  "chemical/x-cml": {
+    "source": "apache",
+    "extensions": ["cml"]
+  },
+  "chemical/x-csml": {
+    "source": "apache",
+    "extensions": ["csml"]
+  },
+  "chemical/x-pdb": {
+    "source": "apache"
+  },
+  "chemical/x-xyz": {
+    "source": "apache",
+    "extensions": ["xyz"]
+  },
+  "font/collection": {
+    "source": "iana",
+    "extensions": ["ttc"]
+  },
+  "font/otf": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["otf"]
+  },
+  "font/sfnt": {
+    "source": "iana"
+  },
+  "font/ttf": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["ttf"]
+  },
+  "font/woff": {
+    "source": "iana",
+    "extensions": ["woff"]
+  },
+  "font/woff2": {
+    "source": "iana",
+    "extensions": ["woff2"]
+  },
+  "image/aces": {
+    "source": "iana",
+    "extensions": ["exr"]
+  },
+  "image/apng": {
+    "compressible": false,
+    "extensions": ["apng"]
+  },
+  "image/avci": {
+    "source": "iana"
+  },
+  "image/avcs": {
+    "source": "iana"
+  },
+  "image/avif": {
+    "compressible": false,
+    "extensions": ["avif"]
+  },
+  "image/bmp": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["bmp"]
+  },
+  "image/cgm": {
+    "source": "iana",
+    "extensions": ["cgm"]
+  },
+  "image/dicom-rle": {
+    "source": "iana",
+    "extensions": ["drle"]
+  },
+  "image/emf": {
+    "source": "iana",
+    "extensions": ["emf"]
+  },
+  "image/fits": {
+    "source": "iana",
+    "extensions": ["fits"]
+  },
+  "image/g3fax": {
+    "source": "iana",
+    "extensions": ["g3"]
+  },
+  "image/gif": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["gif"]
+  },
+  "image/heic": {
+    "source": "iana",
+    "extensions": ["heic"]
+  },
+  "image/heic-sequence": {
+    "source": "iana",
+    "extensions": ["heics"]
+  },
+  "image/heif": {
+    "source": "iana",
+    "extensions": ["heif"]
+  },
+  "image/heif-sequence": {
+    "source": "iana",
+    "extensions": ["heifs"]
+  },
+  "image/hej2k": {
+    "source": "iana",
+    "extensions": ["hej2"]
+  },
+  "image/hsj2": {
+    "source": "iana",
+    "extensions": ["hsj2"]
+  },
+  "image/ief": {
+    "source": "iana",
+    "extensions": ["ief"]
+  },
+  "image/jls": {
+    "source": "iana",
+    "extensions": ["jls"]
+  },
+  "image/jp2": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["jp2","jpg2"]
+  },
+  "image/jpeg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["jpeg","jpg","jpe"]
+  },
+  "image/jph": {
+    "source": "iana",
+    "extensions": ["jph"]
+  },
+  "image/jphc": {
+    "source": "iana",
+    "extensions": ["jhc"]
+  },
+  "image/jpm": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["jpm"]
+  },
+  "image/jpx": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["jpx","jpf"]
+  },
+  "image/jxr": {
+    "source": "iana",
+    "extensions": ["jxr"]
+  },
+  "image/jxra": {
+    "source": "iana",
+    "extensions": ["jxra"]
+  },
+  "image/jxrs": {
+    "source": "iana",
+    "extensions": ["jxrs"]
+  },
+  "image/jxs": {
+    "source": "iana",
+    "extensions": ["jxs"]
+  },
+  "image/jxsc": {
+    "source": "iana",
+    "extensions": ["jxsc"]
+  },
+  "image/jxsi": {
+    "source": "iana",
+    "extensions": ["jxsi"]
+  },
+  "image/jxss": {
+    "source": "iana",
+    "extensions": ["jxss"]
+  },
+  "image/ktx": {
+    "source": "iana",
+    "extensions": ["ktx"]
+  },
+  "image/ktx2": {
+    "source": "iana",
+    "extensions": ["ktx2"]
+  },
+  "image/naplps": {
+    "source": "iana"
+  },
+  "image/pjpeg": {
+    "compressible": false
+  },
+  "image/png": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["png"]
+  },
+  "image/prs.btif": {
+    "source": "iana",
+    "extensions": ["btif"]
+  },
+  "image/prs.pti": {
+    "source": "iana",
+    "extensions": ["pti"]
+  },
+  "image/pwg-raster": {
+    "source": "iana"
+  },
+  "image/sgi": {
+    "source": "apache",
+    "extensions": ["sgi"]
+  },
+  "image/svg+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["svg","svgz"]
+  },
+  "image/t38": {
+    "source": "iana",
+    "extensions": ["t38"]
+  },
+  "image/tiff": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["tif","tiff"]
+  },
+  "image/tiff-fx": {
+    "source": "iana",
+    "extensions": ["tfx"]
+  },
+  "image/vnd.adobe.photoshop": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["psd"]
+  },
+  "image/vnd.airzip.accelerator.azv": {
+    "source": "iana",
+    "extensions": ["azv"]
+  },
+  "image/vnd.cns.inf2": {
+    "source": "iana"
+  },
+  "image/vnd.dece.graphic": {
+    "source": "iana",
+    "extensions": ["uvi","uvvi","uvg","uvvg"]
+  },
+  "image/vnd.djvu": {
+    "source": "iana",
+    "extensions": ["djvu","djv"]
+  },
+  "image/vnd.dvb.subtitle": {
+    "source": "iana",
+    "extensions": ["sub"]
+  },
+  "image/vnd.dwg": {
+    "source": "iana",
+    "extensions": ["dwg"]
+  },
+  "image/vnd.dxf": {
+    "source": "iana",
+    "extensions": ["dxf"]
+  },
+  "image/vnd.fastbidsheet": {
+    "source": "iana",
+    "extensions": ["fbs"]
+  },
+  "image/vnd.fpx": {
+    "source": "iana",
+    "extensions": ["fpx"]
+  },
+  "image/vnd.fst": {
+    "source": "iana",
+    "extensions": ["fst"]
+  },
+  "image/vnd.fujixerox.edmics-mmr": {
+    "source": "iana",
+    "extensions": ["mmr"]
+  },
+  "image/vnd.fujixerox.edmics-rlc": {
+    "source": "iana",
+    "extensions": ["rlc"]
+  },
+  "image/vnd.globalgraphics.pgb": {
+    "source": "iana"
+  },
+  "image/vnd.microsoft.icon": {
+    "source": "iana",
+    "extensions": ["ico"]
+  },
+  "image/vnd.mix": {
+    "source": "iana"
+  },
+  "image/vnd.mozilla.apng": {
+    "source": "iana"
+  },
+  "image/vnd.ms-dds": {
+    "extensions": ["dds"]
+  },
+  "image/vnd.ms-modi": {
+    "source": "iana",
+    "extensions": ["mdi"]
+  },
+  "image/vnd.ms-photo": {
+    "source": "apache",
+    "extensions": ["wdp"]
+  },
+  "image/vnd.net-fpx": {
+    "source": "iana",
+    "extensions": ["npx"]
+  },
+  "image/vnd.pco.b16": {
+    "source": "iana",
+    "extensions": ["b16"]
+  },
+  "image/vnd.radiance": {
+    "source": "iana"
+  },
+  "image/vnd.sealed.png": {
+    "source": "iana"
+  },
+  "image/vnd.sealedmedia.softseal.gif": {
+    "source": "iana"
+  },
+  "image/vnd.sealedmedia.softseal.jpg": {
+    "source": "iana"
+  },
+  "image/vnd.svf": {
+    "source": "iana"
+  },
+  "image/vnd.tencent.tap": {
+    "source": "iana",
+    "extensions": ["tap"]
+  },
+  "image/vnd.valve.source.texture": {
+    "source": "iana",
+    "extensions": ["vtf"]
+  },
+  "image/vnd.wap.wbmp": {
+    "source": "iana",
+    "extensions": ["wbmp"]
+  },
+  "image/vnd.xiff": {
+    "source": "iana",
+    "extensions": ["xif"]
+  },
+  "image/vnd.zbrush.pcx": {
+    "source": "iana",
+    "extensions": ["pcx"]
+  },
+  "image/webp": {
+    "source": "apache",
+    "extensions": ["webp"]
+  },
+  "image/wmf": {
+    "source": "iana",
+    "extensions": ["wmf"]
+  },
+  "image/x-3ds": {
+    "source": "apache",
+    "extensions": ["3ds"]
+  },
+  "image/x-cmu-raster": {
+    "source": "apache",
+    "extensions": ["ras"]
+  },
+  "image/x-cmx": {
+    "source": "apache",
+    "extensions": ["cmx"]
+  },
+  "image/x-freehand": {
+    "source": "apache",
+    "extensions": ["fh","fhc","fh4","fh5","fh7"]
+  },
+  "image/x-icon": {
+    "source": "apache",
+    "compressible": true,
+    "extensions": ["ico"]
+  },
+  "image/x-jng": {
+    "source": "nginx",
+    "extensions": ["jng"]
+  },
+  "image/x-mrsid-image": {
+    "source": "apache",
+    "extensions": ["sid"]
+  },
+  "image/x-ms-bmp": {
+    "source": "nginx",
+    "compressible": true,
+    "extensions": ["bmp"]
+  },
+  "image/x-pcx": {
+    "source": "apache",
+    "extensions": ["pcx"]
+  },
+  "image/x-pict": {
+    "source": "apache",
+    "extensions": ["pic","pct"]
+  },
+  "image/x-portable-anymap": {
+    "source": "apache",
+    "extensions": ["pnm"]
+  },
+  "image/x-portable-bitmap": {
+    "source": "apache",
+    "extensions": ["pbm"]
+  },
+  "image/x-portable-graymap": {
+    "source": "apache",
+    "extensions": ["pgm"]
+  },
+  "image/x-portable-pixmap": {
+    "source": "apache",
+    "extensions": ["ppm"]
+  },
+  "image/x-rgb": {
+    "source": "apache",
+    "extensions": ["rgb"]
+  },
+  "image/x-tga": {
+    "source": "apache",
+    "extensions": ["tga"]
+  },
+  "image/x-xbitmap": {
+    "source": "apache",
+    "extensions": ["xbm"]
+  },
+  "image/x-xcf": {
+    "compressible": false
+  },
+  "image/x-xpixmap": {
+    "source": "apache",
+    "extensions": ["xpm"]
+  },
+  "image/x-xwindowdump": {
+    "source": "apache",
+    "extensions": ["xwd"]
+  },
+  "message/cpim": {
+    "source": "iana"
+  },
+  "message/delivery-status": {
+    "source": "iana"
+  },
+  "message/disposition-notification": {
+    "source": "iana",
+    "extensions": [
+      "disposition-notification"
+    ]
+  },
+  "message/external-body": {
+    "source": "iana"
+  },
+  "message/feedback-report": {
+    "source": "iana"
+  },
+  "message/global": {
+    "source": "iana",
+    "extensions": ["u8msg"]
+  },
+  "message/global-delivery-status": {
+    "source": "iana",
+    "extensions": ["u8dsn"]
+  },
+  "message/global-disposition-notification": {
+    "source": "iana",
+    "extensions": ["u8mdn"]
+  },
+  "message/global-headers": {
+    "source": "iana",
+    "extensions": ["u8hdr"]
+  },
+  "message/http": {
+    "source": "iana",
+    "compressible": false
+  },
+  "message/imdn+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "message/news": {
+    "source": "iana"
+  },
+  "message/partial": {
+    "source": "iana",
+    "compressible": false
+  },
+  "message/rfc822": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["eml","mime"]
+  },
+  "message/s-http": {
+    "source": "iana"
+  },
+  "message/sip": {
+    "source": "iana"
+  },
+  "message/sipfrag": {
+    "source": "iana"
+  },
+  "message/tracking-status": {
+    "source": "iana"
+  },
+  "message/vnd.si.simp": {
+    "source": "iana"
+  },
+  "message/vnd.wfa.wsc": {
+    "source": "iana",
+    "extensions": ["wsc"]
+  },
+  "model/3mf": {
+    "source": "iana",
+    "extensions": ["3mf"]
+  },
+  "model/e57": {
+    "source": "iana"
+  },
+  "model/gltf+json": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["gltf"]
+  },
+  "model/gltf-binary": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["glb"]
+  },
+  "model/iges": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["igs","iges"]
+  },
+  "model/mesh": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["msh","mesh","silo"]
+  },
+  "model/mtl": {
+    "source": "iana",
+    "extensions": ["mtl"]
+  },
+  "model/obj": {
+    "source": "iana",
+    "extensions": ["obj"]
+  },
+  "model/stl": {
+    "source": "iana",
+    "extensions": ["stl"]
+  },
+  "model/vnd.collada+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["dae"]
+  },
+  "model/vnd.dwf": {
+    "source": "iana",
+    "extensions": ["dwf"]
+  },
+  "model/vnd.flatland.3dml": {
+    "source": "iana"
+  },
+  "model/vnd.gdl": {
+    "source": "iana",
+    "extensions": ["gdl"]
+  },
+  "model/vnd.gs-gdl": {
+    "source": "apache"
+  },
+  "model/vnd.gs.gdl": {
+    "source": "iana"
+  },
+  "model/vnd.gtw": {
+    "source": "iana",
+    "extensions": ["gtw"]
+  },
+  "model/vnd.moml+xml": {
+    "source": "iana",
+    "compressible": true
+  },
+  "model/vnd.mts": {
+    "source": "iana",
+    "extensions": ["mts"]
+  },
+  "model/vnd.opengex": {
+    "source": "iana",
+    "extensions": ["ogex"]
+  },
+  "model/vnd.parasolid.transmit.binary": {
+    "source": "iana",
+    "extensions": ["x_b"]
+  },
+  "model/vnd.parasolid.transmit.text": {
+    "source": "iana",
+    "extensions": ["x_t"]
+  },
+  "model/vnd.rosette.annotated-data-model": {
+    "source": "iana"
+  },
+  "model/vnd.usdz+zip": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["usdz"]
+  },
+  "model/vnd.valve.source.compiled-map": {
+    "source": "iana",
+    "extensions": ["bsp"]
+  },
+  "model/vnd.vtu": {
+    "source": "iana",
+    "extensions": ["vtu"]
+  },
+  "model/vrml": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["wrl","vrml"]
+  },
+  "model/x3d+binary": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["x3db","x3dbz"]
+  },
+  "model/x3d+fastinfoset": {
+    "source": "iana",
+    "extensions": ["x3db"]
+  },
+  "model/x3d+vrml": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["x3dv","x3dvz"]
+  },
+  "model/x3d+xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["x3d","x3dz"]
+  },
+  "model/x3d-vrml": {
+    "source": "iana",
+    "extensions": ["x3dv"]
+  },
+  "multipart/alternative": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/appledouble": {
+    "source": "iana"
+  },
+  "multipart/byteranges": {
+    "source": "iana"
+  },
+  "multipart/digest": {
+    "source": "iana"
+  },
+  "multipart/encrypted": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/form-data": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/header-set": {
+    "source": "iana"
+  },
+  "multipart/mixed": {
+    "source": "iana"
+  },
+  "multipart/multilingual": {
+    "source": "iana"
+  },
+  "multipart/parallel": {
+    "source": "iana"
+  },
+  "multipart/related": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/report": {
+    "source": "iana"
+  },
+  "multipart/signed": {
+    "source": "iana",
+    "compressible": false
+  },
+  "multipart/vnd.bint.med-plus": {
+    "source": "iana"
+  },
+  "multipart/voice-message": {
+    "source": "iana"
+  },
+  "multipart/x-mixed-replace": {
+    "source": "iana"
+  },
+  "text/1d-interleaved-parityfec": {
+    "source": "iana"
+  },
+  "text/cache-manifest": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["appcache","manifest"]
+  },
+  "text/calendar": {
+    "source": "iana",
+    "extensions": ["ics","ifb"]
+  },
+  "text/calender": {
+    "compressible": true
+  },
+  "text/cmd": {
+    "compressible": true
+  },
+  "text/coffeescript": {
+    "extensions": ["coffee","litcoffee"]
+  },
+  "text/css": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["css"]
+  },
+  "text/csv": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["csv"]
+  },
+  "text/csv-schema": {
+    "source": "iana"
+  },
+  "text/directory": {
+    "source": "iana"
+  },
+  "text/dns": {
+    "source": "iana"
+  },
+  "text/ecmascript": {
+    "source": "iana"
+  },
+  "text/encaprtp": {
+    "source": "iana"
+  },
+  "text/enriched": {
+    "source": "iana"
+  },
+  "text/flexfec": {
+    "source": "iana"
+  },
+  "text/fwdred": {
+    "source": "iana"
+  },
+  "text/gff3": {
+    "source": "iana"
+  },
+  "text/grammar-ref-list": {
+    "source": "iana"
+  },
+  "text/html": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["html","htm","shtml"]
+  },
+  "text/jade": {
+    "extensions": ["jade"]
+  },
+  "text/javascript": {
+    "source": "iana",
+    "compressible": true
+  },
+  "text/jcr-cnd": {
+    "source": "iana"
+  },
+  "text/jsx": {
+    "compressible": true,
+    "extensions": ["jsx"]
+  },
+  "text/less": {
+    "compressible": true,
+    "extensions": ["less"]
+  },
+  "text/markdown": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["markdown","md"]
+  },
+  "text/mathml": {
+    "source": "nginx",
+    "extensions": ["mml"]
+  },
+  "text/mdx": {
+    "compressible": true,
+    "extensions": ["mdx"]
+  },
+  "text/mizar": {
+    "source": "iana"
+  },
+  "text/n3": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["n3"]
+  },
+  "text/parameters": {
+    "source": "iana",
+    "charset": "UTF-8"
+  },
+  "text/parityfec": {
+    "source": "iana"
+  },
+  "text/plain": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["txt","text","conf","def","list","log","in","ini"]
+  },
+  "text/provenance-notation": {
+    "source": "iana",
+    "charset": "UTF-8"
+  },
+  "text/prs.fallenstein.rst": {
+    "source": "iana"
+  },
+  "text/prs.lines.tag": {
+    "source": "iana",
+    "extensions": ["dsc"]
+  },
+  "text/prs.prop.logic": {
+    "source": "iana"
+  },
+  "text/raptorfec": {
+    "source": "iana"
+  },
+  "text/red": {
+    "source": "iana"
+  },
+  "text/rfc822-headers": {
+    "source": "iana"
+  },
+  "text/richtext": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rtx"]
+  },
+  "text/rtf": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["rtf"]
+  },
+  "text/rtp-enc-aescm128": {
+    "source": "iana"
+  },
+  "text/rtploopback": {
+    "source": "iana"
+  },
+  "text/rtx": {
+    "source": "iana"
+  },
+  "text/sgml": {
+    "source": "iana",
+    "extensions": ["sgml","sgm"]
+  },
+  "text/shaclc": {
+    "source": "iana"
+  },
+  "text/shex": {
+    "extensions": ["shex"]
+  },
+  "text/slim": {
+    "extensions": ["slim","slm"]
+  },
+  "text/spdx": {
+    "source": "iana",
+    "extensions": ["spdx"]
+  },
+  "text/strings": {
+    "source": "iana"
+  },
+  "text/stylus": {
+    "extensions": ["stylus","styl"]
+  },
+  "text/t140": {
+    "source": "iana"
+  },
+  "text/tab-separated-values": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["tsv"]
+  },
+  "text/troff": {
+    "source": "iana",
+    "extensions": ["t","tr","roff","man","me","ms"]
+  },
+  "text/turtle": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "extensions": ["ttl"]
+  },
+  "text/ulpfec": {
+    "source": "iana"
+  },
+  "text/uri-list": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["uri","uris","urls"]
+  },
+  "text/vcard": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["vcard"]
+  },
+  "text/vnd.a": {
+    "source": "iana"
+  },
+  "text/vnd.abc": {
+    "source": "iana"
+  },
+  "text/vnd.ascii-art": {
+    "source": "iana"
+  },
+  "text/vnd.curl": {
+    "source": "iana",
+    "extensions": ["curl"]
+  },
+  "text/vnd.curl.dcurl": {
+    "source": "apache",
+    "extensions": ["dcurl"]
+  },
+  "text/vnd.curl.mcurl": {
+    "source": "apache",
+    "extensions": ["mcurl"]
+  },
+  "text/vnd.curl.scurl": {
+    "source": "apache",
+    "extensions": ["scurl"]
+  },
+  "text/vnd.debian.copyright": {
+    "source": "iana",
+    "charset": "UTF-8"
+  },
+  "text/vnd.dmclientscript": {
+    "source": "iana"
+  },
+  "text/vnd.dvb.subtitle": {
+    "source": "iana",
+    "extensions": ["sub"]
+  },
+  "text/vnd.esmertec.theme-descriptor": {
+    "source": "iana",
+    "charset": "UTF-8"
+  },
+  "text/vnd.ficlab.flt": {
+    "source": "iana"
+  },
+  "text/vnd.fly": {
+    "source": "iana",
+    "extensions": ["fly"]
+  },
+  "text/vnd.fmi.flexstor": {
+    "source": "iana",
+    "extensions": ["flx"]
+  },
+  "text/vnd.gml": {
+    "source": "iana"
+  },
+  "text/vnd.graphviz": {
+    "source": "iana",
+    "extensions": ["gv"]
+  },
+  "text/vnd.hans": {
+    "source": "iana"
+  },
+  "text/vnd.hgl": {
+    "source": "iana"
+  },
+  "text/vnd.in3d.3dml": {
+    "source": "iana",
+    "extensions": ["3dml"]
+  },
+  "text/vnd.in3d.spot": {
+    "source": "iana",
+    "extensions": ["spot"]
+  },
+  "text/vnd.iptc.newsml": {
+    "source": "iana"
+  },
+  "text/vnd.iptc.nitf": {
+    "source": "iana"
+  },
+  "text/vnd.latex-z": {
+    "source": "iana"
+  },
+  "text/vnd.motorola.reflex": {
+    "source": "iana"
+  },
+  "text/vnd.ms-mediapackage": {
+    "source": "iana"
+  },
+  "text/vnd.net2phone.commcenter.command": {
+    "source": "iana"
+  },
+  "text/vnd.radisys.msml-basic-layout": {
+    "source": "iana"
+  },
+  "text/vnd.senx.warpscript": {
+    "source": "iana"
+  },
+  "text/vnd.si.uricatalogue": {
+    "source": "iana"
+  },
+  "text/vnd.sosi": {
+    "source": "iana"
+  },
+  "text/vnd.sun.j2me.app-descriptor": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "extensions": ["jad"]
+  },
+  "text/vnd.trolltech.linguist": {
+    "source": "iana",
+    "charset": "UTF-8"
+  },
+  "text/vnd.wap.si": {
+    "source": "iana"
+  },
+  "text/vnd.wap.sl": {
+    "source": "iana"
+  },
+  "text/vnd.wap.wml": {
+    "source": "iana",
+    "extensions": ["wml"]
+  },
+  "text/vnd.wap.wmlscript": {
+    "source": "iana",
+    "extensions": ["wmls"]
+  },
+  "text/vtt": {
+    "source": "iana",
+    "charset": "UTF-8",
+    "compressible": true,
+    "extensions": ["vtt"]
+  },
+  "text/x-asm": {
+    "source": "apache",
+    "extensions": ["s","asm"]
+  },
+  "text/x-c": {
+    "source": "apache",
+    "extensions": ["c","cc","cxx","cpp","h","hh","dic"]
+  },
+  "text/x-component": {
+    "source": "nginx",
+    "extensions": ["htc"]
+  },
+  "text/x-fortran": {
+    "source": "apache",
+    "extensions": ["f","for","f77","f90"]
+  },
+  "text/x-gwt-rpc": {
+    "compressible": true
+  },
+  "text/x-handlebars-template": {
+    "extensions": ["hbs"]
+  },
+  "text/x-java-source": {
+    "source": "apache",
+    "extensions": ["java"]
+  },
+  "text/x-jquery-tmpl": {
+    "compressible": true
+  },
+  "text/x-lua": {
+    "extensions": ["lua"]
+  },
+  "text/x-markdown": {
+    "compressible": true,
+    "extensions": ["mkd"]
+  },
+  "text/x-nfo": {
+    "source": "apache",
+    "extensions": ["nfo"]
+  },
+  "text/x-opml": {
+    "source": "apache",
+    "extensions": ["opml"]
+  },
+  "text/x-org": {
+    "compressible": true,
+    "extensions": ["org"]
+  },
+  "text/x-pascal": {
+    "source": "apache",
+    "extensions": ["p","pas"]
+  },
+  "text/x-processing": {
+    "compressible": true,
+    "extensions": ["pde"]
+  },
+  "text/x-sass": {
+    "extensions": ["sass"]
+  },
+  "text/x-scss": {
+    "extensions": ["scss"]
+  },
+  "text/x-setext": {
+    "source": "apache",
+    "extensions": ["etx"]
+  },
+  "text/x-sfv": {
+    "source": "apache",
+    "extensions": ["sfv"]
+  },
+  "text/x-suse-ymp": {
+    "compressible": true,
+    "extensions": ["ymp"]
+  },
+  "text/x-uuencode": {
+    "source": "apache",
+    "extensions": ["uu"]
+  },
+  "text/x-vcalendar": {
+    "source": "apache",
+    "extensions": ["vcs"]
+  },
+  "text/x-vcard": {
+    "source": "apache",
+    "extensions": ["vcf"]
+  },
+  "text/xml": {
+    "source": "iana",
+    "compressible": true,
+    "extensions": ["xml"]
+  },
+  "text/xml-external-parsed-entity": {
+    "source": "iana"
+  },
+  "text/yaml": {
+    "extensions": ["yaml","yml"]
+  },
+  "video/1d-interleaved-parityfec": {
+    "source": "iana"
+  },
+  "video/3gpp": {
+    "source": "iana",
+    "extensions": ["3gp","3gpp"]
+  },
+  "video/3gpp-tt": {
+    "source": "iana"
+  },
+  "video/3gpp2": {
+    "source": "iana",
+    "extensions": ["3g2"]
+  },
+  "video/bmpeg": {
+    "source": "iana"
+  },
+  "video/bt656": {
+    "source": "iana"
+  },
+  "video/celb": {
+    "source": "iana"
+  },
+  "video/dv": {
+    "source": "iana"
+  },
+  "video/encaprtp": {
+    "source": "iana"
+  },
+  "video/flexfec": {
+    "source": "iana"
+  },
+  "video/h261": {
+    "source": "iana",
+    "extensions": ["h261"]
+  },
+  "video/h263": {
+    "source": "iana",
+    "extensions": ["h263"]
+  },
+  "video/h263-1998": {
+    "source": "iana"
+  },
+  "video/h263-2000": {
+    "source": "iana"
+  },
+  "video/h264": {
+    "source": "iana",
+    "extensions": ["h264"]
+  },
+  "video/h264-rcdo": {
+    "source": "iana"
+  },
+  "video/h264-svc": {
+    "source": "iana"
+  },
+  "video/h265": {
+    "source": "iana"
+  },
+  "video/iso.segment": {
+    "source": "iana"
+  },
+  "video/jpeg": {
+    "source": "iana",
+    "extensions": ["jpgv"]
+  },
+  "video/jpeg2000": {
+    "source": "iana"
+  },
+  "video/jpm": {
+    "source": "apache",
+    "extensions": ["jpm","jpgm"]
+  },
+  "video/mj2": {
+    "source": "iana",
+    "extensions": ["mj2","mjp2"]
+  },
+  "video/mp1s": {
+    "source": "iana"
+  },
+  "video/mp2p": {
+    "source": "iana"
+  },
+  "video/mp2t": {
+    "source": "iana",
+    "extensions": ["ts"]
+  },
+  "video/mp4": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["mp4","mp4v","mpg4"]
+  },
+  "video/mp4v-es": {
+    "source": "iana"
+  },
+  "video/mpeg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["mpeg","mpg","mpe","m1v","m2v"]
+  },
+  "video/mpeg4-generic": {
+    "source": "iana"
+  },
+  "video/mpv": {
+    "source": "iana"
+  },
+  "video/nv": {
+    "source": "iana"
+  },
+  "video/ogg": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["ogv"]
+  },
+  "video/parityfec": {
+    "source": "iana"
+  },
+  "video/pointer": {
+    "source": "iana"
+  },
+  "video/quicktime": {
+    "source": "iana",
+    "compressible": false,
+    "extensions": ["qt","mov"]
+  },
+  "video/raptorfec": {
+    "source": "iana"
+  },
+  "video/raw": {
+    "source": "iana"
+  },
+  "video/rtp-enc-aescm128": {
+    "source": "iana"
+  },
+  "video/rtploopback": {
+    "source": "iana"
+  },
+  "video/rtx": {
+    "source": "iana"
+  },
+  "video/smpte291": {
+    "source": "iana"
+  },
+  "video/smpte292m": {
+    "source": "iana"
+  },
+  "video/ulpfec": {
+    "source": "iana"
+  },
+  "video/vc1": {
+    "source": "iana"
+  },
+  "video/vc2": {
+    "source": "iana"
+  },
+  "video/vnd.cctv": {
+    "source": "iana"
+  },
+  "video/vnd.dece.hd": {
+    "source": "iana",
+    "extensions": ["uvh","uvvh"]
+  },
+  "video/vnd.dece.mobile": {
+    "source": "iana",
+    "extensions": ["uvm","uvvm"]
+  },
+  "video/vnd.dece.mp4": {
+    "source": "iana"
+  },
+  "video/vnd.dece.pd": {
+    "source": "iana",
+    "extensions": ["uvp","uvvp"]
+  },
+  "video/vnd.dece.sd": {
+    "source": "iana",
+    "extensions": ["uvs","uvvs"]
+  },
+  "video/vnd.dece.video": {
+    "source": "iana",
+    "extensions": ["uvv","uvvv"]
+  },
+  "video/vnd.directv.mpeg": {
+    "source": "iana"
+  },
+  "video/vnd.directv.mpeg-tts": {
+    "source": "iana"
+  },
+  "video/vnd.dlna.mpeg-tts": {
+    "source": "iana"
+  },
+  "video/vnd.dvb.file": {
+    "source": "iana",
+    "extensions": ["dvb"]
+  },
+  "video/vnd.fvt": {
+    "source": "iana",
+    "extensions": ["fvt"]
+  },
+  "video/vnd.hns.video": {
+    "source": "iana"
+  },
+  "video/vnd.iptvforum.1dparityfec-1010": {
+    "source": "iana"
+  },
+  "video/vnd.iptvforum.1dparityfec-2005": {
+    "source": "iana"
+  },
+  "video/vnd.iptvforum.2dparityfec-1010": {
+    "source": "iana"
+  },
+  "video/vnd.iptvforum.2dparityfec-2005": {
+    "source": "iana"
+  },
+  "video/vnd.iptvforum.ttsavc": {
+    "source": "iana"
+  },
+  "video/vnd.iptvforum.ttsmpeg2": {
+    "source": "iana"
+  },
+  "video/vnd.motorola.video": {
+    "source": "iana"
+  },
+  "video/vnd.motorola.videop": {
+    "source": "iana"
+  },
+  "video/vnd.mpegurl": {
+    "source": "iana",
+    "extensions": ["mxu","m4u"]
+  },
+  "video/vnd.ms-playready.media.pyv": {
+    "source": "iana",
+    "extensions": ["pyv"]
+  },
+  "video/vnd.nokia.interleaved-multimedia": {
+    "source": "iana"
+  },
+  "video/vnd.nokia.mp4vr": {
+    "source": "iana"
+  },
+  "video/vnd.nokia.videovoip": {
+    "source": "iana"
+  },
+  "video/vnd.objectvideo": {
+    "source": "iana"
+  },
+  "video/vnd.radgamettools.bink": {
+    "source": "iana"
+  },
+  "video/vnd.radgamettools.smacker": {
+    "source": "iana"
+  },
+  "video/vnd.sealed.mpeg1": {
+    "source": "iana"
+  },
+  "video/vnd.sealed.mpeg4": {
+    "source": "iana"
+  },
+  "video/vnd.sealed.swf": {
+    "source": "iana"
+  },
+  "video/vnd.sealedmedia.softseal.mov": {
+    "source": "iana"
+  },
+  "video/vnd.uvvu.mp4": {
+    "source": "iana",
+    "extensions": ["uvu","uvvu"]
+  },
+  "video/vnd.vivo": {
+    "source": "iana",
+    "extensions": ["viv"]
+  },
+  "video/vnd.youtube.yt": {
+    "source": "iana"
+  },
+  "video/vp8": {
+    "source": "iana"
+  },
+  "video/webm": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["webm"]
+  },
+  "video/x-f4v": {
+    "source": "apache",
+    "extensions": ["f4v"]
+  },
+  "video/x-fli": {
+    "source": "apache",
+    "extensions": ["fli"]
+  },
+  "video/x-flv": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["flv"]
+  },
+  "video/x-m4v": {
+    "source": "apache",
+    "extensions": ["m4v"]
+  },
+  "video/x-matroska": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["mkv","mk3d","mks"]
+  },
+  "video/x-mng": {
+    "source": "apache",
+    "extensions": ["mng"]
+  },
+  "video/x-ms-asf": {
+    "source": "apache",
+    "extensions": ["asf","asx"]
+  },
+  "video/x-ms-vob": {
+    "source": "apache",
+    "extensions": ["vob"]
+  },
+  "video/x-ms-wm": {
+    "source": "apache",
+    "extensions": ["wm"]
+  },
+  "video/x-ms-wmv": {
+    "source": "apache",
+    "compressible": false,
+    "extensions": ["wmv"]
+  },
+  "video/x-ms-wmx": {
+    "source": "apache",
+    "extensions": ["wmx"]
+  },
+  "video/x-ms-wvx": {
+    "source": "apache",
+    "extensions": ["wvx"]
+  },
+  "video/x-msvideo": {
+    "source": "apache",
+    "extensions": ["avi"]
+  },
+  "video/x-sgi-movie": {
+    "source": "apache",
+    "extensions": ["movie"]
+  },
+  "video/x-smv": {
+    "source": "apache",
+    "extensions": ["smv"]
+  },
+  "x-conference/x-cooltalk": {
+    "source": "apache",
+    "extensions": ["ice"]
+  },
+  "x-shader/x-fragment": {
+    "compressible": true
+  },
+  "x-shader/x-vertex": {
+    "compressible": true
+  }
+}
diff --git a/signaling_server/service/node_modules/mime-db/package.json b/signaling_server/service/node_modules/mime-db/package.json
new file mode 100644 (file)
index 0000000..c2d1a72
--- /dev/null
@@ -0,0 +1,105 @@
+{
+  "_args": [
+    [
+      "mime-db@1.45.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "mime-db@1.45.0",
+  "_id": "mime-db@1.45.0",
+  "_inBundle": false,
+  "_integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
+  "_location": "/mime-db",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "mime-db@1.45.0",
+    "name": "mime-db",
+    "escapedName": "mime-db",
+    "rawSpec": "1.45.0",
+    "saveSpec": null,
+    "fetchSpec": "1.45.0"
+  },
+  "_requiredBy": [
+    "/mime-types"
+  ],
+  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
+  "_spec": "1.45.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/jshttp/mime-db/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    },
+    {
+      "name": "Robert Kieffer",
+      "email": "robert@broofa.com",
+      "url": "http://github.com/broofa"
+    }
+  ],
+  "description": "Media Type Database",
+  "devDependencies": {
+    "bluebird": "3.7.2",
+    "co": "4.6.0",
+    "cogent": "1.0.1",
+    "csv-parse": "4.12.0",
+    "eslint": "7.9.0",
+    "eslint-config-standard": "14.1.1",
+    "eslint-plugin-import": "2.22.0",
+    "eslint-plugin-markdown": "1.0.2",
+    "eslint-plugin-node": "11.1.0",
+    "eslint-plugin-promise": "4.2.1",
+    "eslint-plugin-standard": "4.0.1",
+    "gnode": "0.1.2",
+    "mocha": "8.1.3",
+    "nyc": "15.1.0",
+    "raw-body": "2.4.1",
+    "stream-to-array": "2.3.0"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "README.md",
+    "db.json",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/mime-db#readme",
+  "keywords": [
+    "mime",
+    "db",
+    "type",
+    "types",
+    "database",
+    "charset",
+    "charsets"
+  ],
+  "license": "MIT",
+  "name": "mime-db",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/mime-db.git"
+  },
+  "scripts": {
+    "build": "node scripts/build",
+    "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx",
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "nyc --reporter=html --reporter=text npm test",
+    "test-travis": "nyc --reporter=text npm test",
+    "update": "npm run fetch && npm run build",
+    "version": "node scripts/version-history.js && git add HISTORY.md"
+  },
+  "version": "1.45.0"
+}
diff --git a/signaling_server/service/node_modules/mime-types/HISTORY.md b/signaling_server/service/node_modules/mime-types/HISTORY.md
new file mode 100644 (file)
index 0000000..af65fdb
--- /dev/null
@@ -0,0 +1,346 @@
+2.1.28 / 2021-01-01
+===================
+
+  * deps: mime-db@1.45.0
+    - Add `application/ubjson` with extension `.ubj`
+    - Add `image/avif` with extension `.avif`
+    - Add `image/ktx2` with extension `.ktx2`
+    - Add extension `.dbf` to `application/vnd.dbf`
+    - Add extension `.rar` to `application/vnd.rar`
+    - Add extension `.td` to `application/urc-targetdesc+xml`
+    - Add new upstream MIME types
+    - Fix extension of `application/vnd.apple.keynote` to be `.key`
+
+2.1.27 / 2020-04-23
+===================
+
+  * deps: mime-db@1.44.0
+    - Add charsets from IANA
+    - Add extension `.cjs` to `application/node`
+    - Add new upstream MIME types
+
+2.1.26 / 2020-01-05
+===================
+
+  * deps: mime-db@1.43.0
+    - Add `application/x-keepass2` with extension `.kdbx`
+    - Add extension `.mxmf` to `audio/mobile-xmf`
+    - Add extensions from IANA for `application/*+xml` types
+    - Add new upstream MIME types
+
+2.1.25 / 2019-11-12
+===================
+
+  * deps: mime-db@1.42.0
+    - Add new upstream MIME types
+    - Add `application/toml` with extension `.toml`
+    - Add `image/vnd.ms-dds` with extension `.dds`
+
+2.1.24 / 2019-04-20
+===================
+
+  * deps: mime-db@1.40.0
+    - Add extensions from IANA for `model/*` types
+    - Add `text/mdx` with extension `.mdx`
+
+2.1.23 / 2019-04-17
+===================
+
+  * deps: mime-db@~1.39.0
+    - Add extensions `.siv` and `.sieve` to `application/sieve`
+    - Add new upstream MIME types
+
+2.1.22 / 2019-02-14
+===================
+
+  * deps: mime-db@~1.38.0
+    - Add extension `.nq` to `application/n-quads`
+    - Add extension `.nt` to `application/n-triples`
+    - Add new upstream MIME types
+    - Mark `text/less` as compressible
+
+2.1.21 / 2018-10-19
+===================
+
+  * deps: mime-db@~1.37.0
+    - Add extensions to HEIC image types
+    - Add new upstream MIME types
+
+2.1.20 / 2018-08-26
+===================
+
+  * deps: mime-db@~1.36.0
+    - Add Apple file extensions from IANA
+    - Add extensions from IANA for `image/*` types
+    - Add new upstream MIME types
+
+2.1.19 / 2018-07-17
+===================
+
+  * deps: mime-db@~1.35.0
+    - Add extension `.csl` to `application/vnd.citationstyles.style+xml`
+    - Add extension `.es` to `application/ecmascript`
+    - Add extension `.owl` to `application/rdf+xml`
+    - Add new upstream MIME types
+    - Add UTF-8 as default charset for `text/turtle`
+
+2.1.18 / 2018-02-16
+===================
+
+  * deps: mime-db@~1.33.0
+    - Add `application/raml+yaml` with extension `.raml`
+    - Add `application/wasm` with extension `.wasm`
+    - Add `text/shex` with extension `.shex`
+    - Add extensions for JPEG-2000 images
+    - Add extensions from IANA for `message/*` types
+    - Add new upstream MIME types
+    - Update font MIME types
+    - Update `text/hjson` to registered `application/hjson`
+
+2.1.17 / 2017-09-01
+===================
+
+  * deps: mime-db@~1.30.0
+    - Add `application/vnd.ms-outlook`
+    - Add `application/x-arj`
+    - Add extension `.mjs` to `application/javascript`
+    - Add glTF types and extensions
+    - Add new upstream MIME types
+    - Add `text/x-org`
+    - Add VirtualBox MIME types
+    - Fix `source` records for `video/*` types that are IANA
+    - Update `font/opentype` to registered `font/otf`
+
+2.1.16 / 2017-07-24
+===================
+
+  * deps: mime-db@~1.29.0
+    - Add `application/fido.trusted-apps+json`
+    - Add extension `.wadl` to `application/vnd.sun.wadl+xml`
+    - Add extension `.gz` to `application/gzip`
+    - Add new upstream MIME types
+    - Update extensions `.md` and `.markdown` to be `text/markdown`
+
+2.1.15 / 2017-03-23
+===================
+
+  * deps: mime-db@~1.27.0
+    - Add new mime types
+    - Add `image/apng`
+
+2.1.14 / 2017-01-14
+===================
+
+  * deps: mime-db@~1.26.0
+    - Add new mime types
+
+2.1.13 / 2016-11-18
+===================
+
+  * deps: mime-db@~1.25.0
+    - Add new mime types
+
+2.1.12 / 2016-09-18
+===================
+
+  * deps: mime-db@~1.24.0
+    - Add new mime types
+    - Add `audio/mp3`
+
+2.1.11 / 2016-05-01
+===================
+
+  * deps: mime-db@~1.23.0
+    - Add new mime types
+
+2.1.10 / 2016-02-15
+===================
+
+  * deps: mime-db@~1.22.0
+    - Add new mime types
+    - Fix extension of `application/dash+xml`
+    - Update primary extension for `audio/mp4`
+
+2.1.9 / 2016-01-06
+==================
+
+  * deps: mime-db@~1.21.0
+    - Add new mime types
+
+2.1.8 / 2015-11-30
+==================
+
+  * deps: mime-db@~1.20.0
+    - Add new mime types
+
+2.1.7 / 2015-09-20
+==================
+
+  * deps: mime-db@~1.19.0
+    - Add new mime types
+
+2.1.6 / 2015-09-03
+==================
+
+  * deps: mime-db@~1.18.0
+    - Add new mime types
+
+2.1.5 / 2015-08-20
+==================
+
+  * deps: mime-db@~1.17.0
+    - Add new mime types
+
+2.1.4 / 2015-07-30
+==================
+
+  * deps: mime-db@~1.16.0
+    - Add new mime types
+
+2.1.3 / 2015-07-13
+==================
+
+  * deps: mime-db@~1.15.0
+    - Add new mime types
+
+2.1.2 / 2015-06-25
+==================
+
+  * deps: mime-db@~1.14.0
+    - Add new mime types
+
+2.1.1 / 2015-06-08
+==================
+
+  * perf: fix deopt during mapping
+
+2.1.0 / 2015-06-07
+==================
+
+  * Fix incorrectly treating extension-less file name as extension
+    - i.e. `'path/to/json'` will no longer return `application/json`
+  * Fix `.charset(type)` to accept parameters
+  * Fix `.charset(type)` to match case-insensitive
+  * Improve generation of extension to MIME mapping
+  * Refactor internals for readability and no argument reassignment
+  * Prefer `application/*` MIME types from the same source
+  * Prefer any type over `application/octet-stream`
+  * deps: mime-db@~1.13.0
+    - Add nginx as a source
+    - Add new mime types
+
+2.0.14 / 2015-06-06
+===================
+
+  * deps: mime-db@~1.12.0
+    - Add new mime types
+
+2.0.13 / 2015-05-31
+===================
+
+  * deps: mime-db@~1.11.0
+    - Add new mime types
+
+2.0.12 / 2015-05-19
+===================
+
+  * deps: mime-db@~1.10.0
+    - Add new mime types
+
+2.0.11 / 2015-05-05
+===================
+
+  * deps: mime-db@~1.9.1
+    - Add new mime types
+
+2.0.10 / 2015-03-13
+===================
+
+  * deps: mime-db@~1.8.0
+    - Add new mime types
+
+2.0.9 / 2015-02-09
+==================
+
+  * deps: mime-db@~1.7.0
+    - Add new mime types
+    - Community extensions ownership transferred from `node-mime`
+
+2.0.8 / 2015-01-29
+==================
+
+  * deps: mime-db@~1.6.0
+    - Add new mime types
+
+2.0.7 / 2014-12-30
+==================
+
+  * deps: mime-db@~1.5.0
+    - Add new mime types
+    - Fix various invalid MIME type entries
+
+2.0.6 / 2014-12-30
+==================
+
+  * deps: mime-db@~1.4.0
+    - Add new mime types
+    - Fix various invalid MIME type entries
+    - Remove example template MIME types
+
+2.0.5 / 2014-12-29
+==================
+
+  * deps: mime-db@~1.3.1
+    - Fix missing extensions
+
+2.0.4 / 2014-12-10
+==================
+
+  * deps: mime-db@~1.3.0
+    - Add new mime types
+
+2.0.3 / 2014-11-09
+==================
+
+  * deps: mime-db@~1.2.0
+    - Add new mime types
+
+2.0.2 / 2014-09-28
+==================
+
+  * deps: mime-db@~1.1.0
+    - Add new mime types
+    - Add additional compressible
+    - Update charsets
+
+2.0.1 / 2014-09-07
+==================
+
+  * Support Node.js 0.6
+
+2.0.0 / 2014-09-02
+==================
+
+  * Use `mime-db`
+  * Remove `.define()`
+
+1.0.2 / 2014-08-04
+==================
+
+  * Set charset=utf-8 for `text/javascript`
+
+1.0.1 / 2014-06-24
+==================
+
+  * Add `text/jsx` type
+
+1.0.0 / 2014-05-12
+==================
+
+  * Return `false` for unknown types
+  * Set charset=utf-8 for `application/json`
+
+0.1.0 / 2014-05-02
+==================
+
+  * Initial release
diff --git a/signaling_server/service/node_modules/mime-types/README.md b/signaling_server/service/node_modules/mime-types/README.md
new file mode 100644 (file)
index 0000000..e8bf8eb
--- /dev/null
@@ -0,0 +1,123 @@
+# mime-types
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][ci-image]][ci-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+The ultimate javascript content-type utility.
+
+Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except:
+
+- __No fallbacks.__ Instead of naively returning the first available type,
+  `mime-types` simply returns `false`, so do
+  `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.
+- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.
+- No `.define()` functionality
+- Bug fixes for `.lookup(path)`
+
+Otherwise, the API is compatible with `mime` 1.x.
+
+## Install
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install mime-types
+```
+
+## Adding Types
+
+All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db),
+so open a PR there if you'd like to add mime types.
+
+## API
+
+<!-- eslint-disable no-unused-vars -->
+
+```js
+var mime = require('mime-types')
+```
+
+All functions return `false` if input is invalid or not found.
+
+### mime.lookup(path)
+
+Lookup the content-type associated with a file.
+
+<!-- eslint-disable no-undef -->
+
+```js
+mime.lookup('json') // 'application/json'
+mime.lookup('.md') // 'text/markdown'
+mime.lookup('file.html') // 'text/html'
+mime.lookup('folder/file.js') // 'application/javascript'
+mime.lookup('folder/.htaccess') // false
+
+mime.lookup('cats') // false
+```
+
+### mime.contentType(type)
+
+Create a full content-type header given a content-type or extension.
+When given an extension, `mime.lookup` is used to get the matching
+content-type, otherwise the given content-type is used. Then if the
+content-type does not already have a `charset` parameter, `mime.charset`
+is used to get the default charset and add to the returned content-type.
+
+<!-- eslint-disable no-undef -->
+
+```js
+mime.contentType('markdown') // 'text/x-markdown; charset=utf-8'
+mime.contentType('file.json') // 'application/json; charset=utf-8'
+mime.contentType('text/html') // 'text/html; charset=utf-8'
+mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1'
+
+// from a full path
+mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'
+```
+
+### mime.extension(type)
+
+Get the default extension for a content-type.
+
+<!-- eslint-disable no-undef -->
+
+```js
+mime.extension('application/octet-stream') // 'bin'
+```
+
+### mime.charset(type)
+
+Lookup the implied default charset of a content-type.
+
+<!-- eslint-disable no-undef -->
+
+```js
+mime.charset('text/markdown') // 'UTF-8'
+```
+
+### var type = mime.types[extension]
+
+A map of content-types by extension.
+
+### [extensions...] = mime.extensions[type]
+
+A map of extensions by content-type.
+
+## License
+
+[MIT](LICENSE)
+
+[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci
+[ci-url]: https://github.com/jshttp/mime-types/actions?query=workflow%3Aci
+[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master
+[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master
+[node-version-image]: https://badgen.net/npm/node/mime-types
+[node-version-url]: https://nodejs.org/en/download
+[npm-downloads-image]: https://badgen.net/npm/dm/mime-types
+[npm-url]: https://npmjs.org/package/mime-types
+[npm-version-image]: https://badgen.net/npm/v/mime-types
diff --git a/signaling_server/service/node_modules/mime-types/package.json b/signaling_server/service/node_modules/mime-types/package.json
new file mode 100644 (file)
index 0000000..99a30c3
--- /dev/null
@@ -0,0 +1,91 @@
+{
+  "_args": [
+    [
+      "mime-types@2.1.28",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "mime-types@2.1.28",
+  "_id": "mime-types@2.1.28",
+  "_inBundle": false,
+  "_integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
+  "_location": "/mime-types",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "mime-types@2.1.28",
+    "name": "mime-types",
+    "escapedName": "mime-types",
+    "rawSpec": "2.1.28",
+    "saveSpec": null,
+    "fetchSpec": "2.1.28"
+  },
+  "_requiredBy": [
+    "/accepts",
+    "/type-is"
+  ],
+  "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
+  "_spec": "2.1.28",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/jshttp/mime-types/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jeremiah Senkpiel",
+      "email": "fishrock123@rocketmail.com",
+      "url": "https://searchbeam.jit.su"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    }
+  ],
+  "dependencies": {
+    "mime-db": "1.45.0"
+  },
+  "description": "The ultimate javascript content-type utility.",
+  "devDependencies": {
+    "eslint": "7.17.0",
+    "eslint-config-standard": "14.1.1",
+    "eslint-plugin-import": "2.22.1",
+    "eslint-plugin-markdown": "1.0.2",
+    "eslint-plugin-node": "11.1.0",
+    "eslint-plugin-promise": "4.2.1",
+    "eslint-plugin-standard": "4.1.0",
+    "mocha": "8.2.1",
+    "nyc": "15.1.0"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/mime-types#readme",
+  "keywords": [
+    "mime",
+    "types"
+  ],
+  "license": "MIT",
+  "name": "mime-types",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/mime-types.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec test/test.js",
+    "test-ci": "nyc --reporter=lcov --reporter=text npm test",
+    "test-cov": "nyc --reporter=html --reporter=text npm test"
+  },
+  "version": "2.1.28"
+}
diff --git a/signaling_server/service/node_modules/mime/package.json b/signaling_server/service/node_modules/mime/package.json
new file mode 100644 (file)
index 0000000..6f12307
--- /dev/null
@@ -0,0 +1,76 @@
+{
+  "_args": [
+    [
+      "mime@1.6.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "mime@1.6.0",
+  "_id": "mime@1.6.0",
+  "_inBundle": false,
+  "_integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+  "_location": "/mime",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "mime@1.6.0",
+    "name": "mime",
+    "escapedName": "mime",
+    "rawSpec": "1.6.0",
+    "saveSpec": null,
+    "fetchSpec": "1.6.0"
+  },
+  "_requiredBy": [
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+  "_spec": "1.6.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Robert Kieffer",
+    "email": "robert@broofa.com",
+    "url": "http://github.com/broofa"
+  },
+  "bin": {
+    "mime": "cli.js"
+  },
+  "bugs": {
+    "url": "https://github.com/broofa/node-mime/issues"
+  },
+  "contributors": [
+    {
+      "name": "Benjamin Thomas",
+      "email": "benjamin@benjaminthomas.org",
+      "url": "http://github.com/bentomas"
+    }
+  ],
+  "dependencies": {},
+  "description": "A comprehensive library for mime-type mapping",
+  "devDependencies": {
+    "github-release-notes": "0.13.1",
+    "mime-db": "1.31.0",
+    "mime-score": "1.1.0"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "homepage": "https://github.com/broofa/node-mime#readme",
+  "keywords": [
+    "util",
+    "mime"
+  ],
+  "license": "MIT",
+  "main": "mime.js",
+  "name": "mime",
+  "repository": {
+    "url": "git+https://github.com/broofa/node-mime.git",
+    "type": "git"
+  },
+  "scripts": {
+    "changelog": "gren changelog --tags=all --generate --override",
+    "prepare": "node src/build.js",
+    "test": "node src/test.js"
+  },
+  "version": "1.6.0"
+}
diff --git a/signaling_server/service/node_modules/ms/license.md b/signaling_server/service/node_modules/ms/license.md
new file mode 100644 (file)
index 0000000..69b6125
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Zeit, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/signaling_server/service/node_modules/ms/package.json b/signaling_server/service/node_modules/ms/package.json
new file mode 100644 (file)
index 0000000..7ccfd7a
--- /dev/null
@@ -0,0 +1,74 @@
+{
+  "_args": [
+    [
+      "ms@2.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ms@2.1.2",
+  "_id": "ms@2.1.2",
+  "_inBundle": false,
+  "_integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+  "_location": "/ms",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ms@2.1.2",
+    "name": "ms",
+    "escapedName": "ms",
+    "rawSpec": "2.1.2",
+    "saveSpec": null,
+    "fetchSpec": "2.1.2"
+  },
+  "_requiredBy": [
+    "/engine.io/debug",
+    "/socket.io-parser/debug",
+    "/socket.io/debug"
+  ],
+  "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+  "_spec": "2.1.2",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/zeit/ms/issues"
+  },
+  "description": "Tiny millisecond conversion utility",
+  "devDependencies": {
+    "eslint": "4.12.1",
+    "expect.js": "0.3.1",
+    "husky": "0.14.3",
+    "lint-staged": "5.0.0",
+    "mocha": "4.0.1"
+  },
+  "eslintConfig": {
+    "extends": "eslint:recommended",
+    "env": {
+      "node": true,
+      "es6": true
+    }
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/zeit/ms#readme",
+  "license": "MIT",
+  "lint-staged": {
+    "*.js": [
+      "npm run lint",
+      "prettier --single-quote --write",
+      "git add"
+    ]
+  },
+  "main": "./index",
+  "name": "ms",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/zeit/ms.git"
+  },
+  "scripts": {
+    "lint": "eslint lib/* bin/*",
+    "precommit": "lint-staged",
+    "test": "mocha tests.js"
+  },
+  "version": "2.1.2"
+}
diff --git a/signaling_server/service/node_modules/negotiator/package.json b/signaling_server/service/node_modules/negotiator/package.json
new file mode 100644 (file)
index 0000000..0b749b8
--- /dev/null
@@ -0,0 +1,87 @@
+{
+  "_args": [
+    [
+      "negotiator@0.6.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "negotiator@0.6.2",
+  "_id": "negotiator@0.6.2",
+  "_inBundle": false,
+  "_integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+  "_location": "/negotiator",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "negotiator@0.6.2",
+    "name": "negotiator",
+    "escapedName": "negotiator",
+    "rawSpec": "0.6.2",
+    "saveSpec": null,
+    "fetchSpec": "0.6.2"
+  },
+  "_requiredBy": [
+    "/accepts"
+  ],
+  "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+  "_spec": "0.6.2",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/jshttp/negotiator/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Federico Romero",
+      "email": "federico.romero@outboxlabs.com"
+    },
+    {
+      "name": "Isaac Z. Schlueter",
+      "email": "i@izs.me",
+      "url": "http://blog.izs.me/"
+    }
+  ],
+  "description": "HTTP content negotiation",
+  "devDependencies": {
+    "eslint": "5.16.0",
+    "eslint-plugin-markdown": "1.0.0",
+    "mocha": "6.1.4",
+    "nyc": "14.0.0"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "lib/",
+    "HISTORY.md",
+    "LICENSE",
+    "index.js",
+    "README.md"
+  ],
+  "homepage": "https://github.com/jshttp/negotiator#readme",
+  "keywords": [
+    "http",
+    "content negotiation",
+    "accept",
+    "accept-language",
+    "accept-encoding",
+    "accept-charset"
+  ],
+  "license": "MIT",
+  "name": "negotiator",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/negotiator.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --check-leaks --bail test/",
+    "test-cov": "nyc --reporter=html --reporter=text npm test",
+    "test-travis": "nyc --reporter=text npm test"
+  },
+  "version": "0.6.2"
+}
diff --git a/signaling_server/service/node_modules/on-finished/package.json b/signaling_server/service/node_modules/on-finished/package.json
new file mode 100644 (file)
index 0000000..977b8f7
--- /dev/null
@@ -0,0 +1,76 @@
+{
+  "_args": [
+    [
+      "on-finished@2.3.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "on-finished@2.3.0",
+  "_id": "on-finished@2.3.0",
+  "_inBundle": false,
+  "_integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+  "_location": "/on-finished",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "on-finished@2.3.0",
+    "name": "on-finished",
+    "escapedName": "on-finished",
+    "rawSpec": "2.3.0",
+    "saveSpec": null,
+    "fetchSpec": "2.3.0"
+  },
+  "_requiredBy": [
+    "/body-parser",
+    "/express",
+    "/finalhandler",
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+  "_spec": "2.3.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/jshttp/on-finished/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    }
+  ],
+  "dependencies": {
+    "ee-first": "1.1.1"
+  },
+  "description": "Execute a callback when a request closes, finishes, or errors",
+  "devDependencies": {
+    "istanbul": "0.3.9",
+    "mocha": "2.2.5"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/on-finished#readme",
+  "license": "MIT",
+  "name": "on-finished",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/on-finished.git"
+  },
+  "scripts": {
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "2.3.0"
+}
diff --git a/signaling_server/service/node_modules/p-limit/package.json b/signaling_server/service/node_modules/p-limit/package.json
new file mode 100644 (file)
index 0000000..bd6b8bc
--- /dev/null
@@ -0,0 +1,87 @@
+{
+  "_args": [
+    [
+      "p-limit@2.3.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "p-limit@2.3.0",
+  "_id": "p-limit@2.3.0",
+  "_inBundle": false,
+  "_integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+  "_location": "/p-limit",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "p-limit@2.3.0",
+    "name": "p-limit",
+    "escapedName": "p-limit",
+    "rawSpec": "2.3.0",
+    "saveSpec": null,
+    "fetchSpec": "2.3.0"
+  },
+  "_requiredBy": [
+    "/p-locate"
+  ],
+  "_resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+  "_spec": "2.3.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/p-limit/issues"
+  },
+  "dependencies": {
+    "p-try": "^2.0.0"
+  },
+  "description": "Run multiple promise-returning & async functions with limited concurrency",
+  "devDependencies": {
+    "ava": "^1.2.1",
+    "delay": "^4.1.0",
+    "in-range": "^1.0.0",
+    "random-int": "^1.0.0",
+    "time-span": "^2.0.0",
+    "tsd-check": "^0.3.0",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "funding": "https://github.com/sponsors/sindresorhus",
+  "homepage": "https://github.com/sindresorhus/p-limit#readme",
+  "keywords": [
+    "promise",
+    "limit",
+    "limited",
+    "concurrency",
+    "throttle",
+    "throat",
+    "rate",
+    "batch",
+    "ratelimit",
+    "task",
+    "queue",
+    "async",
+    "await",
+    "promises",
+    "bluebird"
+  ],
+  "license": "MIT",
+  "name": "p-limit",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/p-limit.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd-check"
+  },
+  "version": "2.3.0"
+}
diff --git a/signaling_server/service/node_modules/p-locate/package.json b/signaling_server/service/node_modules/p-locate/package.json
new file mode 100644 (file)
index 0000000..1234e47
--- /dev/null
@@ -0,0 +1,86 @@
+{
+  "_args": [
+    [
+      "p-locate@3.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "p-locate@3.0.0",
+  "_id": "p-locate@3.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+  "_location": "/p-locate",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "p-locate@3.0.0",
+    "name": "p-locate",
+    "escapedName": "p-locate",
+    "rawSpec": "3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "3.0.0"
+  },
+  "_requiredBy": [
+    "/locate-path"
+  ],
+  "_resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+  "_spec": "3.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/p-locate/issues"
+  },
+  "dependencies": {
+    "p-limit": "^2.0.0"
+  },
+  "description": "Get the first fulfilled promise that satisfies the provided testing function",
+  "devDependencies": {
+    "ava": "*",
+    "delay": "^3.0.0",
+    "in-range": "^1.0.0",
+    "time-span": "^2.0.0",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/p-locate#readme",
+  "keywords": [
+    "promise",
+    "locate",
+    "find",
+    "finder",
+    "search",
+    "searcher",
+    "test",
+    "array",
+    "collection",
+    "iterable",
+    "iterator",
+    "race",
+    "fulfilled",
+    "fastest",
+    "async",
+    "await",
+    "promises",
+    "bluebird"
+  ],
+  "license": "MIT",
+  "name": "p-locate",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/p-locate.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "3.0.0"
+}
diff --git a/signaling_server/service/node_modules/p-try/package.json b/signaling_server/service/node_modules/p-try/package.json
new file mode 100644 (file)
index 0000000..a4ee00c
--- /dev/null
@@ -0,0 +1,77 @@
+{
+  "_args": [
+    [
+      "p-try@2.2.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "p-try@2.2.0",
+  "_id": "p-try@2.2.0",
+  "_inBundle": false,
+  "_integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+  "_location": "/p-try",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "p-try@2.2.0",
+    "name": "p-try",
+    "escapedName": "p-try",
+    "rawSpec": "2.2.0",
+    "saveSpec": null,
+    "fetchSpec": "2.2.0"
+  },
+  "_requiredBy": [
+    "/p-limit"
+  ],
+  "_resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+  "_spec": "2.2.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/p-try/issues"
+  },
+  "description": "`Start a promise chain",
+  "devDependencies": {
+    "ava": "^1.4.1",
+    "tsd": "^0.7.1",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/sindresorhus/p-try#readme",
+  "keywords": [
+    "promise",
+    "try",
+    "resolve",
+    "function",
+    "catch",
+    "async",
+    "await",
+    "promises",
+    "settled",
+    "ponyfill",
+    "polyfill",
+    "shim",
+    "bluebird"
+  ],
+  "license": "MIT",
+  "name": "p-try",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/p-try.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "2.2.0"
+}
diff --git a/signaling_server/service/node_modules/parseqs/LICENSE b/signaling_server/service/node_modules/parseqs/LICENSE
new file mode 100644 (file)
index 0000000..852cee8
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Gal Koren
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/parseqs/Makefile b/signaling_server/service/node_modules/parseqs/Makefile
new file mode 100644 (file)
index 0000000..1d90629
--- /dev/null
@@ -0,0 +1,3 @@
+
+test:
+       @./node_modules/.bin/mocha test.js
diff --git a/signaling_server/service/node_modules/parseqs/README.md b/signaling_server/service/node_modules/parseqs/README.md
new file mode 100644 (file)
index 0000000..5c03c55
--- /dev/null
@@ -0,0 +1 @@
+Provides methods for converting an object into string representation, and vice versa.
diff --git a/signaling_server/service/node_modules/parseqs/index.js b/signaling_server/service/node_modules/parseqs/index.js
new file mode 100644 (file)
index 0000000..e0b366e
--- /dev/null
@@ -0,0 +1,37 @@
+/**
+ * Compiles a querystring
+ * Returns string representation of the object
+ *
+ * @param {Object}
+ * @api private
+ */
+
+exports.encode = function (obj) {
+  var str = '';
+
+  for (var i in obj) {
+    if (obj.hasOwnProperty(i)) {
+      if (str.length) str += '&';
+      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
+    }
+  }
+
+  return str;
+};
+
+/**
+ * Parses a simple querystring into an object
+ *
+ * @param {String} qs
+ * @api private
+ */
+
+exports.decode = function(qs){
+  var qry = {};
+  var pairs = qs.split('&');
+  for (var i = 0, l = pairs.length; i < l; i++) {
+    var pair = pairs[i].split('=');
+    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
+  }
+  return qry;
+};
diff --git a/signaling_server/service/node_modules/parseqs/package.json b/signaling_server/service/node_modules/parseqs/package.json
new file mode 100644 (file)
index 0000000..101a712
--- /dev/null
@@ -0,0 +1,53 @@
+{
+  "_args": [
+    [
+      "parseqs@0.0.6",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "parseqs@0.0.6",
+  "_id": "parseqs@0.0.6",
+  "_inBundle": false,
+  "_integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==",
+  "_location": "/parseqs",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "parseqs@0.0.6",
+    "name": "parseqs",
+    "escapedName": "parseqs",
+    "rawSpec": "0.0.6",
+    "saveSpec": null,
+    "fetchSpec": "0.0.6"
+  },
+  "_requiredBy": [
+    "/engine.io-client",
+    "/socket.io/socket.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
+  "_spec": "0.0.6",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Gal Koren"
+  },
+  "bugs": {
+    "url": "https://github.com/get/querystring/issues"
+  },
+  "description": "Provides methods for parsing a query string into an object, and vice versa.",
+  "devDependencies": {
+    "better-assert": "~1.0.0",
+    "mocha": "1.17.1"
+  },
+  "homepage": "https://github.com/get/querystring",
+  "license": "MIT",
+  "name": "parseqs",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/get/querystring.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "version": "0.0.6"
+}
diff --git a/signaling_server/service/node_modules/parseqs/test.js b/signaling_server/service/node_modules/parseqs/test.js
new file mode 100644 (file)
index 0000000..2ccb925
--- /dev/null
@@ -0,0 +1,27 @@
+var assert = require('better-assert');
+var expect = require('expect.js');
+var util = require('./index.js');
+
+describe('querystring test suite', function(){
+       it('should parse a querystring and return an object', function () {
+               
+               // Single assignment
+               var queryObj = util.decode("foo=bar");
+               expect(queryObj.foo).to.be("bar");
+               
+               // Multiple assignments
+               queryObj = util.decode("france=paris&germany=berlin");
+               expect(queryObj.france).to.be("paris");
+               expect(queryObj.germany).to.be("berlin");
+               
+               // Assignments containing non-alphanumeric characters
+               queryObj = util.decode("india=new%20delhi");
+               expect(queryObj.india).to.be("new delhi");
+       });
+       
+       it('should construct a query string from an object', function () {
+               expect(util.encode({ a: 'b' })).to.be('a=b');
+               expect(util.encode({ a: 'b', c: 'd' })).to.be('a=b&c=d');
+               expect(util.encode({ a: 'b', c: 'tobi rocks' })).to.be('a=b&c=tobi%20rocks');
+       });
+});
diff --git a/signaling_server/service/node_modules/parseuri/History.md b/signaling_server/service/node_modules/parseuri/History.md
new file mode 100644 (file)
index 0000000..c33a1bf
--- /dev/null
@@ -0,0 +1,5 @@
+
+n.n.n / 2014-02-09
+==================
+
+ * parseuri first commit
diff --git a/signaling_server/service/node_modules/parseuri/LICENSE b/signaling_server/service/node_modules/parseuri/LICENSE
new file mode 100644 (file)
index 0000000..c32368d
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Gal Koren
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/parseuri/Makefile b/signaling_server/service/node_modules/parseuri/Makefile
new file mode 100644 (file)
index 0000000..1d90629
--- /dev/null
@@ -0,0 +1,3 @@
+
+test:
+       @./node_modules/.bin/mocha test.js
diff --git a/signaling_server/service/node_modules/parseuri/README.md b/signaling_server/service/node_modules/parseuri/README.md
new file mode 100644 (file)
index 0000000..5c663ed
--- /dev/null
@@ -0,0 +1,2 @@
+# parseuri
+Module for parsing URI's in engine.io-client
diff --git a/signaling_server/service/node_modules/parseuri/index.js b/signaling_server/service/node_modules/parseuri/index.js
new file mode 100644 (file)
index 0000000..d4704b4
--- /dev/null
@@ -0,0 +1,68 @@
+/**
+ * Parses an URI
+ *
+ * @author Steven Levithan <stevenlevithan.com> (MIT license)
+ * @api private
+ */
+
+var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
+
+var parts = [
+    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'
+];
+
+module.exports = function parseuri(str) {
+    var src = str,
+        b = str.indexOf('['),
+        e = str.indexOf(']');
+
+    if (b != -1 && e != -1) {
+        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);
+    }
+
+    var m = re.exec(str || ''),
+        uri = {},
+        i = 14;
+
+    while (i--) {
+        uri[parts[i]] = m[i] || '';
+    }
+
+    if (b != -1 && e != -1) {
+        uri.source = src;
+        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');
+        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');
+        uri.ipv6uri = true;
+    }
+
+    uri.pathNames = pathNames(uri, uri['path']);
+    uri.queryKey = queryKey(uri, uri['query']);
+
+    return uri;
+};
+
+function pathNames(obj, path) {
+    var regx = /\/{2,9}/g,
+        names = path.replace(regx, "/").split("/");
+
+    if (path.substr(0, 1) == '/' || path.length === 0) {
+        names.splice(0, 1);
+    }
+    if (path.substr(path.length - 1, 1) == '/') {
+        names.splice(names.length - 1, 1);
+    }
+
+    return names;
+}
+
+function queryKey(uri, query) {
+    var data = {};
+
+    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {
+        if ($1) {
+            data[$1] = $2;
+        }
+    });
+
+    return data;
+}
diff --git a/signaling_server/service/node_modules/parseuri/package.json b/signaling_server/service/node_modules/parseuri/package.json
new file mode 100644 (file)
index 0000000..1d27c50
--- /dev/null
@@ -0,0 +1,54 @@
+{
+  "_args": [
+    [
+      "parseuri@0.0.6",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "parseuri@0.0.6",
+  "_id": "parseuri@0.0.6",
+  "_inBundle": false,
+  "_integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==",
+  "_location": "/parseuri",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "parseuri@0.0.6",
+    "name": "parseuri",
+    "escapedName": "parseuri",
+    "rawSpec": "0.0.6",
+    "saveSpec": null,
+    "fetchSpec": "0.0.6"
+  },
+  "_requiredBy": [
+    "/engine.io-client",
+    "/socket.io/socket.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
+  "_spec": "0.0.6",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Gal Koren"
+  },
+  "bugs": {
+    "url": "https://github.com/get/parseuri/issues"
+  },
+  "description": "Method that parses a URI and returns an array of its components",
+  "devDependencies": {
+    "better-assert": "~1.0.0",
+    "expect.js": "^0.3.1",
+    "mocha": "1.17.1"
+  },
+  "homepage": "https://github.com/get/parseuri",
+  "license": "MIT",
+  "name": "parseuri",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/get/parseuri.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "version": "0.0.6"
+}
diff --git a/signaling_server/service/node_modules/parseuri/test.js b/signaling_server/service/node_modules/parseuri/test.js
new file mode 100644 (file)
index 0000000..be447df
--- /dev/null
@@ -0,0 +1,54 @@
+var assert = require('better-assert');
+var expect = require('expect.js');
+var parseuri = require('./index.js');
+
+describe('my suite', function(){
+       it('should parse an uri', function () {
+    var http = parseuri('http://google.com')
+      , https = parseuri('https://www.google.com:80')
+      , query = parseuri('google.com:8080/foo/bar?foo=bar')
+      , localhost = parseuri('localhost:8080')
+      , ipv6 = parseuri('2001:0db8:85a3:0042:1000:8a2e:0370:7334')
+      , ipv6short = parseuri('2001:db8:85a3:42:1000:8a2e:370:7334')
+      , ipv6port = parseuri('2001:db8:85a3:42:1000:8a2e:370:7334:80')
+      , ipv6abbrev = parseuri('2001::7334:a:80')
+      , ipv6http = parseuri('http://[2001::7334:a]:80')
+      , ipv6query = parseuri('http://[2001::7334:a]:80/foo/bar?foo=bar')
+
+    expect(http.protocol).to.be('http');
+    expect(http.port).to.be('');
+    expect(http.host).to.be('google.com');
+    expect(https.protocol).to.be('https');
+    expect(https.port).to.be('80');
+    expect(https.host).to.be('www.google.com');
+    expect(query.port).to.be('8080');
+    expect(query.query).to.be('foo=bar');
+    expect(query.path).to.be('/foo/bar');
+    expect(query.relative).to.be('/foo/bar?foo=bar');
+    expect(query.queryKey.foo).to.be('bar');
+    expect(query.pathNames[0]).to.be('foo');
+    expect(query.pathNames[1]).to.be('bar');
+    expect(localhost.protocol).to.be('');
+    expect(localhost.host).to.be('localhost');
+    expect(localhost.port).to.be('8080');
+    expect(ipv6.protocol).to.be('');
+    expect(ipv6.host).to.be('2001:0db8:85a3:0042:1000:8a2e:0370:7334');
+    expect(ipv6.port).to.be('');
+    expect(ipv6short.protocol).to.be('');
+    expect(ipv6short.host).to.be('2001:db8:85a3:42:1000:8a2e:370:7334');
+    expect(ipv6short.port).to.be('');
+    expect(ipv6port.protocol).to.be('');
+    expect(ipv6port.host).to.be('2001:db8:85a3:42:1000:8a2e:370:7334');
+    expect(ipv6port.port).to.be('80');
+    expect(ipv6abbrev.protocol).to.be('');
+    expect(ipv6abbrev.host).to.be('2001::7334:a:80');
+    expect(ipv6abbrev.port).to.be('');
+    expect(ipv6http.protocol).to.be('http');
+    expect(ipv6http.port).to.be('80');
+    expect(ipv6http.host).to.be('2001::7334:a');
+    expect(ipv6query.protocol).to.be('http');
+    expect(ipv6query.port).to.be('80');
+    expect(ipv6query.host).to.be('2001::7334:a');
+    expect(ipv6query.relative).to.be('/foo/bar?foo=bar');
+  });
+});
diff --git a/signaling_server/service/node_modules/parseurl/package.json b/signaling_server/service/node_modules/parseurl/package.json
new file mode 100644 (file)
index 0000000..c29957b
--- /dev/null
@@ -0,0 +1,84 @@
+{
+  "_args": [
+    [
+      "parseurl@1.3.3",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "parseurl@1.3.3",
+  "_id": "parseurl@1.3.3",
+  "_inBundle": false,
+  "_integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+  "_location": "/parseurl",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "parseurl@1.3.3",
+    "name": "parseurl",
+    "escapedName": "parseurl",
+    "rawSpec": "1.3.3",
+    "saveSpec": null,
+    "fetchSpec": "1.3.3"
+  },
+  "_requiredBy": [
+    "/express",
+    "/finalhandler",
+    "/serve-static"
+  ],
+  "_resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+  "_spec": "1.3.3",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/pillarjs/parseurl/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    }
+  ],
+  "description": "parse a url with memoization",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "2.1.4",
+    "eslint": "5.16.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.17.1",
+    "eslint-plugin-node": "7.0.1",
+    "eslint-plugin-promise": "4.1.1",
+    "eslint-plugin-standard": "4.0.0",
+    "fast-url-parser": "1.1.3",
+    "istanbul": "0.4.5",
+    "mocha": "6.1.3"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/pillarjs/parseurl#readme",
+  "license": "MIT",
+  "name": "parseurl",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/pillarjs/parseurl.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js",
+    "lint": "eslint .",
+    "test": "mocha --check-leaks --bail --reporter spec test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec test/"
+  },
+  "version": "1.3.3"
+}
diff --git a/signaling_server/service/node_modules/path-exists/package.json b/signaling_server/service/node_modules/path-exists/package.json
new file mode 100644 (file)
index 0000000..8cf61f8
--- /dev/null
@@ -0,0 +1,75 @@
+{
+  "_args": [
+    [
+      "path-exists@3.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "path-exists@3.0.0",
+  "_id": "path-exists@3.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+  "_location": "/path-exists",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "path-exists@3.0.0",
+    "name": "path-exists",
+    "escapedName": "path-exists",
+    "rawSpec": "3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "3.0.0"
+  },
+  "_requiredBy": [
+    "/locate-path"
+  ],
+  "_resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+  "_spec": "3.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/path-exists/issues"
+  },
+  "description": "Check if a path exists",
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/path-exists#readme",
+  "keywords": [
+    "path",
+    "exists",
+    "exist",
+    "file",
+    "filepath",
+    "fs",
+    "filesystem",
+    "file-system",
+    "access",
+    "stat"
+  ],
+  "license": "MIT",
+  "name": "path-exists",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/path-exists.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "3.0.0",
+  "xo": {
+    "esnext": true
+  }
+}
diff --git a/signaling_server/service/node_modules/path-to-regexp/package.json b/signaling_server/service/node_modules/path-to-regexp/package.json
new file mode 100644 (file)
index 0000000..3a76b31
--- /dev/null
@@ -0,0 +1,62 @@
+{
+  "_args": [
+    [
+      "path-to-regexp@0.1.7",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "path-to-regexp@0.1.7",
+  "_id": "path-to-regexp@0.1.7",
+  "_inBundle": false,
+  "_integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+  "_location": "/path-to-regexp",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "path-to-regexp@0.1.7",
+    "name": "path-to-regexp",
+    "escapedName": "path-to-regexp",
+    "rawSpec": "0.1.7",
+    "saveSpec": null,
+    "fetchSpec": "0.1.7"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+  "_spec": "0.1.7",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/component/path-to-regexp/issues"
+  },
+  "component": {
+    "scripts": {
+      "path-to-regexp": "index.js"
+    }
+  },
+  "description": "Express style path to RegExp utility",
+  "devDependencies": {
+    "istanbul": "^0.2.6",
+    "mocha": "^1.17.1"
+  },
+  "files": [
+    "index.js",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/component/path-to-regexp#readme",
+  "keywords": [
+    "express",
+    "regexp"
+  ],
+  "license": "MIT",
+  "name": "path-to-regexp",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/component/path-to-regexp.git"
+  },
+  "scripts": {
+    "test": "istanbul cover _mocha -- -R spec"
+  },
+  "version": "0.1.7"
+}
diff --git a/signaling_server/service/node_modules/pngjs/package.json b/signaling_server/service/node_modules/pngjs/package.json
new file mode 100644 (file)
index 0000000..ce4bf90
--- /dev/null
@@ -0,0 +1,122 @@
+{
+  "_args": [
+    [
+      "pngjs@3.4.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "pngjs@3.4.0",
+  "_id": "pngjs@3.4.0",
+  "_inBundle": false,
+  "_integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
+  "_location": "/pngjs",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "pngjs@3.4.0",
+    "name": "pngjs",
+    "escapedName": "pngjs",
+    "rawSpec": "3.4.0",
+    "saveSpec": null,
+    "fetchSpec": "3.4.0"
+  },
+  "_requiredBy": [
+    "/qrcode"
+  ],
+  "_resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
+  "_spec": "3.4.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/lukeapage/pngjs2/issues"
+  },
+  "contributors": [
+    {
+      "name": "Alexandre Paré"
+    },
+    {
+      "name": "Gaurav Mali"
+    },
+    {
+      "name": "Gusts Kaksis"
+    },
+    {
+      "name": "Kuba Niegowski"
+    },
+    {
+      "name": "Luke Page"
+    },
+    {
+      "name": "Pietajan De Potter"
+    },
+    {
+      "name": "Steven Sojka"
+    },
+    {
+      "name": "liangzeng"
+    },
+    {
+      "name": "Michael Vogt"
+    },
+    {
+      "name": "Xin-Xin Wang"
+    },
+    {
+      "name": "toriningen"
+    },
+    {
+      "name": "Eugene Kulabuhov"
+    }
+  ],
+  "description": "PNG encoder/decoder in pure JS, supporting any bit size & interlace, async & sync with full test suite.",
+  "devDependencies": {
+    "browserify": "^14.5.0",
+    "buffer-equal": "1.0.0",
+    "connect": "^3.4.0",
+    "eslint": "^4.1.0",
+    "istanbul": "^0.4.4",
+    "phantomjs-prebuilt": "^2.1.7",
+    "serve-static": "^1.10.0",
+    "tap-dot": "^2.0.0",
+    "tape": "^4.0.2"
+  },
+  "directories": {
+    "lib": "lib",
+    "example": "examples",
+    "test": "test"
+  },
+  "engines": {
+    "node": ">=4.0.0"
+  },
+  "homepage": "https://github.com/lukeapage/pngjs",
+  "keywords": [
+    "PNG",
+    "decoder",
+    "encoder",
+    "js-png",
+    "node-png",
+    "parser",
+    "png",
+    "png-js",
+    "png-parse",
+    "pngjs"
+  ],
+  "license": "MIT",
+  "main": "./lib/png.js",
+  "name": "pngjs",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/lukeapage/pngjs2.git"
+  },
+  "scripts": {
+    "browserify": "browserify lib/png.js --standalone png > browser.js",
+    "build": "npm run prepublish",
+    "coverage": "istanbul -- cover node_modules/tape/bin/tape test/*-spec.js nolarge",
+    "coverage-report": "npm run coverage && istanbul report html",
+    "coveralls": "cat ./coverage/lcov.info | coveralls",
+    "lint": "eslint lib",
+    "prepublish": "npm run browserify",
+    "test": "npm run lint && tape test/*-spec.js | tap-dot && node test/run-compare"
+  },
+  "version": "3.4.0"
+}
diff --git a/signaling_server/service/node_modules/proxy-addr/HISTORY.md b/signaling_server/service/node_modules/proxy-addr/HISTORY.md
new file mode 100644 (file)
index 0000000..be765b7
--- /dev/null
@@ -0,0 +1,155 @@
+2.0.6 / 2020-02-24
+==================
+
+  * deps: ipaddr.js@1.9.1
+
+2.0.5 / 2019-04-16
+==================
+
+  * deps: ipaddr.js@1.9.0
+
+2.0.4 / 2018-07-26
+==================
+
+  * deps: ipaddr.js@1.8.0
+
+2.0.3 / 2018-02-19
+==================
+
+  * deps: ipaddr.js@1.6.0
+
+2.0.2 / 2017-09-24
+==================
+
+  * deps: forwarded@~0.1.2
+    - perf: improve header parsing
+    - perf: reduce overhead when no `X-Forwarded-For` header
+
+2.0.1 / 2017-09-10
+==================
+
+  * deps: forwarded@~0.1.1
+    - Fix trimming leading / trailing OWS
+    - perf: hoist regular expression
+  * deps: ipaddr.js@1.5.2
+
+2.0.0 / 2017-08-08
+==================
+
+  * Drop support for Node.js below 0.10
+
+1.1.5 / 2017-07-25
+==================
+
+  * Fix array argument being altered
+  * deps: ipaddr.js@1.4.0
+
+1.1.4 / 2017-03-24
+==================
+
+  * deps: ipaddr.js@1.3.0
+
+1.1.3 / 2017-01-14
+==================
+
+  * deps: ipaddr.js@1.2.0
+
+1.1.2 / 2016-05-29
+==================
+
+  * deps: ipaddr.js@1.1.1
+    - Fix IPv6-mapped IPv4 validation edge cases
+
+1.1.1 / 2016-05-03
+==================
+
+  * Fix regression matching mixed versions against multiple subnets
+
+1.1.0 / 2016-05-01
+==================
+
+  * Fix accepting various invalid netmasks
+    - IPv4 netmasks must be contingous
+    - IPv6 addresses cannot be used as a netmask
+  * deps: ipaddr.js@1.1.0
+
+1.0.10 / 2015-12-09
+===================
+
+  * deps: ipaddr.js@1.0.5
+    - Fix regression in `isValid` with non-string arguments
+
+1.0.9 / 2015-12-01
+==================
+
+  * deps: ipaddr.js@1.0.4
+    - Fix accepting some invalid IPv6 addresses
+    - Reject CIDRs with negative or overlong masks
+  * perf: enable strict mode
+
+1.0.8 / 2015-05-10
+==================
+
+  * deps: ipaddr.js@1.0.1
+
+1.0.7 / 2015-03-16
+==================
+
+  * deps: ipaddr.js@0.1.9
+    - Fix OOM on certain inputs to `isValid`
+
+1.0.6 / 2015-02-01
+==================
+
+  * deps: ipaddr.js@0.1.8
+
+1.0.5 / 2015-01-08
+==================
+
+  * deps: ipaddr.js@0.1.6
+
+1.0.4 / 2014-11-23
+==================
+
+  * deps: ipaddr.js@0.1.5
+    - Fix edge cases with `isValid`
+
+1.0.3 / 2014-09-21
+==================
+
+  * Use `forwarded` npm module
+
+1.0.2 / 2014-09-18
+==================
+
+  * Fix a global leak when multiple subnets are trusted
+  * Support Node.js 0.6
+  * deps: ipaddr.js@0.1.3
+
+1.0.1 / 2014-06-03
+==================
+
+  * Fix links in npm package
+
+1.0.0 / 2014-05-08
+==================
+
+  * Add `trust` argument to determine proxy trust on
+    * Accepts custom function
+    * Accepts IPv4/IPv6 address(es)
+    * Accepts subnets
+    * Accepts pre-defined names
+  * Add optional `trust` argument to `proxyaddr.all` to
+    stop at first untrusted
+  * Add `proxyaddr.compile` to pre-compile `trust` function
+    to make subsequent calls faster
+
+0.0.1 / 2014-05-04
+==================
+
+  * Fix bad npm publish
+
+0.0.0 / 2014-05-04
+==================
+
+  * Initial release
diff --git a/signaling_server/service/node_modules/proxy-addr/index.js b/signaling_server/service/node_modules/proxy-addr/index.js
new file mode 100644 (file)
index 0000000..a909b05
--- /dev/null
@@ -0,0 +1,327 @@
+/*!
+ * proxy-addr
+ * Copyright(c) 2014-2016 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = proxyaddr
+module.exports.all = alladdrs
+module.exports.compile = compile
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var forwarded = require('forwarded')
+var ipaddr = require('ipaddr.js')
+
+/**
+ * Variables.
+ * @private
+ */
+
+var DIGIT_REGEXP = /^[0-9]+$/
+var isip = ipaddr.isValid
+var parseip = ipaddr.parse
+
+/**
+ * Pre-defined IP ranges.
+ * @private
+ */
+
+var IP_RANGES = {
+  linklocal: ['169.254.0.0/16', 'fe80::/10'],
+  loopback: ['127.0.0.1/8', '::1/128'],
+  uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']
+}
+
+/**
+ * Get all addresses in the request, optionally stopping
+ * at the first untrusted.
+ *
+ * @param {Object} request
+ * @param {Function|Array|String} [trust]
+ * @public
+ */
+
+function alladdrs (req, trust) {
+  // get addresses
+  var addrs = forwarded(req)
+
+  if (!trust) {
+    // Return all addresses
+    return addrs
+  }
+
+  if (typeof trust !== 'function') {
+    trust = compile(trust)
+  }
+
+  for (var i = 0; i < addrs.length - 1; i++) {
+    if (trust(addrs[i], i)) continue
+
+    addrs.length = i + 1
+  }
+
+  return addrs
+}
+
+/**
+ * Compile argument into trust function.
+ *
+ * @param {Array|String} val
+ * @private
+ */
+
+function compile (val) {
+  if (!val) {
+    throw new TypeError('argument is required')
+  }
+
+  var trust
+
+  if (typeof val === 'string') {
+    trust = [val]
+  } else if (Array.isArray(val)) {
+    trust = val.slice()
+  } else {
+    throw new TypeError('unsupported trust argument')
+  }
+
+  for (var i = 0; i < trust.length; i++) {
+    val = trust[i]
+
+    if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {
+      continue
+    }
+
+    // Splice in pre-defined range
+    val = IP_RANGES[val]
+    trust.splice.apply(trust, [i, 1].concat(val))
+    i += val.length - 1
+  }
+
+  return compileTrust(compileRangeSubnets(trust))
+}
+
+/**
+ * Compile `arr` elements into range subnets.
+ *
+ * @param {Array} arr
+ * @private
+ */
+
+function compileRangeSubnets (arr) {
+  var rangeSubnets = new Array(arr.length)
+
+  for (var i = 0; i < arr.length; i++) {
+    rangeSubnets[i] = parseipNotation(arr[i])
+  }
+
+  return rangeSubnets
+}
+
+/**
+ * Compile range subnet array into trust function.
+ *
+ * @param {Array} rangeSubnets
+ * @private
+ */
+
+function compileTrust (rangeSubnets) {
+  // Return optimized function based on length
+  var len = rangeSubnets.length
+  return len === 0
+    ? trustNone
+    : len === 1
+      ? trustSingle(rangeSubnets[0])
+      : trustMulti(rangeSubnets)
+}
+
+/**
+ * Parse IP notation string into range subnet.
+ *
+ * @param {String} note
+ * @private
+ */
+
+function parseipNotation (note) {
+  var pos = note.lastIndexOf('/')
+  var str = pos !== -1
+    ? note.substring(0, pos)
+    : note
+
+  if (!isip(str)) {
+    throw new TypeError('invalid IP address: ' + str)
+  }
+
+  var ip = parseip(str)
+
+  if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {
+    // Store as IPv4
+    ip = ip.toIPv4Address()
+  }
+
+  var max = ip.kind() === 'ipv6'
+    ? 128
+    : 32
+
+  var range = pos !== -1
+    ? note.substring(pos + 1, note.length)
+    : null
+
+  if (range === null) {
+    range = max
+  } else if (DIGIT_REGEXP.test(range)) {
+    range = parseInt(range, 10)
+  } else if (ip.kind() === 'ipv4' && isip(range)) {
+    range = parseNetmask(range)
+  } else {
+    range = null
+  }
+
+  if (range <= 0 || range > max) {
+    throw new TypeError('invalid range on address: ' + note)
+  }
+
+  return [ip, range]
+}
+
+/**
+ * Parse netmask string into CIDR range.
+ *
+ * @param {String} netmask
+ * @private
+ */
+
+function parseNetmask (netmask) {
+  var ip = parseip(netmask)
+  var kind = ip.kind()
+
+  return kind === 'ipv4'
+    ? ip.prefixLengthFromSubnetMask()
+    : null
+}
+
+/**
+ * Determine address of proxied request.
+ *
+ * @param {Object} request
+ * @param {Function|Array|String} trust
+ * @public
+ */
+
+function proxyaddr (req, trust) {
+  if (!req) {
+    throw new TypeError('req argument is required')
+  }
+
+  if (!trust) {
+    throw new TypeError('trust argument is required')
+  }
+
+  var addrs = alladdrs(req, trust)
+  var addr = addrs[addrs.length - 1]
+
+  return addr
+}
+
+/**
+ * Static trust function to trust nothing.
+ *
+ * @private
+ */
+
+function trustNone () {
+  return false
+}
+
+/**
+ * Compile trust function for multiple subnets.
+ *
+ * @param {Array} subnets
+ * @private
+ */
+
+function trustMulti (subnets) {
+  return function trust (addr) {
+    if (!isip(addr)) return false
+
+    var ip = parseip(addr)
+    var ipconv
+    var kind = ip.kind()
+
+    for (var i = 0; i < subnets.length; i++) {
+      var subnet = subnets[i]
+      var subnetip = subnet[0]
+      var subnetkind = subnetip.kind()
+      var subnetrange = subnet[1]
+      var trusted = ip
+
+      if (kind !== subnetkind) {
+        if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {
+          // Incompatible IP addresses
+          continue
+        }
+
+        if (!ipconv) {
+          // Convert IP to match subnet IP kind
+          ipconv = subnetkind === 'ipv4'
+            ? ip.toIPv4Address()
+            : ip.toIPv4MappedAddress()
+        }
+
+        trusted = ipconv
+      }
+
+      if (trusted.match(subnetip, subnetrange)) {
+        return true
+      }
+    }
+
+    return false
+  }
+}
+
+/**
+ * Compile trust function for single subnet.
+ *
+ * @param {Object} subnet
+ * @private
+ */
+
+function trustSingle (subnet) {
+  var subnetip = subnet[0]
+  var subnetkind = subnetip.kind()
+  var subnetisipv4 = subnetkind === 'ipv4'
+  var subnetrange = subnet[1]
+
+  return function trust (addr) {
+    if (!isip(addr)) return false
+
+    var ip = parseip(addr)
+    var kind = ip.kind()
+
+    if (kind !== subnetkind) {
+      if (subnetisipv4 && !ip.isIPv4MappedAddress()) {
+        // Incompatible IP addresses
+        return false
+      }
+
+      // Convert IP to match subnet IP kind
+      ip = subnetisipv4
+        ? ip.toIPv4Address()
+        : ip.toIPv4MappedAddress()
+    }
+
+    return ip.match(subnetip, subnetrange)
+  }
+}
diff --git a/signaling_server/service/node_modules/proxy-addr/package.json b/signaling_server/service/node_modules/proxy-addr/package.json
new file mode 100644 (file)
index 0000000..078edb1
--- /dev/null
@@ -0,0 +1,85 @@
+{
+  "_args": [
+    [
+      "proxy-addr@2.0.6",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "proxy-addr@2.0.6",
+  "_id": "proxy-addr@2.0.6",
+  "_inBundle": false,
+  "_integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+  "_location": "/proxy-addr",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "proxy-addr@2.0.6",
+    "name": "proxy-addr",
+    "escapedName": "proxy-addr",
+    "rawSpec": "2.0.6",
+    "saveSpec": null,
+    "fetchSpec": "2.0.6"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+  "_spec": "2.0.6",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/proxy-addr/issues"
+  },
+  "dependencies": {
+    "forwarded": "~0.1.2",
+    "ipaddr.js": "1.9.1"
+  },
+  "description": "Determine address of proxied request",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "2.1.4",
+    "deep-equal": "1.0.1",
+    "eslint": "6.8.0",
+    "eslint-config-standard": "14.1.0",
+    "eslint-plugin-import": "2.20.1",
+    "eslint-plugin-markdown": "1.0.1",
+    "eslint-plugin-node": "11.0.0",
+    "eslint-plugin-promise": "4.2.1",
+    "eslint-plugin-standard": "4.0.1",
+    "mocha": "7.0.1",
+    "nyc": "15.0.0"
+  },
+  "engines": {
+    "node": ">= 0.10"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/proxy-addr#readme",
+  "keywords": [
+    "ip",
+    "proxy",
+    "x-forwarded-for"
+  ],
+  "license": "MIT",
+  "name": "proxy-addr",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/proxy-addr.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js",
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "nyc --reporter=text npm test",
+    "test-travis": "nyc --reporter=html --reporter=text npm test"
+  },
+  "version": "2.0.6"
+}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/ansi-regex/package.json b/signaling_server/service/node_modules/qrcode/node_modules/ansi-regex/package.json
deleted file mode 100644 (file)
index d6d7bfa..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "_from": "ansi-regex@^4.1.0",
-  "_id": "ansi-regex@4.1.0",
-  "_inBundle": false,
-  "_integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-  "_location": "/ansi-regex",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "ansi-regex@^4.1.0",
-    "name": "ansi-regex",
-    "escapedName": "ansi-regex",
-    "rawSpec": "^4.1.0",
-    "saveSpec": null,
-    "fetchSpec": "^4.1.0"
-  },
-  "_requiredBy": [
-    "/strip-ansi"
-  ],
-  "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-  "_shasum": "8b9f8f08cf1acb843756a839ca8c7e3168c51997",
-  "_spec": "ansi-regex@^4.1.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/strip-ansi",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/chalk/ansi-regex/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Regular expression for matching ANSI escape codes",
-  "devDependencies": {
-    "ava": "^0.25.0",
-    "xo": "^0.23.0"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/chalk/ansi-regex#readme",
-  "keywords": [
-    "ansi",
-    "styles",
-    "color",
-    "colour",
-    "colors",
-    "terminal",
-    "console",
-    "cli",
-    "string",
-    "tty",
-    "escape",
-    "formatting",
-    "rgb",
-    "256",
-    "shell",
-    "xterm",
-    "command-line",
-    "text",
-    "regex",
-    "regexp",
-    "re",
-    "match",
-    "test",
-    "find",
-    "pattern"
-  ],
-  "license": "MIT",
-  "name": "ansi-regex",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/chalk/ansi-regex.git"
-  },
-  "scripts": {
-    "test": "xo && ava",
-    "view-supported": "node fixtures/view-codes.js"
-  },
-  "version": "4.1.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/ansi-styles/package.json b/signaling_server/service/node_modules/qrcode/node_modules/ansi-styles/package.json
deleted file mode 100644 (file)
index 296bbdb..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-  "_from": "ansi-styles@^3.2.0",
-  "_id": "ansi-styles@3.2.1",
-  "_inBundle": false,
-  "_integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-  "_location": "/ansi-styles",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "ansi-styles@^3.2.0",
-    "name": "ansi-styles",
-    "escapedName": "ansi-styles",
-    "rawSpec": "^3.2.0",
-    "saveSpec": null,
-    "fetchSpec": "^3.2.0"
-  },
-  "_requiredBy": [
-    "/wrap-ansi"
-  ],
-  "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-  "_shasum": "41fbb20243e50b12be0f04b8dedbf07520ce841d",
-  "_spec": "ansi-styles@^3.2.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/wrap-ansi",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "ava": {
-    "require": "babel-polyfill"
-  },
-  "bugs": {
-    "url": "https://github.com/chalk/ansi-styles/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "color-convert": "^1.9.0"
-  },
-  "deprecated": false,
-  "description": "ANSI escape codes for styling strings in the terminal",
-  "devDependencies": {
-    "ava": "*",
-    "babel-polyfill": "^6.23.0",
-    "svg-term-cli": "^2.1.1",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=4"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/chalk/ansi-styles#readme",
-  "keywords": [
-    "ansi",
-    "styles",
-    "color",
-    "colour",
-    "colors",
-    "terminal",
-    "console",
-    "cli",
-    "string",
-    "tty",
-    "escape",
-    "formatting",
-    "rgb",
-    "256",
-    "shell",
-    "xterm",
-    "log",
-    "logging",
-    "command-line",
-    "text"
-  ],
-  "license": "MIT",
-  "name": "ansi-styles",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/chalk/ansi-styles.git"
-  },
-  "scripts": {
-    "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor",
-    "test": "xo && ava"
-  },
-  "version": "3.2.1"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/base64-js/package.json b/signaling_server/service/node_modules/qrcode/node_modules/base64-js/package.json
deleted file mode 100644 (file)
index 7e83ffe..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-{
-  "_from": "base64-js@^1.3.1",
-  "_id": "base64-js@1.5.1",
-  "_inBundle": false,
-  "_integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
-  "_location": "/base64-js",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "base64-js@^1.3.1",
-    "name": "base64-js",
-    "escapedName": "base64-js",
-    "rawSpec": "^1.3.1",
-    "saveSpec": null,
-    "fetchSpec": "^1.3.1"
-  },
-  "_requiredBy": [
-    "/buffer"
-  ],
-  "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
-  "_shasum": "1b1b440160a5bf7ad40b650f095963481903930a",
-  "_spec": "base64-js@^1.3.1",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/buffer",
-  "author": {
-    "name": "T. Jameson Little",
-    "email": "t.jameson.little@gmail.com"
-  },
-  "bugs": {
-    "url": "https://github.com/beatgammit/base64-js/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Base64 encoding/decoding in pure JS",
-  "devDependencies": {
-    "babel-minify": "^0.5.1",
-    "benchmark": "^2.1.4",
-    "browserify": "^16.3.0",
-    "standard": "*",
-    "tape": "4.x"
-  },
-  "funding": [
-    {
-      "type": "github",
-      "url": "https://github.com/sponsors/feross"
-    },
-    {
-      "type": "patreon",
-      "url": "https://www.patreon.com/feross"
-    },
-    {
-      "type": "consulting",
-      "url": "https://feross.org/support"
-    }
-  ],
-  "homepage": "https://github.com/beatgammit/base64-js",
-  "keywords": [
-    "base64"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "base64-js",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/beatgammit/base64-js.git"
-  },
-  "scripts": {
-    "build": "browserify -s base64js -r ./ | minify > base64js.min.js",
-    "lint": "standard",
-    "test": "npm run lint && npm run unit",
-    "unit": "tape test/*.js"
-  },
-  "typings": "index.d.ts",
-  "version": "1.5.1"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc-unsafe/package.json b/signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc-unsafe/package.json
deleted file mode 100644 (file)
index bfa2586..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "_from": "buffer-alloc-unsafe@^1.1.0",
-  "_id": "buffer-alloc-unsafe@1.1.0",
-  "_inBundle": false,
-  "_integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
-  "_location": "/buffer-alloc-unsafe",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "buffer-alloc-unsafe@^1.1.0",
-    "name": "buffer-alloc-unsafe",
-    "escapedName": "buffer-alloc-unsafe",
-    "rawSpec": "^1.1.0",
-    "saveSpec": null,
-    "fetchSpec": "^1.1.0"
-  },
-  "_requiredBy": [
-    "/buffer-alloc"
-  ],
-  "_resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
-  "_shasum": "bd7dc26ae2972d0eda253be061dba992349c19f0",
-  "_spec": "buffer-alloc-unsafe@^1.1.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/buffer-alloc",
-  "bugs": {
-    "url": "https://github.com/LinusU/buffer-alloc-unsafe/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "A [ponyfill](https://ponyfill.com) for `Buffer.allocUnsafe`.",
-  "devDependencies": {
-    "standard": "^7.1.2"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/LinusU/buffer-alloc-unsafe#readme",
-  "keywords": [
-    "allocUnsafe",
-    "allocate",
-    "buffer allocUnsafe",
-    "buffer unsafe allocate",
-    "buffer",
-    "ponyfill",
-    "unsafe allocate"
-  ],
-  "license": "MIT",
-  "name": "buffer-alloc-unsafe",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/LinusU/buffer-alloc-unsafe.git"
-  },
-  "scripts": {
-    "test": "standard && node test"
-  },
-  "version": "1.1.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc/package.json b/signaling_server/service/node_modules/qrcode/node_modules/buffer-alloc/package.json
deleted file mode 100644 (file)
index 404b93a..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "_from": "buffer-alloc@^1.2.0",
-  "_id": "buffer-alloc@1.2.0",
-  "_inBundle": false,
-  "_integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
-  "_location": "/buffer-alloc",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "buffer-alloc@^1.2.0",
-    "name": "buffer-alloc",
-    "escapedName": "buffer-alloc",
-    "rawSpec": "^1.2.0",
-    "saveSpec": null,
-    "fetchSpec": "^1.2.0"
-  },
-  "_requiredBy": [
-    "/qrcode"
-  ],
-  "_resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
-  "_shasum": "890dd90d923a873e08e10e5fd51a57e5b7cce0ec",
-  "_spec": "buffer-alloc@^1.2.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/qrcode",
-  "bugs": {
-    "url": "https://github.com/LinusU/buffer-alloc/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "buffer-alloc-unsafe": "^1.1.0",
-    "buffer-fill": "^1.0.0"
-  },
-  "deprecated": false,
-  "description": "A [ponyfill](https://ponyfill.com) for `Buffer.alloc`.",
-  "devDependencies": {
-    "standard": "^7.1.2"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/LinusU/buffer-alloc#readme",
-  "keywords": [
-    "alloc",
-    "allocate",
-    "buffer alloc",
-    "buffer allocate",
-    "buffer"
-  ],
-  "license": "MIT",
-  "name": "buffer-alloc",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/LinusU/buffer-alloc.git"
-  },
-  "scripts": {
-    "test": "standard && node test"
-  },
-  "version": "1.2.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/buffer-fill/package.json b/signaling_server/service/node_modules/qrcode/node_modules/buffer-fill/package.json
deleted file mode 100644 (file)
index 53dac1c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "_from": "buffer-fill@^1.0.0",
-  "_id": "buffer-fill@1.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
-  "_location": "/buffer-fill",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "buffer-fill@^1.0.0",
-    "name": "buffer-fill",
-    "escapedName": "buffer-fill",
-    "rawSpec": "^1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^1.0.0"
-  },
-  "_requiredBy": [
-    "/buffer-alloc"
-  ],
-  "_resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
-  "_shasum": "f8f78b76789888ef39f205cd637f68e702122b2c",
-  "_spec": "buffer-fill@^1.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/buffer-alloc",
-  "bugs": {
-    "url": "https://github.com/LinusU/buffer-fill/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "A [ponyfill](https://ponyfill.com) for `Buffer.fill`.",
-  "devDependencies": {
-    "buffer-alloc-unsafe": "^1.1.0",
-    "standard": "^7.1.2"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/LinusU/buffer-fill#readme",
-  "license": "MIT",
-  "name": "buffer-fill",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/LinusU/buffer-fill.git"
-  },
-  "scripts": {
-    "test": "standard && node test"
-  },
-  "version": "1.0.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/buffer-from/package.json b/signaling_server/service/node_modules/qrcode/node_modules/buffer-from/package.json
deleted file mode 100644 (file)
index 4b99842..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "_from": "buffer-from@^1.1.1",
-  "_id": "buffer-from@1.1.1",
-  "_inBundle": false,
-  "_integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
-  "_location": "/buffer-from",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "buffer-from@^1.1.1",
-    "name": "buffer-from",
-    "escapedName": "buffer-from",
-    "rawSpec": "^1.1.1",
-    "saveSpec": null,
-    "fetchSpec": "^1.1.1"
-  },
-  "_requiredBy": [
-    "/qrcode"
-  ],
-  "_resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-  "_shasum": "32713bc028f75c02fdb710d7c7bcec1f2c6070ef",
-  "_spec": "buffer-from@^1.1.1",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/qrcode",
-  "bugs": {
-    "url": "https://github.com/LinusU/buffer-from/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "A [ponyfill](https://ponyfill.com) for `Buffer.from`, uses native implementation if available.",
-  "devDependencies": {
-    "standard": "^7.1.2"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/LinusU/buffer-from#readme",
-  "keywords": [
-    "buffer",
-    "buffer from"
-  ],
-  "license": "MIT",
-  "name": "buffer-from",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/LinusU/buffer-from.git"
-  },
-  "scripts": {
-    "test": "standard && node test"
-  },
-  "version": "1.1.1"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/buffer/package.json b/signaling_server/service/node_modules/qrcode/node_modules/buffer/package.json
deleted file mode 100644 (file)
index f8affad..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-{
-  "_from": "buffer@^5.4.3",
-  "_id": "buffer@5.7.1",
-  "_inBundle": false,
-  "_integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
-  "_location": "/buffer",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "buffer@^5.4.3",
-    "name": "buffer",
-    "escapedName": "buffer",
-    "rawSpec": "^5.4.3",
-    "saveSpec": null,
-    "fetchSpec": "^5.4.3"
-  },
-  "_requiredBy": [
-    "/qrcode"
-  ],
-  "_resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
-  "_shasum": "ba62e7c13133053582197160851a8f648e99eed0",
-  "_spec": "buffer@^5.4.3",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/qrcode",
-  "author": {
-    "name": "Feross Aboukhadijeh",
-    "email": "feross@feross.org",
-    "url": "https://feross.org"
-  },
-  "bugs": {
-    "url": "https://github.com/feross/buffer/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Romain Beauxis",
-      "email": "toots@rastageeks.org"
-    },
-    {
-      "name": "James Halliday",
-      "email": "mail@substack.net"
-    }
-  ],
-  "dependencies": {
-    "base64-js": "^1.3.1",
-    "ieee754": "^1.1.13"
-  },
-  "deprecated": false,
-  "description": "Node.js Buffer API, for the browser",
-  "devDependencies": {
-    "airtap": "^3.0.0",
-    "benchmark": "^2.1.4",
-    "browserify": "^17.0.0",
-    "concat-stream": "^2.0.0",
-    "hyperquest": "^2.1.3",
-    "is-buffer": "^2.0.4",
-    "is-nan": "^1.3.0",
-    "split": "^1.0.1",
-    "standard": "*",
-    "tape": "^5.0.1",
-    "through2": "^4.0.2",
-    "uglify-js": "^3.11.3"
-  },
-  "funding": [
-    {
-      "type": "github",
-      "url": "https://github.com/sponsors/feross"
-    },
-    {
-      "type": "patreon",
-      "url": "https://www.patreon.com/feross"
-    },
-    {
-      "type": "consulting",
-      "url": "https://feross.org/support"
-    }
-  ],
-  "homepage": "https://github.com/feross/buffer",
-  "jspm": {
-    "map": {
-      "./index.js": {
-        "node": "@node/buffer"
-      }
-    }
-  },
-  "keywords": [
-    "arraybuffer",
-    "browser",
-    "browserify",
-    "buffer",
-    "compatible",
-    "dataview",
-    "uint8array"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "buffer",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/feross/buffer.git"
-  },
-  "scripts": {
-    "perf": "browserify --debug perf/bracket-notation.js > perf/bundle.js && open perf/index.html",
-    "perf-node": "node perf/bracket-notation.js && node perf/concat.js && node perf/copy-big.js && node perf/copy.js && node perf/new-big.js && node perf/new.js && node perf/readDoubleBE.js && node perf/readFloatBE.js && node perf/readUInt32LE.js && node perf/slice.js && node perf/writeFloatBE.js",
-    "size": "browserify -r ./ | uglifyjs -c -m | gzip | wc -c",
-    "test": "standard && node ./bin/test.js",
-    "test-browser-es5": "airtap -- test/*.js",
-    "test-browser-es5-local": "airtap --local -- test/*.js",
-    "test-browser-es6": "airtap -- test/*.js test/node/*.js",
-    "test-browser-es6-local": "airtap --local -- test/*.js test/node/*.js",
-    "test-node": "tape test/*.js test/node/*.js",
-    "update-authors": "./bin/update-authors.sh"
-  },
-  "standard": {
-    "ignore": [
-      "test/node/**/*.js",
-      "test/common.js",
-      "test/_polyfill.js",
-      "perf/**/*.js"
-    ],
-    "globals": [
-      "SharedArrayBuffer"
-    ]
-  },
-  "types": "index.d.ts",
-  "version": "5.7.1"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/camelcase/package.json b/signaling_server/service/node_modules/qrcode/node_modules/camelcase/package.json
deleted file mode 100644 (file)
index 69572d3..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-{
-  "_from": "camelcase@^5.0.0",
-  "_id": "camelcase@5.3.1",
-  "_inBundle": false,
-  "_integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-  "_location": "/camelcase",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "camelcase@^5.0.0",
-    "name": "camelcase",
-    "escapedName": "camelcase",
-    "rawSpec": "^5.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^5.0.0"
-  },
-  "_requiredBy": [
-    "/yargs-parser"
-  ],
-  "_resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-  "_shasum": "e3c9b31569e106811df242f715725a1f4c494320",
-  "_spec": "camelcase@^5.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs-parser",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/camelcase/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar`",
-  "devDependencies": {
-    "ava": "^1.4.1",
-    "tsd": "^0.7.1",
-    "xo": "^0.24.0"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js",
-    "index.d.ts"
-  ],
-  "homepage": "https://github.com/sindresorhus/camelcase#readme",
-  "keywords": [
-    "camelcase",
-    "camel-case",
-    "camel",
-    "case",
-    "dash",
-    "hyphen",
-    "dot",
-    "underscore",
-    "separator",
-    "string",
-    "text",
-    "convert",
-    "pascalcase",
-    "pascal-case"
-  ],
-  "license": "MIT",
-  "name": "camelcase",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/camelcase.git"
-  },
-  "scripts": {
-    "test": "xo && ava && tsd"
-  },
-  "version": "5.3.1"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/cliui/package.json b/signaling_server/service/node_modules/qrcode/node_modules/cliui/package.json
deleted file mode 100644 (file)
index cc4acf5..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-{
-  "_from": "cliui@^5.0.0",
-  "_id": "cliui@5.0.0",
-  "_inBundle": false,
-  "_integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
-  "_location": "/cliui",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "cliui@^5.0.0",
-    "name": "cliui",
-    "escapedName": "cliui",
-    "rawSpec": "^5.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^5.0.0"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-  "_shasum": "deefcfdb2e800784aa34f46fa08e06851c7bbbc5",
-  "_spec": "cliui@^5.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "Ben Coe",
-    "email": "ben@npmjs.com"
-  },
-  "bugs": {
-    "url": "https://github.com/yargs/cliui/issues"
-  },
-  "bundleDependencies": false,
-  "config": {
-    "blanket": {
-      "pattern": [
-        "index.js"
-      ],
-      "data-cover-never": [
-        "node_modules",
-        "test"
-      ],
-      "output-reporter": "spec"
-    }
-  },
-  "dependencies": {
-    "string-width": "^3.1.0",
-    "strip-ansi": "^5.2.0",
-    "wrap-ansi": "^5.1.0"
-  },
-  "deprecated": false,
-  "description": "easily create complex multi-column command-line-interfaces",
-  "devDependencies": {
-    "chai": "^4.2.0",
-    "chalk": "^2.4.2",
-    "coveralls": "^3.0.3",
-    "mocha": "^6.0.2",
-    "nyc": "^13.3.0",
-    "standard": "^12.0.1",
-    "standard-version": "^5.0.2"
-  },
-  "engine": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/yargs/cliui#readme",
-  "keywords": [
-    "cli",
-    "command-line",
-    "layout",
-    "design",
-    "console",
-    "wrap",
-    "table"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "name": "cliui",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/yargs/cliui.git"
-  },
-  "scripts": {
-    "coverage": "nyc --reporter=text-lcov mocha | coveralls",
-    "pretest": "standard",
-    "release": "standard-version",
-    "test": "nyc mocha"
-  },
-  "standard": {
-    "ignore": [
-      "**/example/**"
-    ],
-    "globals": [
-      "it"
-    ]
-  },
-  "version": "5.0.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/color-convert/package.json b/signaling_server/service/node_modules/qrcode/node_modules/color-convert/package.json
deleted file mode 100644 (file)
index 415a1e2..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-{
-  "_from": "color-convert@^1.9.0",
-  "_id": "color-convert@1.9.3",
-  "_inBundle": false,
-  "_integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-  "_location": "/color-convert",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "color-convert@^1.9.0",
-    "name": "color-convert",
-    "escapedName": "color-convert",
-    "rawSpec": "^1.9.0",
-    "saveSpec": null,
-    "fetchSpec": "^1.9.0"
-  },
-  "_requiredBy": [
-    "/ansi-styles"
-  ],
-  "_resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-  "_shasum": "bb71850690e1f136567de629d2d5471deda4c1e8",
-  "_spec": "color-convert@^1.9.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/ansi-styles",
-  "author": {
-    "name": "Heather Arthur",
-    "email": "fayearthur@gmail.com"
-  },
-  "bugs": {
-    "url": "https://github.com/Qix-/color-convert/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "color-name": "1.1.3"
-  },
-  "deprecated": false,
-  "description": "Plain color conversion functions",
-  "devDependencies": {
-    "chalk": "1.1.1",
-    "xo": "0.11.2"
-  },
-  "files": [
-    "index.js",
-    "conversions.js",
-    "css-keywords.js",
-    "route.js"
-  ],
-  "homepage": "https://github.com/Qix-/color-convert#readme",
-  "keywords": [
-    "color",
-    "colour",
-    "convert",
-    "converter",
-    "conversion",
-    "rgb",
-    "hsl",
-    "hsv",
-    "hwb",
-    "cmyk",
-    "ansi",
-    "ansi16"
-  ],
-  "license": "MIT",
-  "name": "color-convert",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/Qix-/color-convert.git"
-  },
-  "scripts": {
-    "pretest": "xo",
-    "test": "node test/basic.js"
-  },
-  "version": "1.9.3",
-  "xo": {
-    "rules": {
-      "default-case": 0,
-      "no-inline-comments": 0,
-      "operator-linebreak": 0
-    }
-  }
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/color-name/package.json b/signaling_server/service/node_modules/qrcode/node_modules/color-name/package.json
deleted file mode 100644 (file)
index ee4e8b3..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-  "_from": "color-name@1.1.3",
-  "_id": "color-name@1.1.3",
-  "_inBundle": false,
-  "_integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-  "_location": "/color-name",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "color-name@1.1.3",
-    "name": "color-name",
-    "escapedName": "color-name",
-    "rawSpec": "1.1.3",
-    "saveSpec": null,
-    "fetchSpec": "1.1.3"
-  },
-  "_requiredBy": [
-    "/color-convert"
-  ],
-  "_resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-  "_shasum": "a7d0558bd89c42f795dd42328f740831ca53bc25",
-  "_spec": "color-name@1.1.3",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/color-convert",
-  "author": {
-    "name": "DY",
-    "email": "dfcreative@gmail.com"
-  },
-  "bugs": {
-    "url": "https://github.com/dfcreative/color-name/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "A list of color names and its values",
-  "homepage": "https://github.com/dfcreative/color-name",
-  "keywords": [
-    "color-name",
-    "color",
-    "color-keyword",
-    "keyword"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "color-name",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/dfcreative/color-name.git"
-  },
-  "scripts": {
-    "test": "node test.js"
-  },
-  "version": "1.1.3"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/decamelize/package.json b/signaling_server/service/node_modules/qrcode/node_modules/decamelize/package.json
deleted file mode 100644 (file)
index 6e74928..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "_from": "decamelize@^1.2.0",
-  "_id": "decamelize@1.2.0",
-  "_inBundle": false,
-  "_integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-  "_location": "/decamelize",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "decamelize@^1.2.0",
-    "name": "decamelize",
-    "escapedName": "decamelize",
-    "rawSpec": "^1.2.0",
-    "saveSpec": null,
-    "fetchSpec": "^1.2.0"
-  },
-  "_requiredBy": [
-    "/yargs-parser"
-  ],
-  "_resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-  "_shasum": "f6534d15148269b20352e7bee26f501f9a191290",
-  "_spec": "decamelize@^1.2.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs-parser",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/decamelize/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Convert a camelized string into a lowercased one with a custom separator: unicornRainbow → unicorn_rainbow",
-  "devDependencies": {
-    "ava": "*",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/sindresorhus/decamelize#readme",
-  "keywords": [
-    "decamelize",
-    "decamelcase",
-    "camelcase",
-    "lowercase",
-    "case",
-    "dash",
-    "hyphen",
-    "string",
-    "str",
-    "text",
-    "convert"
-  ],
-  "license": "MIT",
-  "name": "decamelize",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/decamelize.git"
-  },
-  "scripts": {
-    "test": "xo && ava"
-  },
-  "version": "1.2.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/package.json b/signaling_server/service/node_modules/qrcode/node_modules/dijkstrajs/package.json
deleted file mode 100644 (file)
index f5fff88..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "_from": "dijkstrajs@^1.0.1",
-  "_id": "dijkstrajs@1.0.1",
-  "_inBundle": false,
-  "_integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=",
-  "_location": "/dijkstrajs",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "dijkstrajs@^1.0.1",
-    "name": "dijkstrajs",
-    "escapedName": "dijkstrajs",
-    "rawSpec": "^1.0.1",
-    "saveSpec": null,
-    "fetchSpec": "^1.0.1"
-  },
-  "_requiredBy": [
-    "/qrcode"
-  ],
-  "_resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz",
-  "_shasum": "d3cd81221e3ea40742cfcde556d4e99e98ddc71b",
-  "_spec": "dijkstrajs@^1.0.1",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/qrcode",
-  "bugs": {
-    "url": "https://github.com/tcort/dijkstrajs/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "A simple JavaScript implementation of Dijkstra's single-source shortest-paths algorithm.",
-  "devDependencies": {
-    "expect.js": "^0.3.1",
-    "jshint": "^2.8.0",
-    "mocha": "^2.3.3"
-  },
-  "homepage": "https://github.com/tcort/dijkstrajs",
-  "jshintConfig": {
-    "bitwise": true,
-    "curly": true,
-    "eqeqeq": true,
-    "forin": true,
-    "freeze": true,
-    "globalstrict": true,
-    "immed": true,
-    "indent": 4,
-    "moz": true,
-    "newcap": true,
-    "noarg": true,
-    "node": true,
-    "noempty": true,
-    "nonew": true,
-    "trailing": true,
-    "undef": true,
-    "smarttabs": true,
-    "strict": true,
-    "validthis": true,
-    "globals": {
-      "describe": false,
-      "it": false,
-      "before": false,
-      "beforeEach": false,
-      "after": false,
-      "afterEach": false
-    }
-  },
-  "keywords": [
-    "dijkstra",
-    "shortest",
-    "path",
-    "search",
-    "graph"
-  ],
-  "license": "MIT",
-  "main": "dijkstra.js",
-  "name": "dijkstrajs",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/tcort/dijkstrajs.git"
-  },
-  "scripts": {
-    "pretest": "jshint dijkstra.js",
-    "test": "mocha -R spec"
-  },
-  "version": "1.0.1"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/package.json b/signaling_server/service/node_modules/qrcode/node_modules/emoji-regex/package.json
deleted file mode 100644 (file)
index 12697d9..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "_from": "emoji-regex@^7.0.1",
-  "_id": "emoji-regex@7.0.3",
-  "_inBundle": false,
-  "_integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-  "_location": "/emoji-regex",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "emoji-regex@^7.0.1",
-    "name": "emoji-regex",
-    "escapedName": "emoji-regex",
-    "rawSpec": "^7.0.1",
-    "saveSpec": null,
-    "fetchSpec": "^7.0.1"
-  },
-  "_requiredBy": [
-    "/string-width"
-  ],
-  "_resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-  "_shasum": "933a04052860c85e83c122479c4748a8e4c72156",
-  "_spec": "emoji-regex@^7.0.1",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/string-width",
-  "author": {
-    "name": "Mathias Bynens",
-    "url": "https://mathiasbynens.be/"
-  },
-  "bugs": {
-    "url": "https://github.com/mathiasbynens/emoji-regex/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.",
-  "devDependencies": {
-    "@babel/cli": "^7.0.0",
-    "@babel/core": "^7.0.0",
-    "@babel/plugin-proposal-unicode-property-regex": "^7.0.0",
-    "@babel/preset-env": "^7.0.0",
-    "mocha": "^5.2.0",
-    "regexgen": "^1.3.0",
-    "unicode-11.0.0": "^0.7.7",
-    "unicode-tr51": "^9.0.1"
-  },
-  "files": [
-    "LICENSE-MIT.txt",
-    "index.js",
-    "index.d.ts",
-    "text.js",
-    "es2015/index.js",
-    "es2015/text.js"
-  ],
-  "homepage": "https://mths.be/emoji-regex",
-  "keywords": [
-    "unicode",
-    "regex",
-    "regexp",
-    "regular expressions",
-    "code points",
-    "symbols",
-    "characters",
-    "emoji"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "emoji-regex",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/mathiasbynens/emoji-regex.git"
-  },
-  "scripts": {
-    "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js",
-    "test": "mocha",
-    "test:watch": "npm run test -- --watch"
-  },
-  "types": "index.d.ts",
-  "version": "7.0.3"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/find-up/package.json b/signaling_server/service/node_modules/qrcode/node_modules/find-up/package.json
deleted file mode 100644 (file)
index 1eccc7c..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "_from": "find-up@^3.0.0",
-  "_id": "find-up@3.0.0",
-  "_inBundle": false,
-  "_integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-  "_location": "/find-up",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "find-up@^3.0.0",
-    "name": "find-up",
-    "escapedName": "find-up",
-    "rawSpec": "^3.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^3.0.0"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-  "_shasum": "49169f1d7993430646da61ecc5ae355c21c97b73",
-  "_spec": "find-up@^3.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/find-up/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "locate-path": "^3.0.0"
-  },
-  "deprecated": false,
-  "description": "Find a file or directory by walking up parent directories",
-  "devDependencies": {
-    "ava": "*",
-    "tempy": "^0.2.1",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/sindresorhus/find-up#readme",
-  "keywords": [
-    "find",
-    "up",
-    "find-up",
-    "findup",
-    "look-up",
-    "look",
-    "file",
-    "search",
-    "match",
-    "package",
-    "resolve",
-    "parent",
-    "parents",
-    "folder",
-    "directory",
-    "dir",
-    "walk",
-    "walking",
-    "path"
-  ],
-  "license": "MIT",
-  "name": "find-up",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/find-up.git"
-  },
-  "scripts": {
-    "test": "xo && ava"
-  },
-  "version": "3.0.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/get-caller-file/package.json b/signaling_server/service/node_modules/qrcode/node_modules/get-caller-file/package.json
deleted file mode 100644 (file)
index 30d2d13..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "_from": "get-caller-file@^2.0.1",
-  "_id": "get-caller-file@2.0.5",
-  "_inBundle": false,
-  "_integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-  "_location": "/get-caller-file",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "get-caller-file@^2.0.1",
-    "name": "get-caller-file",
-    "escapedName": "get-caller-file",
-    "rawSpec": "^2.0.1",
-    "saveSpec": null,
-    "fetchSpec": "^2.0.1"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-  "_shasum": "4f94412a82db32f36e3b0b9741f8a97feb031f7e",
-  "_spec": "get-caller-file@^2.0.1",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "Stefan Penner"
-  },
-  "bugs": {
-    "url": "https://github.com/stefanpenner/get-caller-file/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "[![Build Status](https://travis-ci.org/stefanpenner/get-caller-file.svg?branch=master)](https://travis-ci.org/stefanpenner/get-caller-file) [![Build status](https://ci.appveyor.com/api/projects/status/ol2q94g1932cy14a/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/get-caller-file/branch/master)",
-  "devDependencies": {
-    "@types/chai": "^4.1.7",
-    "@types/ensure-posix-path": "^1.0.0",
-    "@types/mocha": "^5.2.6",
-    "@types/node": "^11.10.5",
-    "chai": "^4.1.2",
-    "ensure-posix-path": "^1.0.1",
-    "mocha": "^5.2.0",
-    "typescript": "^3.3.3333"
-  },
-  "directories": {
-    "test": "tests"
-  },
-  "engines": {
-    "node": "6.* || 8.* || >= 10.*"
-  },
-  "files": [
-    "index.js",
-    "index.js.map",
-    "index.d.ts"
-  ],
-  "homepage": "https://github.com/stefanpenner/get-caller-file#readme",
-  "license": "ISC",
-  "main": "index.js",
-  "name": "get-caller-file",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/stefanpenner/get-caller-file.git"
-  },
-  "scripts": {
-    "prepare": "tsc",
-    "test": "mocha test",
-    "test:debug": "mocha test"
-  },
-  "version": "2.0.5"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/ieee754/package.json b/signaling_server/service/node_modules/qrcode/node_modules/ieee754/package.json
deleted file mode 100644 (file)
index afbd4d3..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "_from": "ieee754@^1.1.13",
-  "_id": "ieee754@1.2.1",
-  "_inBundle": false,
-  "_integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
-  "_location": "/ieee754",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "ieee754@^1.1.13",
-    "name": "ieee754",
-    "escapedName": "ieee754",
-    "rawSpec": "^1.1.13",
-    "saveSpec": null,
-    "fetchSpec": "^1.1.13"
-  },
-  "_requiredBy": [
-    "/buffer"
-  ],
-  "_resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
-  "_shasum": "8eb7a10a63fff25d15a57b001586d177d1b0d352",
-  "_spec": "ieee754@^1.1.13",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/buffer",
-  "author": {
-    "name": "Feross Aboukhadijeh",
-    "email": "feross@feross.org",
-    "url": "https://feross.org"
-  },
-  "bugs": {
-    "url": "https://github.com/feross/ieee754/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Romain Beauxis",
-      "email": "toots@rastageeks.org"
-    }
-  ],
-  "deprecated": false,
-  "description": "Read/write IEEE754 floating point numbers from/to a Buffer or array-like object",
-  "devDependencies": {
-    "airtap": "^3.0.0",
-    "standard": "*",
-    "tape": "^5.0.1"
-  },
-  "funding": [
-    {
-      "type": "github",
-      "url": "https://github.com/sponsors/feross"
-    },
-    {
-      "type": "patreon",
-      "url": "https://www.patreon.com/feross"
-    },
-    {
-      "type": "consulting",
-      "url": "https://feross.org/support"
-    }
-  ],
-  "homepage": "https://github.com/feross/ieee754#readme",
-  "keywords": [
-    "IEEE 754",
-    "buffer",
-    "convert",
-    "floating point",
-    "ieee754"
-  ],
-  "license": "BSD-3-Clause",
-  "main": "index.js",
-  "name": "ieee754",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/feross/ieee754.git"
-  },
-  "scripts": {
-    "test": "standard && npm run test-node && npm run test-browser",
-    "test-browser": "airtap -- test/*.js",
-    "test-browser-local": "airtap --local -- test/*.js",
-    "test-node": "tape test/*.js"
-  },
-  "types": "index.d.ts",
-  "version": "1.2.1"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/is-fullwidth-code-point/package.json b/signaling_server/service/node_modules/qrcode/node_modules/is-fullwidth-code-point/package.json
deleted file mode 100644 (file)
index 5ffcd8b..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-{
-  "_from": "is-fullwidth-code-point@^2.0.0",
-  "_id": "is-fullwidth-code-point@2.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-  "_location": "/is-fullwidth-code-point",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "is-fullwidth-code-point@^2.0.0",
-    "name": "is-fullwidth-code-point",
-    "escapedName": "is-fullwidth-code-point",
-    "rawSpec": "^2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^2.0.0"
-  },
-  "_requiredBy": [
-    "/string-width"
-  ],
-  "_resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-  "_shasum": "a3b30a5c4f199183167aaab93beefae3ddfb654f",
-  "_spec": "is-fullwidth-code-point@^2.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/string-width",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/is-fullwidth-code-point/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Check if the character represented by a given Unicode code point is fullwidth",
-  "devDependencies": {
-    "ava": "*",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=4"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/sindresorhus/is-fullwidth-code-point#readme",
-  "keywords": [
-    "fullwidth",
-    "full-width",
-    "full",
-    "width",
-    "unicode",
-    "character",
-    "char",
-    "string",
-    "str",
-    "codepoint",
-    "code",
-    "point",
-    "is",
-    "detect",
-    "check"
-  ],
-  "license": "MIT",
-  "name": "is-fullwidth-code-point",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/is-fullwidth-code-point.git"
-  },
-  "scripts": {
-    "test": "xo && ava"
-  },
-  "version": "2.0.0",
-  "xo": {
-    "esnext": true
-  }
-}
index 3fd21f6..1bce0ae 100644 (file)
@@ -1,27 +1,32 @@
 {
-  "_from": "isarray@^2.0.1",
+  "_args": [
+    [
+      "isarray@2.0.5",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "isarray@2.0.5",
   "_id": "isarray@2.0.5",
   "_inBundle": false,
   "_integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-  "_location": "/isarray",
+  "_location": "/qrcode/isarray",
   "_phantomChildren": {},
   "_requested": {
-    "type": "range",
+    "type": "version",
     "registry": true,
-    "raw": "isarray@^2.0.1",
+    "raw": "isarray@2.0.5",
     "name": "isarray",
     "escapedName": "isarray",
-    "rawSpec": "^2.0.1",
+    "rawSpec": "2.0.5",
     "saveSpec": null,
-    "fetchSpec": "^2.0.1"
+    "fetchSpec": "2.0.5"
   },
   "_requiredBy": [
     "/qrcode"
   ],
   "_resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-  "_shasum": "8af1e4c1221244cc62459faf38940d4e644a5723",
-  "_spec": "isarray@^2.0.1",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/qrcode",
+  "_spec": "2.0.5",
+  "_where": "/opt/source/offload.js",
   "author": {
     "name": "Julian Gruber",
     "email": "mail@juliangruber.com",
@@ -30,9 +35,7 @@
   "bugs": {
     "url": "https://github.com/juliangruber/isarray/issues"
   },
-  "bundleDependencies": false,
   "dependencies": {},
-  "deprecated": false,
   "description": "Array#isArray for older browsers",
   "devDependencies": {
     "tape": "~2.13.4"
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/locate-path/package.json b/signaling_server/service/node_modules/qrcode/node_modules/locate-path/package.json
deleted file mode 100644 (file)
index 1894a18..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "_from": "locate-path@^3.0.0",
-  "_id": "locate-path@3.0.0",
-  "_inBundle": false,
-  "_integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-  "_location": "/locate-path",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "locate-path@^3.0.0",
-    "name": "locate-path",
-    "escapedName": "locate-path",
-    "rawSpec": "^3.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^3.0.0"
-  },
-  "_requiredBy": [
-    "/find-up"
-  ],
-  "_resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-  "_shasum": "dbec3b3ab759758071b58fe59fc41871af21400e",
-  "_spec": "locate-path@^3.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/find-up",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/locate-path/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "p-locate": "^3.0.0",
-    "path-exists": "^3.0.0"
-  },
-  "deprecated": false,
-  "description": "Get the first path that exists on disk of multiple paths",
-  "devDependencies": {
-    "ava": "*",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/sindresorhus/locate-path#readme",
-  "keywords": [
-    "locate",
-    "path",
-    "paths",
-    "file",
-    "files",
-    "exists",
-    "find",
-    "finder",
-    "search",
-    "searcher",
-    "array",
-    "iterable",
-    "iterator"
-  ],
-  "license": "MIT",
-  "name": "locate-path",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/locate-path.git"
-  },
-  "scripts": {
-    "test": "xo && ava"
-  },
-  "version": "3.0.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/p-limit/package.json b/signaling_server/service/node_modules/qrcode/node_modules/p-limit/package.json
deleted file mode 100644 (file)
index 1b177e1..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "_from": "p-limit@^2.0.0",
-  "_id": "p-limit@2.3.0",
-  "_inBundle": false,
-  "_integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-  "_location": "/p-limit",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "p-limit@^2.0.0",
-    "name": "p-limit",
-    "escapedName": "p-limit",
-    "rawSpec": "^2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^2.0.0"
-  },
-  "_requiredBy": [
-    "/p-locate"
-  ],
-  "_resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-  "_shasum": "3dd33c647a214fdfffd835933eb086da0dc21db1",
-  "_spec": "p-limit@^2.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/p-locate",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/p-limit/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "p-try": "^2.0.0"
-  },
-  "deprecated": false,
-  "description": "Run multiple promise-returning & async functions with limited concurrency",
-  "devDependencies": {
-    "ava": "^1.2.1",
-    "delay": "^4.1.0",
-    "in-range": "^1.0.0",
-    "random-int": "^1.0.0",
-    "time-span": "^2.0.0",
-    "tsd-check": "^0.3.0",
-    "xo": "^0.24.0"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js",
-    "index.d.ts"
-  ],
-  "funding": "https://github.com/sponsors/sindresorhus",
-  "homepage": "https://github.com/sindresorhus/p-limit#readme",
-  "keywords": [
-    "promise",
-    "limit",
-    "limited",
-    "concurrency",
-    "throttle",
-    "throat",
-    "rate",
-    "batch",
-    "ratelimit",
-    "task",
-    "queue",
-    "async",
-    "await",
-    "promises",
-    "bluebird"
-  ],
-  "license": "MIT",
-  "name": "p-limit",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/p-limit.git"
-  },
-  "scripts": {
-    "test": "xo && ava && tsd-check"
-  },
-  "version": "2.3.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/p-locate/package.json b/signaling_server/service/node_modules/qrcode/node_modules/p-locate/package.json
deleted file mode 100644 (file)
index 4ac8808..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-{
-  "_from": "p-locate@^3.0.0",
-  "_id": "p-locate@3.0.0",
-  "_inBundle": false,
-  "_integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-  "_location": "/p-locate",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "p-locate@^3.0.0",
-    "name": "p-locate",
-    "escapedName": "p-locate",
-    "rawSpec": "^3.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^3.0.0"
-  },
-  "_requiredBy": [
-    "/locate-path"
-  ],
-  "_resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-  "_shasum": "322d69a05c0264b25997d9f40cd8a891ab0064a4",
-  "_spec": "p-locate@^3.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/locate-path",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/p-locate/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "p-limit": "^2.0.0"
-  },
-  "deprecated": false,
-  "description": "Get the first fulfilled promise that satisfies the provided testing function",
-  "devDependencies": {
-    "ava": "*",
-    "delay": "^3.0.0",
-    "in-range": "^1.0.0",
-    "time-span": "^2.0.0",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/sindresorhus/p-locate#readme",
-  "keywords": [
-    "promise",
-    "locate",
-    "find",
-    "finder",
-    "search",
-    "searcher",
-    "test",
-    "array",
-    "collection",
-    "iterable",
-    "iterator",
-    "race",
-    "fulfilled",
-    "fastest",
-    "async",
-    "await",
-    "promises",
-    "bluebird"
-  ],
-  "license": "MIT",
-  "name": "p-locate",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/p-locate.git"
-  },
-  "scripts": {
-    "test": "xo && ava"
-  },
-  "version": "3.0.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/p-try/package.json b/signaling_server/service/node_modules/qrcode/node_modules/p-try/package.json
deleted file mode 100644 (file)
index 295bfa3..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-  "_from": "p-try@^2.0.0",
-  "_id": "p-try@2.2.0",
-  "_inBundle": false,
-  "_integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-  "_location": "/p-try",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "p-try@^2.0.0",
-    "name": "p-try",
-    "escapedName": "p-try",
-    "rawSpec": "^2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^2.0.0"
-  },
-  "_requiredBy": [
-    "/p-limit"
-  ],
-  "_resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-  "_shasum": "cb2868540e313d61de58fafbe35ce9004d5540e6",
-  "_spec": "p-try@^2.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/p-limit",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/p-try/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "`Start a promise chain",
-  "devDependencies": {
-    "ava": "^1.4.1",
-    "tsd": "^0.7.1",
-    "xo": "^0.24.0"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js",
-    "index.d.ts"
-  ],
-  "homepage": "https://github.com/sindresorhus/p-try#readme",
-  "keywords": [
-    "promise",
-    "try",
-    "resolve",
-    "function",
-    "catch",
-    "async",
-    "await",
-    "promises",
-    "settled",
-    "ponyfill",
-    "polyfill",
-    "shim",
-    "bluebird"
-  ],
-  "license": "MIT",
-  "name": "p-try",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/p-try.git"
-  },
-  "scripts": {
-    "test": "xo && ava && tsd"
-  },
-  "version": "2.2.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/path-exists/package.json b/signaling_server/service/node_modules/qrcode/node_modules/path-exists/package.json
deleted file mode 100644 (file)
index 2bb1005..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-  "_from": "path-exists@^3.0.0",
-  "_id": "path-exists@3.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-  "_location": "/path-exists",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "path-exists@^3.0.0",
-    "name": "path-exists",
-    "escapedName": "path-exists",
-    "rawSpec": "^3.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^3.0.0"
-  },
-  "_requiredBy": [
-    "/locate-path"
-  ],
-  "_resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-  "_shasum": "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515",
-  "_spec": "path-exists@^3.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/locate-path",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/path-exists/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Check if a path exists",
-  "devDependencies": {
-    "ava": "*",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=4"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/sindresorhus/path-exists#readme",
-  "keywords": [
-    "path",
-    "exists",
-    "exist",
-    "file",
-    "filepath",
-    "fs",
-    "filesystem",
-    "file-system",
-    "access",
-    "stat"
-  ],
-  "license": "MIT",
-  "name": "path-exists",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/path-exists.git"
-  },
-  "scripts": {
-    "test": "xo && ava"
-  },
-  "version": "3.0.0",
-  "xo": {
-    "esnext": true
-  }
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/pngjs/package.json b/signaling_server/service/node_modules/qrcode/node_modules/pngjs/package.json
deleted file mode 100644 (file)
index a583b35..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-{
-  "_from": "pngjs@^3.3.0",
-  "_id": "pngjs@3.4.0",
-  "_inBundle": false,
-  "_integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
-  "_location": "/pngjs",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "pngjs@^3.3.0",
-    "name": "pngjs",
-    "escapedName": "pngjs",
-    "rawSpec": "^3.3.0",
-    "saveSpec": null,
-    "fetchSpec": "^3.3.0"
-  },
-  "_requiredBy": [
-    "/qrcode"
-  ],
-  "_resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
-  "_shasum": "99ca7d725965fb655814eaf65f38f12bbdbf555f",
-  "_spec": "pngjs@^3.3.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/qrcode",
-  "bugs": {
-    "url": "https://github.com/lukeapage/pngjs2/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Alexandre Paré"
-    },
-    {
-      "name": "Gaurav Mali"
-    },
-    {
-      "name": "Gusts Kaksis"
-    },
-    {
-      "name": "Kuba Niegowski"
-    },
-    {
-      "name": "Luke Page"
-    },
-    {
-      "name": "Pietajan De Potter"
-    },
-    {
-      "name": "Steven Sojka"
-    },
-    {
-      "name": "liangzeng"
-    },
-    {
-      "name": "Michael Vogt"
-    },
-    {
-      "name": "Xin-Xin Wang"
-    },
-    {
-      "name": "toriningen"
-    },
-    {
-      "name": "Eugene Kulabuhov"
-    }
-  ],
-  "deprecated": false,
-  "description": "PNG encoder/decoder in pure JS, supporting any bit size & interlace, async & sync with full test suite.",
-  "devDependencies": {
-    "browserify": "^14.5.0",
-    "buffer-equal": "1.0.0",
-    "connect": "^3.4.0",
-    "eslint": "^4.1.0",
-    "istanbul": "^0.4.4",
-    "phantomjs-prebuilt": "^2.1.7",
-    "serve-static": "^1.10.0",
-    "tap-dot": "^2.0.0",
-    "tape": "^4.0.2"
-  },
-  "directories": {
-    "lib": "lib",
-    "example": "examples",
-    "test": "test"
-  },
-  "engines": {
-    "node": ">=4.0.0"
-  },
-  "homepage": "https://github.com/lukeapage/pngjs",
-  "keywords": [
-    "PNG",
-    "decoder",
-    "encoder",
-    "js-png",
-    "node-png",
-    "parser",
-    "png",
-    "png-js",
-    "png-parse",
-    "pngjs"
-  ],
-  "license": "MIT",
-  "main": "./lib/png.js",
-  "name": "pngjs",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/lukeapage/pngjs2.git"
-  },
-  "scripts": {
-    "browserify": "browserify lib/png.js --standalone png > browser.js",
-    "build": "npm run prepublish",
-    "coverage": "istanbul -- cover node_modules/tape/bin/tape test/*-spec.js nolarge",
-    "coverage-report": "npm run coverage && istanbul report html",
-    "coveralls": "cat ./coverage/lcov.info | coveralls",
-    "lint": "eslint lib",
-    "prepublish": "npm run browserify",
-    "test": "npm run lint && tape test/*-spec.js | tap-dot && node test/run-compare"
-  },
-  "version": "3.4.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/require-directory/package.json b/signaling_server/service/node_modules/qrcode/node_modules/require-directory/package.json
deleted file mode 100644 (file)
index 6fe330b..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "_from": "require-directory@^2.1.1",
-  "_id": "require-directory@2.1.1",
-  "_inBundle": false,
-  "_integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-  "_location": "/require-directory",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "require-directory@^2.1.1",
-    "name": "require-directory",
-    "escapedName": "require-directory",
-    "rawSpec": "^2.1.1",
-    "saveSpec": null,
-    "fetchSpec": "^2.1.1"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-  "_shasum": "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42",
-  "_spec": "require-directory@^2.1.1",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "Troy Goode",
-    "email": "troygoode@gmail.com",
-    "url": "http://github.com/troygoode/"
-  },
-  "bugs": {
-    "url": "http://github.com/troygoode/node-require-directory/issues/"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Troy Goode",
-      "email": "troygoode@gmail.com",
-      "url": "http://github.com/troygoode/"
-    }
-  ],
-  "deprecated": false,
-  "description": "Recursively iterates over specified directory, require()'ing each file, and returning a nested hash structure containing those modules.",
-  "devDependencies": {
-    "jshint": "^2.6.0",
-    "mocha": "^2.1.0"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "homepage": "https://github.com/troygoode/node-require-directory/",
-  "keywords": [
-    "require",
-    "directory",
-    "library",
-    "recursive"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "require-directory",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/troygoode/node-require-directory.git"
-  },
-  "scripts": {
-    "lint": "jshint index.js test/test.js",
-    "test": "mocha"
-  },
-  "version": "2.1.1"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/require-main-filename/package.json b/signaling_server/service/node_modules/qrcode/node_modules/require-main-filename/package.json
deleted file mode 100644 (file)
index 34d4ae2..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "_from": "require-main-filename@^2.0.0",
-  "_id": "require-main-filename@2.0.0",
-  "_inBundle": false,
-  "_integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-  "_location": "/require-main-filename",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "require-main-filename@^2.0.0",
-    "name": "require-main-filename",
-    "escapedName": "require-main-filename",
-    "rawSpec": "^2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^2.0.0"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-  "_shasum": "d0b329ecc7cc0f61649f62215be69af54aa8989b",
-  "_spec": "require-main-filename@^2.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "Ben Coe",
-    "email": "ben@npmjs.com"
-  },
-  "bugs": {
-    "url": "https://github.com/yargs/require-main-filename/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "shim for require.main.filename() that works in as many environments as possible",
-  "devDependencies": {
-    "chai": "^4.0.0",
-    "standard": "^10.0.3",
-    "standard-version": "^4.0.0",
-    "tap": "^11.0.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/yargs/require-main-filename#readme",
-  "keywords": [
-    "require",
-    "shim",
-    "iisnode"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "name": "require-main-filename",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/yargs/require-main-filename.git"
-  },
-  "scripts": {
-    "pretest": "standard",
-    "release": "standard-version",
-    "test": "tap --coverage test.js"
-  },
-  "version": "2.0.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/set-blocking/package.json b/signaling_server/service/node_modules/qrcode/node_modules/set-blocking/package.json
deleted file mode 100644 (file)
index 3fe3055..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "_from": "set-blocking@^2.0.0",
-  "_id": "set-blocking@2.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-  "_location": "/set-blocking",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "set-blocking@^2.0.0",
-    "name": "set-blocking",
-    "escapedName": "set-blocking",
-    "rawSpec": "^2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^2.0.0"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-  "_shasum": "045f9782d011ae9a6803ddd382b24392b3d890f7",
-  "_spec": "set-blocking@^2.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "Ben Coe",
-    "email": "ben@npmjs.com"
-  },
-  "bugs": {
-    "url": "https://github.com/yargs/set-blocking/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "set blocking stdio and stderr ensuring that terminal output does not truncate",
-  "devDependencies": {
-    "chai": "^3.5.0",
-    "coveralls": "^2.11.9",
-    "mocha": "^2.4.5",
-    "nyc": "^6.4.4",
-    "standard": "^7.0.1",
-    "standard-version": "^2.2.1"
-  },
-  "files": [
-    "index.js",
-    "LICENSE.txt"
-  ],
-  "homepage": "https://github.com/yargs/set-blocking#readme",
-  "keywords": [
-    "flush",
-    "terminal",
-    "blocking",
-    "shim",
-    "stdio",
-    "stderr"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "name": "set-blocking",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/yargs/set-blocking.git"
-  },
-  "scripts": {
-    "coverage": "nyc report --reporter=text-lcov | coveralls",
-    "pretest": "standard",
-    "test": "nyc mocha ./test/*.js",
-    "version": "standard-version"
-  },
-  "version": "2.0.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/string-width/package.json b/signaling_server/service/node_modules/qrcode/node_modules/string-width/package.json
deleted file mode 100644 (file)
index 01e2a68..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-{
-  "_from": "string-width@^3.0.0",
-  "_id": "string-width@3.1.0",
-  "_inBundle": false,
-  "_integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-  "_location": "/string-width",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "string-width@^3.0.0",
-    "name": "string-width",
-    "escapedName": "string-width",
-    "rawSpec": "^3.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^3.0.0"
-  },
-  "_requiredBy": [
-    "/cliui",
-    "/wrap-ansi",
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-  "_shasum": "22767be21b62af1081574306f69ac51b62203961",
-  "_spec": "string-width@^3.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/string-width/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "emoji-regex": "^7.0.1",
-    "is-fullwidth-code-point": "^2.0.0",
-    "strip-ansi": "^5.1.0"
-  },
-  "deprecated": false,
-  "description": "Get the visual width of a string - the number of columns required to display it",
-  "devDependencies": {
-    "ava": "^1.0.1",
-    "xo": "^0.23.0"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/sindresorhus/string-width#readme",
-  "keywords": [
-    "string",
-    "str",
-    "character",
-    "char",
-    "unicode",
-    "width",
-    "visual",
-    "column",
-    "columns",
-    "fullwidth",
-    "full-width",
-    "full",
-    "ansi",
-    "escape",
-    "codes",
-    "cli",
-    "command-line",
-    "terminal",
-    "console",
-    "cjk",
-    "chinese",
-    "japanese",
-    "korean",
-    "fixed-width"
-  ],
-  "license": "MIT",
-  "name": "string-width",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/string-width.git"
-  },
-  "scripts": {
-    "test": "xo && ava"
-  },
-  "version": "3.1.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/strip-ansi/package.json b/signaling_server/service/node_modules/qrcode/node_modules/strip-ansi/package.json
deleted file mode 100644 (file)
index 91a7da8..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-  "_from": "strip-ansi@^5.2.0",
-  "_id": "strip-ansi@5.2.0",
-  "_inBundle": false,
-  "_integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-  "_location": "/strip-ansi",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "strip-ansi@^5.2.0",
-    "name": "strip-ansi",
-    "escapedName": "strip-ansi",
-    "rawSpec": "^5.2.0",
-    "saveSpec": null,
-    "fetchSpec": "^5.2.0"
-  },
-  "_requiredBy": [
-    "/cliui",
-    "/string-width",
-    "/wrap-ansi"
-  ],
-  "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-  "_shasum": "8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae",
-  "_spec": "strip-ansi@^5.2.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/cliui",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/chalk/strip-ansi/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "ansi-regex": "^4.1.0"
-  },
-  "deprecated": false,
-  "description": "Strip ANSI escape codes from a string",
-  "devDependencies": {
-    "ava": "^1.3.1",
-    "tsd-check": "^0.5.0",
-    "xo": "^0.24.0"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js",
-    "index.d.ts"
-  ],
-  "homepage": "https://github.com/chalk/strip-ansi#readme",
-  "keywords": [
-    "strip",
-    "trim",
-    "remove",
-    "ansi",
-    "styles",
-    "color",
-    "colour",
-    "colors",
-    "terminal",
-    "console",
-    "string",
-    "tty",
-    "escape",
-    "formatting",
-    "rgb",
-    "256",
-    "shell",
-    "xterm",
-    "log",
-    "logging",
-    "command-line",
-    "text"
-  ],
-  "license": "MIT",
-  "name": "strip-ansi",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/chalk/strip-ansi.git"
-  },
-  "scripts": {
-    "test": "xo && ava && tsd-check"
-  },
-  "version": "5.2.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/which-module/package.json b/signaling_server/service/node_modules/qrcode/node_modules/which-module/package.json
deleted file mode 100644 (file)
index e986b4f..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-  "_from": "which-module@^2.0.0",
-  "_id": "which-module@2.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-  "_location": "/which-module",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "which-module@^2.0.0",
-    "name": "which-module",
-    "escapedName": "which-module",
-    "rawSpec": "^2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^2.0.0"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-  "_shasum": "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a",
-  "_spec": "which-module@^2.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "nexdrew"
-  },
-  "bugs": {
-    "url": "https://github.com/nexdrew/which-module/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Find the module object for something that was require()d",
-  "devDependencies": {
-    "ava": "^0.19.1",
-    "coveralls": "^2.13.1",
-    "nyc": "^10.3.0",
-    "standard": "^10.0.2",
-    "standard-version": "^4.0.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/nexdrew/which-module#readme",
-  "keywords": [
-    "which",
-    "module",
-    "exports",
-    "filename",
-    "require",
-    "reverse",
-    "lookup"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "name": "which-module",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/nexdrew/which-module.git"
-  },
-  "scripts": {
-    "coverage": "nyc report --reporter=text-lcov | coveralls",
-    "pretest": "standard",
-    "release": "standard-version",
-    "test": "nyc ava"
-  },
-  "version": "2.0.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/wrap-ansi/package.json b/signaling_server/service/node_modules/qrcode/node_modules/wrap-ansi/package.json
deleted file mode 100644 (file)
index fbb9fdb..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "_from": "wrap-ansi@^5.1.0",
-  "_id": "wrap-ansi@5.1.0",
-  "_inBundle": false,
-  "_integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
-  "_location": "/wrap-ansi",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "wrap-ansi@^5.1.0",
-    "name": "wrap-ansi",
-    "escapedName": "wrap-ansi",
-    "rawSpec": "^5.1.0",
-    "saveSpec": null,
-    "fetchSpec": "^5.1.0"
-  },
-  "_requiredBy": [
-    "/cliui"
-  ],
-  "_resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
-  "_shasum": "1fd1f67235d5b6d0fee781056001bfb694c03b09",
-  "_spec": "wrap-ansi@^5.1.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/cliui",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/chalk/wrap-ansi/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "ansi-styles": "^3.2.0",
-    "string-width": "^3.0.0",
-    "strip-ansi": "^5.0.0"
-  },
-  "deprecated": false,
-  "description": "Wordwrap a string with ANSI escape codes",
-  "devDependencies": {
-    "ava": "^1.2.1",
-    "chalk": "^2.4.2",
-    "coveralls": "^3.0.3",
-    "has-ansi": "^3.0.0",
-    "nyc": "^13.3.0",
-    "xo": "^0.24.0"
-  },
-  "engines": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/chalk/wrap-ansi#readme",
-  "keywords": [
-    "wrap",
-    "break",
-    "wordwrap",
-    "wordbreak",
-    "linewrap",
-    "ansi",
-    "styles",
-    "color",
-    "colour",
-    "colors",
-    "terminal",
-    "console",
-    "cli",
-    "string",
-    "tty",
-    "escape",
-    "formatting",
-    "rgb",
-    "256",
-    "shell",
-    "xterm",
-    "log",
-    "logging",
-    "command-line",
-    "text"
-  ],
-  "license": "MIT",
-  "name": "wrap-ansi",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/chalk/wrap-ansi.git"
-  },
-  "scripts": {
-    "test": "xo && nyc ava"
-  },
-  "version": "5.1.0"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/y18n/package.json b/signaling_server/service/node_modules/qrcode/node_modules/y18n/package.json
deleted file mode 100644 (file)
index ca674c9..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "_from": "y18n@^4.0.0",
-  "_id": "y18n@4.0.1",
-  "_inBundle": false,
-  "_integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
-  "_location": "/y18n",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "y18n@^4.0.0",
-    "name": "y18n",
-    "escapedName": "y18n",
-    "rawSpec": "^4.0.0",
-    "saveSpec": null,
-    "fetchSpec": "^4.0.0"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
-  "_shasum": "8db2b83c31c5d75099bb890b23f3094891e247d4",
-  "_spec": "y18n@^4.0.0",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "Ben Coe",
-    "email": "ben@npmjs.com"
-  },
-  "bugs": {
-    "url": "https://github.com/yargs/y18n/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "the bare-bones internationalization library used by yargs",
-  "devDependencies": {
-    "chai": "^4.0.1",
-    "coveralls": "^3.0.0",
-    "mocha": "^4.0.1",
-    "nyc": "^11.0.1",
-    "rimraf": "^2.5.0",
-    "standard": "^10.0.0-beta.0",
-    "standard-version": "^4.2.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/yargs/y18n",
-  "keywords": [
-    "i18n",
-    "internationalization",
-    "yargs"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "name": "y18n",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/yargs/y18n.git"
-  },
-  "scripts": {
-    "coverage": "nyc report --reporter=text-lcov | coveralls",
-    "pretest": "standard",
-    "release": "standard-version",
-    "test": "nyc mocha"
-  },
-  "version": "4.0.1"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/yargs-parser/package.json b/signaling_server/service/node_modules/qrcode/node_modules/yargs-parser/package.json
deleted file mode 100644 (file)
index 83fb150..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "_from": "yargs-parser@^13.1.2",
-  "_id": "yargs-parser@13.1.2",
-  "_inBundle": false,
-  "_integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
-  "_location": "/yargs-parser",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "yargs-parser@^13.1.2",
-    "name": "yargs-parser",
-    "escapedName": "yargs-parser",
-    "rawSpec": "^13.1.2",
-    "saveSpec": null,
-    "fetchSpec": "^13.1.2"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
-  "_shasum": "130f09702ebaeef2650d54ce6e3e5706f7a4fb38",
-  "_spec": "yargs-parser@^13.1.2",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/yargs",
-  "author": {
-    "name": "Ben Coe",
-    "email": "ben@npmjs.com"
-  },
-  "bugs": {
-    "url": "https://github.com/yargs/yargs-parser/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "camelcase": "^5.0.0",
-    "decamelize": "^1.2.0"
-  },
-  "deprecated": false,
-  "description": "the mighty option parser used by yargs",
-  "devDependencies": {
-    "chai": "^4.2.0",
-    "coveralls": "^3.0.2",
-    "mocha": "^5.2.0",
-    "nyc": "^14.1.0",
-    "standard": "^12.0.1",
-    "standard-version": "^6.0.0"
-  },
-  "engine": {
-    "node": ">=6"
-  },
-  "files": [
-    "lib",
-    "index.js"
-  ],
-  "homepage": "https://github.com/yargs/yargs-parser#readme",
-  "keywords": [
-    "argument",
-    "parser",
-    "yargs",
-    "command",
-    "cli",
-    "parsing",
-    "option",
-    "args",
-    "argument"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "name": "yargs-parser",
-  "repository": {
-    "url": "git+ssh://git@github.com/yargs/yargs-parser.git"
-  },
-  "scripts": {
-    "coverage": "nyc report --reporter=text-lcov | coveralls",
-    "posttest": "standard",
-    "release": "standard-version",
-    "test": "nyc mocha test/*.js"
-  },
-  "version": "13.1.2"
-}
diff --git a/signaling_server/service/node_modules/qrcode/node_modules/yargs/package.json b/signaling_server/service/node_modules/qrcode/node_modules/yargs/package.json
deleted file mode 100644 (file)
index ad2003a..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-{
-  "_from": "yargs@^13.2.4",
-  "_id": "yargs@13.3.2",
-  "_inBundle": false,
-  "_integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
-  "_location": "/yargs",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "yargs@^13.2.4",
-    "name": "yargs",
-    "escapedName": "yargs",
-    "rawSpec": "^13.2.4",
-    "saveSpec": null,
-    "fetchSpec": "^13.2.4"
-  },
-  "_requiredBy": [
-    "/qrcode"
-  ],
-  "_resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
-  "_shasum": "ad7ffefec1aa59565ac915f82dccb38a9c31a2dd",
-  "_spec": "yargs@^13.2.4",
-  "_where": "/media/yh106.jung/Data/playspace/node_tests1/node_modules/qrcode",
-  "bugs": {
-    "url": "https://github.com/yargs/yargs/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Yargs Contributors",
-      "url": "https://github.com/yargs/yargs/graphs/contributors"
-    }
-  ],
-  "dependencies": {
-    "cliui": "^5.0.0",
-    "find-up": "^3.0.0",
-    "get-caller-file": "^2.0.1",
-    "require-directory": "^2.1.1",
-    "require-main-filename": "^2.0.0",
-    "set-blocking": "^2.0.0",
-    "string-width": "^3.0.0",
-    "which-module": "^2.0.0",
-    "y18n": "^4.0.0",
-    "yargs-parser": "^13.1.2"
-  },
-  "deprecated": false,
-  "description": "yargs the modern, pirate-themed, successor to optimist.",
-  "devDependencies": {
-    "chai": "^4.2.0",
-    "chalk": "^2.4.2",
-    "coveralls": "^3.0.3",
-    "cpr": "^3.0.1",
-    "cross-spawn": "^6.0.4",
-    "es6-promise": "^4.2.5",
-    "hashish": "0.0.4",
-    "mocha": "^5.2.0",
-    "nyc": "^14.1.0",
-    "rimraf": "^2.6.3",
-    "standard": "^12.0.1",
-    "standard-version": "^6.0.1",
-    "which": "^1.3.1",
-    "yargs-test-extends": "^1.0.1"
-  },
-  "engine": {
-    "node": ">=6"
-  },
-  "files": [
-    "index.js",
-    "yargs.js",
-    "lib",
-    "locales",
-    "completion.sh.hbs",
-    "completion.zsh.hbs",
-    "LICENSE"
-  ],
-  "homepage": "https://yargs.js.org/",
-  "keywords": [
-    "argument",
-    "args",
-    "option",
-    "parser",
-    "parsing",
-    "cli",
-    "command"
-  ],
-  "license": "MIT",
-  "main": "./index.js",
-  "name": "yargs",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/yargs/yargs.git"
-  },
-  "scripts": {
-    "coverage": "nyc report --reporter=text-lcov | coveralls",
-    "pretest": "standard",
-    "release": "standard-version",
-    "test": "nyc --cache mocha --require ./test/before.js --timeout=12000 --check-leaks"
-  },
-  "standard": {
-    "ignore": [
-      "**/example/**"
-    ]
-  },
-  "version": "13.3.2"
-}
index 985cf83..7ad33cc 100644 (file)
@@ -1,40 +1,32 @@
 {
-  "_from": "qrcode",
+  "_args": [
+    [
+      "qrcode@1.4.4",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "qrcode@1.4.4",
   "_id": "qrcode@1.4.4",
   "_inBundle": false,
   "_integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==",
   "_location": "/qrcode",
-  "_phantomChildren": {
-    "ansi-styles": "3.2.1",
-    "camelcase": "5.3.1",
-    "decamelize": "1.2.0",
-    "find-up": "3.0.0",
-    "get-caller-file": "2.0.5",
-    "require-directory": "2.1.1",
-    "require-main-filename": "2.0.0",
-    "set-blocking": "2.0.0",
-    "string-width": "3.1.0",
-    "which-module": "2.0.0",
-    "y18n": "4.0.0"
-  },
+  "_phantomChildren": {},
   "_requested": {
-    "type": "tag",
+    "type": "version",
     "registry": true,
-    "raw": "qrcode",
+    "raw": "qrcode@1.4.4",
     "name": "qrcode",
     "escapedName": "qrcode",
-    "rawSpec": "",
+    "rawSpec": "1.4.4",
     "saveSpec": null,
-    "fetchSpec": "latest"
+    "fetchSpec": "1.4.4"
   },
   "_requiredBy": [
-    "#USER",
     "/"
   ],
   "_resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz",
-  "_shasum": "f0c43568a7e7510a55efc3b88d9602f71963ea83",
-  "_spec": "qrcode",
-  "_where": "/media/yh106.jung/Data/workspace/offload.js",
+  "_spec": "1.4.4",
+  "_where": "/opt/source/offload.js",
   "author": {
     "name": "Ryan Day",
     "email": "soldair@gmail.com"
@@ -50,7 +42,6 @@
   "bugs": {
     "url": "https://github.com/soldair/node-qrcode/issues"
   },
-  "bundleDependencies": false,
   "contributors": [
     {
       "name": "Vincenzo Greco",
@@ -66,7 +57,6 @@
     "pngjs": "^3.3.0",
     "yargs": "^13.2.4"
   },
-  "deprecated": false,
   "description": "QRCode / 2d Barcode api with both server side and client side support using canvas",
   "devDependencies": {
     "browserify": "^16.2.3",
diff --git a/signaling_server/service/node_modules/qs/package.json b/signaling_server/service/node_modules/qs/package.json
new file mode 100644 (file)
index 0000000..d1cdfd9
--- /dev/null
@@ -0,0 +1,90 @@
+{
+  "_args": [
+    [
+      "qs@6.7.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "qs@6.7.0",
+  "_id": "qs@6.7.0",
+  "_inBundle": false,
+  "_integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+  "_location": "/qs",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "qs@6.7.0",
+    "name": "qs",
+    "escapedName": "qs",
+    "rawSpec": "6.7.0",
+    "saveSpec": null,
+    "fetchSpec": "6.7.0"
+  },
+  "_requiredBy": [
+    "/body-parser",
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+  "_spec": "6.7.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/ljharb/qs/issues"
+  },
+  "contributors": [
+    {
+      "name": "Jordan Harband",
+      "email": "ljharb@gmail.com",
+      "url": "http://ljharb.codes"
+    }
+  ],
+  "dependencies": {},
+  "description": "A querystring parser that supports nesting and arrays, with a depth limit",
+  "devDependencies": {
+    "@ljharb/eslint-config": "^13.1.1",
+    "browserify": "^16.2.3",
+    "covert": "^1.1.1",
+    "editorconfig-tools": "^0.1.1",
+    "eslint": "^5.15.3",
+    "evalmd": "^0.0.17",
+    "for-each": "^0.3.3",
+    "iconv-lite": "^0.4.24",
+    "mkdirp": "^0.5.1",
+    "object-inspect": "^1.6.0",
+    "qs-iconv": "^1.0.4",
+    "safe-publish-latest": "^1.1.2",
+    "safer-buffer": "^2.1.2",
+    "tape": "^4.10.1"
+  },
+  "engines": {
+    "node": ">=0.6"
+  },
+  "homepage": "https://github.com/ljharb/qs",
+  "keywords": [
+    "querystring",
+    "qs",
+    "query",
+    "url",
+    "parse",
+    "stringify"
+  ],
+  "license": "BSD-3-Clause",
+  "main": "lib/index.js",
+  "name": "qs",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/ljharb/qs.git"
+  },
+  "scripts": {
+    "coverage": "covert test",
+    "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js",
+    "lint": "eslint lib/*.js test/*.js",
+    "postlint": "editorconfig-tools check * lib/* test/*",
+    "prepublish": "safe-publish-latest && npm run dist",
+    "pretest": "npm run --silent readme && npm run --silent lint",
+    "readme": "evalmd README.md",
+    "test": "npm run --silent coverage",
+    "tests-only": "node test"
+  },
+  "version": "6.7.0"
+}
diff --git a/signaling_server/service/node_modules/range-parser/package.json b/signaling_server/service/node_modules/range-parser/package.json
new file mode 100644 (file)
index 0000000..ec236b9
--- /dev/null
@@ -0,0 +1,94 @@
+{
+  "_args": [
+    [
+      "range-parser@1.2.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "range-parser@1.2.1",
+  "_id": "range-parser@1.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+  "_location": "/range-parser",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "range-parser@1.2.1",
+    "name": "range-parser",
+    "escapedName": "range-parser",
+    "rawSpec": "1.2.1",
+    "saveSpec": null,
+    "fetchSpec": "1.2.1"
+  },
+  "_requiredBy": [
+    "/express",
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+  "_spec": "1.2.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca",
+    "url": "http://tjholowaychuk.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/range-parser/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "James Wyatt Cready",
+      "email": "wyatt.cready@lanetix.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    }
+  ],
+  "description": "Range header field string parser",
+  "devDependencies": {
+    "deep-equal": "1.0.1",
+    "eslint": "5.16.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.17.2",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "8.0.1",
+    "eslint-plugin-promise": "4.1.1",
+    "eslint-plugin-standard": "4.0.0",
+    "mocha": "6.1.4",
+    "nyc": "14.1.1"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/range-parser#readme",
+  "keywords": [
+    "range",
+    "parser",
+    "http"
+  ],
+  "license": "MIT",
+  "name": "range-parser",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/range-parser.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec",
+    "test-cov": "nyc --reporter=html --reporter=text npm test",
+    "test-travis": "nyc --reporter=text npm test"
+  },
+  "version": "1.2.1"
+}
diff --git a/signaling_server/service/node_modules/raw-body/package.json b/signaling_server/service/node_modules/raw-body/package.json
new file mode 100644 (file)
index 0000000..2d77212
--- /dev/null
@@ -0,0 +1,93 @@
+{
+  "_args": [
+    [
+      "raw-body@2.4.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "raw-body@2.4.0",
+  "_id": "raw-body@2.4.0",
+  "_inBundle": false,
+  "_integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+  "_location": "/raw-body",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "raw-body@2.4.0",
+    "name": "raw-body",
+    "escapedName": "raw-body",
+    "rawSpec": "2.4.0",
+    "saveSpec": null,
+    "fetchSpec": "2.4.0"
+  },
+  "_requiredBy": [
+    "/body-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+  "_spec": "2.4.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Jonathan Ong",
+    "email": "me@jongleberry.com",
+    "url": "http://jongleberry.com"
+  },
+  "bugs": {
+    "url": "https://github.com/stream-utils/raw-body/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Raynos",
+      "email": "raynos2@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "bytes": "3.1.0",
+    "http-errors": "1.7.2",
+    "iconv-lite": "0.4.24",
+    "unpipe": "1.0.0"
+  },
+  "description": "Get and validate the raw body of a readable stream.",
+  "devDependencies": {
+    "bluebird": "3.5.4",
+    "eslint": "5.16.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.16.0",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "8.0.1",
+    "eslint-plugin-promise": "4.1.1",
+    "eslint-plugin-standard": "4.0.0",
+    "istanbul": "0.4.5",
+    "mocha": "6.1.3",
+    "readable-stream": "2.3.6",
+    "safe-buffer": "5.1.2"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "README.md",
+    "index.d.ts",
+    "index.js"
+  ],
+  "homepage": "https://github.com/stream-utils/raw-body#readme",
+  "license": "MIT",
+  "name": "raw-body",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/stream-utils/raw-body.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --trace-deprecation --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --trace-deprecation --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --trace-deprecation --reporter spec --check-leaks test/"
+  },
+  "version": "2.4.0"
+}
diff --git a/signaling_server/service/node_modules/require-directory/package.json b/signaling_server/service/node_modules/require-directory/package.json
new file mode 100644 (file)
index 0000000..b9580d2
--- /dev/null
@@ -0,0 +1,72 @@
+{
+  "_args": [
+    [
+      "require-directory@2.1.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "require-directory@2.1.1",
+  "_id": "require-directory@2.1.1",
+  "_inBundle": false,
+  "_integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+  "_location": "/require-directory",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "require-directory@2.1.1",
+    "name": "require-directory",
+    "escapedName": "require-directory",
+    "rawSpec": "2.1.1",
+    "saveSpec": null,
+    "fetchSpec": "2.1.1"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+  "_spec": "2.1.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Troy Goode",
+    "email": "troygoode@gmail.com",
+    "url": "http://github.com/troygoode/"
+  },
+  "bugs": {
+    "url": "http://github.com/troygoode/node-require-directory/issues/"
+  },
+  "contributors": [
+    {
+      "name": "Troy Goode",
+      "email": "troygoode@gmail.com",
+      "url": "http://github.com/troygoode/"
+    }
+  ],
+  "description": "Recursively iterates over specified directory, require()'ing each file, and returning a nested hash structure containing those modules.",
+  "devDependencies": {
+    "jshint": "^2.6.0",
+    "mocha": "^2.1.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "homepage": "https://github.com/troygoode/node-require-directory/",
+  "keywords": [
+    "require",
+    "directory",
+    "library",
+    "recursive"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "require-directory",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/troygoode/node-require-directory.git"
+  },
+  "scripts": {
+    "lint": "jshint index.js test/test.js",
+    "test": "mocha"
+  },
+  "version": "2.1.1"
+}
diff --git a/signaling_server/service/node_modules/require-main-filename/package.json b/signaling_server/service/node_modules/require-main-filename/package.json
new file mode 100644 (file)
index 0000000..8bb5788
--- /dev/null
@@ -0,0 +1,66 @@
+{
+  "_args": [
+    [
+      "require-main-filename@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "require-main-filename@2.0.0",
+  "_id": "require-main-filename@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+  "_location": "/require-main-filename",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "require-main-filename@2.0.0",
+    "name": "require-main-filename",
+    "escapedName": "require-main-filename",
+    "rawSpec": "2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "2.0.0"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Ben Coe",
+    "email": "ben@npmjs.com"
+  },
+  "bugs": {
+    "url": "https://github.com/yargs/require-main-filename/issues"
+  },
+  "description": "shim for require.main.filename() that works in as many environments as possible",
+  "devDependencies": {
+    "chai": "^4.0.0",
+    "standard": "^10.0.3",
+    "standard-version": "^4.0.0",
+    "tap": "^11.0.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/yargs/require-main-filename#readme",
+  "keywords": [
+    "require",
+    "shim",
+    "iisnode"
+  ],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "require-main-filename",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/yargs/require-main-filename.git"
+  },
+  "scripts": {
+    "pretest": "standard",
+    "release": "standard-version",
+    "test": "tap --coverage test.js"
+  },
+  "version": "2.0.0"
+}
diff --git a/signaling_server/service/node_modules/safe-buffer/package.json b/signaling_server/service/node_modules/safe-buffer/package.json
new file mode 100644 (file)
index 0000000..d4f9a54
--- /dev/null
@@ -0,0 +1,97 @@
+{
+  "_args": [
+    [
+      "safe-buffer@5.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "safe-buffer@5.1.2",
+  "_id": "safe-buffer@5.1.2",
+  "_inBundle": false,
+  "_integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+  "_location": "/safe-buffer",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "safe-buffer@5.1.2",
+    "name": "safe-buffer",
+    "escapedName": "safe-buffer",
+    "rawSpec": "5.1.2",
+    "saveSpec": null,
+    "fetchSpec": "5.1.2"
+  },
+  "_requiredBy": [
+    "/archiver-utils/readable-stream",
+    "/browserify-aes",
+    "/browserify-des",
+    "/cipher-base",
+    "/compress-commons/readable-stream",
+    "/concat-stream/readable-stream",
+    "/content-disposition",
+    "/convert-source-map",
+    "/cpx",
+    "/create-hmac",
+    "/duplexify/readable-stream",
+    "/enhanced-resolve/readable-stream",
+    "/evp_bytestokey",
+    "/express",
+    "/flush-write-stream/readable-stream",
+    "/from2/readable-stream",
+    "/fs-write-stream-atomic/readable-stream",
+    "/lazystream/readable-stream",
+    "/md5.js",
+    "/memory-fs/readable-stream",
+    "/node-libs-browser/readable-stream",
+    "/parallel-transform/readable-stream",
+    "/parse-asn1",
+    "/pbkdf2",
+    "/public-encrypt",
+    "/randombytes",
+    "/randomfill",
+    "/readdirp/readable-stream",
+    "/sha.js",
+    "/stream-browserify/readable-stream",
+    "/stream-http/readable-stream",
+    "/string_decoder",
+    "/through2/readable-stream"
+  ],
+  "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+  "_spec": "5.1.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Feross Aboukhadijeh",
+    "email": "feross@feross.org",
+    "url": "http://feross.org"
+  },
+  "bugs": {
+    "url": "https://github.com/feross/safe-buffer/issues"
+  },
+  "description": "Safer Node.js Buffer API",
+  "devDependencies": {
+    "standard": "*",
+    "tape": "^4.0.0"
+  },
+  "homepage": "https://github.com/feross/safe-buffer",
+  "keywords": [
+    "buffer",
+    "buffer allocate",
+    "node security",
+    "safe",
+    "safe-buffer",
+    "security",
+    "uninitialized"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "safe-buffer",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/feross/safe-buffer.git"
+  },
+  "scripts": {
+    "test": "standard && tape test/*.js"
+  },
+  "types": "index.d.ts",
+  "version": "5.1.2"
+}
diff --git a/signaling_server/service/node_modules/safer-buffer/package.json b/signaling_server/service/node_modules/safer-buffer/package.json
new file mode 100644 (file)
index 0000000..c1a9314
--- /dev/null
@@ -0,0 +1,63 @@
+{
+  "_args": [
+    [
+      "safer-buffer@2.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "safer-buffer@2.1.2",
+  "_id": "safer-buffer@2.1.2",
+  "_inBundle": false,
+  "_integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+  "_location": "/safer-buffer",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "safer-buffer@2.1.2",
+    "name": "safer-buffer",
+    "escapedName": "safer-buffer",
+    "rawSpec": "2.1.2",
+    "saveSpec": null,
+    "fetchSpec": "2.1.2"
+  },
+  "_requiredBy": [
+    "/iconv-lite"
+  ],
+  "_resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+  "_spec": "2.1.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Nikita Skovoroda",
+    "email": "chalkerx@gmail.com",
+    "url": "https://github.com/ChALkeR"
+  },
+  "bugs": {
+    "url": "https://github.com/ChALkeR/safer-buffer/issues"
+  },
+  "description": "Modern Buffer API polyfill without footguns",
+  "devDependencies": {
+    "standard": "^11.0.1",
+    "tape": "^4.9.0"
+  },
+  "files": [
+    "Porting-Buffer.md",
+    "Readme.md",
+    "tests.js",
+    "dangerous.js",
+    "safer.js"
+  ],
+  "homepage": "https://github.com/ChALkeR/safer-buffer#readme",
+  "license": "MIT",
+  "main": "safer.js",
+  "name": "safer-buffer",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/ChALkeR/safer-buffer.git"
+  },
+  "scripts": {
+    "browserify-test": "browserify --external tape tests.js > browserify-tests.js && tape browserify-tests.js",
+    "test": "standard && tape tests.js"
+  },
+  "version": "2.1.2"
+}
diff --git a/signaling_server/service/node_modules/send/node_modules/debug/LICENSE b/signaling_server/service/node_modules/send/node_modules/debug/LICENSE
new file mode 100644 (file)
index 0000000..658c933
--- /dev/null
@@ -0,0 +1,19 @@
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
+and associated documentation files (the 'Software'), to deal in the Software without restriction, 
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial 
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/index.js b/signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/index.js
new file mode 100644 (file)
index 0000000..6a522b1
--- /dev/null
@@ -0,0 +1,152 @@
+/**
+ * Helpers.
+ */
+
+var s = 1000;
+var m = s * 60;
+var h = m * 60;
+var d = h * 24;
+var y = d * 365.25;
+
+/**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ *  - `long` verbose formatting [false]
+ *
+ * @param {String|Number} val
+ * @param {Object} [options]
+ * @throws {Error} throw an error if val is not a non-empty string or a number
+ * @return {String|Number}
+ * @api public
+ */
+
+module.exports = function(val, options) {
+  options = options || {};
+  var type = typeof val;
+  if (type === 'string' && val.length > 0) {
+    return parse(val);
+  } else if (type === 'number' && isNaN(val) === false) {
+    return options.long ? fmtLong(val) : fmtShort(val);
+  }
+  throw new Error(
+    'val is not a non-empty string or a valid number. val=' +
+      JSON.stringify(val)
+  );
+};
+
+/**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @param {String} str
+ * @return {Number}
+ * @api private
+ */
+
+function parse(str) {
+  str = String(str);
+  if (str.length > 100) {
+    return;
+  }
+  var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
+    str
+  );
+  if (!match) {
+    return;
+  }
+  var n = parseFloat(match[1]);
+  var type = (match[2] || 'ms').toLowerCase();
+  switch (type) {
+    case 'years':
+    case 'year':
+    case 'yrs':
+    case 'yr':
+    case 'y':
+      return n * y;
+    case 'days':
+    case 'day':
+    case 'd':
+      return n * d;
+    case 'hours':
+    case 'hour':
+    case 'hrs':
+    case 'hr':
+    case 'h':
+      return n * h;
+    case 'minutes':
+    case 'minute':
+    case 'mins':
+    case 'min':
+    case 'm':
+      return n * m;
+    case 'seconds':
+    case 'second':
+    case 'secs':
+    case 'sec':
+    case 's':
+      return n * s;
+    case 'milliseconds':
+    case 'millisecond':
+    case 'msecs':
+    case 'msec':
+    case 'ms':
+      return n;
+    default:
+      return undefined;
+  }
+}
+
+/**
+ * Short format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtShort(ms) {
+  if (ms >= d) {
+    return Math.round(ms / d) + 'd';
+  }
+  if (ms >= h) {
+    return Math.round(ms / h) + 'h';
+  }
+  if (ms >= m) {
+    return Math.round(ms / m) + 'm';
+  }
+  if (ms >= s) {
+    return Math.round(ms / s) + 's';
+  }
+  return ms + 'ms';
+}
+
+/**
+ * Long format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtLong(ms) {
+  return plural(ms, d, 'day') ||
+    plural(ms, h, 'hour') ||
+    plural(ms, m, 'minute') ||
+    plural(ms, s, 'second') ||
+    ms + ' ms';
+}
+
+/**
+ * Pluralization helper.
+ */
+
+function plural(ms, n, name) {
+  if (ms < n) {
+    return;
+  }
+  if (ms < n * 1.5) {
+    return Math.floor(ms / n) + ' ' + name;
+  }
+  return Math.ceil(ms / n) + ' ' + name + 's';
+}
diff --git a/signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/license.md b/signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/license.md
new file mode 100644 (file)
index 0000000..69b6125
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Zeit, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/package.json b/signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/package.json
new file mode 100644 (file)
index 0000000..7ee60e0
--- /dev/null
@@ -0,0 +1,72 @@
+{
+  "_args": [
+    [
+      "ms@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ms@2.0.0",
+  "_id": "ms@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+  "_location": "/send/debug/ms",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ms@2.0.0",
+    "name": "ms",
+    "escapedName": "ms",
+    "rawSpec": "2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "2.0.0"
+  },
+  "_requiredBy": [
+    "/send/debug"
+  ],
+  "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/zeit/ms/issues"
+  },
+  "description": "Tiny milisecond conversion utility",
+  "devDependencies": {
+    "eslint": "3.19.0",
+    "expect.js": "0.3.1",
+    "husky": "0.13.3",
+    "lint-staged": "3.4.1",
+    "mocha": "3.4.1"
+  },
+  "eslintConfig": {
+    "extends": "eslint:recommended",
+    "env": {
+      "node": true,
+      "es6": true
+    }
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/zeit/ms#readme",
+  "license": "MIT",
+  "lint-staged": {
+    "*.js": [
+      "npm run lint",
+      "prettier --single-quote --write",
+      "git add"
+    ]
+  },
+  "main": "./index",
+  "name": "ms",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/zeit/ms.git"
+  },
+  "scripts": {
+    "lint": "eslint lib/* bin/*",
+    "precommit": "lint-staged",
+    "test": "mocha tests.js"
+  },
+  "version": "2.0.0"
+}
diff --git a/signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/readme.md b/signaling_server/service/node_modules/send/node_modules/debug/node_modules/ms/readme.md
new file mode 100644 (file)
index 0000000..84a9974
--- /dev/null
@@ -0,0 +1,51 @@
+# ms
+
+[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms)
+[![Slack Channel](http://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/)
+
+Use this package to easily convert various time formats to milliseconds.
+
+## Examples
+
+```js
+ms('2 days')  // 172800000
+ms('1d')      // 86400000
+ms('10h')     // 36000000
+ms('2.5 hrs') // 9000000
+ms('2h')      // 7200000
+ms('1m')      // 60000
+ms('5s')      // 5000
+ms('1y')      // 31557600000
+ms('100')     // 100
+```
+
+### Convert from milliseconds
+
+```js
+ms(60000)             // "1m"
+ms(2 * 60000)         // "2m"
+ms(ms('10 hours'))    // "10h"
+```
+
+### Time format written-out
+
+```js
+ms(60000, { long: true })             // "1 minute"
+ms(2 * 60000, { long: true })         // "2 minutes"
+ms(ms('10 hours'), { long: true })    // "10 hours"
+```
+
+## Features
+
+- Works both in [node](https://nodejs.org) and in the browser.
+- If a number is supplied to `ms`, a string with a unit is returned.
+- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`).
+- If you pass a string with a number and a valid unit, the number of equivalent ms is returned.
+
+## Caught a bug?
+
+1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device
+2. Link the package to the global module directory: `npm link`
+3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms!
+
+As always, you can run the tests using: `npm test`
diff --git a/signaling_server/service/node_modules/send/node_modules/debug/package.json b/signaling_server/service/node_modules/send/node_modules/debug/package.json
new file mode 100644 (file)
index 0000000..68e8bfd
--- /dev/null
@@ -0,0 +1,91 @@
+{
+  "_args": [
+    [
+      "debug@2.6.9",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "debug@2.6.9",
+  "_id": "debug@2.6.9",
+  "_inBundle": false,
+  "_integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+  "_location": "/send/debug",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "debug@2.6.9",
+    "name": "debug",
+    "escapedName": "debug",
+    "rawSpec": "2.6.9",
+    "saveSpec": null,
+    "fetchSpec": "2.6.9"
+  },
+  "_requiredBy": [
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+  "_spec": "2.6.9",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca"
+  },
+  "browser": "./src/browser.js",
+  "bugs": {
+    "url": "https://github.com/visionmedia/debug/issues"
+  },
+  "component": {
+    "scripts": {
+      "debug/index.js": "browser.js",
+      "debug/debug.js": "debug.js"
+    }
+  },
+  "contributors": [
+    {
+      "name": "Nathan Rajlich",
+      "email": "nathan@tootallnate.net",
+      "url": "http://n8.io"
+    },
+    {
+      "name": "Andrew Rhyne",
+      "email": "rhyneandrew@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "ms": "2.0.0"
+  },
+  "description": "small debugging utility",
+  "devDependencies": {
+    "browserify": "9.0.3",
+    "chai": "^3.5.0",
+    "concurrently": "^3.1.0",
+    "coveralls": "^2.11.15",
+    "eslint": "^3.12.1",
+    "istanbul": "^0.4.5",
+    "karma": "^1.3.0",
+    "karma-chai": "^0.1.0",
+    "karma-mocha": "^1.3.0",
+    "karma-phantomjs-launcher": "^1.0.2",
+    "karma-sinon": "^1.0.5",
+    "mocha": "^3.2.0",
+    "mocha-lcov-reporter": "^1.2.0",
+    "rimraf": "^2.5.4",
+    "sinon": "^1.17.6",
+    "sinon-chai": "^2.8.0"
+  },
+  "homepage": "https://github.com/visionmedia/debug#readme",
+  "keywords": [
+    "debug",
+    "log",
+    "debugger"
+  ],
+  "license": "MIT",
+  "main": "./src/index.js",
+  "name": "debug",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/visionmedia/debug.git"
+  },
+  "version": "2.6.9"
+}
diff --git a/signaling_server/service/node_modules/send/node_modules/ms/license.md b/signaling_server/service/node_modules/send/node_modules/ms/license.md
new file mode 100644 (file)
index 0000000..69b6125
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Zeit, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/signaling_server/service/node_modules/send/node_modules/ms/package.json b/signaling_server/service/node_modules/send/node_modules/ms/package.json
new file mode 100644 (file)
index 0000000..db24857
--- /dev/null
@@ -0,0 +1,72 @@
+{
+  "_args": [
+    [
+      "ms@2.1.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "ms@2.1.1",
+  "_id": "ms@2.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+  "_location": "/send/ms",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "ms@2.1.1",
+    "name": "ms",
+    "escapedName": "ms",
+    "rawSpec": "2.1.1",
+    "saveSpec": null,
+    "fetchSpec": "2.1.1"
+  },
+  "_requiredBy": [
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+  "_spec": "2.1.1",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/zeit/ms/issues"
+  },
+  "description": "Tiny millisecond conversion utility",
+  "devDependencies": {
+    "eslint": "4.12.1",
+    "expect.js": "0.3.1",
+    "husky": "0.14.3",
+    "lint-staged": "5.0.0",
+    "mocha": "4.0.1"
+  },
+  "eslintConfig": {
+    "extends": "eslint:recommended",
+    "env": {
+      "node": true,
+      "es6": true
+    }
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/zeit/ms#readme",
+  "license": "MIT",
+  "lint-staged": {
+    "*.js": [
+      "npm run lint",
+      "prettier --single-quote --write",
+      "git add"
+    ]
+  },
+  "main": "./index",
+  "name": "ms",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/zeit/ms.git"
+  },
+  "scripts": {
+    "lint": "eslint lib/* bin/*",
+    "precommit": "lint-staged",
+    "test": "mocha tests.js"
+  },
+  "version": "2.1.1"
+}
diff --git a/signaling_server/service/node_modules/send/package.json b/signaling_server/service/node_modules/send/package.json
new file mode 100644 (file)
index 0000000..2352244
--- /dev/null
@@ -0,0 +1,109 @@
+{
+  "_args": [
+    [
+      "send@0.17.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "send@0.17.1",
+  "_id": "send@0.17.1",
+  "_inBundle": false,
+  "_integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+  "_location": "/send",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "send@0.17.1",
+    "name": "send",
+    "escapedName": "send",
+    "rawSpec": "0.17.1",
+    "saveSpec": null,
+    "fetchSpec": "0.17.1"
+  },
+  "_requiredBy": [
+    "/express",
+    "/serve-static"
+  ],
+  "_resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+  "_spec": "0.17.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca"
+  },
+  "bugs": {
+    "url": "https://github.com/pillarjs/send/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "James Wyatt Cready",
+      "email": "jcready@gmail.com"
+    },
+    {
+      "name": "Jesús Leganés Combarro",
+      "email": "piranna@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "debug": "2.6.9",
+    "depd": "~1.1.2",
+    "destroy": "~1.0.4",
+    "encodeurl": "~1.0.2",
+    "escape-html": "~1.0.3",
+    "etag": "~1.8.1",
+    "fresh": "0.5.2",
+    "http-errors": "~1.7.2",
+    "mime": "1.6.0",
+    "ms": "2.1.1",
+    "on-finished": "~2.3.0",
+    "range-parser": "~1.2.1",
+    "statuses": "~1.5.0"
+  },
+  "description": "Better streaming static file server with Range and conditional-GET support",
+  "devDependencies": {
+    "after": "0.8.2",
+    "eslint": "5.16.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.17.2",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "8.0.1",
+    "eslint-plugin-promise": "4.1.1",
+    "eslint-plugin-standard": "4.0.0",
+    "istanbul": "0.4.5",
+    "mocha": "6.1.4",
+    "supertest": "4.0.2"
+  },
+  "engines": {
+    "node": ">= 0.8.0"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/pillarjs/send#readme",
+  "keywords": [
+    "static",
+    "file",
+    "server"
+  ],
+  "license": "MIT",
+  "name": "send",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/pillarjs/send.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --check-leaks --reporter spec --bail",
+    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot"
+  },
+  "version": "0.17.1"
+}
diff --git a/signaling_server/service/node_modules/serve-static/package.json b/signaling_server/service/node_modules/serve-static/package.json
new file mode 100644 (file)
index 0000000..3048f1b
--- /dev/null
@@ -0,0 +1,80 @@
+{
+  "_args": [
+    [
+      "serve-static@1.14.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "serve-static@1.14.1",
+  "_id": "serve-static@1.14.1",
+  "_inBundle": false,
+  "_integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+  "_location": "/serve-static",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "serve-static@1.14.1",
+    "name": "serve-static",
+    "escapedName": "serve-static",
+    "rawSpec": "1.14.1",
+    "saveSpec": null,
+    "fetchSpec": "1.14.1"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+  "_spec": "1.14.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "bugs": {
+    "url": "https://github.com/expressjs/serve-static/issues"
+  },
+  "dependencies": {
+    "encodeurl": "~1.0.2",
+    "escape-html": "~1.0.3",
+    "parseurl": "~1.3.3",
+    "send": "0.17.1"
+  },
+  "description": "Serve static files",
+  "devDependencies": {
+    "eslint": "5.16.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.17.2",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "8.0.1",
+    "eslint-plugin-promise": "4.1.1",
+    "eslint-plugin-standard": "4.0.0",
+    "istanbul": "0.4.5",
+    "mocha": "6.1.4",
+    "safe-buffer": "5.1.2",
+    "supertest": "4.0.2"
+  },
+  "engines": {
+    "node": ">= 0.8.0"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/expressjs/serve-static#readme",
+  "license": "MIT",
+  "name": "serve-static",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/expressjs/serve-static.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "version": "node scripts/version-history.js && git add HISTORY.md"
+  },
+  "version": "1.14.1"
+}
diff --git a/signaling_server/service/node_modules/set-blocking/package.json b/signaling_server/service/node_modules/set-blocking/package.json
new file mode 100644 (file)
index 0000000..56edb71
--- /dev/null
@@ -0,0 +1,73 @@
+{
+  "_args": [
+    [
+      "set-blocking@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "set-blocking@2.0.0",
+  "_id": "set-blocking@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+  "_location": "/set-blocking",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "set-blocking@2.0.0",
+    "name": "set-blocking",
+    "escapedName": "set-blocking",
+    "rawSpec": "2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "2.0.0"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Ben Coe",
+    "email": "ben@npmjs.com"
+  },
+  "bugs": {
+    "url": "https://github.com/yargs/set-blocking/issues"
+  },
+  "description": "set blocking stdio and stderr ensuring that terminal output does not truncate",
+  "devDependencies": {
+    "chai": "^3.5.0",
+    "coveralls": "^2.11.9",
+    "mocha": "^2.4.5",
+    "nyc": "^6.4.4",
+    "standard": "^7.0.1",
+    "standard-version": "^2.2.1"
+  },
+  "files": [
+    "index.js",
+    "LICENSE.txt"
+  ],
+  "homepage": "https://github.com/yargs/set-blocking#readme",
+  "keywords": [
+    "flush",
+    "terminal",
+    "blocking",
+    "shim",
+    "stdio",
+    "stderr"
+  ],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "set-blocking",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/yargs/set-blocking.git"
+  },
+  "scripts": {
+    "coverage": "nyc report --reporter=text-lcov | coveralls",
+    "pretest": "standard",
+    "test": "nyc mocha ./test/*.js",
+    "version": "standard-version"
+  },
+  "version": "2.0.0"
+}
diff --git a/signaling_server/service/node_modules/setprototypeof/package.json b/signaling_server/service/node_modules/setprototypeof/package.json
new file mode 100644 (file)
index 0000000..296e6f7
--- /dev/null
@@ -0,0 +1,67 @@
+{
+  "_args": [
+    [
+      "setprototypeof@1.1.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "setprototypeof@1.1.1",
+  "_id": "setprototypeof@1.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+  "_location": "/setprototypeof",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "setprototypeof@1.1.1",
+    "name": "setprototypeof",
+    "escapedName": "setprototypeof",
+    "rawSpec": "1.1.1",
+    "saveSpec": null,
+    "fetchSpec": "1.1.1"
+  },
+  "_requiredBy": [
+    "/express",
+    "/http-errors"
+  ],
+  "_resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+  "_spec": "1.1.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Wes Todd"
+  },
+  "bugs": {
+    "url": "https://github.com/wesleytodd/setprototypeof/issues"
+  },
+  "description": "A small polyfill for Object.setprototypeof",
+  "devDependencies": {
+    "mocha": "^5.2.0",
+    "standard": "^12.0.1"
+  },
+  "homepage": "https://github.com/wesleytodd/setprototypeof",
+  "keywords": [
+    "polyfill",
+    "object",
+    "setprototypeof"
+  ],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "setprototypeof",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/wesleytodd/setprototypeof.git"
+  },
+  "scripts": {
+    "node010": "NODE_VER=0.10 MOCHA_VER=3 npm run testversion",
+    "node11": "NODE_VER=11 npm run testversion",
+    "node4": "NODE_VER=4 npm run testversion",
+    "node6": "NODE_VER=6 npm run testversion",
+    "node9": "NODE_VER=9 npm run testversion",
+    "test": "standard && mocha",
+    "testallversions": "npm run node010 && npm run node4 && npm run node6 && npm run node9 && npm run node11",
+    "testversion": "docker run -it --rm -v $(PWD):/usr/src/app -w /usr/src/app node:${NODE_VER} npm install mocha@${MOCHA_VER:-latest} && npm t"
+  },
+  "typings": "index.d.ts",
+  "version": "1.1.1"
+}
diff --git a/signaling_server/service/node_modules/socket.io-adapter/package.json b/signaling_server/service/node_modules/socket.io-adapter/package.json
new file mode 100644 (file)
index 0000000..cdec99a
--- /dev/null
@@ -0,0 +1,42 @@
+{
+  "_args": [
+    [
+      "socket.io-adapter@1.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "socket.io-adapter@1.1.2",
+  "_id": "socket.io-adapter@1.1.2",
+  "_inBundle": false,
+  "_integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==",
+  "_location": "/socket.io-adapter",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "socket.io-adapter@1.1.2",
+    "name": "socket.io-adapter",
+    "escapedName": "socket.io-adapter",
+    "rawSpec": "1.1.2",
+    "saveSpec": null,
+    "fetchSpec": "1.1.2"
+  },
+  "_requiredBy": [
+    "/socket.io"
+  ],
+  "_resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
+  "_spec": "1.1.2",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/socketio/socket.io-adapter/issues"
+  },
+  "description": "default socket.io in-memory adapter",
+  "homepage": "https://github.com/socketio/socket.io-adapter#readme",
+  "license": "MIT",
+  "name": "socket.io-adapter",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/socketio/socket.io-adapter.git"
+  },
+  "version": "1.1.2"
+}
diff --git a/signaling_server/service/node_modules/socket.io-client/dist/socket.io.dev.js b/signaling_server/service/node_modules/socket.io-client/dist/socket.io.dev.js
deleted file mode 100644 (file)
index 5e48b99..0000000
+++ /dev/null
@@ -1,7254 +0,0 @@
-/*!
- * Socket.IO v2.3.0
- * (c) 2014-2019 Guillermo Rauch
- * Released under the MIT License.
- */
-(function webpackUniversalModuleDefinition(root, factory) {
-       if(typeof exports === 'object' && typeof module === 'object')
-               module.exports = factory();
-       else if(typeof define === 'function' && define.amd)
-               define([], factory);
-       else if(typeof exports === 'object')
-               exports["io"] = factory();
-       else
-               root["io"] = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/       // The module cache
-/******/       var installedModules = {};
-/******/
-/******/       // The require function
-/******/       function __webpack_require__(moduleId) {
-/******/
-/******/               // Check if module is in cache
-/******/               if(installedModules[moduleId])
-/******/                       return installedModules[moduleId].exports;
-/******/
-/******/               // Create a new module (and put it into the cache)
-/******/               var module = installedModules[moduleId] = {
-/******/                       exports: {},
-/******/                       id: moduleId,
-/******/                       loaded: false
-/******/               };
-/******/
-/******/               // Execute the module function
-/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/               // Flag the module as loaded
-/******/               module.loaded = true;
-/******/
-/******/               // Return the exports of the module
-/******/               return module.exports;
-/******/       }
-/******/
-/******/
-/******/       // expose the modules object (__webpack_modules__)
-/******/       __webpack_require__.m = modules;
-/******/
-/******/       // expose the module cache
-/******/       __webpack_require__.c = installedModules;
-/******/
-/******/       // __webpack_public_path__
-/******/       __webpack_require__.p = "";
-/******/
-/******/       // Load entry module and return exports
-/******/       return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var url = __webpack_require__(1);
-       var parser = __webpack_require__(7);
-       var Manager = __webpack_require__(15);
-       var debug = __webpack_require__(3)('socket.io-client');
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = exports = lookup;
-       
-       /**
-        * Managers cache.
-        */
-       
-       var cache = exports.managers = {};
-       
-       /**
-        * Looks up an existing `Manager` for multiplexing.
-        * If the user summons:
-        *
-        *   `io('http://localhost/a');`
-        *   `io('http://localhost/b');`
-        *
-        * We reuse the existing instance based on same scheme/port/host,
-        * and we initialize sockets for each namespace.
-        *
-        * @api public
-        */
-       
-       function lookup (uri, opts) {
-         if (typeof uri === 'object') {
-           opts = uri;
-           uri = undefined;
-         }
-       
-         opts = opts || {};
-       
-         var parsed = url(uri);
-         var source = parsed.source;
-         var id = parsed.id;
-         var path = parsed.path;
-         var sameNamespace = cache[id] && path in cache[id].nsps;
-         var newConnection = opts.forceNew || opts['force new connection'] ||
-                             false === opts.multiplex || sameNamespace;
-       
-         var io;
-       
-         if (newConnection) {
-           debug('ignoring socket cache for %s', source);
-           io = Manager(source, opts);
-         } else {
-           if (!cache[id]) {
-             debug('new io instance for %s', source);
-             cache[id] = Manager(source, opts);
-           }
-           io = cache[id];
-         }
-         if (parsed.query && !opts.query) {
-           opts.query = parsed.query;
-         }
-         return io.socket(parsed.path, opts);
-       }
-       
-       /**
-        * Protocol version.
-        *
-        * @api public
-        */
-       
-       exports.protocol = parser.protocol;
-       
-       /**
-        * `connect`.
-        *
-        * @param {String} uri
-        * @api public
-        */
-       
-       exports.connect = lookup;
-       
-       /**
-        * Expose constructors for standalone build.
-        *
-        * @api public
-        */
-       
-       exports.Manager = __webpack_require__(15);
-       exports.Socket = __webpack_require__(39);
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var parseuri = __webpack_require__(2);
-       var debug = __webpack_require__(3)('socket.io-client:url');
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = url;
-       
-       /**
-        * URL parser.
-        *
-        * @param {String} url
-        * @param {Object} An object meant to mimic window.location.
-        *                 Defaults to window.location.
-        * @api public
-        */
-       
-       function url (uri, loc) {
-         var obj = uri;
-       
-         // default to window.location
-         loc = loc || (typeof location !== 'undefined' && location);
-         if (null == uri) uri = loc.protocol + '//' + loc.host;
-       
-         // relative path support
-         if ('string' === typeof uri) {
-           if ('/' === uri.charAt(0)) {
-             if ('/' === uri.charAt(1)) {
-               uri = loc.protocol + uri;
-             } else {
-               uri = loc.host + uri;
-             }
-           }
-       
-           if (!/^(https?|wss?):\/\//.test(uri)) {
-             debug('protocol-less url %s', uri);
-             if ('undefined' !== typeof loc) {
-               uri = loc.protocol + '//' + uri;
-             } else {
-               uri = 'https://' + uri;
-             }
-           }
-       
-           // parse
-           debug('parse %s', uri);
-           obj = parseuri(uri);
-         }
-       
-         // make sure we treat `localhost:80` and `localhost` equally
-         if (!obj.port) {
-           if (/^(http|ws)$/.test(obj.protocol)) {
-             obj.port = '80';
-           } else if (/^(http|ws)s$/.test(obj.protocol)) {
-             obj.port = '443';
-           }
-         }
-       
-         obj.path = obj.path || '/';
-       
-         var ipv6 = obj.host.indexOf(':') !== -1;
-         var host = ipv6 ? '[' + obj.host + ']' : obj.host;
-       
-         // define unique id
-         obj.id = obj.protocol + '://' + host + ':' + obj.port;
-         // define href
-         obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));
-       
-         return obj;
-       }
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports) {
-
-       /**
-        * Parses an URI
-        *
-        * @author Steven Levithan <stevenlevithan.com> (MIT license)
-        * @api private
-        */
-       
-       var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
-       
-       var parts = [
-           'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'
-       ];
-       
-       module.exports = function parseuri(str) {
-           var src = str,
-               b = str.indexOf('['),
-               e = str.indexOf(']');
-       
-           if (b != -1 && e != -1) {
-               str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);
-           }
-       
-           var m = re.exec(str || ''),
-               uri = {},
-               i = 14;
-       
-           while (i--) {
-               uri[parts[i]] = m[i] || '';
-           }
-       
-           if (b != -1 && e != -1) {
-               uri.source = src;
-               uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');
-               uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');
-               uri.ipv6uri = true;
-           }
-       
-           return uri;
-       };
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {'use strict';
-       
-       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-       
-       /* eslint-env browser */
-       
-       /**
-        * This is the web browser implementation of `debug()`.
-        */
-       
-       exports.log = log;
-       exports.formatArgs = formatArgs;
-       exports.save = save;
-       exports.load = load;
-       exports.useColors = useColors;
-       exports.storage = localstorage();
-       
-       /**
-        * Colors.
-        */
-       
-       exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];
-       
-       /**
-        * Currently only WebKit-based Web Inspectors, Firefox >= v31,
-        * and the Firebug extension (any Firefox version) are known
-        * to support "%c" CSS customizations.
-        *
-        * TODO: add a `localStorage` variable to explicitly enable/disable colors
-        */
-       
-       // eslint-disable-next-line complexity
-       function useColors() {
-               // NB: In an Electron preload script, document will be defined but not fully
-               // initialized. Since we know we're in Chrome, we'll just detect this case
-               // explicitly
-               if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
-                       return true;
-               }
-       
-               // Internet Explorer and Edge do not support colors.
-               if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
-                       return false;
-               }
-       
-               // Is webkit? http://stackoverflow.com/a/16459606/376773
-               // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
-               return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||
-               // Is firebug? http://stackoverflow.com/a/398120/376773
-               typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||
-               // Is firefox >= v31?
-               // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
-               typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||
-               // Double check webkit in userAgent just in case we are in a worker
-               typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
-       }
-       
-       /**
-        * Colorize log arguments if enabled.
-        *
-        * @api public
-        */
-       
-       function formatArgs(args) {
-               args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);
-       
-               if (!this.useColors) {
-                       return;
-               }
-       
-               var c = 'color: ' + this.color;
-               args.splice(1, 0, c, 'color: inherit');
-       
-               // The final "%c" is somewhat tricky, because there could be other
-               // arguments passed either before or after the %c, so we need to
-               // figure out the correct index to insert the CSS into
-               var index = 0;
-               var lastC = 0;
-               args[0].replace(/%[a-zA-Z%]/g, function (match) {
-                       if (match === '%%') {
-                               return;
-                       }
-                       index++;
-                       if (match === '%c') {
-                               // We only are interested in the *last* %c
-                               // (the user may have provided their own)
-                               lastC = index;
-                       }
-               });
-       
-               args.splice(lastC, 0, c);
-       }
-       
-       /**
-        * Invokes `console.log()` when available.
-        * No-op when `console.log` is not a "function".
-        *
-        * @api public
-        */
-       function log() {
-               var _console;
-       
-               // This hackery is required for IE8/9, where
-               // the `console.log` function doesn't have 'apply'
-               return (typeof console === 'undefined' ? 'undefined' : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);
-       }
-       
-       /**
-        * Save `namespaces`.
-        *
-        * @param {String} namespaces
-        * @api private
-        */
-       function save(namespaces) {
-               try {
-                       if (namespaces) {
-                               exports.storage.setItem('debug', namespaces);
-                       } else {
-                               exports.storage.removeItem('debug');
-                       }
-               } catch (error) {
-                       // Swallow
-                       // XXX (@Qix-) should we be logging these?
-               }
-       }
-       
-       /**
-        * Load `namespaces`.
-        *
-        * @return {String} returns the previously persisted debug modes
-        * @api private
-        */
-       function load() {
-               var r = void 0;
-               try {
-                       r = exports.storage.getItem('debug');
-               } catch (error) {}
-               // Swallow
-               // XXX (@Qix-) should we be logging these?
-       
-       
-               // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
-               if (!r && typeof process !== 'undefined' && 'env' in process) {
-                       r = process.env.DEBUG;
-               }
-       
-               return r;
-       }
-       
-       /**
-        * Localstorage attempts to return the localstorage.
-        *
-        * This is necessary because safari throws
-        * when a user disables cookies/localstorage
-        * and you attempt to access it.
-        *
-        * @return {LocalStorage}
-        * @api private
-        */
-       
-       function localstorage() {
-               try {
-                       // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
-                       // The Browser also has localStorage in the global context.
-                       return localStorage;
-               } catch (error) {
-                       // Swallow
-                       // XXX (@Qix-) should we be logging these?
-               }
-       }
-       
-       module.exports = __webpack_require__(5)(exports);
-       
-       var formatters = module.exports.formatters;
-       
-       /**
-        * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
-        */
-       
-       formatters.j = function (v) {
-               try {
-                       return JSON.stringify(v);
-               } catch (error) {
-                       return '[UnexpectedJSONParseError]: ' + error.message;
-               }
-       };
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports) {
-
-       // shim for using process in browser
-       var process = module.exports = {};
-       
-       // cached from whatever global is present so that test runners that stub it
-       // don't break things.  But we need to wrap it in a try catch in case it is
-       // wrapped in strict mode code which doesn't define any globals.  It's inside a
-       // function because try/catches deoptimize in certain engines.
-       
-       var cachedSetTimeout;
-       var cachedClearTimeout;
-       
-       function defaultSetTimout() {
-           throw new Error('setTimeout has not been defined');
-       }
-       function defaultClearTimeout () {
-           throw new Error('clearTimeout has not been defined');
-       }
-       (function () {
-           try {
-               if (typeof setTimeout === 'function') {
-                   cachedSetTimeout = setTimeout;
-               } else {
-                   cachedSetTimeout = defaultSetTimout;
-               }
-           } catch (e) {
-               cachedSetTimeout = defaultSetTimout;
-           }
-           try {
-               if (typeof clearTimeout === 'function') {
-                   cachedClearTimeout = clearTimeout;
-               } else {
-                   cachedClearTimeout = defaultClearTimeout;
-               }
-           } catch (e) {
-               cachedClearTimeout = defaultClearTimeout;
-           }
-       } ())
-       function runTimeout(fun) {
-           if (cachedSetTimeout === setTimeout) {
-               //normal enviroments in sane situations
-               return setTimeout(fun, 0);
-           }
-           // if setTimeout wasn't available but was latter defined
-           if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
-               cachedSetTimeout = setTimeout;
-               return setTimeout(fun, 0);
-           }
-           try {
-               // when when somebody has screwed with setTimeout but no I.E. maddness
-               return cachedSetTimeout(fun, 0);
-           } catch(e){
-               try {
-                   // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
-                   return cachedSetTimeout.call(null, fun, 0);
-               } catch(e){
-                   // 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
-                   return cachedSetTimeout.call(this, fun, 0);
-               }
-           }
-       
-       
-       }
-       function runClearTimeout(marker) {
-           if (cachedClearTimeout === clearTimeout) {
-               //normal enviroments in sane situations
-               return clearTimeout(marker);
-           }
-           // if clearTimeout wasn't available but was latter defined
-           if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
-               cachedClearTimeout = clearTimeout;
-               return clearTimeout(marker);
-           }
-           try {
-               // when when somebody has screwed with setTimeout but no I.E. maddness
-               return cachedClearTimeout(marker);
-           } catch (e){
-               try {
-                   // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
-                   return cachedClearTimeout.call(null, marker);
-               } catch (e){
-                   // 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.
-                   // Some versions of I.E. have different rules for clearTimeout vs setTimeout
-                   return cachedClearTimeout.call(this, marker);
-               }
-           }
-       
-       
-       
-       }
-       var queue = [];
-       var draining = false;
-       var currentQueue;
-       var queueIndex = -1;
-       
-       function cleanUpNextTick() {
-           if (!draining || !currentQueue) {
-               return;
-           }
-           draining = false;
-           if (currentQueue.length) {
-               queue = currentQueue.concat(queue);
-           } else {
-               queueIndex = -1;
-           }
-           if (queue.length) {
-               drainQueue();
-           }
-       }
-       
-       function drainQueue() {
-           if (draining) {
-               return;
-           }
-           var timeout = runTimeout(cleanUpNextTick);
-           draining = true;
-       
-           var len = queue.length;
-           while(len) {
-               currentQueue = queue;
-               queue = [];
-               while (++queueIndex < len) {
-                   if (currentQueue) {
-                       currentQueue[queueIndex].run();
-                   }
-               }
-               queueIndex = -1;
-               len = queue.length;
-           }
-           currentQueue = null;
-           draining = false;
-           runClearTimeout(timeout);
-       }
-       
-       process.nextTick = function (fun) {
-           var args = new Array(arguments.length - 1);
-           if (arguments.length > 1) {
-               for (var i = 1; i < arguments.length; i++) {
-                   args[i - 1] = arguments[i];
-               }
-           }
-           queue.push(new Item(fun, args));
-           if (queue.length === 1 && !draining) {
-               runTimeout(drainQueue);
-           }
-       };
-       
-       // v8 likes predictible objects
-       function Item(fun, array) {
-           this.fun = fun;
-           this.array = array;
-       }
-       Item.prototype.run = function () {
-           this.fun.apply(null, this.array);
-       };
-       process.title = 'browser';
-       process.browser = true;
-       process.env = {};
-       process.argv = [];
-       process.version = ''; // empty string to avoid regexp issues
-       process.versions = {};
-       
-       function noop() {}
-       
-       process.on = noop;
-       process.addListener = noop;
-       process.once = noop;
-       process.off = noop;
-       process.removeListener = noop;
-       process.removeAllListeners = noop;
-       process.emit = noop;
-       process.prependListener = noop;
-       process.prependOnceListener = noop;
-       
-       process.listeners = function (name) { return [] }
-       
-       process.binding = function (name) {
-           throw new Error('process.binding is not supported');
-       };
-       
-       process.cwd = function () { return '/' };
-       process.chdir = function (dir) {
-           throw new Error('process.chdir is not supported');
-       };
-       process.umask = function() { return 0; };
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
-       
-       /**
-        * This is the common logic for both the Node.js and web browser
-        * implementations of `debug()`.
-        */
-       
-       function setup(env) {
-               createDebug.debug = createDebug;
-               createDebug.default = createDebug;
-               createDebug.coerce = coerce;
-               createDebug.disable = disable;
-               createDebug.enable = enable;
-               createDebug.enabled = enabled;
-               createDebug.humanize = __webpack_require__(6);
-       
-               Object.keys(env).forEach(function (key) {
-                       createDebug[key] = env[key];
-               });
-       
-               /**
-        * Active `debug` instances.
-        */
-               createDebug.instances = [];
-       
-               /**
-        * The currently active debug mode names, and names to skip.
-        */
-       
-               createDebug.names = [];
-               createDebug.skips = [];
-       
-               /**
-        * Map of special "%n" handling functions, for the debug "format" argument.
-        *
-        * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
-        */
-               createDebug.formatters = {};
-       
-               /**
-        * Selects a color for a debug namespace
-        * @param {String} namespace The namespace string for the for the debug instance to be colored
-        * @return {Number|String} An ANSI color code for the given namespace
-        * @api private
-        */
-               function selectColor(namespace) {
-                       var hash = 0;
-       
-                       for (var i = 0; i < namespace.length; i++) {
-                               hash = (hash << 5) - hash + namespace.charCodeAt(i);
-                               hash |= 0; // Convert to 32bit integer
-                       }
-       
-                       return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
-               }
-               createDebug.selectColor = selectColor;
-       
-               /**
-        * Create a debugger with the given `namespace`.
-        *
-        * @param {String} namespace
-        * @return {Function}
-        * @api public
-        */
-               function createDebug(namespace) {
-                       var prevTime = void 0;
-       
-                       function debug() {
-                               for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-                                       args[_key] = arguments[_key];
-                               }
-       
-                               // Disabled?
-                               if (!debug.enabled) {
-                                       return;
-                               }
-       
-                               var self = debug;
-       
-                               // Set `diff` timestamp
-                               var curr = Number(new Date());
-                               var ms = curr - (prevTime || curr);
-                               self.diff = ms;
-                               self.prev = prevTime;
-                               self.curr = curr;
-                               prevTime = curr;
-       
-                               args[0] = createDebug.coerce(args[0]);
-       
-                               if (typeof args[0] !== 'string') {
-                                       // Anything else let's inspect with %O
-                                       args.unshift('%O');
-                               }
-       
-                               // Apply any `formatters` transformations
-                               var index = 0;
-                               args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
-                                       // If we encounter an escaped % then don't increase the array index
-                                       if (match === '%%') {
-                                               return match;
-                                       }
-                                       index++;
-                                       var formatter = createDebug.formatters[format];
-                                       if (typeof formatter === 'function') {
-                                               var val = args[index];
-                                               match = formatter.call(self, val);
-       
-                                               // Now we need to remove `args[index]` since it's inlined in the `format`
-                                               args.splice(index, 1);
-                                               index--;
-                                       }
-                                       return match;
-                               });
-       
-                               // Apply env-specific formatting (colors, etc.)
-                               createDebug.formatArgs.call(self, args);
-       
-                               var logFn = self.log || createDebug.log;
-                               logFn.apply(self, args);
-                       }
-       
-                       debug.namespace = namespace;
-                       debug.enabled = createDebug.enabled(namespace);
-                       debug.useColors = createDebug.useColors();
-                       debug.color = selectColor(namespace);
-                       debug.destroy = destroy;
-                       debug.extend = extend;
-                       // Debug.formatArgs = formatArgs;
-                       // debug.rawLog = rawLog;
-       
-                       // env-specific initialization logic for debug instances
-                       if (typeof createDebug.init === 'function') {
-                               createDebug.init(debug);
-                       }
-       
-                       createDebug.instances.push(debug);
-       
-                       return debug;
-               }
-       
-               function destroy() {
-                       var index = createDebug.instances.indexOf(this);
-                       if (index !== -1) {
-                               createDebug.instances.splice(index, 1);
-                               return true;
-                       }
-                       return false;
-               }
-       
-               function extend(namespace, delimiter) {
-                       var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
-                       newDebug.log = this.log;
-                       return newDebug;
-               }
-       
-               /**
-        * Enables a debug mode by namespaces. This can include modes
-        * separated by a colon and wildcards.
-        *
-        * @param {String} namespaces
-        * @api public
-        */
-               function enable(namespaces) {
-                       createDebug.save(namespaces);
-       
-                       createDebug.names = [];
-                       createDebug.skips = [];
-       
-                       var i = void 0;
-                       var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
-                       var len = split.length;
-       
-                       for (i = 0; i < len; i++) {
-                               if (!split[i]) {
-                                       // ignore empty strings
-                                       continue;
-                               }
-       
-                               namespaces = split[i].replace(/\*/g, '.*?');
-       
-                               if (namespaces[0] === '-') {
-                                       createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
-                               } else {
-                                       createDebug.names.push(new RegExp('^' + namespaces + '$'));
-                               }
-                       }
-       
-                       for (i = 0; i < createDebug.instances.length; i++) {
-                               var instance = createDebug.instances[i];
-                               instance.enabled = createDebug.enabled(instance.namespace);
-                       }
-               }
-       
-               /**
-        * Disable debug output.
-        *
-        * @return {String} namespaces
-        * @api public
-        */
-               function disable() {
-                       var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) {
-                               return '-' + namespace;
-                       }))).join(',');
-                       createDebug.enable('');
-                       return namespaces;
-               }
-       
-               /**
-        * Returns true if the given mode name is enabled, false otherwise.
-        *
-        * @param {String} name
-        * @return {Boolean}
-        * @api public
-        */
-               function enabled(name) {
-                       if (name[name.length - 1] === '*') {
-                               return true;
-                       }
-       
-                       var i = void 0;
-                       var len = void 0;
-       
-                       for (i = 0, len = createDebug.skips.length; i < len; i++) {
-                               if (createDebug.skips[i].test(name)) {
-                                       return false;
-                               }
-                       }
-       
-                       for (i = 0, len = createDebug.names.length; i < len; i++) {
-                               if (createDebug.names[i].test(name)) {
-                                       return true;
-                               }
-                       }
-       
-                       return false;
-               }
-       
-               /**
-        * Convert regexp to namespace
-        *
-        * @param {RegExp} regxep
-        * @return {String} namespace
-        * @api private
-        */
-               function toNamespace(regexp) {
-                       return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*');
-               }
-       
-               /**
-        * Coerce `val`.
-        *
-        * @param {Mixed} val
-        * @return {Mixed}
-        * @api private
-        */
-               function coerce(val) {
-                       if (val instanceof Error) {
-                               return val.stack || val.message;
-                       }
-                       return val;
-               }
-       
-               createDebug.enable(createDebug.load());
-       
-               return createDebug;
-       }
-       
-       module.exports = setup;
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports) {
-
-       /**
-        * Helpers.
-        */
-       
-       var s = 1000;
-       var m = s * 60;
-       var h = m * 60;
-       var d = h * 24;
-       var w = d * 7;
-       var y = d * 365.25;
-       
-       /**
-        * Parse or format the given `val`.
-        *
-        * Options:
-        *
-        *  - `long` verbose formatting [false]
-        *
-        * @param {String|Number} val
-        * @param {Object} [options]
-        * @throws {Error} throw an error if val is not a non-empty string or a number
-        * @return {String|Number}
-        * @api public
-        */
-       
-       module.exports = function(val, options) {
-         options = options || {};
-         var type = typeof val;
-         if (type === 'string' && val.length > 0) {
-           return parse(val);
-         } else if (type === 'number' && isFinite(val)) {
-           return options.long ? fmtLong(val) : fmtShort(val);
-         }
-         throw new Error(
-           'val is not a non-empty string or a valid number. val=' +
-             JSON.stringify(val)
-         );
-       };
-       
-       /**
-        * Parse the given `str` and return milliseconds.
-        *
-        * @param {String} str
-        * @return {Number}
-        * @api private
-        */
-       
-       function parse(str) {
-         str = String(str);
-         if (str.length > 100) {
-           return;
-         }
-         var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
-           str
-         );
-         if (!match) {
-           return;
-         }
-         var n = parseFloat(match[1]);
-         var type = (match[2] || 'ms').toLowerCase();
-         switch (type) {
-           case 'years':
-           case 'year':
-           case 'yrs':
-           case 'yr':
-           case 'y':
-             return n * y;
-           case 'weeks':
-           case 'week':
-           case 'w':
-             return n * w;
-           case 'days':
-           case 'day':
-           case 'd':
-             return n * d;
-           case 'hours':
-           case 'hour':
-           case 'hrs':
-           case 'hr':
-           case 'h':
-             return n * h;
-           case 'minutes':
-           case 'minute':
-           case 'mins':
-           case 'min':
-           case 'm':
-             return n * m;
-           case 'seconds':
-           case 'second':
-           case 'secs':
-           case 'sec':
-           case 's':
-             return n * s;
-           case 'milliseconds':
-           case 'millisecond':
-           case 'msecs':
-           case 'msec':
-           case 'ms':
-             return n;
-           default:
-             return undefined;
-         }
-       }
-       
-       /**
-        * Short format for `ms`.
-        *
-        * @param {Number} ms
-        * @return {String}
-        * @api private
-        */
-       
-       function fmtShort(ms) {
-         var msAbs = Math.abs(ms);
-         if (msAbs >= d) {
-           return Math.round(ms / d) + 'd';
-         }
-         if (msAbs >= h) {
-           return Math.round(ms / h) + 'h';
-         }
-         if (msAbs >= m) {
-           return Math.round(ms / m) + 'm';
-         }
-         if (msAbs >= s) {
-           return Math.round(ms / s) + 's';
-         }
-         return ms + 'ms';
-       }
-       
-       /**
-        * Long format for `ms`.
-        *
-        * @param {Number} ms
-        * @return {String}
-        * @api private
-        */
-       
-       function fmtLong(ms) {
-         var msAbs = Math.abs(ms);
-         if (msAbs >= d) {
-           return plural(ms, msAbs, d, 'day');
-         }
-         if (msAbs >= h) {
-           return plural(ms, msAbs, h, 'hour');
-         }
-         if (msAbs >= m) {
-           return plural(ms, msAbs, m, 'minute');
-         }
-         if (msAbs >= s) {
-           return plural(ms, msAbs, s, 'second');
-         }
-         return ms + ' ms';
-       }
-       
-       /**
-        * Pluralization helper.
-        */
-       
-       function plural(ms, msAbs, n, name) {
-         var isPlural = msAbs >= n * 1.5;
-         return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
-       }
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var debug = __webpack_require__(8)('socket.io-parser');
-       var Emitter = __webpack_require__(11);
-       var binary = __webpack_require__(12);
-       var isArray = __webpack_require__(13);
-       var isBuf = __webpack_require__(14);
-       
-       /**
-        * Protocol version.
-        *
-        * @api public
-        */
-       
-       exports.protocol = 4;
-       
-       /**
-        * Packet types.
-        *
-        * @api public
-        */
-       
-       exports.types = [
-         'CONNECT',
-         'DISCONNECT',
-         'EVENT',
-         'ACK',
-         'ERROR',
-         'BINARY_EVENT',
-         'BINARY_ACK'
-       ];
-       
-       /**
-        * Packet type `connect`.
-        *
-        * @api public
-        */
-       
-       exports.CONNECT = 0;
-       
-       /**
-        * Packet type `disconnect`.
-        *
-        * @api public
-        */
-       
-       exports.DISCONNECT = 1;
-       
-       /**
-        * Packet type `event`.
-        *
-        * @api public
-        */
-       
-       exports.EVENT = 2;
-       
-       /**
-        * Packet type `ack`.
-        *
-        * @api public
-        */
-       
-       exports.ACK = 3;
-       
-       /**
-        * Packet type `error`.
-        *
-        * @api public
-        */
-       
-       exports.ERROR = 4;
-       
-       /**
-        * Packet type 'binary event'
-        *
-        * @api public
-        */
-       
-       exports.BINARY_EVENT = 5;
-       
-       /**
-        * Packet type `binary ack`. For acks with binary arguments.
-        *
-        * @api public
-        */
-       
-       exports.BINARY_ACK = 6;
-       
-       /**
-        * Encoder constructor.
-        *
-        * @api public
-        */
-       
-       exports.Encoder = Encoder;
-       
-       /**
-        * Decoder constructor.
-        *
-        * @api public
-        */
-       
-       exports.Decoder = Decoder;
-       
-       /**
-        * A socket.io Encoder instance
-        *
-        * @api public
-        */
-       
-       function Encoder() {}
-       
-       var ERROR_PACKET = exports.ERROR + '"encode error"';
-       
-       /**
-        * Encode a packet as a single string if non-binary, or as a
-        * buffer sequence, depending on packet type.
-        *
-        * @param {Object} obj - packet object
-        * @param {Function} callback - function to handle encodings (likely engine.write)
-        * @return Calls callback with Array of encodings
-        * @api public
-        */
-       
-       Encoder.prototype.encode = function(obj, callback){
-         debug('encoding packet %j', obj);
-       
-         if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
-           encodeAsBinary(obj, callback);
-         } else {
-           var encoding = encodeAsString(obj);
-           callback([encoding]);
-         }
-       };
-       
-       /**
-        * Encode packet as string.
-        *
-        * @param {Object} packet
-        * @return {String} encoded
-        * @api private
-        */
-       
-       function encodeAsString(obj) {
-       
-         // first is type
-         var str = '' + obj.type;
-       
-         // attachments if we have them
-         if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
-           str += obj.attachments + '-';
-         }
-       
-         // if we have a namespace other than `/`
-         // we append it followed by a comma `,`
-         if (obj.nsp && '/' !== obj.nsp) {
-           str += obj.nsp + ',';
-         }
-       
-         // immediately followed by the id
-         if (null != obj.id) {
-           str += obj.id;
-         }
-       
-         // json data
-         if (null != obj.data) {
-           var payload = tryStringify(obj.data);
-           if (payload !== false) {
-             str += payload;
-           } else {
-             return ERROR_PACKET;
-           }
-         }
-       
-         debug('encoded %j as %s', obj, str);
-         return str;
-       }
-       
-       function tryStringify(str) {
-         try {
-           return JSON.stringify(str);
-         } catch(e){
-           return false;
-         }
-       }
-       
-       /**
-        * Encode packet as 'buffer sequence' by removing blobs, and
-        * deconstructing packet into object with placeholders and
-        * a list of buffers.
-        *
-        * @param {Object} packet
-        * @return {Buffer} encoded
-        * @api private
-        */
-       
-       function encodeAsBinary(obj, callback) {
-       
-         function writeEncoding(bloblessData) {
-           var deconstruction = binary.deconstructPacket(bloblessData);
-           var pack = encodeAsString(deconstruction.packet);
-           var buffers = deconstruction.buffers;
-       
-           buffers.unshift(pack); // add packet info to beginning of data list
-           callback(buffers); // write all the buffers
-         }
-       
-         binary.removeBlobs(obj, writeEncoding);
-       }
-       
-       /**
-        * A socket.io Decoder instance
-        *
-        * @return {Object} decoder
-        * @api public
-        */
-       
-       function Decoder() {
-         this.reconstructor = null;
-       }
-       
-       /**
-        * Mix in `Emitter` with Decoder.
-        */
-       
-       Emitter(Decoder.prototype);
-       
-       /**
-        * Decodes an encoded packet string into packet JSON.
-        *
-        * @param {String} obj - encoded packet
-        * @return {Object} packet
-        * @api public
-        */
-       
-       Decoder.prototype.add = function(obj) {
-         var packet;
-         if (typeof obj === 'string') {
-           packet = decodeString(obj);
-           if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json
-             this.reconstructor = new BinaryReconstructor(packet);
-       
-             // no attachments, labeled binary but no binary data to follow
-             if (this.reconstructor.reconPack.attachments === 0) {
-               this.emit('decoded', packet);
-             }
-           } else { // non-binary full packet
-             this.emit('decoded', packet);
-           }
-         } else if (isBuf(obj) || obj.base64) { // raw binary data
-           if (!this.reconstructor) {
-             throw new Error('got binary data when not reconstructing a packet');
-           } else {
-             packet = this.reconstructor.takeBinaryData(obj);
-             if (packet) { // received final buffer
-               this.reconstructor = null;
-               this.emit('decoded', packet);
-             }
-           }
-         } else {
-           throw new Error('Unknown type: ' + obj);
-         }
-       };
-       
-       /**
-        * Decode a packet String (JSON data)
-        *
-        * @param {String} str
-        * @return {Object} packet
-        * @api private
-        */
-       
-       function decodeString(str) {
-         var i = 0;
-         // look up type
-         var p = {
-           type: Number(str.charAt(0))
-         };
-       
-         if (null == exports.types[p.type]) {
-           return error('unknown packet type ' + p.type);
-         }
-       
-         // look up attachments if type binary
-         if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {
-           var buf = '';
-           while (str.charAt(++i) !== '-') {
-             buf += str.charAt(i);
-             if (i == str.length) break;
-           }
-           if (buf != Number(buf) || str.charAt(i) !== '-') {
-             throw new Error('Illegal attachments');
-           }
-           p.attachments = Number(buf);
-         }
-       
-         // look up namespace (if any)
-         if ('/' === str.charAt(i + 1)) {
-           p.nsp = '';
-           while (++i) {
-             var c = str.charAt(i);
-             if (',' === c) break;
-             p.nsp += c;
-             if (i === str.length) break;
-           }
-         } else {
-           p.nsp = '/';
-         }
-       
-         // look up id
-         var next = str.charAt(i + 1);
-         if ('' !== next && Number(next) == next) {
-           p.id = '';
-           while (++i) {
-             var c = str.charAt(i);
-             if (null == c || Number(c) != c) {
-               --i;
-               break;
-             }
-             p.id += str.charAt(i);
-             if (i === str.length) break;
-           }
-           p.id = Number(p.id);
-         }
-       
-         // look up json data
-         if (str.charAt(++i)) {
-           var payload = tryParse(str.substr(i));
-           var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));
-           if (isPayloadValid) {
-             p.data = payload;
-           } else {
-             return error('invalid payload');
-           }
-         }
-       
-         debug('decoded %s as %j', str, p);
-         return p;
-       }
-       
-       function tryParse(str) {
-         try {
-           return JSON.parse(str);
-         } catch(e){
-           return false;
-         }
-       }
-       
-       /**
-        * Deallocates a parser's resources
-        *
-        * @api public
-        */
-       
-       Decoder.prototype.destroy = function() {
-         if (this.reconstructor) {
-           this.reconstructor.finishedReconstruction();
-         }
-       };
-       
-       /**
-        * A manager of a binary event's 'buffer sequence'. Should
-        * be constructed whenever a packet of type BINARY_EVENT is
-        * decoded.
-        *
-        * @param {Object} packet
-        * @return {BinaryReconstructor} initialized reconstructor
-        * @api private
-        */
-       
-       function BinaryReconstructor(packet) {
-         this.reconPack = packet;
-         this.buffers = [];
-       }
-       
-       /**
-        * Method to be called when binary data received from connection
-        * after a BINARY_EVENT packet.
-        *
-        * @param {Buffer | ArrayBuffer} binData - the raw binary data received
-        * @return {null | Object} returns null if more binary data is expected or
-        *   a reconstructed packet object if all buffers have been received.
-        * @api private
-        */
-       
-       BinaryReconstructor.prototype.takeBinaryData = function(binData) {
-         this.buffers.push(binData);
-         if (this.buffers.length === this.reconPack.attachments) { // done with buffer list
-           var packet = binary.reconstructPacket(this.reconPack, this.buffers);
-           this.finishedReconstruction();
-           return packet;
-         }
-         return null;
-       };
-       
-       /**
-        * Cleans up binary packet reconstruction variables.
-        *
-        * @api private
-        */
-       
-       BinaryReconstructor.prototype.finishedReconstruction = function() {
-         this.reconPack = null;
-         this.buffers = [];
-       };
-       
-       function error(msg) {
-         return {
-           type: exports.ERROR,
-           data: 'parser error: ' + msg
-         };
-       }
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {'use strict';
-       
-       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-       
-       /**
-        * This is the web browser implementation of `debug()`.
-        *
-        * Expose `debug()` as the module.
-        */
-       
-       exports = module.exports = __webpack_require__(9);
-       exports.log = log;
-       exports.formatArgs = formatArgs;
-       exports.save = save;
-       exports.load = load;
-       exports.useColors = useColors;
-       exports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();
-       
-       /**
-        * Colors.
-        */
-       
-       exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];
-       
-       /**
-        * Currently only WebKit-based Web Inspectors, Firefox >= v31,
-        * and the Firebug extension (any Firefox version) are known
-        * to support "%c" CSS customizations.
-        *
-        * TODO: add a `localStorage` variable to explicitly enable/disable colors
-        */
-       
-       function useColors() {
-         // NB: In an Electron preload script, document will be defined but not fully
-         // initialized. Since we know we're in Chrome, we'll just detect this case
-         // explicitly
-         if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
-           return true;
-         }
-       
-         // Internet Explorer and Edge do not support colors.
-         if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
-           return false;
-         }
-       
-         // is webkit? http://stackoverflow.com/a/16459606/376773
-         // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
-         return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||
-         // is firebug? http://stackoverflow.com/a/398120/376773
-         typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||
-         // is firefox >= v31?
-         // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
-         typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||
-         // double check webkit in userAgent just in case we are in a worker
-         typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
-       }
-       
-       /**
-        * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
-        */
-       
-       exports.formatters.j = function (v) {
-         try {
-           return JSON.stringify(v);
-         } catch (err) {
-           return '[UnexpectedJSONParseError]: ' + err.message;
-         }
-       };
-       
-       /**
-        * Colorize log arguments if enabled.
-        *
-        * @api public
-        */
-       
-       function formatArgs(args) {
-         var useColors = this.useColors;
-       
-         args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);
-       
-         if (!useColors) return;
-       
-         var c = 'color: ' + this.color;
-         args.splice(1, 0, c, 'color: inherit');
-       
-         // the final "%c" is somewhat tricky, because there could be other
-         // arguments passed either before or after the %c, so we need to
-         // figure out the correct index to insert the CSS into
-         var index = 0;
-         var lastC = 0;
-         args[0].replace(/%[a-zA-Z%]/g, function (match) {
-           if ('%%' === match) return;
-           index++;
-           if ('%c' === match) {
-             // we only are interested in the *last* %c
-             // (the user may have provided their own)
-             lastC = index;
-           }
-         });
-       
-         args.splice(lastC, 0, c);
-       }
-       
-       /**
-        * Invokes `console.log()` when available.
-        * No-op when `console.log` is not a "function".
-        *
-        * @api public
-        */
-       
-       function log() {
-         // this hackery is required for IE8/9, where
-         // the `console.log` function doesn't have 'apply'
-         return 'object' === (typeof console === 'undefined' ? 'undefined' : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments);
-       }
-       
-       /**
-        * Save `namespaces`.
-        *
-        * @param {String} namespaces
-        * @api private
-        */
-       
-       function save(namespaces) {
-         try {
-           if (null == namespaces) {
-             exports.storage.removeItem('debug');
-           } else {
-             exports.storage.debug = namespaces;
-           }
-         } catch (e) {}
-       }
-       
-       /**
-        * Load `namespaces`.
-        *
-        * @return {String} returns the previously persisted debug modes
-        * @api private
-        */
-       
-       function load() {
-         var r;
-         try {
-           r = exports.storage.debug;
-         } catch (e) {}
-       
-         // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
-         if (!r && typeof process !== 'undefined' && 'env' in process) {
-           r = process.env.DEBUG;
-         }
-       
-         return r;
-       }
-       
-       /**
-        * Enable namespaces listed in `localStorage.debug` initially.
-        */
-       
-       exports.enable(load());
-       
-       /**
-        * Localstorage attempts to return the localstorage.
-        *
-        * This is necessary because safari throws
-        * when a user disables cookies/localstorage
-        * and you attempt to access it.
-        *
-        * @return {LocalStorage}
-        * @api private
-        */
-       
-       function localstorage() {
-         try {
-           return window.localStorage;
-         } catch (e) {}
-       }
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       /**
-        * This is the common logic for both the Node.js and web browser
-        * implementations of `debug()`.
-        *
-        * Expose `debug()` as the module.
-        */
-       
-       exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
-       exports.coerce = coerce;
-       exports.disable = disable;
-       exports.enable = enable;
-       exports.enabled = enabled;
-       exports.humanize = __webpack_require__(10);
-       
-       /**
-        * Active `debug` instances.
-        */
-       exports.instances = [];
-       
-       /**
-        * The currently active debug mode names, and names to skip.
-        */
-       
-       exports.names = [];
-       exports.skips = [];
-       
-       /**
-        * Map of special "%n" handling functions, for the debug "format" argument.
-        *
-        * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
-        */
-       
-       exports.formatters = {};
-       
-       /**
-        * Select a color.
-        * @param {String} namespace
-        * @return {Number}
-        * @api private
-        */
-       
-       function selectColor(namespace) {
-         var hash = 0,
-             i;
-       
-         for (i in namespace) {
-           hash = (hash << 5) - hash + namespace.charCodeAt(i);
-           hash |= 0; // Convert to 32bit integer
-         }
-       
-         return exports.colors[Math.abs(hash) % exports.colors.length];
-       }
-       
-       /**
-        * Create a debugger with the given `namespace`.
-        *
-        * @param {String} namespace
-        * @return {Function}
-        * @api public
-        */
-       
-       function createDebug(namespace) {
-       
-         var prevTime;
-       
-         function debug() {
-           // disabled?
-           if (!debug.enabled) return;
-       
-           var self = debug;
-       
-           // set `diff` timestamp
-           var curr = +new Date();
-           var ms = curr - (prevTime || curr);
-           self.diff = ms;
-           self.prev = prevTime;
-           self.curr = curr;
-           prevTime = curr;
-       
-           // turn the `arguments` into a proper Array
-           var args = new Array(arguments.length);
-           for (var i = 0; i < args.length; i++) {
-             args[i] = arguments[i];
-           }
-       
-           args[0] = exports.coerce(args[0]);
-       
-           if ('string' !== typeof args[0]) {
-             // anything else let's inspect with %O
-             args.unshift('%O');
-           }
-       
-           // apply any `formatters` transformations
-           var index = 0;
-           args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
-             // if we encounter an escaped % then don't increase the array index
-             if (match === '%%') return match;
-             index++;
-             var formatter = exports.formatters[format];
-             if ('function' === typeof formatter) {
-               var val = args[index];
-               match = formatter.call(self, val);
-       
-               // now we need to remove `args[index]` since it's inlined in the `format`
-               args.splice(index, 1);
-               index--;
-             }
-             return match;
-           });
-       
-           // apply env-specific formatting (colors, etc.)
-           exports.formatArgs.call(self, args);
-       
-           var logFn = debug.log || exports.log || console.log.bind(console);
-           logFn.apply(self, args);
-         }
-       
-         debug.namespace = namespace;
-         debug.enabled = exports.enabled(namespace);
-         debug.useColors = exports.useColors();
-         debug.color = selectColor(namespace);
-         debug.destroy = destroy;
-       
-         // env-specific initialization logic for debug instances
-         if ('function' === typeof exports.init) {
-           exports.init(debug);
-         }
-       
-         exports.instances.push(debug);
-       
-         return debug;
-       }
-       
-       function destroy() {
-         var index = exports.instances.indexOf(this);
-         if (index !== -1) {
-           exports.instances.splice(index, 1);
-           return true;
-         } else {
-           return false;
-         }
-       }
-       
-       /**
-        * Enables a debug mode by namespaces. This can include modes
-        * separated by a colon and wildcards.
-        *
-        * @param {String} namespaces
-        * @api public
-        */
-       
-       function enable(namespaces) {
-         exports.save(namespaces);
-       
-         exports.names = [];
-         exports.skips = [];
-       
-         var i;
-         var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
-         var len = split.length;
-       
-         for (i = 0; i < len; i++) {
-           if (!split[i]) continue; // ignore empty strings
-           namespaces = split[i].replace(/\*/g, '.*?');
-           if (namespaces[0] === '-') {
-             exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
-           } else {
-             exports.names.push(new RegExp('^' + namespaces + '$'));
-           }
-         }
-       
-         for (i = 0; i < exports.instances.length; i++) {
-           var instance = exports.instances[i];
-           instance.enabled = exports.enabled(instance.namespace);
-         }
-       }
-       
-       /**
-        * Disable debug output.
-        *
-        * @api public
-        */
-       
-       function disable() {
-         exports.enable('');
-       }
-       
-       /**
-        * Returns true if the given mode name is enabled, false otherwise.
-        *
-        * @param {String} name
-        * @return {Boolean}
-        * @api public
-        */
-       
-       function enabled(name) {
-         if (name[name.length - 1] === '*') {
-           return true;
-         }
-         var i, len;
-         for (i = 0, len = exports.skips.length; i < len; i++) {
-           if (exports.skips[i].test(name)) {
-             return false;
-           }
-         }
-         for (i = 0, len = exports.names.length; i < len; i++) {
-           if (exports.names[i].test(name)) {
-             return true;
-           }
-         }
-         return false;
-       }
-       
-       /**
-        * Coerce `val`.
-        *
-        * @param {Mixed} val
-        * @return {Mixed}
-        * @api private
-        */
-       
-       function coerce(val) {
-         if (val instanceof Error) return val.stack || val.message;
-         return val;
-       }
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports) {
-
-       /**
-        * Helpers.
-        */
-       
-       var s = 1000;
-       var m = s * 60;
-       var h = m * 60;
-       var d = h * 24;
-       var y = d * 365.25;
-       
-       /**
-        * Parse or format the given `val`.
-        *
-        * Options:
-        *
-        *  - `long` verbose formatting [false]
-        *
-        * @param {String|Number} val
-        * @param {Object} [options]
-        * @throws {Error} throw an error if val is not a non-empty string or a number
-        * @return {String|Number}
-        * @api public
-        */
-       
-       module.exports = function(val, options) {
-         options = options || {};
-         var type = typeof val;
-         if (type === 'string' && val.length > 0) {
-           return parse(val);
-         } else if (type === 'number' && isNaN(val) === false) {
-           return options.long ? fmtLong(val) : fmtShort(val);
-         }
-         throw new Error(
-           'val is not a non-empty string or a valid number. val=' +
-             JSON.stringify(val)
-         );
-       };
-       
-       /**
-        * Parse the given `str` and return milliseconds.
-        *
-        * @param {String} str
-        * @return {Number}
-        * @api private
-        */
-       
-       function parse(str) {
-         str = String(str);
-         if (str.length > 100) {
-           return;
-         }
-         var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
-           str
-         );
-         if (!match) {
-           return;
-         }
-         var n = parseFloat(match[1]);
-         var type = (match[2] || 'ms').toLowerCase();
-         switch (type) {
-           case 'years':
-           case 'year':
-           case 'yrs':
-           case 'yr':
-           case 'y':
-             return n * y;
-           case 'days':
-           case 'day':
-           case 'd':
-             return n * d;
-           case 'hours':
-           case 'hour':
-           case 'hrs':
-           case 'hr':
-           case 'h':
-             return n * h;
-           case 'minutes':
-           case 'minute':
-           case 'mins':
-           case 'min':
-           case 'm':
-             return n * m;
-           case 'seconds':
-           case 'second':
-           case 'secs':
-           case 'sec':
-           case 's':
-             return n * s;
-           case 'milliseconds':
-           case 'millisecond':
-           case 'msecs':
-           case 'msec':
-           case 'ms':
-             return n;
-           default:
-             return undefined;
-         }
-       }
-       
-       /**
-        * Short format for `ms`.
-        *
-        * @param {Number} ms
-        * @return {String}
-        * @api private
-        */
-       
-       function fmtShort(ms) {
-         if (ms >= d) {
-           return Math.round(ms / d) + 'd';
-         }
-         if (ms >= h) {
-           return Math.round(ms / h) + 'h';
-         }
-         if (ms >= m) {
-           return Math.round(ms / m) + 'm';
-         }
-         if (ms >= s) {
-           return Math.round(ms / s) + 's';
-         }
-         return ms + 'ms';
-       }
-       
-       /**
-        * Long format for `ms`.
-        *
-        * @param {Number} ms
-        * @return {String}
-        * @api private
-        */
-       
-       function fmtLong(ms) {
-         return plural(ms, d, 'day') ||
-           plural(ms, h, 'hour') ||
-           plural(ms, m, 'minute') ||
-           plural(ms, s, 'second') ||
-           ms + ' ms';
-       }
-       
-       /**
-        * Pluralization helper.
-        */
-       
-       function plural(ms, n, name) {
-         if (ms < n) {
-           return;
-         }
-         if (ms < n * 1.5) {
-           return Math.floor(ms / n) + ' ' + name;
-         }
-         return Math.ceil(ms / n) + ' ' + name + 's';
-       }
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       /**
-        * Expose `Emitter`.
-        */
-       
-       if (true) {
-         module.exports = Emitter;
-       }
-       
-       /**
-        * Initialize a new `Emitter`.
-        *
-        * @api public
-        */
-       
-       function Emitter(obj) {
-         if (obj) return mixin(obj);
-       };
-       
-       /**
-        * Mixin the emitter properties.
-        *
-        * @param {Object} obj
-        * @return {Object}
-        * @api private
-        */
-       
-       function mixin(obj) {
-         for (var key in Emitter.prototype) {
-           obj[key] = Emitter.prototype[key];
-         }
-         return obj;
-       }
-       
-       /**
-        * Listen on the given `event` with `fn`.
-        *
-        * @param {String} event
-        * @param {Function} fn
-        * @return {Emitter}
-        * @api public
-        */
-       
-       Emitter.prototype.on =
-       Emitter.prototype.addEventListener = function(event, fn){
-         this._callbacks = this._callbacks || {};
-         (this._callbacks['$' + event] = this._callbacks['$' + event] || [])
-           .push(fn);
-         return this;
-       };
-       
-       /**
-        * Adds an `event` listener that will be invoked a single
-        * time then automatically removed.
-        *
-        * @param {String} event
-        * @param {Function} fn
-        * @return {Emitter}
-        * @api public
-        */
-       
-       Emitter.prototype.once = function(event, fn){
-         function on() {
-           this.off(event, on);
-           fn.apply(this, arguments);
-         }
-       
-         on.fn = fn;
-         this.on(event, on);
-         return this;
-       };
-       
-       /**
-        * Remove the given callback for `event` or all
-        * registered callbacks.
-        *
-        * @param {String} event
-        * @param {Function} fn
-        * @return {Emitter}
-        * @api public
-        */
-       
-       Emitter.prototype.off =
-       Emitter.prototype.removeListener =
-       Emitter.prototype.removeAllListeners =
-       Emitter.prototype.removeEventListener = function(event, fn){
-         this._callbacks = this._callbacks || {};
-       
-         // all
-         if (0 == arguments.length) {
-           this._callbacks = {};
-           return this;
-         }
-       
-         // specific event
-         var callbacks = this._callbacks['$' + event];
-         if (!callbacks) return this;
-       
-         // remove all handlers
-         if (1 == arguments.length) {
-           delete this._callbacks['$' + event];
-           return this;
-         }
-       
-         // remove specific handler
-         var cb;
-         for (var i = 0; i < callbacks.length; i++) {
-           cb = callbacks[i];
-           if (cb === fn || cb.fn === fn) {
-             callbacks.splice(i, 1);
-             break;
-           }
-         }
-         return this;
-       };
-       
-       /**
-        * Emit `event` with the given args.
-        *
-        * @param {String} event
-        * @param {Mixed} ...
-        * @return {Emitter}
-        */
-       
-       Emitter.prototype.emit = function(event){
-         this._callbacks = this._callbacks || {};
-         var args = [].slice.call(arguments, 1)
-           , callbacks = this._callbacks['$' + event];
-       
-         if (callbacks) {
-           callbacks = callbacks.slice(0);
-           for (var i = 0, len = callbacks.length; i < len; ++i) {
-             callbacks[i].apply(this, args);
-           }
-         }
-       
-         return this;
-       };
-       
-       /**
-        * Return array of callbacks for `event`.
-        *
-        * @param {String} event
-        * @return {Array}
-        * @api public
-        */
-       
-       Emitter.prototype.listeners = function(event){
-         this._callbacks = this._callbacks || {};
-         return this._callbacks['$' + event] || [];
-       };
-       
-       /**
-        * Check if this emitter has `event` handlers.
-        *
-        * @param {String} event
-        * @return {Boolean}
-        * @api public
-        */
-       
-       Emitter.prototype.hasListeners = function(event){
-         return !! this.listeners(event).length;
-       };
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /*global Blob,File*/
-       
-       /**
-        * Module requirements
-        */
-       
-       var isArray = __webpack_require__(13);
-       var isBuf = __webpack_require__(14);
-       var toString = Object.prototype.toString;
-       var withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');
-       var withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');
-       
-       /**
-        * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.
-        * Anything with blobs or files should be fed through removeBlobs before coming
-        * here.
-        *
-        * @param {Object} packet - socket.io event packet
-        * @return {Object} with deconstructed packet and list of buffers
-        * @api public
-        */
-       
-       exports.deconstructPacket = function(packet) {
-         var buffers = [];
-         var packetData = packet.data;
-         var pack = packet;
-         pack.data = _deconstructPacket(packetData, buffers);
-         pack.attachments = buffers.length; // number of binary 'attachments'
-         return {packet: pack, buffers: buffers};
-       };
-       
-       function _deconstructPacket(data, buffers) {
-         if (!data) return data;
-       
-         if (isBuf(data)) {
-           var placeholder = { _placeholder: true, num: buffers.length };
-           buffers.push(data);
-           return placeholder;
-         } else if (isArray(data)) {
-           var newData = new Array(data.length);
-           for (var i = 0; i < data.length; i++) {
-             newData[i] = _deconstructPacket(data[i], buffers);
-           }
-           return newData;
-         } else if (typeof data === 'object' && !(data instanceof Date)) {
-           var newData = {};
-           for (var key in data) {
-             newData[key] = _deconstructPacket(data[key], buffers);
-           }
-           return newData;
-         }
-         return data;
-       }
-       
-       /**
-        * Reconstructs a binary packet from its placeholder packet and buffers
-        *
-        * @param {Object} packet - event packet with placeholders
-        * @param {Array} buffers - binary buffers to put in placeholder positions
-        * @return {Object} reconstructed packet
-        * @api public
-        */
-       
-       exports.reconstructPacket = function(packet, buffers) {
-         packet.data = _reconstructPacket(packet.data, buffers);
-         packet.attachments = undefined; // no longer useful
-         return packet;
-       };
-       
-       function _reconstructPacket(data, buffers) {
-         if (!data) return data;
-       
-         if (data && data._placeholder) {
-           return buffers[data.num]; // appropriate buffer (should be natural order anyway)
-         } else if (isArray(data)) {
-           for (var i = 0; i < data.length; i++) {
-             data[i] = _reconstructPacket(data[i], buffers);
-           }
-         } else if (typeof data === 'object') {
-           for (var key in data) {
-             data[key] = _reconstructPacket(data[key], buffers);
-           }
-         }
-       
-         return data;
-       }
-       
-       /**
-        * Asynchronously removes Blobs or Files from data via
-        * FileReader's readAsArrayBuffer method. Used before encoding
-        * data as msgpack. Calls callback with the blobless data.
-        *
-        * @param {Object} data
-        * @param {Function} callback
-        * @api private
-        */
-       
-       exports.removeBlobs = function(data, callback) {
-         function _removeBlobs(obj, curKey, containingObject) {
-           if (!obj) return obj;
-       
-           // convert any blob
-           if ((withNativeBlob && obj instanceof Blob) ||
-               (withNativeFile && obj instanceof File)) {
-             pendingBlobs++;
-       
-             // async filereader
-             var fileReader = new FileReader();
-             fileReader.onload = function() { // this.result == arraybuffer
-               if (containingObject) {
-                 containingObject[curKey] = this.result;
-               }
-               else {
-                 bloblessData = this.result;
-               }
-       
-               // if nothing pending its callback time
-               if(! --pendingBlobs) {
-                 callback(bloblessData);
-               }
-             };
-       
-             fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer
-           } else if (isArray(obj)) { // handle array
-             for (var i = 0; i < obj.length; i++) {
-               _removeBlobs(obj[i], i, obj);
-             }
-           } else if (typeof obj === 'object' && !isBuf(obj)) { // and object
-             for (var key in obj) {
-               _removeBlobs(obj[key], key, obj);
-             }
-           }
-         }
-       
-         var pendingBlobs = 0;
-         var bloblessData = data;
-         _removeBlobs(bloblessData);
-         if (!pendingBlobs) {
-           callback(bloblessData);
-         }
-       };
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports) {
-
-       var toString = {}.toString;
-       
-       module.exports = Array.isArray || function (arr) {
-         return toString.call(arr) == '[object Array]';
-       };
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports) {
-
-       
-       module.exports = isBuf;
-       
-       var withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';
-       var withNativeArrayBuffer = typeof ArrayBuffer === 'function';
-       
-       var isView = function (obj) {
-         return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);
-       };
-       
-       /**
-        * Returns true if obj is a buffer or an arraybuffer.
-        *
-        * @api private
-        */
-       
-       function isBuf(obj) {
-         return (withNativeBuffer && Buffer.isBuffer(obj)) ||
-                 (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));
-       }
-
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var eio = __webpack_require__(16);
-       var Socket = __webpack_require__(39);
-       var Emitter = __webpack_require__(11);
-       var parser = __webpack_require__(7);
-       var on = __webpack_require__(41);
-       var bind = __webpack_require__(42);
-       var debug = __webpack_require__(3)('socket.io-client:manager');
-       var indexOf = __webpack_require__(38);
-       var Backoff = __webpack_require__(43);
-       
-       /**
-        * IE6+ hasOwnProperty
-        */
-       
-       var has = Object.prototype.hasOwnProperty;
-       
-       /**
-        * Module exports
-        */
-       
-       module.exports = Manager;
-       
-       /**
-        * `Manager` constructor.
-        *
-        * @param {String} engine instance or engine uri/opts
-        * @param {Object} options
-        * @api public
-        */
-       
-       function Manager (uri, opts) {
-         if (!(this instanceof Manager)) return new Manager(uri, opts);
-         if (uri && ('object' === typeof uri)) {
-           opts = uri;
-           uri = undefined;
-         }
-         opts = opts || {};
-       
-         opts.path = opts.path || '/socket.io';
-         this.nsps = {};
-         this.subs = [];
-         this.opts = opts;
-         this.reconnection(opts.reconnection !== false);
-         this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);
-         this.reconnectionDelay(opts.reconnectionDelay || 1000);
-         this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);
-         this.randomizationFactor(opts.randomizationFactor || 0.5);
-         this.backoff = new Backoff({
-           min: this.reconnectionDelay(),
-           max: this.reconnectionDelayMax(),
-           jitter: this.randomizationFactor()
-         });
-         this.timeout(null == opts.timeout ? 20000 : opts.timeout);
-         this.readyState = 'closed';
-         this.uri = uri;
-         this.connecting = [];
-         this.lastPing = null;
-         this.encoding = false;
-         this.packetBuffer = [];
-         var _parser = opts.parser || parser;
-         this.encoder = new _parser.Encoder();
-         this.decoder = new _parser.Decoder();
-         this.autoConnect = opts.autoConnect !== false;
-         if (this.autoConnect) this.open();
-       }
-       
-       /**
-        * Propagate given event to sockets and emit on `this`
-        *
-        * @api private
-        */
-       
-       Manager.prototype.emitAll = function () {
-         this.emit.apply(this, arguments);
-         for (var nsp in this.nsps) {
-           if (has.call(this.nsps, nsp)) {
-             this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);
-           }
-         }
-       };
-       
-       /**
-        * Update `socket.id` of all sockets
-        *
-        * @api private
-        */
-       
-       Manager.prototype.updateSocketIds = function () {
-         for (var nsp in this.nsps) {
-           if (has.call(this.nsps, nsp)) {
-             this.nsps[nsp].id = this.generateId(nsp);
-           }
-         }
-       };
-       
-       /**
-        * generate `socket.id` for the given `nsp`
-        *
-        * @param {String} nsp
-        * @return {String}
-        * @api private
-        */
-       
-       Manager.prototype.generateId = function (nsp) {
-         return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;
-       };
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Manager.prototype);
-       
-       /**
-        * Sets the `reconnection` config.
-        *
-        * @param {Boolean} true/false if it should automatically reconnect
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.reconnection = function (v) {
-         if (!arguments.length) return this._reconnection;
-         this._reconnection = !!v;
-         return this;
-       };
-       
-       /**
-        * Sets the reconnection attempts config.
-        *
-        * @param {Number} max reconnection attempts before giving up
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.reconnectionAttempts = function (v) {
-         if (!arguments.length) return this._reconnectionAttempts;
-         this._reconnectionAttempts = v;
-         return this;
-       };
-       
-       /**
-        * Sets the delay between reconnections.
-        *
-        * @param {Number} delay
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.reconnectionDelay = function (v) {
-         if (!arguments.length) return this._reconnectionDelay;
-         this._reconnectionDelay = v;
-         this.backoff && this.backoff.setMin(v);
-         return this;
-       };
-       
-       Manager.prototype.randomizationFactor = function (v) {
-         if (!arguments.length) return this._randomizationFactor;
-         this._randomizationFactor = v;
-         this.backoff && this.backoff.setJitter(v);
-         return this;
-       };
-       
-       /**
-        * Sets the maximum delay between reconnections.
-        *
-        * @param {Number} delay
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.reconnectionDelayMax = function (v) {
-         if (!arguments.length) return this._reconnectionDelayMax;
-         this._reconnectionDelayMax = v;
-         this.backoff && this.backoff.setMax(v);
-         return this;
-       };
-       
-       /**
-        * Sets the connection timeout. `false` to disable
-        *
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.timeout = function (v) {
-         if (!arguments.length) return this._timeout;
-         this._timeout = v;
-         return this;
-       };
-       
-       /**
-        * Starts trying to reconnect if reconnection is enabled and we have not
-        * started reconnecting yet
-        *
-        * @api private
-        */
-       
-       Manager.prototype.maybeReconnectOnOpen = function () {
-         // Only try to reconnect if it's the first time we're connecting
-         if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {
-           // keeps reconnection from firing twice for the same reconnection loop
-           this.reconnect();
-         }
-       };
-       
-       /**
-        * Sets the current transport `socket`.
-        *
-        * @param {Function} optional, callback
-        * @return {Manager} self
-        * @api public
-        */
-       
-       Manager.prototype.open =
-       Manager.prototype.connect = function (fn, opts) {
-         debug('readyState %s', this.readyState);
-         if (~this.readyState.indexOf('open')) return this;
-       
-         debug('opening %s', this.uri);
-         this.engine = eio(this.uri, this.opts);
-         var socket = this.engine;
-         var self = this;
-         this.readyState = 'opening';
-         this.skipReconnect = false;
-       
-         // emit `open`
-         var openSub = on(socket, 'open', function () {
-           self.onopen();
-           fn && fn();
-         });
-       
-         // emit `connect_error`
-         var errorSub = on(socket, 'error', function (data) {
-           debug('connect_error');
-           self.cleanup();
-           self.readyState = 'closed';
-           self.emitAll('connect_error', data);
-           if (fn) {
-             var err = new Error('Connection error');
-             err.data = data;
-             fn(err);
-           } else {
-             // Only do this if there is no fn to handle the error
-             self.maybeReconnectOnOpen();
-           }
-         });
-       
-         // emit `connect_timeout`
-         if (false !== this._timeout) {
-           var timeout = this._timeout;
-           debug('connect attempt will timeout after %d', timeout);
-       
-           // set timer
-           var timer = setTimeout(function () {
-             debug('connect attempt timed out after %d', timeout);
-             openSub.destroy();
-             socket.close();
-             socket.emit('error', 'timeout');
-             self.emitAll('connect_timeout', timeout);
-           }, timeout);
-       
-           this.subs.push({
-             destroy: function () {
-               clearTimeout(timer);
-             }
-           });
-         }
-       
-         this.subs.push(openSub);
-         this.subs.push(errorSub);
-       
-         return this;
-       };
-       
-       /**
-        * Called upon transport open.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onopen = function () {
-         debug('open');
-       
-         // clear old subs
-         this.cleanup();
-       
-         // mark as open
-         this.readyState = 'open';
-         this.emit('open');
-       
-         // add new subs
-         var socket = this.engine;
-         this.subs.push(on(socket, 'data', bind(this, 'ondata')));
-         this.subs.push(on(socket, 'ping', bind(this, 'onping')));
-         this.subs.push(on(socket, 'pong', bind(this, 'onpong')));
-         this.subs.push(on(socket, 'error', bind(this, 'onerror')));
-         this.subs.push(on(socket, 'close', bind(this, 'onclose')));
-         this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));
-       };
-       
-       /**
-        * Called upon a ping.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onping = function () {
-         this.lastPing = new Date();
-         this.emitAll('ping');
-       };
-       
-       /**
-        * Called upon a packet.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onpong = function () {
-         this.emitAll('pong', new Date() - this.lastPing);
-       };
-       
-       /**
-        * Called with data.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.ondata = function (data) {
-         this.decoder.add(data);
-       };
-       
-       /**
-        * Called when parser fully decodes a packet.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.ondecoded = function (packet) {
-         this.emit('packet', packet);
-       };
-       
-       /**
-        * Called upon socket error.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onerror = function (err) {
-         debug('error', err);
-         this.emitAll('error', err);
-       };
-       
-       /**
-        * Creates a new socket for the given `nsp`.
-        *
-        * @return {Socket}
-        * @api public
-        */
-       
-       Manager.prototype.socket = function (nsp, opts) {
-         var socket = this.nsps[nsp];
-         if (!socket) {
-           socket = new Socket(this, nsp, opts);
-           this.nsps[nsp] = socket;
-           var self = this;
-           socket.on('connecting', onConnecting);
-           socket.on('connect', function () {
-             socket.id = self.generateId(nsp);
-           });
-       
-           if (this.autoConnect) {
-             // manually call here since connecting event is fired before listening
-             onConnecting();
-           }
-         }
-       
-         function onConnecting () {
-           if (!~indexOf(self.connecting, socket)) {
-             self.connecting.push(socket);
-           }
-         }
-       
-         return socket;
-       };
-       
-       /**
-        * Called upon a socket close.
-        *
-        * @param {Socket} socket
-        */
-       
-       Manager.prototype.destroy = function (socket) {
-         var index = indexOf(this.connecting, socket);
-         if (~index) this.connecting.splice(index, 1);
-         if (this.connecting.length) return;
-       
-         this.close();
-       };
-       
-       /**
-        * Writes a packet.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Manager.prototype.packet = function (packet) {
-         debug('writing packet %j', packet);
-         var self = this;
-         if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;
-       
-         if (!self.encoding) {
-           // encode, then write to engine with result
-           self.encoding = true;
-           this.encoder.encode(packet, function (encodedPackets) {
-             for (var i = 0; i < encodedPackets.length; i++) {
-               self.engine.write(encodedPackets[i], packet.options);
-             }
-             self.encoding = false;
-             self.processPacketQueue();
-           });
-         } else { // add packet to the queue
-           self.packetBuffer.push(packet);
-         }
-       };
-       
-       /**
-        * If packet buffer is non-empty, begins encoding the
-        * next packet in line.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.processPacketQueue = function () {
-         if (this.packetBuffer.length > 0 && !this.encoding) {
-           var pack = this.packetBuffer.shift();
-           this.packet(pack);
-         }
-       };
-       
-       /**
-        * Clean up transport subscriptions and packet buffer.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.cleanup = function () {
-         debug('cleanup');
-       
-         var subsLength = this.subs.length;
-         for (var i = 0; i < subsLength; i++) {
-           var sub = this.subs.shift();
-           sub.destroy();
-         }
-       
-         this.packetBuffer = [];
-         this.encoding = false;
-         this.lastPing = null;
-       
-         this.decoder.destroy();
-       };
-       
-       /**
-        * Close the current socket.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.close =
-       Manager.prototype.disconnect = function () {
-         debug('disconnect');
-         this.skipReconnect = true;
-         this.reconnecting = false;
-         if ('opening' === this.readyState) {
-           // `onclose` will not fire because
-           // an open event never happened
-           this.cleanup();
-         }
-         this.backoff.reset();
-         this.readyState = 'closed';
-         if (this.engine) this.engine.close();
-       };
-       
-       /**
-        * Called upon engine close.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onclose = function (reason) {
-         debug('onclose');
-       
-         this.cleanup();
-         this.backoff.reset();
-         this.readyState = 'closed';
-         this.emit('close', reason);
-       
-         if (this._reconnection && !this.skipReconnect) {
-           this.reconnect();
-         }
-       };
-       
-       /**
-        * Attempt a reconnection.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.reconnect = function () {
-         if (this.reconnecting || this.skipReconnect) return this;
-       
-         var self = this;
-       
-         if (this.backoff.attempts >= this._reconnectionAttempts) {
-           debug('reconnect failed');
-           this.backoff.reset();
-           this.emitAll('reconnect_failed');
-           this.reconnecting = false;
-         } else {
-           var delay = this.backoff.duration();
-           debug('will wait %dms before reconnect attempt', delay);
-       
-           this.reconnecting = true;
-           var timer = setTimeout(function () {
-             if (self.skipReconnect) return;
-       
-             debug('attempting reconnect');
-             self.emitAll('reconnect_attempt', self.backoff.attempts);
-             self.emitAll('reconnecting', self.backoff.attempts);
-       
-             // check again for the case socket closed in above events
-             if (self.skipReconnect) return;
-       
-             self.open(function (err) {
-               if (err) {
-                 debug('reconnect attempt error');
-                 self.reconnecting = false;
-                 self.reconnect();
-                 self.emitAll('reconnect_error', err.data);
-               } else {
-                 debug('reconnect success');
-                 self.onreconnect();
-               }
-             });
-           }, delay);
-       
-           this.subs.push({
-             destroy: function () {
-               clearTimeout(timer);
-             }
-           });
-         }
-       };
-       
-       /**
-        * Called upon successful reconnect.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onreconnect = function () {
-         var attempt = this.backoff.attempts;
-         this.reconnecting = false;
-         this.backoff.reset();
-         this.updateSocketIds();
-         this.emitAll('reconnect', attempt);
-       };
-
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       module.exports = __webpack_require__(17);
-       
-       /**
-        * Exports parser
-        *
-        * @api public
-        *
-        */
-       module.exports.parser = __webpack_require__(24);
-
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var transports = __webpack_require__(18);
-       var Emitter = __webpack_require__(11);
-       var debug = __webpack_require__(3)('engine.io-client:socket');
-       var index = __webpack_require__(38);
-       var parser = __webpack_require__(24);
-       var parseuri = __webpack_require__(2);
-       var parseqs = __webpack_require__(32);
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = Socket;
-       
-       /**
-        * Socket constructor.
-        *
-        * @param {String|Object} uri or options
-        * @param {Object} options
-        * @api public
-        */
-       
-       function Socket (uri, opts) {
-         if (!(this instanceof Socket)) return new Socket(uri, opts);
-       
-         opts = opts || {};
-       
-         if (uri && 'object' === typeof uri) {
-           opts = uri;
-           uri = null;
-         }
-       
-         if (uri) {
-           uri = parseuri(uri);
-           opts.hostname = uri.host;
-           opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';
-           opts.port = uri.port;
-           if (uri.query) opts.query = uri.query;
-         } else if (opts.host) {
-           opts.hostname = parseuri(opts.host).host;
-         }
-       
-         this.secure = null != opts.secure ? opts.secure
-           : (typeof location !== 'undefined' && 'https:' === location.protocol);
-       
-         if (opts.hostname && !opts.port) {
-           // if no port is specified manually, use the protocol default
-           opts.port = this.secure ? '443' : '80';
-         }
-       
-         this.agent = opts.agent || false;
-         this.hostname = opts.hostname ||
-           (typeof location !== 'undefined' ? location.hostname : 'localhost');
-         this.port = opts.port || (typeof location !== 'undefined' && location.port
-             ? location.port
-             : (this.secure ? 443 : 80));
-         this.query = opts.query || {};
-         if ('string' === typeof this.query) this.query = parseqs.decode(this.query);
-         this.upgrade = false !== opts.upgrade;
-         this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
-         this.forceJSONP = !!opts.forceJSONP;
-         this.jsonp = false !== opts.jsonp;
-         this.forceBase64 = !!opts.forceBase64;
-         this.enablesXDR = !!opts.enablesXDR;
-         this.withCredentials = false !== opts.withCredentials;
-         this.timestampParam = opts.timestampParam || 't';
-         this.timestampRequests = opts.timestampRequests;
-         this.transports = opts.transports || ['polling', 'websocket'];
-         this.transportOptions = opts.transportOptions || {};
-         this.readyState = '';
-         this.writeBuffer = [];
-         this.prevBufferLen = 0;
-         this.policyPort = opts.policyPort || 843;
-         this.rememberUpgrade = opts.rememberUpgrade || false;
-         this.binaryType = null;
-         this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
-         this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;
-       
-         if (true === this.perMessageDeflate) this.perMessageDeflate = {};
-         if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {
-           this.perMessageDeflate.threshold = 1024;
-         }
-       
-         // SSL options for Node.js client
-         this.pfx = opts.pfx || null;
-         this.key = opts.key || null;
-         this.passphrase = opts.passphrase || null;
-         this.cert = opts.cert || null;
-         this.ca = opts.ca || null;
-         this.ciphers = opts.ciphers || null;
-         this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;
-         this.forceNode = !!opts.forceNode;
-       
-         // detect ReactNative environment
-         this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');
-       
-         // other options for Node.js or ReactNative client
-         if (typeof self === 'undefined' || this.isReactNative) {
-           if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {
-             this.extraHeaders = opts.extraHeaders;
-           }
-       
-           if (opts.localAddress) {
-             this.localAddress = opts.localAddress;
-           }
-         }
-       
-         // set on handshake
-         this.id = null;
-         this.upgrades = null;
-         this.pingInterval = null;
-         this.pingTimeout = null;
-       
-         // set on heartbeat
-         this.pingIntervalTimer = null;
-         this.pingTimeoutTimer = null;
-       
-         this.open();
-       }
-       
-       Socket.priorWebsocketSuccess = false;
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Socket.prototype);
-       
-       /**
-        * Protocol version.
-        *
-        * @api public
-        */
-       
-       Socket.protocol = parser.protocol; // this is an int
-       
-       /**
-        * Expose deps for legacy compatibility
-        * and standalone browser access.
-        */
-       
-       Socket.Socket = Socket;
-       Socket.Transport = __webpack_require__(23);
-       Socket.transports = __webpack_require__(18);
-       Socket.parser = __webpack_require__(24);
-       
-       /**
-        * Creates transport of the given type.
-        *
-        * @param {String} transport name
-        * @return {Transport}
-        * @api private
-        */
-       
-       Socket.prototype.createTransport = function (name) {
-         debug('creating transport "%s"', name);
-         var query = clone(this.query);
-       
-         // append engine.io protocol identifier
-         query.EIO = parser.protocol;
-       
-         // transport name
-         query.transport = name;
-       
-         // per-transport options
-         var options = this.transportOptions[name] || {};
-       
-         // session id if we already have one
-         if (this.id) query.sid = this.id;
-       
-         var transport = new transports[name]({
-           query: query,
-           socket: this,
-           agent: options.agent || this.agent,
-           hostname: options.hostname || this.hostname,
-           port: options.port || this.port,
-           secure: options.secure || this.secure,
-           path: options.path || this.path,
-           forceJSONP: options.forceJSONP || this.forceJSONP,
-           jsonp: options.jsonp || this.jsonp,
-           forceBase64: options.forceBase64 || this.forceBase64,
-           enablesXDR: options.enablesXDR || this.enablesXDR,
-           withCredentials: options.withCredentials || this.withCredentials,
-           timestampRequests: options.timestampRequests || this.timestampRequests,
-           timestampParam: options.timestampParam || this.timestampParam,
-           policyPort: options.policyPort || this.policyPort,
-           pfx: options.pfx || this.pfx,
-           key: options.key || this.key,
-           passphrase: options.passphrase || this.passphrase,
-           cert: options.cert || this.cert,
-           ca: options.ca || this.ca,
-           ciphers: options.ciphers || this.ciphers,
-           rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,
-           perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,
-           extraHeaders: options.extraHeaders || this.extraHeaders,
-           forceNode: options.forceNode || this.forceNode,
-           localAddress: options.localAddress || this.localAddress,
-           requestTimeout: options.requestTimeout || this.requestTimeout,
-           protocols: options.protocols || void (0),
-           isReactNative: this.isReactNative
-         });
-       
-         return transport;
-       };
-       
-       function clone (obj) {
-         var o = {};
-         for (var i in obj) {
-           if (obj.hasOwnProperty(i)) {
-             o[i] = obj[i];
-           }
-         }
-         return o;
-       }
-       
-       /**
-        * Initializes transport to use and starts probe.
-        *
-        * @api private
-        */
-       Socket.prototype.open = function () {
-         var transport;
-         if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {
-           transport = 'websocket';
-         } else if (0 === this.transports.length) {
-           // Emit error on next tick so it can be listened to
-           var self = this;
-           setTimeout(function () {
-             self.emit('error', 'No transports available');
-           }, 0);
-           return;
-         } else {
-           transport = this.transports[0];
-         }
-         this.readyState = 'opening';
-       
-         // Retry with the next transport if the transport is disabled (jsonp: false)
-         try {
-           transport = this.createTransport(transport);
-         } catch (e) {
-           this.transports.shift();
-           this.open();
-           return;
-         }
-       
-         transport.open();
-         this.setTransport(transport);
-       };
-       
-       /**
-        * Sets the current transport. Disables the existing one (if any).
-        *
-        * @api private
-        */
-       
-       Socket.prototype.setTransport = function (transport) {
-         debug('setting transport %s', transport.name);
-         var self = this;
-       
-         if (this.transport) {
-           debug('clearing existing transport %s', this.transport.name);
-           this.transport.removeAllListeners();
-         }
-       
-         // set up transport
-         this.transport = transport;
-       
-         // set up transport listeners
-         transport
-         .on('drain', function () {
-           self.onDrain();
-         })
-         .on('packet', function (packet) {
-           self.onPacket(packet);
-         })
-         .on('error', function (e) {
-           self.onError(e);
-         })
-         .on('close', function () {
-           self.onClose('transport close');
-         });
-       };
-       
-       /**
-        * Probes a transport.
-        *
-        * @param {String} transport name
-        * @api private
-        */
-       
-       Socket.prototype.probe = function (name) {
-         debug('probing transport "%s"', name);
-         var transport = this.createTransport(name, { probe: 1 });
-         var failed = false;
-         var self = this;
-       
-         Socket.priorWebsocketSuccess = false;
-       
-         function onTransportOpen () {
-           if (self.onlyBinaryUpgrades) {
-             var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
-             failed = failed || upgradeLosesBinary;
-           }
-           if (failed) return;
-       
-           debug('probe transport "%s" opened', name);
-           transport.send([{ type: 'ping', data: 'probe' }]);
-           transport.once('packet', function (msg) {
-             if (failed) return;
-             if ('pong' === msg.type && 'probe' === msg.data) {
-               debug('probe transport "%s" pong', name);
-               self.upgrading = true;
-               self.emit('upgrading', transport);
-               if (!transport) return;
-               Socket.priorWebsocketSuccess = 'websocket' === transport.name;
-       
-               debug('pausing current transport "%s"', self.transport.name);
-               self.transport.pause(function () {
-                 if (failed) return;
-                 if ('closed' === self.readyState) return;
-                 debug('changing transport and sending upgrade packet');
-       
-                 cleanup();
-       
-                 self.setTransport(transport);
-                 transport.send([{ type: 'upgrade' }]);
-                 self.emit('upgrade', transport);
-                 transport = null;
-                 self.upgrading = false;
-                 self.flush();
-               });
-             } else {
-               debug('probe transport "%s" failed', name);
-               var err = new Error('probe error');
-               err.transport = transport.name;
-               self.emit('upgradeError', err);
-             }
-           });
-         }
-       
-         function freezeTransport () {
-           if (failed) return;
-       
-           // Any callback called by transport should be ignored since now
-           failed = true;
-       
-           cleanup();
-       
-           transport.close();
-           transport = null;
-         }
-       
-         // Handle any error that happens while probing
-         function onerror (err) {
-           var error = new Error('probe error: ' + err);
-           error.transport = transport.name;
-       
-           freezeTransport();
-       
-           debug('probe transport "%s" failed because of error: %s', name, err);
-       
-           self.emit('upgradeError', error);
-         }
-       
-         function onTransportClose () {
-           onerror('transport closed');
-         }
-       
-         // When the socket is closed while we're probing
-         function onclose () {
-           onerror('socket closed');
-         }
-       
-         // When the socket is upgraded while we're probing
-         function onupgrade (to) {
-           if (transport && to.name !== transport.name) {
-             debug('"%s" works - aborting "%s"', to.name, transport.name);
-             freezeTransport();
-           }
-         }
-       
-         // Remove all listeners on the transport and on self
-         function cleanup () {
-           transport.removeListener('open', onTransportOpen);
-           transport.removeListener('error', onerror);
-           transport.removeListener('close', onTransportClose);
-           self.removeListener('close', onclose);
-           self.removeListener('upgrading', onupgrade);
-         }
-       
-         transport.once('open', onTransportOpen);
-         transport.once('error', onerror);
-         transport.once('close', onTransportClose);
-       
-         this.once('close', onclose);
-         this.once('upgrading', onupgrade);
-       
-         transport.open();
-       };
-       
-       /**
-        * Called when connection is deemed open.
-        *
-        * @api public
-        */
-       
-       Socket.prototype.onOpen = function () {
-         debug('socket open');
-         this.readyState = 'open';
-         Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;
-         this.emit('open');
-         this.flush();
-       
-         // we check for `readyState` in case an `open`
-         // listener already closed the socket
-         if ('open' === this.readyState && this.upgrade && this.transport.pause) {
-           debug('starting upgrade probes');
-           for (var i = 0, l = this.upgrades.length; i < l; i++) {
-             this.probe(this.upgrades[i]);
-           }
-         }
-       };
-       
-       /**
-        * Handles a packet.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onPacket = function (packet) {
-         if ('opening' === this.readyState || 'open' === this.readyState ||
-             'closing' === this.readyState) {
-           debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
-       
-           this.emit('packet', packet);
-       
-           // Socket is live - any packet counts
-           this.emit('heartbeat');
-       
-           switch (packet.type) {
-             case 'open':
-               this.onHandshake(JSON.parse(packet.data));
-               break;
-       
-             case 'pong':
-               this.setPing();
-               this.emit('pong');
-               break;
-       
-             case 'error':
-               var err = new Error('server error');
-               err.code = packet.data;
-               this.onError(err);
-               break;
-       
-             case 'message':
-               this.emit('data', packet.data);
-               this.emit('message', packet.data);
-               break;
-           }
-         } else {
-           debug('packet received with socket readyState "%s"', this.readyState);
-         }
-       };
-       
-       /**
-        * Called upon handshake completion.
-        *
-        * @param {Object} handshake obj
-        * @api private
-        */
-       
-       Socket.prototype.onHandshake = function (data) {
-         this.emit('handshake', data);
-         this.id = data.sid;
-         this.transport.query.sid = data.sid;
-         this.upgrades = this.filterUpgrades(data.upgrades);
-         this.pingInterval = data.pingInterval;
-         this.pingTimeout = data.pingTimeout;
-         this.onOpen();
-         // In case open handler closes socket
-         if ('closed' === this.readyState) return;
-         this.setPing();
-       
-         // Prolong liveness of socket on heartbeat
-         this.removeListener('heartbeat', this.onHeartbeat);
-         this.on('heartbeat', this.onHeartbeat);
-       };
-       
-       /**
-        * Resets ping timeout.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onHeartbeat = function (timeout) {
-         clearTimeout(this.pingTimeoutTimer);
-         var self = this;
-         self.pingTimeoutTimer = setTimeout(function () {
-           if ('closed' === self.readyState) return;
-           self.onClose('ping timeout');
-         }, timeout || (self.pingInterval + self.pingTimeout));
-       };
-       
-       /**
-        * Pings server every `this.pingInterval` and expects response
-        * within `this.pingTimeout` or closes connection.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.setPing = function () {
-         var self = this;
-         clearTimeout(self.pingIntervalTimer);
-         self.pingIntervalTimer = setTimeout(function () {
-           debug('writing ping packet - expecting pong within %sms', self.pingTimeout);
-           self.ping();
-           self.onHeartbeat(self.pingTimeout);
-         }, self.pingInterval);
-       };
-       
-       /**
-       * Sends a ping packet.
-       *
-       * @api private
-       */
-       
-       Socket.prototype.ping = function () {
-         var self = this;
-         this.sendPacket('ping', function () {
-           self.emit('ping');
-         });
-       };
-       
-       /**
-        * Called on `drain` event
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onDrain = function () {
-         this.writeBuffer.splice(0, this.prevBufferLen);
-       
-         // setting prevBufferLen = 0 is very important
-         // for example, when upgrading, upgrade packet is sent over,
-         // and a nonzero prevBufferLen could cause problems on `drain`
-         this.prevBufferLen = 0;
-       
-         if (0 === this.writeBuffer.length) {
-           this.emit('drain');
-         } else {
-           this.flush();
-         }
-       };
-       
-       /**
-        * Flush write buffers.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.flush = function () {
-         if ('closed' !== this.readyState && this.transport.writable &&
-           !this.upgrading && this.writeBuffer.length) {
-           debug('flushing %d packets in socket', this.writeBuffer.length);
-           this.transport.send(this.writeBuffer);
-           // keep track of current length of writeBuffer
-           // splice writeBuffer and callbackBuffer on `drain`
-           this.prevBufferLen = this.writeBuffer.length;
-           this.emit('flush');
-         }
-       };
-       
-       /**
-        * Sends a message.
-        *
-        * @param {String} message.
-        * @param {Function} callback function.
-        * @param {Object} options.
-        * @return {Socket} for chaining.
-        * @api public
-        */
-       
-       Socket.prototype.write =
-       Socket.prototype.send = function (msg, options, fn) {
-         this.sendPacket('message', msg, options, fn);
-         return this;
-       };
-       
-       /**
-        * Sends a packet.
-        *
-        * @param {String} packet type.
-        * @param {String} data.
-        * @param {Object} options.
-        * @param {Function} callback function.
-        * @api private
-        */
-       
-       Socket.prototype.sendPacket = function (type, data, options, fn) {
-         if ('function' === typeof data) {
-           fn = data;
-           data = undefined;
-         }
-       
-         if ('function' === typeof options) {
-           fn = options;
-           options = null;
-         }
-       
-         if ('closing' === this.readyState || 'closed' === this.readyState) {
-           return;
-         }
-       
-         options = options || {};
-         options.compress = false !== options.compress;
-       
-         var packet = {
-           type: type,
-           data: data,
-           options: options
-         };
-         this.emit('packetCreate', packet);
-         this.writeBuffer.push(packet);
-         if (fn) this.once('flush', fn);
-         this.flush();
-       };
-       
-       /**
-        * Closes the connection.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.close = function () {
-         if ('opening' === this.readyState || 'open' === this.readyState) {
-           this.readyState = 'closing';
-       
-           var self = this;
-       
-           if (this.writeBuffer.length) {
-             this.once('drain', function () {
-               if (this.upgrading) {
-                 waitForUpgrade();
-               } else {
-                 close();
-               }
-             });
-           } else if (this.upgrading) {
-             waitForUpgrade();
-           } else {
-             close();
-           }
-         }
-       
-         function close () {
-           self.onClose('forced close');
-           debug('socket closing - telling transport to close');
-           self.transport.close();
-         }
-       
-         function cleanupAndClose () {
-           self.removeListener('upgrade', cleanupAndClose);
-           self.removeListener('upgradeError', cleanupAndClose);
-           close();
-         }
-       
-         function waitForUpgrade () {
-           // wait for upgrade to finish since we can't send packets while pausing a transport
-           self.once('upgrade', cleanupAndClose);
-           self.once('upgradeError', cleanupAndClose);
-         }
-       
-         return this;
-       };
-       
-       /**
-        * Called upon transport error
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onError = function (err) {
-         debug('socket error %j', err);
-         Socket.priorWebsocketSuccess = false;
-         this.emit('error', err);
-         this.onClose('transport error', err);
-       };
-       
-       /**
-        * Called upon transport close.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onClose = function (reason, desc) {
-         if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {
-           debug('socket close with reason: "%s"', reason);
-           var self = this;
-       
-           // clear timers
-           clearTimeout(this.pingIntervalTimer);
-           clearTimeout(this.pingTimeoutTimer);
-       
-           // stop event from firing again for transport
-           this.transport.removeAllListeners('close');
-       
-           // ensure transport won't stay open
-           this.transport.close();
-       
-           // ignore further transport communication
-           this.transport.removeAllListeners();
-       
-           // set ready state
-           this.readyState = 'closed';
-       
-           // clear session id
-           this.id = null;
-       
-           // emit close event
-           this.emit('close', reason, desc);
-       
-           // clean buffers after, so users can still
-           // grab the buffers on `close` event
-           self.writeBuffer = [];
-           self.prevBufferLen = 0;
-         }
-       };
-       
-       /**
-        * Filters upgrades, returning only those matching client transports.
-        *
-        * @param {Array} server upgrades
-        * @api private
-        *
-        */
-       
-       Socket.prototype.filterUpgrades = function (upgrades) {
-         var filteredUpgrades = [];
-         for (var i = 0, j = upgrades.length; i < j; i++) {
-           if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
-         }
-         return filteredUpgrades;
-       };
-
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies
-        */
-       
-       var XMLHttpRequest = __webpack_require__(19);
-       var XHR = __webpack_require__(21);
-       var JSONP = __webpack_require__(35);
-       var websocket = __webpack_require__(36);
-       
-       /**
-        * Export transports.
-        */
-       
-       exports.polling = polling;
-       exports.websocket = websocket;
-       
-       /**
-        * Polling transport polymorphic constructor.
-        * Decides on xhr vs jsonp based on feature detection.
-        *
-        * @api private
-        */
-       
-       function polling (opts) {
-         var xhr;
-         var xd = false;
-         var xs = false;
-         var jsonp = false !== opts.jsonp;
-       
-         if (typeof location !== 'undefined') {
-           var isSSL = 'https:' === location.protocol;
-           var port = location.port;
-       
-           // some user agents have empty `location.port`
-           if (!port) {
-             port = isSSL ? 443 : 80;
-           }
-       
-           xd = opts.hostname !== location.hostname || port !== opts.port;
-           xs = opts.secure !== isSSL;
-         }
-       
-         opts.xdomain = xd;
-         opts.xscheme = xs;
-         xhr = new XMLHttpRequest(opts);
-       
-         if ('open' in xhr && !opts.forceJSONP) {
-           return new XHR(opts);
-         } else {
-           if (!jsonp) throw new Error('JSONP disabled');
-           return new JSONP(opts);
-         }
-       }
-
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       // browser shim for xmlhttprequest module
-       
-       var hasCORS = __webpack_require__(20);
-       
-       module.exports = function (opts) {
-         var xdomain = opts.xdomain;
-       
-         // scheme must be same when usign XDomainRequest
-         // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
-         var xscheme = opts.xscheme;
-       
-         // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.
-         // https://github.com/Automattic/engine.io-client/pull/217
-         var enablesXDR = opts.enablesXDR;
-       
-         // XMLHttpRequest can be disabled on IE
-         try {
-           if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {
-             return new XMLHttpRequest();
-           }
-         } catch (e) { }
-       
-         // Use XDomainRequest for IE8 if enablesXDR is true
-         // because loading bar keeps flashing when using jsonp-polling
-         // https://github.com/yujiosaka/socke.io-ie8-loading-example
-         try {
-           if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {
-             return new XDomainRequest();
-           }
-         } catch (e) { }
-       
-         if (!xdomain) {
-           try {
-             return new self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
-           } catch (e) { }
-         }
-       };
-
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports) {
-
-       
-       /**
-        * Module exports.
-        *
-        * Logic borrowed from Modernizr:
-        *
-        *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js
-        */
-       
-       try {
-         module.exports = typeof XMLHttpRequest !== 'undefined' &&
-           'withCredentials' in new XMLHttpRequest();
-       } catch (err) {
-         // if XMLHttp support is disabled in IE then it will throw
-         // when trying to create
-         module.exports = false;
-       }
-
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /* global attachEvent */
-       
-       /**
-        * Module requirements.
-        */
-       
-       var XMLHttpRequest = __webpack_require__(19);
-       var Polling = __webpack_require__(22);
-       var Emitter = __webpack_require__(11);
-       var inherit = __webpack_require__(33);
-       var debug = __webpack_require__(3)('engine.io-client:polling-xhr');
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = XHR;
-       module.exports.Request = Request;
-       
-       /**
-        * Empty function
-        */
-       
-       function empty () {}
-       
-       /**
-        * XHR Polling constructor.
-        *
-        * @param {Object} opts
-        * @api public
-        */
-       
-       function XHR (opts) {
-         Polling.call(this, opts);
-         this.requestTimeout = opts.requestTimeout;
-         this.extraHeaders = opts.extraHeaders;
-       
-         if (typeof location !== 'undefined') {
-           var isSSL = 'https:' === location.protocol;
-           var port = location.port;
-       
-           // some user agents have empty `location.port`
-           if (!port) {
-             port = isSSL ? 443 : 80;
-           }
-       
-           this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||
-             port !== opts.port;
-           this.xs = opts.secure !== isSSL;
-         }
-       }
-       
-       /**
-        * Inherits from Polling.
-        */
-       
-       inherit(XHR, Polling);
-       
-       /**
-        * XHR supports binary
-        */
-       
-       XHR.prototype.supportsBinary = true;
-       
-       /**
-        * Creates a request.
-        *
-        * @param {String} method
-        * @api private
-        */
-       
-       XHR.prototype.request = function (opts) {
-         opts = opts || {};
-         opts.uri = this.uri();
-         opts.xd = this.xd;
-         opts.xs = this.xs;
-         opts.agent = this.agent || false;
-         opts.supportsBinary = this.supportsBinary;
-         opts.enablesXDR = this.enablesXDR;
-         opts.withCredentials = this.withCredentials;
-       
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
-         opts.requestTimeout = this.requestTimeout;
-       
-         // other options for Node.js client
-         opts.extraHeaders = this.extraHeaders;
-       
-         return new Request(opts);
-       };
-       
-       /**
-        * Sends data.
-        *
-        * @param {String} data to send.
-        * @param {Function} called upon flush.
-        * @api private
-        */
-       
-       XHR.prototype.doWrite = function (data, fn) {
-         var isBinary = typeof data !== 'string' && data !== undefined;
-         var req = this.request({ method: 'POST', data: data, isBinary: isBinary });
-         var self = this;
-         req.on('success', fn);
-         req.on('error', function (err) {
-           self.onError('xhr post error', err);
-         });
-         this.sendXhr = req;
-       };
-       
-       /**
-        * Starts a poll cycle.
-        *
-        * @api private
-        */
-       
-       XHR.prototype.doPoll = function () {
-         debug('xhr poll');
-         var req = this.request();
-         var self = this;
-         req.on('data', function (data) {
-           self.onData(data);
-         });
-         req.on('error', function (err) {
-           self.onError('xhr poll error', err);
-         });
-         this.pollXhr = req;
-       };
-       
-       /**
-        * Request constructor
-        *
-        * @param {Object} options
-        * @api public
-        */
-       
-       function Request (opts) {
-         this.method = opts.method || 'GET';
-         this.uri = opts.uri;
-         this.xd = !!opts.xd;
-         this.xs = !!opts.xs;
-         this.async = false !== opts.async;
-         this.data = undefined !== opts.data ? opts.data : null;
-         this.agent = opts.agent;
-         this.isBinary = opts.isBinary;
-         this.supportsBinary = opts.supportsBinary;
-         this.enablesXDR = opts.enablesXDR;
-         this.withCredentials = opts.withCredentials;
-         this.requestTimeout = opts.requestTimeout;
-       
-         // SSL options for Node.js client
-         this.pfx = opts.pfx;
-         this.key = opts.key;
-         this.passphrase = opts.passphrase;
-         this.cert = opts.cert;
-         this.ca = opts.ca;
-         this.ciphers = opts.ciphers;
-         this.rejectUnauthorized = opts.rejectUnauthorized;
-       
-         // other options for Node.js client
-         this.extraHeaders = opts.extraHeaders;
-       
-         this.create();
-       }
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Request.prototype);
-       
-       /**
-        * Creates the XHR object and sends the request.
-        *
-        * @api private
-        */
-       
-       Request.prototype.create = function () {
-         var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };
-       
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
-       
-         var xhr = this.xhr = new XMLHttpRequest(opts);
-         var self = this;
-       
-         try {
-           debug('xhr open %s: %s', this.method, this.uri);
-           xhr.open(this.method, this.uri, this.async);
-           try {
-             if (this.extraHeaders) {
-               xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);
-               for (var i in this.extraHeaders) {
-                 if (this.extraHeaders.hasOwnProperty(i)) {
-                   xhr.setRequestHeader(i, this.extraHeaders[i]);
-                 }
-               }
-             }
-           } catch (e) {}
-       
-           if ('POST' === this.method) {
-             try {
-               if (this.isBinary) {
-                 xhr.setRequestHeader('Content-type', 'application/octet-stream');
-               } else {
-                 xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
-               }
-             } catch (e) {}
-           }
-       
-           try {
-             xhr.setRequestHeader('Accept', '*/*');
-           } catch (e) {}
-       
-           // ie6 check
-           if ('withCredentials' in xhr) {
-             xhr.withCredentials = this.withCredentials;
-           }
-       
-           if (this.requestTimeout) {
-             xhr.timeout = this.requestTimeout;
-           }
-       
-           if (this.hasXDR()) {
-             xhr.onload = function () {
-               self.onLoad();
-             };
-             xhr.onerror = function () {
-               self.onError(xhr.responseText);
-             };
-           } else {
-             xhr.onreadystatechange = function () {
-               if (xhr.readyState === 2) {
-                 try {
-                   var contentType = xhr.getResponseHeader('Content-Type');
-                   if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {
-                     xhr.responseType = 'arraybuffer';
-                   }
-                 } catch (e) {}
-               }
-               if (4 !== xhr.readyState) return;
-               if (200 === xhr.status || 1223 === xhr.status) {
-                 self.onLoad();
-               } else {
-                 // make sure the `error` event handler that's user-set
-                 // does not throw in the same tick and gets caught here
-                 setTimeout(function () {
-                   self.onError(typeof xhr.status === 'number' ? xhr.status : 0);
-                 }, 0);
-               }
-             };
-           }
-       
-           debug('xhr data %s', this.data);
-           xhr.send(this.data);
-         } catch (e) {
-           // Need to defer since .create() is called directly fhrom the constructor
-           // and thus the 'error' event can only be only bound *after* this exception
-           // occurs.  Therefore, also, we cannot throw here at all.
-           setTimeout(function () {
-             self.onError(e);
-           }, 0);
-           return;
-         }
-       
-         if (typeof document !== 'undefined') {
-           this.index = Request.requestsCount++;
-           Request.requests[this.index] = this;
-         }
-       };
-       
-       /**
-        * Called upon successful response.
-        *
-        * @api private
-        */
-       
-       Request.prototype.onSuccess = function () {
-         this.emit('success');
-         this.cleanup();
-       };
-       
-       /**
-        * Called if we have data.
-        *
-        * @api private
-        */
-       
-       Request.prototype.onData = function (data) {
-         this.emit('data', data);
-         this.onSuccess();
-       };
-       
-       /**
-        * Called upon error.
-        *
-        * @api private
-        */
-       
-       Request.prototype.onError = function (err) {
-         this.emit('error', err);
-         this.cleanup(true);
-       };
-       
-       /**
-        * Cleans up house.
-        *
-        * @api private
-        */
-       
-       Request.prototype.cleanup = function (fromError) {
-         if ('undefined' === typeof this.xhr || null === this.xhr) {
-           return;
-         }
-         // xmlhttprequest
-         if (this.hasXDR()) {
-           this.xhr.onload = this.xhr.onerror = empty;
-         } else {
-           this.xhr.onreadystatechange = empty;
-         }
-       
-         if (fromError) {
-           try {
-             this.xhr.abort();
-           } catch (e) {}
-         }
-       
-         if (typeof document !== 'undefined') {
-           delete Request.requests[this.index];
-         }
-       
-         this.xhr = null;
-       };
-       
-       /**
-        * Called upon load.
-        *
-        * @api private
-        */
-       
-       Request.prototype.onLoad = function () {
-         var data;
-         try {
-           var contentType;
-           try {
-             contentType = this.xhr.getResponseHeader('Content-Type');
-           } catch (e) {}
-           if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {
-             data = this.xhr.response || this.xhr.responseText;
-           } else {
-             data = this.xhr.responseText;
-           }
-         } catch (e) {
-           this.onError(e);
-         }
-         if (null != data) {
-           this.onData(data);
-         }
-       };
-       
-       /**
-        * Check if it has XDomainRequest.
-        *
-        * @api private
-        */
-       
-       Request.prototype.hasXDR = function () {
-         return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;
-       };
-       
-       /**
-        * Aborts the request.
-        *
-        * @api public
-        */
-       
-       Request.prototype.abort = function () {
-         this.cleanup();
-       };
-       
-       /**
-        * Aborts pending requests when unloading the window. This is needed to prevent
-        * memory leaks (e.g. when using IE) and to ensure that no spurious error is
-        * emitted.
-        */
-       
-       Request.requestsCount = 0;
-       Request.requests = {};
-       
-       if (typeof document !== 'undefined') {
-         if (typeof attachEvent === 'function') {
-           attachEvent('onunload', unloadHandler);
-         } else if (typeof addEventListener === 'function') {
-           var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';
-           addEventListener(terminationEvent, unloadHandler, false);
-         }
-       }
-       
-       function unloadHandler () {
-         for (var i in Request.requests) {
-           if (Request.requests.hasOwnProperty(i)) {
-             Request.requests[i].abort();
-           }
-         }
-       }
-
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var Transport = __webpack_require__(23);
-       var parseqs = __webpack_require__(32);
-       var parser = __webpack_require__(24);
-       var inherit = __webpack_require__(33);
-       var yeast = __webpack_require__(34);
-       var debug = __webpack_require__(3)('engine.io-client:polling');
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = Polling;
-       
-       /**
-        * Is XHR2 supported?
-        */
-       
-       var hasXHR2 = (function () {
-         var XMLHttpRequest = __webpack_require__(19);
-         var xhr = new XMLHttpRequest({ xdomain: false });
-         return null != xhr.responseType;
-       })();
-       
-       /**
-        * Polling interface.
-        *
-        * @param {Object} opts
-        * @api private
-        */
-       
-       function Polling (opts) {
-         var forceBase64 = (opts && opts.forceBase64);
-         if (!hasXHR2 || forceBase64) {
-           this.supportsBinary = false;
-         }
-         Transport.call(this, opts);
-       }
-       
-       /**
-        * Inherits from Transport.
-        */
-       
-       inherit(Polling, Transport);
-       
-       /**
-        * Transport name.
-        */
-       
-       Polling.prototype.name = 'polling';
-       
-       /**
-        * Opens the socket (triggers polling). We write a PING message to determine
-        * when the transport is open.
-        *
-        * @api private
-        */
-       
-       Polling.prototype.doOpen = function () {
-         this.poll();
-       };
-       
-       /**
-        * Pauses polling.
-        *
-        * @param {Function} callback upon buffers are flushed and transport is paused
-        * @api private
-        */
-       
-       Polling.prototype.pause = function (onPause) {
-         var self = this;
-       
-         this.readyState = 'pausing';
-       
-         function pause () {
-           debug('paused');
-           self.readyState = 'paused';
-           onPause();
-         }
-       
-         if (this.polling || !this.writable) {
-           var total = 0;
-       
-           if (this.polling) {
-             debug('we are currently polling - waiting to pause');
-             total++;
-             this.once('pollComplete', function () {
-               debug('pre-pause polling complete');
-               --total || pause();
-             });
-           }
-       
-           if (!this.writable) {
-             debug('we are currently writing - waiting to pause');
-             total++;
-             this.once('drain', function () {
-               debug('pre-pause writing complete');
-               --total || pause();
-             });
-           }
-         } else {
-           pause();
-         }
-       };
-       
-       /**
-        * Starts polling cycle.
-        *
-        * @api public
-        */
-       
-       Polling.prototype.poll = function () {
-         debug('polling');
-         this.polling = true;
-         this.doPoll();
-         this.emit('poll');
-       };
-       
-       /**
-        * Overloads onData to detect payloads.
-        *
-        * @api private
-        */
-       
-       Polling.prototype.onData = function (data) {
-         var self = this;
-         debug('polling got data %s', data);
-         var callback = function (packet, index, total) {
-           // if its the first message we consider the transport open
-           if ('opening' === self.readyState) {
-             self.onOpen();
-           }
-       
-           // if its a close packet, we close the ongoing requests
-           if ('close' === packet.type) {
-             self.onClose();
-             return false;
-           }
-       
-           // otherwise bypass onData and handle the message
-           self.onPacket(packet);
-         };
-       
-         // decode payload
-         parser.decodePayload(data, this.socket.binaryType, callback);
-       
-         // if an event did not trigger closing
-         if ('closed' !== this.readyState) {
-           // if we got data we're not polling
-           this.polling = false;
-           this.emit('pollComplete');
-       
-           if ('open' === this.readyState) {
-             this.poll();
-           } else {
-             debug('ignoring poll - transport state "%s"', this.readyState);
-           }
-         }
-       };
-       
-       /**
-        * For polling, send a close packet.
-        *
-        * @api private
-        */
-       
-       Polling.prototype.doClose = function () {
-         var self = this;
-       
-         function close () {
-           debug('writing close packet');
-           self.write([{ type: 'close' }]);
-         }
-       
-         if ('open' === this.readyState) {
-           debug('transport open - closing');
-           close();
-         } else {
-           // in case we're trying to close while
-           // handshaking is in progress (GH-164)
-           debug('transport not open - deferring close');
-           this.once('open', close);
-         }
-       };
-       
-       /**
-        * Writes a packets payload.
-        *
-        * @param {Array} data packets
-        * @param {Function} drain callback
-        * @api private
-        */
-       
-       Polling.prototype.write = function (packets) {
-         var self = this;
-         this.writable = false;
-         var callbackfn = function () {
-           self.writable = true;
-           self.emit('drain');
-         };
-       
-         parser.encodePayload(packets, this.supportsBinary, function (data) {
-           self.doWrite(data, callbackfn);
-         });
-       };
-       
-       /**
-        * Generates uri for connection.
-        *
-        * @api private
-        */
-       
-       Polling.prototype.uri = function () {
-         var query = this.query || {};
-         var schema = this.secure ? 'https' : 'http';
-         var port = '';
-       
-         // cache busting is forced
-         if (false !== this.timestampRequests) {
-           query[this.timestampParam] = yeast();
-         }
-       
-         if (!this.supportsBinary && !query.sid) {
-           query.b64 = 1;
-         }
-       
-         query = parseqs.encode(query);
-       
-         // avoid port if default for schema
-         if (this.port && (('https' === schema && Number(this.port) !== 443) ||
-            ('http' === schema && Number(this.port) !== 80))) {
-           port = ':' + this.port;
-         }
-       
-         // prepend ? to query
-         if (query.length) {
-           query = '?' + query;
-         }
-       
-         var ipv6 = this.hostname.indexOf(':') !== -1;
-         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
-       };
-
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var parser = __webpack_require__(24);
-       var Emitter = __webpack_require__(11);
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = Transport;
-       
-       /**
-        * Transport abstract constructor.
-        *
-        * @param {Object} options.
-        * @api private
-        */
-       
-       function Transport (opts) {
-         this.path = opts.path;
-         this.hostname = opts.hostname;
-         this.port = opts.port;
-         this.secure = opts.secure;
-         this.query = opts.query;
-         this.timestampParam = opts.timestampParam;
-         this.timestampRequests = opts.timestampRequests;
-         this.readyState = '';
-         this.agent = opts.agent || false;
-         this.socket = opts.socket;
-         this.enablesXDR = opts.enablesXDR;
-         this.withCredentials = opts.withCredentials;
-       
-         // SSL options for Node.js client
-         this.pfx = opts.pfx;
-         this.key = opts.key;
-         this.passphrase = opts.passphrase;
-         this.cert = opts.cert;
-         this.ca = opts.ca;
-         this.ciphers = opts.ciphers;
-         this.rejectUnauthorized = opts.rejectUnauthorized;
-         this.forceNode = opts.forceNode;
-       
-         // results of ReactNative environment detection
-         this.isReactNative = opts.isReactNative;
-       
-         // other options for Node.js client
-         this.extraHeaders = opts.extraHeaders;
-         this.localAddress = opts.localAddress;
-       }
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Transport.prototype);
-       
-       /**
-        * Emits an error.
-        *
-        * @param {String} str
-        * @return {Transport} for chaining
-        * @api public
-        */
-       
-       Transport.prototype.onError = function (msg, desc) {
-         var err = new Error(msg);
-         err.type = 'TransportError';
-         err.description = desc;
-         this.emit('error', err);
-         return this;
-       };
-       
-       /**
-        * Opens the transport.
-        *
-        * @api public
-        */
-       
-       Transport.prototype.open = function () {
-         if ('closed' === this.readyState || '' === this.readyState) {
-           this.readyState = 'opening';
-           this.doOpen();
-         }
-       
-         return this;
-       };
-       
-       /**
-        * Closes the transport.
-        *
-        * @api private
-        */
-       
-       Transport.prototype.close = function () {
-         if ('opening' === this.readyState || 'open' === this.readyState) {
-           this.doClose();
-           this.onClose();
-         }
-       
-         return this;
-       };
-       
-       /**
-        * Sends multiple packets.
-        *
-        * @param {Array} packets
-        * @api private
-        */
-       
-       Transport.prototype.send = function (packets) {
-         if ('open' === this.readyState) {
-           this.write(packets);
-         } else {
-           throw new Error('Transport not open');
-         }
-       };
-       
-       /**
-        * Called upon open
-        *
-        * @api private
-        */
-       
-       Transport.prototype.onOpen = function () {
-         this.readyState = 'open';
-         this.writable = true;
-         this.emit('open');
-       };
-       
-       /**
-        * Called with data.
-        *
-        * @param {String} data
-        * @api private
-        */
-       
-       Transport.prototype.onData = function (data) {
-         var packet = parser.decodePacket(data, this.socket.binaryType);
-         this.onPacket(packet);
-       };
-       
-       /**
-        * Called with a decoded packet.
-        */
-       
-       Transport.prototype.onPacket = function (packet) {
-         this.emit('packet', packet);
-       };
-       
-       /**
-        * Called upon close.
-        *
-        * @api private
-        */
-       
-       Transport.prototype.onClose = function () {
-         this.readyState = 'closed';
-         this.emit('close');
-       };
-
-
-/***/ }),
-/* 24 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var keys = __webpack_require__(25);
-       var hasBinary = __webpack_require__(26);
-       var sliceBuffer = __webpack_require__(27);
-       var after = __webpack_require__(28);
-       var utf8 = __webpack_require__(29);
-       
-       var base64encoder;
-       if (typeof ArrayBuffer !== 'undefined') {
-         base64encoder = __webpack_require__(30);
-       }
-       
-       /**
-        * Check if we are running an android browser. That requires us to use
-        * ArrayBuffer with polling transports...
-        *
-        * http://ghinda.net/jpeg-blob-ajax-android/
-        */
-       
-       var isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);
-       
-       /**
-        * Check if we are running in PhantomJS.
-        * Uploading a Blob with PhantomJS does not work correctly, as reported here:
-        * https://github.com/ariya/phantomjs/issues/11395
-        * @type boolean
-        */
-       var isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);
-       
-       /**
-        * When true, avoids using Blobs to encode payloads.
-        * @type boolean
-        */
-       var dontSendBlobs = isAndroid || isPhantomJS;
-       
-       /**
-        * Current protocol version.
-        */
-       
-       exports.protocol = 3;
-       
-       /**
-        * Packet types.
-        */
-       
-       var packets = exports.packets = {
-           open:     0    // non-ws
-         , close:    1    // non-ws
-         , ping:     2
-         , pong:     3
-         , message:  4
-         , upgrade:  5
-         , noop:     6
-       };
-       
-       var packetslist = keys(packets);
-       
-       /**
-        * Premade error packet.
-        */
-       
-       var err = { type: 'error', data: 'parser error' };
-       
-       /**
-        * Create a blob api even for blob builder when vendor prefixes exist
-        */
-       
-       var Blob = __webpack_require__(31);
-       
-       /**
-        * Encodes a packet.
-        *
-        *     <packet type id> [ <data> ]
-        *
-        * Example:
-        *
-        *     5hello world
-        *     3
-        *     4
-        *
-        * Binary is encoded in an identical principle
-        *
-        * @api private
-        */
-       
-       exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
-         if (typeof supportsBinary === 'function') {
-           callback = supportsBinary;
-           supportsBinary = false;
-         }
-       
-         if (typeof utf8encode === 'function') {
-           callback = utf8encode;
-           utf8encode = null;
-         }
-       
-         var data = (packet.data === undefined)
-           ? undefined
-           : packet.data.buffer || packet.data;
-       
-         if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {
-           return encodeArrayBuffer(packet, supportsBinary, callback);
-         } else if (typeof Blob !== 'undefined' && data instanceof Blob) {
-           return encodeBlob(packet, supportsBinary, callback);
-         }
-       
-         // might be an object with { base64: true, data: dataAsBase64String }
-         if (data && data.base64) {
-           return encodeBase64Object(packet, callback);
-         }
-       
-         // Sending data as a utf-8 string
-         var encoded = packets[packet.type];
-       
-         // data fragment is optional
-         if (undefined !== packet.data) {
-           encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);
-         }
-       
-         return callback('' + encoded);
-       
-       };
-       
-       function encodeBase64Object(packet, callback) {
-         // packet data is an object { base64: true, data: dataAsBase64String }
-         var message = 'b' + exports.packets[packet.type] + packet.data.data;
-         return callback(message);
-       }
-       
-       /**
-        * Encode packet helpers for binary types
-        */
-       
-       function encodeArrayBuffer(packet, supportsBinary, callback) {
-         if (!supportsBinary) {
-           return exports.encodeBase64Packet(packet, callback);
-         }
-       
-         var data = packet.data;
-         var contentArray = new Uint8Array(data);
-         var resultBuffer = new Uint8Array(1 + data.byteLength);
-       
-         resultBuffer[0] = packets[packet.type];
-         for (var i = 0; i < contentArray.length; i++) {
-           resultBuffer[i+1] = contentArray[i];
-         }
-       
-         return callback(resultBuffer.buffer);
-       }
-       
-       function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {
-         if (!supportsBinary) {
-           return exports.encodeBase64Packet(packet, callback);
-         }
-       
-         var fr = new FileReader();
-         fr.onload = function() {
-           exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);
-         };
-         return fr.readAsArrayBuffer(packet.data);
-       }
-       
-       function encodeBlob(packet, supportsBinary, callback) {
-         if (!supportsBinary) {
-           return exports.encodeBase64Packet(packet, callback);
-         }
-       
-         if (dontSendBlobs) {
-           return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);
-         }
-       
-         var length = new Uint8Array(1);
-         length[0] = packets[packet.type];
-         var blob = new Blob([length.buffer, packet.data]);
-       
-         return callback(blob);
-       }
-       
-       /**
-        * Encodes a packet with binary data in a base64 string
-        *
-        * @param {Object} packet, has `type` and `data`
-        * @return {String} base64 encoded message
-        */
-       
-       exports.encodeBase64Packet = function(packet, callback) {
-         var message = 'b' + exports.packets[packet.type];
-         if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {
-           var fr = new FileReader();
-           fr.onload = function() {
-             var b64 = fr.result.split(',')[1];
-             callback(message + b64);
-           };
-           return fr.readAsDataURL(packet.data);
-         }
-       
-         var b64data;
-         try {
-           b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));
-         } catch (e) {
-           // iPhone Safari doesn't let you apply with typed arrays
-           var typed = new Uint8Array(packet.data);
-           var basic = new Array(typed.length);
-           for (var i = 0; i < typed.length; i++) {
-             basic[i] = typed[i];
-           }
-           b64data = String.fromCharCode.apply(null, basic);
-         }
-         message += btoa(b64data);
-         return callback(message);
-       };
-       
-       /**
-        * Decodes a packet. Changes format to Blob if requested.
-        *
-        * @return {Object} with `type` and `data` (if any)
-        * @api private
-        */
-       
-       exports.decodePacket = function (data, binaryType, utf8decode) {
-         if (data === undefined) {
-           return err;
-         }
-         // String data
-         if (typeof data === 'string') {
-           if (data.charAt(0) === 'b') {
-             return exports.decodeBase64Packet(data.substr(1), binaryType);
-           }
-       
-           if (utf8decode) {
-             data = tryDecode(data);
-             if (data === false) {
-               return err;
-             }
-           }
-           var type = data.charAt(0);
-       
-           if (Number(type) != type || !packetslist[type]) {
-             return err;
-           }
-       
-           if (data.length > 1) {
-             return { type: packetslist[type], data: data.substring(1) };
-           } else {
-             return { type: packetslist[type] };
-           }
-         }
-       
-         var asArray = new Uint8Array(data);
-         var type = asArray[0];
-         var rest = sliceBuffer(data, 1);
-         if (Blob && binaryType === 'blob') {
-           rest = new Blob([rest]);
-         }
-         return { type: packetslist[type], data: rest };
-       };
-       
-       function tryDecode(data) {
-         try {
-           data = utf8.decode(data, { strict: false });
-         } catch (e) {
-           return false;
-         }
-         return data;
-       }
-       
-       /**
-        * Decodes a packet encoded in a base64 string
-        *
-        * @param {String} base64 encoded message
-        * @return {Object} with `type` and `data` (if any)
-        */
-       
-       exports.decodeBase64Packet = function(msg, binaryType) {
-         var type = packetslist[msg.charAt(0)];
-         if (!base64encoder) {
-           return { type: type, data: { base64: true, data: msg.substr(1) } };
-         }
-       
-         var data = base64encoder.decode(msg.substr(1));
-       
-         if (binaryType === 'blob' && Blob) {
-           data = new Blob([data]);
-         }
-       
-         return { type: type, data: data };
-       };
-       
-       /**
-        * Encodes multiple messages (payload).
-        *
-        *     <length>:data
-        *
-        * Example:
-        *
-        *     11:hello world2:hi
-        *
-        * If any contents are binary, they will be encoded as base64 strings. Base64
-        * encoded strings are marked with a b before the length specifier
-        *
-        * @param {Array} packets
-        * @api private
-        */
-       
-       exports.encodePayload = function (packets, supportsBinary, callback) {
-         if (typeof supportsBinary === 'function') {
-           callback = supportsBinary;
-           supportsBinary = null;
-         }
-       
-         var isBinary = hasBinary(packets);
-       
-         if (supportsBinary && isBinary) {
-           if (Blob && !dontSendBlobs) {
-             return exports.encodePayloadAsBlob(packets, callback);
-           }
-       
-           return exports.encodePayloadAsArrayBuffer(packets, callback);
-         }
-       
-         if (!packets.length) {
-           return callback('0:');
-         }
-       
-         function setLengthHeader(message) {
-           return message.length + ':' + message;
-         }
-       
-         function encodeOne(packet, doneCallback) {
-           exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {
-             doneCallback(null, setLengthHeader(message));
-           });
-         }
-       
-         map(packets, encodeOne, function(err, results) {
-           return callback(results.join(''));
-         });
-       };
-       
-       /**
-        * Async array map using after
-        */
-       
-       function map(ary, each, done) {
-         var result = new Array(ary.length);
-         var next = after(ary.length, done);
-       
-         var eachWithIndex = function(i, el, cb) {
-           each(el, function(error, msg) {
-             result[i] = msg;
-             cb(error, result);
-           });
-         };
-       
-         for (var i = 0; i < ary.length; i++) {
-           eachWithIndex(i, ary[i], next);
-         }
-       }
-       
-       /*
-        * Decodes data when a payload is maybe expected. Possible binary contents are
-        * decoded from their base64 representation
-        *
-        * @param {String} data, callback method
-        * @api public
-        */
-       
-       exports.decodePayload = function (data, binaryType, callback) {
-         if (typeof data !== 'string') {
-           return exports.decodePayloadAsBinary(data, binaryType, callback);
-         }
-       
-         if (typeof binaryType === 'function') {
-           callback = binaryType;
-           binaryType = null;
-         }
-       
-         var packet;
-         if (data === '') {
-           // parser error - ignoring payload
-           return callback(err, 0, 1);
-         }
-       
-         var length = '', n, msg;
-       
-         for (var i = 0, l = data.length; i < l; i++) {
-           var chr = data.charAt(i);
-       
-           if (chr !== ':') {
-             length += chr;
-             continue;
-           }
-       
-           if (length === '' || (length != (n = Number(length)))) {
-             // parser error - ignoring payload
-             return callback(err, 0, 1);
-           }
-       
-           msg = data.substr(i + 1, n);
-       
-           if (length != msg.length) {
-             // parser error - ignoring payload
-             return callback(err, 0, 1);
-           }
-       
-           if (msg.length) {
-             packet = exports.decodePacket(msg, binaryType, false);
-       
-             if (err.type === packet.type && err.data === packet.data) {
-               // parser error in individual packet - ignoring payload
-               return callback(err, 0, 1);
-             }
-       
-             var ret = callback(packet, i + n, l);
-             if (false === ret) return;
-           }
-       
-           // advance cursor
-           i += n;
-           length = '';
-         }
-       
-         if (length !== '') {
-           // parser error - ignoring payload
-           return callback(err, 0, 1);
-         }
-       
-       };
-       
-       /**
-        * Encodes multiple messages (payload) as binary.
-        *
-        * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number
-        * 255><data>
-        *
-        * Example:
-        * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers
-        *
-        * @param {Array} packets
-        * @return {ArrayBuffer} encoded payload
-        * @api private
-        */
-       
-       exports.encodePayloadAsArrayBuffer = function(packets, callback) {
-         if (!packets.length) {
-           return callback(new ArrayBuffer(0));
-         }
-       
-         function encodeOne(packet, doneCallback) {
-           exports.encodePacket(packet, true, true, function(data) {
-             return doneCallback(null, data);
-           });
-         }
-       
-         map(packets, encodeOne, function(err, encodedPackets) {
-           var totalLength = encodedPackets.reduce(function(acc, p) {
-             var len;
-             if (typeof p === 'string'){
-               len = p.length;
-             } else {
-               len = p.byteLength;
-             }
-             return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2
-           }, 0);
-       
-           var resultArray = new Uint8Array(totalLength);
-       
-           var bufferIndex = 0;
-           encodedPackets.forEach(function(p) {
-             var isString = typeof p === 'string';
-             var ab = p;
-             if (isString) {
-               var view = new Uint8Array(p.length);
-               for (var i = 0; i < p.length; i++) {
-                 view[i] = p.charCodeAt(i);
-               }
-               ab = view.buffer;
-             }
-       
-             if (isString) { // not true binary
-               resultArray[bufferIndex++] = 0;
-             } else { // true binary
-               resultArray[bufferIndex++] = 1;
-             }
-       
-             var lenStr = ab.byteLength.toString();
-             for (var i = 0; i < lenStr.length; i++) {
-               resultArray[bufferIndex++] = parseInt(lenStr[i]);
-             }
-             resultArray[bufferIndex++] = 255;
-       
-             var view = new Uint8Array(ab);
-             for (var i = 0; i < view.length; i++) {
-               resultArray[bufferIndex++] = view[i];
-             }
-           });
-       
-           return callback(resultArray.buffer);
-         });
-       };
-       
-       /**
-        * Encode as Blob
-        */
-       
-       exports.encodePayloadAsBlob = function(packets, callback) {
-         function encodeOne(packet, doneCallback) {
-           exports.encodePacket(packet, true, true, function(encoded) {
-             var binaryIdentifier = new Uint8Array(1);
-             binaryIdentifier[0] = 1;
-             if (typeof encoded === 'string') {
-               var view = new Uint8Array(encoded.length);
-               for (var i = 0; i < encoded.length; i++) {
-                 view[i] = encoded.charCodeAt(i);
-               }
-               encoded = view.buffer;
-               binaryIdentifier[0] = 0;
-             }
-       
-             var len = (encoded instanceof ArrayBuffer)
-               ? encoded.byteLength
-               : encoded.size;
-       
-             var lenStr = len.toString();
-             var lengthAry = new Uint8Array(lenStr.length + 1);
-             for (var i = 0; i < lenStr.length; i++) {
-               lengthAry[i] = parseInt(lenStr[i]);
-             }
-             lengthAry[lenStr.length] = 255;
-       
-             if (Blob) {
-               var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);
-               doneCallback(null, blob);
-             }
-           });
-         }
-       
-         map(packets, encodeOne, function(err, results) {
-           return callback(new Blob(results));
-         });
-       };
-       
-       /*
-        * Decodes data when a payload is maybe expected. Strings are decoded by
-        * interpreting each byte as a key code for entries marked to start with 0. See
-        * description of encodePayloadAsBinary
-        *
-        * @param {ArrayBuffer} data, callback method
-        * @api public
-        */
-       
-       exports.decodePayloadAsBinary = function (data, binaryType, callback) {
-         if (typeof binaryType === 'function') {
-           callback = binaryType;
-           binaryType = null;
-         }
-       
-         var bufferTail = data;
-         var buffers = [];
-       
-         while (bufferTail.byteLength > 0) {
-           var tailArray = new Uint8Array(bufferTail);
-           var isString = tailArray[0] === 0;
-           var msgLength = '';
-       
-           for (var i = 1; ; i++) {
-             if (tailArray[i] === 255) break;
-       
-             // 310 = char length of Number.MAX_VALUE
-             if (msgLength.length > 310) {
-               return callback(err, 0, 1);
-             }
-       
-             msgLength += tailArray[i];
-           }
-       
-           bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);
-           msgLength = parseInt(msgLength);
-       
-           var msg = sliceBuffer(bufferTail, 0, msgLength);
-           if (isString) {
-             try {
-               msg = String.fromCharCode.apply(null, new Uint8Array(msg));
-             } catch (e) {
-               // iPhone Safari doesn't let you apply to typed arrays
-               var typed = new Uint8Array(msg);
-               msg = '';
-               for (var i = 0; i < typed.length; i++) {
-                 msg += String.fromCharCode(typed[i]);
-               }
-             }
-           }
-       
-           buffers.push(msg);
-           bufferTail = sliceBuffer(bufferTail, msgLength);
-         }
-       
-         var total = buffers.length;
-         buffers.forEach(function(buffer, i) {
-           callback(exports.decodePacket(buffer, binaryType, true), i, total);
-         });
-       };
-
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports) {
-
-       
-       /**
-        * Gets the keys for an object.
-        *
-        * @return {Array} keys
-        * @api private
-        */
-       
-       module.exports = Object.keys || function keys (obj){
-         var arr = [];
-         var has = Object.prototype.hasOwnProperty;
-       
-         for (var i in obj) {
-           if (has.call(obj, i)) {
-             arr.push(i);
-           }
-         }
-         return arr;
-       };
-
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /* global Blob File */
-       
-       /*
-        * Module requirements.
-        */
-       
-       var isArray = __webpack_require__(13);
-       
-       var toString = Object.prototype.toString;
-       var withNativeBlob = typeof Blob === 'function' ||
-                               typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';
-       var withNativeFile = typeof File === 'function' ||
-                               typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = hasBinary;
-       
-       /**
-        * Checks for binary data.
-        *
-        * Supports Buffer, ArrayBuffer, Blob and File.
-        *
-        * @param {Object} anything
-        * @api public
-        */
-       
-       function hasBinary (obj) {
-         if (!obj || typeof obj !== 'object') {
-           return false;
-         }
-       
-         if (isArray(obj)) {
-           for (var i = 0, l = obj.length; i < l; i++) {
-             if (hasBinary(obj[i])) {
-               return true;
-             }
-           }
-           return false;
-         }
-       
-         if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||
-           (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||
-           (withNativeBlob && obj instanceof Blob) ||
-           (withNativeFile && obj instanceof File)
-         ) {
-           return true;
-         }
-       
-         // see: https://github.com/Automattic/has-binary/pull/4
-         if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {
-           return hasBinary(obj.toJSON(), true);
-         }
-       
-         for (var key in obj) {
-           if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {
-             return true;
-           }
-         }
-       
-         return false;
-       }
-
-
-/***/ }),
-/* 27 */
-/***/ (function(module, exports) {
-
-       /**
-        * An abstraction for slicing an arraybuffer even when
-        * ArrayBuffer.prototype.slice is not supported
-        *
-        * @api public
-        */
-       
-       module.exports = function(arraybuffer, start, end) {
-         var bytes = arraybuffer.byteLength;
-         start = start || 0;
-         end = end || bytes;
-       
-         if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
-       
-         if (start < 0) { start += bytes; }
-         if (end < 0) { end += bytes; }
-         if (end > bytes) { end = bytes; }
-       
-         if (start >= bytes || start >= end || bytes === 0) {
-           return new ArrayBuffer(0);
-         }
-       
-         var abv = new Uint8Array(arraybuffer);
-         var result = new Uint8Array(end - start);
-         for (var i = start, ii = 0; i < end; i++, ii++) {
-           result[ii] = abv[i];
-         }
-         return result.buffer;
-       };
-
-
-/***/ }),
-/* 28 */
-/***/ (function(module, exports) {
-
-       module.exports = after
-       
-       function after(count, callback, err_cb) {
-           var bail = false
-           err_cb = err_cb || noop
-           proxy.count = count
-       
-           return (count === 0) ? callback() : proxy
-       
-           function proxy(err, result) {
-               if (proxy.count <= 0) {
-                   throw new Error('after called too many times')
-               }
-               --proxy.count
-       
-               // after first error, rest are passed to err_cb
-               if (err) {
-                   bail = true
-                   callback(err)
-                   // future error callbacks will go to error handler
-                   callback = err_cb
-               } else if (proxy.count === 0 && !bail) {
-                   callback(null, result)
-               }
-           }
-       }
-       
-       function noop() {}
-
-
-/***/ }),
-/* 29 */
-/***/ (function(module, exports) {
-
-       /*! https://mths.be/utf8js v2.1.2 by @mathias */
-       
-       var stringFromCharCode = String.fromCharCode;
-       
-       // Taken from https://mths.be/punycode
-       function ucs2decode(string) {
-               var output = [];
-               var counter = 0;
-               var length = string.length;
-               var value;
-               var extra;
-               while (counter < length) {
-                       value = string.charCodeAt(counter++);
-                       if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
-                               // high surrogate, and there is a next character
-                               extra = string.charCodeAt(counter++);
-                               if ((extra & 0xFC00) == 0xDC00) { // low surrogate
-                                       output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
-                               } else {
-                                       // unmatched surrogate; only append this code unit, in case the next
-                                       // code unit is the high surrogate of a surrogate pair
-                                       output.push(value);
-                                       counter--;
-                               }
-                       } else {
-                               output.push(value);
-                       }
-               }
-               return output;
-       }
-       
-       // Taken from https://mths.be/punycode
-       function ucs2encode(array) {
-               var length = array.length;
-               var index = -1;
-               var value;
-               var output = '';
-               while (++index < length) {
-                       value = array[index];
-                       if (value > 0xFFFF) {
-                               value -= 0x10000;
-                               output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
-                               value = 0xDC00 | value & 0x3FF;
-                       }
-                       output += stringFromCharCode(value);
-               }
-               return output;
-       }
-       
-       function checkScalarValue(codePoint, strict) {
-               if (codePoint >= 0xD800 && codePoint <= 0xDFFF) {
-                       if (strict) {
-                               throw Error(
-                                       'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +
-                                       ' is not a scalar value'
-                               );
-                       }
-                       return false;
-               }
-               return true;
-       }
-       /*--------------------------------------------------------------------------*/
-       
-       function createByte(codePoint, shift) {
-               return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
-       }
-       
-       function encodeCodePoint(codePoint, strict) {
-               if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
-                       return stringFromCharCode(codePoint);
-               }
-               var symbol = '';
-               if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
-                       symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
-               }
-               else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
-                       if (!checkScalarValue(codePoint, strict)) {
-                               codePoint = 0xFFFD;
-                       }
-                       symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
-                       symbol += createByte(codePoint, 6);
-               }
-               else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
-                       symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
-                       symbol += createByte(codePoint, 12);
-                       symbol += createByte(codePoint, 6);
-               }
-               symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
-               return symbol;
-       }
-       
-       function utf8encode(string, opts) {
-               opts = opts || {};
-               var strict = false !== opts.strict;
-       
-               var codePoints = ucs2decode(string);
-               var length = codePoints.length;
-               var index = -1;
-               var codePoint;
-               var byteString = '';
-               while (++index < length) {
-                       codePoint = codePoints[index];
-                       byteString += encodeCodePoint(codePoint, strict);
-               }
-               return byteString;
-       }
-       
-       /*--------------------------------------------------------------------------*/
-       
-       function readContinuationByte() {
-               if (byteIndex >= byteCount) {
-                       throw Error('Invalid byte index');
-               }
-       
-               var continuationByte = byteArray[byteIndex] & 0xFF;
-               byteIndex++;
-       
-               if ((continuationByte & 0xC0) == 0x80) {
-                       return continuationByte & 0x3F;
-               }
-       
-               // If we end up here, it’s not a continuation byte
-               throw Error('Invalid continuation byte');
-       }
-       
-       function decodeSymbol(strict) {
-               var byte1;
-               var byte2;
-               var byte3;
-               var byte4;
-               var codePoint;
-       
-               if (byteIndex > byteCount) {
-                       throw Error('Invalid byte index');
-               }
-       
-               if (byteIndex == byteCount) {
-                       return false;
-               }
-       
-               // Read first byte
-               byte1 = byteArray[byteIndex] & 0xFF;
-               byteIndex++;
-       
-               // 1-byte sequence (no continuation bytes)
-               if ((byte1 & 0x80) == 0) {
-                       return byte1;
-               }
-       
-               // 2-byte sequence
-               if ((byte1 & 0xE0) == 0xC0) {
-                       byte2 = readContinuationByte();
-                       codePoint = ((byte1 & 0x1F) << 6) | byte2;
-                       if (codePoint >= 0x80) {
-                               return codePoint;
-                       } else {
-                               throw Error('Invalid continuation byte');
-                       }
-               }
-       
-               // 3-byte sequence (may include unpaired surrogates)
-               if ((byte1 & 0xF0) == 0xE0) {
-                       byte2 = readContinuationByte();
-                       byte3 = readContinuationByte();
-                       codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
-                       if (codePoint >= 0x0800) {
-                               return checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;
-                       } else {
-                               throw Error('Invalid continuation byte');
-                       }
-               }
-       
-               // 4-byte sequence
-               if ((byte1 & 0xF8) == 0xF0) {
-                       byte2 = readContinuationByte();
-                       byte3 = readContinuationByte();
-                       byte4 = readContinuationByte();
-                       codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |
-                               (byte3 << 0x06) | byte4;
-                       if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
-                               return codePoint;
-                       }
-               }
-       
-               throw Error('Invalid UTF-8 detected');
-       }
-       
-       var byteArray;
-       var byteCount;
-       var byteIndex;
-       function utf8decode(byteString, opts) {
-               opts = opts || {};
-               var strict = false !== opts.strict;
-       
-               byteArray = ucs2decode(byteString);
-               byteCount = byteArray.length;
-               byteIndex = 0;
-               var codePoints = [];
-               var tmp;
-               while ((tmp = decodeSymbol(strict)) !== false) {
-                       codePoints.push(tmp);
-               }
-               return ucs2encode(codePoints);
-       }
-       
-       module.exports = {
-               version: '2.1.2',
-               encode: utf8encode,
-               decode: utf8decode
-       };
-
-
-/***/ }),
-/* 30 */
-/***/ (function(module, exports) {
-
-       /*
-        * base64-arraybuffer
-        * https://github.com/niklasvh/base64-arraybuffer
-        *
-        * Copyright (c) 2012 Niklas von Hertzen
-        * Licensed under the MIT license.
-        */
-       (function(){
-         "use strict";
-       
-         var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-       
-         // Use a lookup table to find the index.
-         var lookup = new Uint8Array(256);
-         for (var i = 0; i < chars.length; i++) {
-           lookup[chars.charCodeAt(i)] = i;
-         }
-       
-         exports.encode = function(arraybuffer) {
-           var bytes = new Uint8Array(arraybuffer),
-           i, len = bytes.length, base64 = "";
-       
-           for (i = 0; i < len; i+=3) {
-             base64 += chars[bytes[i] >> 2];
-             base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
-             base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
-             base64 += chars[bytes[i + 2] & 63];
-           }
-       
-           if ((len % 3) === 2) {
-             base64 = base64.substring(0, base64.length - 1) + "=";
-           } else if (len % 3 === 1) {
-             base64 = base64.substring(0, base64.length - 2) + "==";
-           }
-       
-           return base64;
-         };
-       
-         exports.decode =  function(base64) {
-           var bufferLength = base64.length * 0.75,
-           len = base64.length, i, p = 0,
-           encoded1, encoded2, encoded3, encoded4;
-       
-           if (base64[base64.length - 1] === "=") {
-             bufferLength--;
-             if (base64[base64.length - 2] === "=") {
-               bufferLength--;
-             }
-           }
-       
-           var arraybuffer = new ArrayBuffer(bufferLength),
-           bytes = new Uint8Array(arraybuffer);
-       
-           for (i = 0; i < len; i+=4) {
-             encoded1 = lookup[base64.charCodeAt(i)];
-             encoded2 = lookup[base64.charCodeAt(i+1)];
-             encoded3 = lookup[base64.charCodeAt(i+2)];
-             encoded4 = lookup[base64.charCodeAt(i+3)];
-       
-             bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
-             bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
-             bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
-           }
-       
-           return arraybuffer;
-         };
-       })();
-
-
-/***/ }),
-/* 31 */
-/***/ (function(module, exports) {
-
-       /**
-        * Create a blob builder even when vendor prefixes exist
-        */
-       
-       var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :
-         typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :
-         typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :
-         typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : 
-         false;
-       
-       /**
-        * Check if Blob constructor is supported
-        */
-       
-       var blobSupported = (function() {
-         try {
-           var a = new Blob(['hi']);
-           return a.size === 2;
-         } catch(e) {
-           return false;
-         }
-       })();
-       
-       /**
-        * Check if Blob constructor supports ArrayBufferViews
-        * Fails in Safari 6, so we need to map to ArrayBuffers there.
-        */
-       
-       var blobSupportsArrayBufferView = blobSupported && (function() {
-         try {
-           var b = new Blob([new Uint8Array([1,2])]);
-           return b.size === 2;
-         } catch(e) {
-           return false;
-         }
-       })();
-       
-       /**
-        * Check if BlobBuilder is supported
-        */
-       
-       var blobBuilderSupported = BlobBuilder
-         && BlobBuilder.prototype.append
-         && BlobBuilder.prototype.getBlob;
-       
-       /**
-        * Helper function that maps ArrayBufferViews to ArrayBuffers
-        * Used by BlobBuilder constructor and old browsers that didn't
-        * support it in the Blob constructor.
-        */
-       
-       function mapArrayBufferViews(ary) {
-         return ary.map(function(chunk) {
-           if (chunk.buffer instanceof ArrayBuffer) {
-             var buf = chunk.buffer;
-       
-             // if this is a subarray, make a copy so we only
-             // include the subarray region from the underlying buffer
-             if (chunk.byteLength !== buf.byteLength) {
-               var copy = new Uint8Array(chunk.byteLength);
-               copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));
-               buf = copy.buffer;
-             }
-       
-             return buf;
-           }
-       
-           return chunk;
-         });
-       }
-       
-       function BlobBuilderConstructor(ary, options) {
-         options = options || {};
-       
-         var bb = new BlobBuilder();
-         mapArrayBufferViews(ary).forEach(function(part) {
-           bb.append(part);
-         });
-       
-         return (options.type) ? bb.getBlob(options.type) : bb.getBlob();
-       };
-       
-       function BlobConstructor(ary, options) {
-         return new Blob(mapArrayBufferViews(ary), options || {});
-       };
-       
-       if (typeof Blob !== 'undefined') {
-         BlobBuilderConstructor.prototype = Blob.prototype;
-         BlobConstructor.prototype = Blob.prototype;
-       }
-       
-       module.exports = (function() {
-         if (blobSupported) {
-           return blobSupportsArrayBufferView ? Blob : BlobConstructor;
-         } else if (blobBuilderSupported) {
-           return BlobBuilderConstructor;
-         } else {
-           return undefined;
-         }
-       })();
-
-
-/***/ }),
-/* 32 */
-/***/ (function(module, exports) {
-
-       /**
-        * Compiles a querystring
-        * Returns string representation of the object
-        *
-        * @param {Object}
-        * @api private
-        */
-       
-       exports.encode = function (obj) {
-         var str = '';
-       
-         for (var i in obj) {
-           if (obj.hasOwnProperty(i)) {
-             if (str.length) str += '&';
-             str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
-           }
-         }
-       
-         return str;
-       };
-       
-       /**
-        * Parses a simple querystring into an object
-        *
-        * @param {String} qs
-        * @api private
-        */
-       
-       exports.decode = function(qs){
-         var qry = {};
-         var pairs = qs.split('&');
-         for (var i = 0, l = pairs.length; i < l; i++) {
-           var pair = pairs[i].split('=');
-           qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
-         }
-         return qry;
-       };
-
-
-/***/ }),
-/* 33 */
-/***/ (function(module, exports) {
-
-       
-       module.exports = function(a, b){
-         var fn = function(){};
-         fn.prototype = b.prototype;
-         a.prototype = new fn;
-         a.prototype.constructor = a;
-       };
-
-/***/ }),
-/* 34 */
-/***/ (function(module, exports) {
-
-       'use strict';
-       
-       var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')
-         , length = 64
-         , map = {}
-         , seed = 0
-         , i = 0
-         , prev;
-       
-       /**
-        * Return a string representing the specified number.
-        *
-        * @param {Number} num The number to convert.
-        * @returns {String} The string representation of the number.
-        * @api public
-        */
-       function encode(num) {
-         var encoded = '';
-       
-         do {
-           encoded = alphabet[num % length] + encoded;
-           num = Math.floor(num / length);
-         } while (num > 0);
-       
-         return encoded;
-       }
-       
-       /**
-        * Return the integer value specified by the given string.
-        *
-        * @param {String} str The string to convert.
-        * @returns {Number} The integer value represented by the string.
-        * @api public
-        */
-       function decode(str) {
-         var decoded = 0;
-       
-         for (i = 0; i < str.length; i++) {
-           decoded = decoded * length + map[str.charAt(i)];
-         }
-       
-         return decoded;
-       }
-       
-       /**
-        * Yeast: A tiny growing id generator.
-        *
-        * @returns {String} A unique id.
-        * @api public
-        */
-       function yeast() {
-         var now = encode(+new Date());
-       
-         if (now !== prev) return seed = 0, prev = now;
-         return now +'.'+ encode(seed++);
-       }
-       
-       //
-       // Map each character to its index.
-       //
-       for (; i < length; i++) map[alphabet[i]] = i;
-       
-       //
-       // Expose the `yeast`, `encode` and `decode` functions.
-       //
-       yeast.encode = encode;
-       yeast.decode = decode;
-       module.exports = yeast;
-
-
-/***/ }),
-/* 35 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(global) {/**
-        * Module requirements.
-        */
-       
-       var Polling = __webpack_require__(22);
-       var inherit = __webpack_require__(33);
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = JSONPPolling;
-       
-       /**
-        * Cached regular expressions.
-        */
-       
-       var rNewline = /\n/g;
-       var rEscapedNewline = /\\n/g;
-       
-       /**
-        * Global JSONP callbacks.
-        */
-       
-       var callbacks;
-       
-       /**
-        * Noop.
-        */
-       
-       function empty () { }
-       
-       /**
-        * Until https://github.com/tc39/proposal-global is shipped.
-        */
-       function glob () {
-         return typeof self !== 'undefined' ? self
-             : typeof window !== 'undefined' ? window
-             : typeof global !== 'undefined' ? global : {};
-       }
-       
-       /**
-        * JSONP Polling constructor.
-        *
-        * @param {Object} opts.
-        * @api public
-        */
-       
-       function JSONPPolling (opts) {
-         Polling.call(this, opts);
-       
-         this.query = this.query || {};
-       
-         // define global callbacks array if not present
-         // we do this here (lazily) to avoid unneeded global pollution
-         if (!callbacks) {
-           // we need to consider multiple engines in the same page
-           var global = glob();
-           callbacks = global.___eio = (global.___eio || []);
-         }
-       
-         // callback identifier
-         this.index = callbacks.length;
-       
-         // add callback to jsonp global
-         var self = this;
-         callbacks.push(function (msg) {
-           self.onData(msg);
-         });
-       
-         // append to query string
-         this.query.j = this.index;
-       
-         // prevent spurious errors from being emitted when the window is unloaded
-         if (typeof addEventListener === 'function') {
-           addEventListener('beforeunload', function () {
-             if (self.script) self.script.onerror = empty;
-           }, false);
-         }
-       }
-       
-       /**
-        * Inherits from Polling.
-        */
-       
-       inherit(JSONPPolling, Polling);
-       
-       /*
-        * JSONP only supports binary as base64 encoded strings
-        */
-       
-       JSONPPolling.prototype.supportsBinary = false;
-       
-       /**
-        * Closes the socket.
-        *
-        * @api private
-        */
-       
-       JSONPPolling.prototype.doClose = function () {
-         if (this.script) {
-           this.script.parentNode.removeChild(this.script);
-           this.script = null;
-         }
-       
-         if (this.form) {
-           this.form.parentNode.removeChild(this.form);
-           this.form = null;
-           this.iframe = null;
-         }
-       
-         Polling.prototype.doClose.call(this);
-       };
-       
-       /**
-        * Starts a poll cycle.
-        *
-        * @api private
-        */
-       
-       JSONPPolling.prototype.doPoll = function () {
-         var self = this;
-         var script = document.createElement('script');
-       
-         if (this.script) {
-           this.script.parentNode.removeChild(this.script);
-           this.script = null;
-         }
-       
-         script.async = true;
-         script.src = this.uri();
-         script.onerror = function (e) {
-           self.onError('jsonp poll error', e);
-         };
-       
-         var insertAt = document.getElementsByTagName('script')[0];
-         if (insertAt) {
-           insertAt.parentNode.insertBefore(script, insertAt);
-         } else {
-           (document.head || document.body).appendChild(script);
-         }
-         this.script = script;
-       
-         var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);
-       
-         if (isUAgecko) {
-           setTimeout(function () {
-             var iframe = document.createElement('iframe');
-             document.body.appendChild(iframe);
-             document.body.removeChild(iframe);
-           }, 100);
-         }
-       };
-       
-       /**
-        * Writes with a hidden iframe.
-        *
-        * @param {String} data to send
-        * @param {Function} called upon flush.
-        * @api private
-        */
-       
-       JSONPPolling.prototype.doWrite = function (data, fn) {
-         var self = this;
-       
-         if (!this.form) {
-           var form = document.createElement('form');
-           var area = document.createElement('textarea');
-           var id = this.iframeId = 'eio_iframe_' + this.index;
-           var iframe;
-       
-           form.className = 'socketio';
-           form.style.position = 'absolute';
-           form.style.top = '-1000px';
-           form.style.left = '-1000px';
-           form.target = id;
-           form.method = 'POST';
-           form.setAttribute('accept-charset', 'utf-8');
-           area.name = 'd';
-           form.appendChild(area);
-           document.body.appendChild(form);
-       
-           this.form = form;
-           this.area = area;
-         }
-       
-         this.form.action = this.uri();
-       
-         function complete () {
-           initIframe();
-           fn();
-         }
-       
-         function initIframe () {
-           if (self.iframe) {
-             try {
-               self.form.removeChild(self.iframe);
-             } catch (e) {
-               self.onError('jsonp polling iframe removal error', e);
-             }
-           }
-       
-           try {
-             // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
-             var html = '<iframe src="javascript:0" name="' + self.iframeId + '">';
-             iframe = document.createElement(html);
-           } catch (e) {
-             iframe = document.createElement('iframe');
-             iframe.name = self.iframeId;
-             iframe.src = 'javascript:0';
-           }
-       
-           iframe.id = self.iframeId;
-       
-           self.form.appendChild(iframe);
-           self.iframe = iframe;
-         }
-       
-         initIframe();
-       
-         // escape \n to prevent it from being converted into \r\n by some UAs
-         // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side
-         data = data.replace(rEscapedNewline, '\\\n');
-         this.area.value = data.replace(rNewline, '\\n');
-       
-         try {
-           this.form.submit();
-         } catch (e) {}
-       
-         if (this.iframe.attachEvent) {
-           this.iframe.onreadystatechange = function () {
-             if (self.iframe.readyState === 'complete') {
-               complete();
-             }
-           };
-         } else {
-           this.iframe.onload = complete;
-         }
-       };
-       
-       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
-
-/***/ }),
-/* 36 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var Transport = __webpack_require__(23);
-       var parser = __webpack_require__(24);
-       var parseqs = __webpack_require__(32);
-       var inherit = __webpack_require__(33);
-       var yeast = __webpack_require__(34);
-       var debug = __webpack_require__(3)('engine.io-client:websocket');
-       
-       var BrowserWebSocket, NodeWebSocket;
-       
-       if (typeof WebSocket !== 'undefined') {
-         BrowserWebSocket = WebSocket;
-       } else if (typeof self !== 'undefined') {
-         BrowserWebSocket = self.WebSocket || self.MozWebSocket;
-       }
-       
-       if (typeof window === 'undefined') {
-         try {
-           NodeWebSocket = __webpack_require__(37);
-         } catch (e) { }
-       }
-       
-       /**
-        * Get either the `WebSocket` or `MozWebSocket` globals
-        * in the browser or try to resolve WebSocket-compatible
-        * interface exposed by `ws` for Node-like environment.
-        */
-       
-       var WebSocketImpl = BrowserWebSocket || NodeWebSocket;
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = WS;
-       
-       /**
-        * WebSocket transport constructor.
-        *
-        * @api {Object} connection options
-        * @api public
-        */
-       
-       function WS (opts) {
-         var forceBase64 = (opts && opts.forceBase64);
-         if (forceBase64) {
-           this.supportsBinary = false;
-         }
-         this.perMessageDeflate = opts.perMessageDeflate;
-         this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;
-         this.protocols = opts.protocols;
-         if (!this.usingBrowserWebSocket) {
-           WebSocketImpl = NodeWebSocket;
-         }
-         Transport.call(this, opts);
-       }
-       
-       /**
-        * Inherits from Transport.
-        */
-       
-       inherit(WS, Transport);
-       
-       /**
-        * Transport name.
-        *
-        * @api public
-        */
-       
-       WS.prototype.name = 'websocket';
-       
-       /*
-        * WebSockets support binary
-        */
-       
-       WS.prototype.supportsBinary = true;
-       
-       /**
-        * Opens socket.
-        *
-        * @api private
-        */
-       
-       WS.prototype.doOpen = function () {
-         if (!this.check()) {
-           // let probe timeout
-           return;
-         }
-       
-         var uri = this.uri();
-         var protocols = this.protocols;
-         var opts = {
-           agent: this.agent,
-           perMessageDeflate: this.perMessageDeflate
-         };
-       
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
-         if (this.extraHeaders) {
-           opts.headers = this.extraHeaders;
-         }
-         if (this.localAddress) {
-           opts.localAddress = this.localAddress;
-         }
-       
-         try {
-           this.ws =
-             this.usingBrowserWebSocket && !this.isReactNative
-               ? protocols
-                 ? new WebSocketImpl(uri, protocols)
-                 : new WebSocketImpl(uri)
-               : new WebSocketImpl(uri, protocols, opts);
-         } catch (err) {
-           return this.emit('error', err);
-         }
-       
-         if (this.ws.binaryType === undefined) {
-           this.supportsBinary = false;
-         }
-       
-         if (this.ws.supports && this.ws.supports.binary) {
-           this.supportsBinary = true;
-           this.ws.binaryType = 'nodebuffer';
-         } else {
-           this.ws.binaryType = 'arraybuffer';
-         }
-       
-         this.addEventListeners();
-       };
-       
-       /**
-        * Adds event listeners to the socket
-        *
-        * @api private
-        */
-       
-       WS.prototype.addEventListeners = function () {
-         var self = this;
-       
-         this.ws.onopen = function () {
-           self.onOpen();
-         };
-         this.ws.onclose = function () {
-           self.onClose();
-         };
-         this.ws.onmessage = function (ev) {
-           self.onData(ev.data);
-         };
-         this.ws.onerror = function (e) {
-           self.onError('websocket error', e);
-         };
-       };
-       
-       /**
-        * Writes data to socket.
-        *
-        * @param {Array} array of packets.
-        * @api private
-        */
-       
-       WS.prototype.write = function (packets) {
-         var self = this;
-         this.writable = false;
-       
-         // encodePacket efficient as it uses WS framing
-         // no need for encodePayload
-         var total = packets.length;
-         for (var i = 0, l = total; i < l; i++) {
-           (function (packet) {
-             parser.encodePacket(packet, self.supportsBinary, function (data) {
-               if (!self.usingBrowserWebSocket) {
-                 // always create a new object (GH-437)
-                 var opts = {};
-                 if (packet.options) {
-                   opts.compress = packet.options.compress;
-                 }
-       
-                 if (self.perMessageDeflate) {
-                   var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;
-                   if (len < self.perMessageDeflate.threshold) {
-                     opts.compress = false;
-                   }
-                 }
-               }
-       
-               // Sometimes the websocket has already been closed but the browser didn't
-               // have a chance of informing us about it yet, in that case send will
-               // throw an error
-               try {
-                 if (self.usingBrowserWebSocket) {
-                   // TypeError is thrown when passing the second argument on Safari
-                   self.ws.send(data);
-                 } else {
-                   self.ws.send(data, opts);
-                 }
-               } catch (e) {
-                 debug('websocket closed before onclose event');
-               }
-       
-               --total || done();
-             });
-           })(packets[i]);
-         }
-       
-         function done () {
-           self.emit('flush');
-       
-           // fake drain
-           // defer to next tick to allow Socket to clear writeBuffer
-           setTimeout(function () {
-             self.writable = true;
-             self.emit('drain');
-           }, 0);
-         }
-       };
-       
-       /**
-        * Called upon close
-        *
-        * @api private
-        */
-       
-       WS.prototype.onClose = function () {
-         Transport.prototype.onClose.call(this);
-       };
-       
-       /**
-        * Closes socket.
-        *
-        * @api private
-        */
-       
-       WS.prototype.doClose = function () {
-         if (typeof this.ws !== 'undefined') {
-           this.ws.close();
-         }
-       };
-       
-       /**
-        * Generates uri for connection.
-        *
-        * @api private
-        */
-       
-       WS.prototype.uri = function () {
-         var query = this.query || {};
-         var schema = this.secure ? 'wss' : 'ws';
-         var port = '';
-       
-         // avoid port if default for schema
-         if (this.port && (('wss' === schema && Number(this.port) !== 443) ||
-           ('ws' === schema && Number(this.port) !== 80))) {
-           port = ':' + this.port;
-         }
-       
-         // append timestamp to URI
-         if (this.timestampRequests) {
-           query[this.timestampParam] = yeast();
-         }
-       
-         // communicate binary support capabilities
-         if (!this.supportsBinary) {
-           query.b64 = 1;
-         }
-       
-         query = parseqs.encode(query);
-       
-         // prepend ? to query
-         if (query.length) {
-           query = '?' + query;
-         }
-       
-         var ipv6 = this.hostname.indexOf(':') !== -1;
-         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
-       };
-       
-       /**
-        * Feature detection for WebSocket.
-        *
-        * @return {Boolean} whether this transport is available.
-        * @api public
-        */
-       
-       WS.prototype.check = function () {
-         return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);
-       };
-
-
-/***/ }),
-/* 37 */
-/***/ (function(module, exports) {
-
-       /* (ignored) */
-
-/***/ }),
-/* 38 */
-/***/ (function(module, exports) {
-
-       
-       var indexOf = [].indexOf;
-       
-       module.exports = function(arr, obj){
-         if (indexOf) return arr.indexOf(obj);
-         for (var i = 0; i < arr.length; ++i) {
-           if (arr[i] === obj) return i;
-         }
-         return -1;
-       };
-
-/***/ }),
-/* 39 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var parser = __webpack_require__(7);
-       var Emitter = __webpack_require__(11);
-       var toArray = __webpack_require__(40);
-       var on = __webpack_require__(41);
-       var bind = __webpack_require__(42);
-       var debug = __webpack_require__(3)('socket.io-client:socket');
-       var parseqs = __webpack_require__(32);
-       var hasBin = __webpack_require__(26);
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = exports = Socket;
-       
-       /**
-        * Internal events (blacklisted).
-        * These events can't be emitted by the user.
-        *
-        * @api private
-        */
-       
-       var events = {
-         connect: 1,
-         connect_error: 1,
-         connect_timeout: 1,
-         connecting: 1,
-         disconnect: 1,
-         error: 1,
-         reconnect: 1,
-         reconnect_attempt: 1,
-         reconnect_failed: 1,
-         reconnect_error: 1,
-         reconnecting: 1,
-         ping: 1,
-         pong: 1
-       };
-       
-       /**
-        * Shortcut to `Emitter#emit`.
-        */
-       
-       var emit = Emitter.prototype.emit;
-       
-       /**
-        * `Socket` constructor.
-        *
-        * @api public
-        */
-       
-       function Socket (io, nsp, opts) {
-         this.io = io;
-         this.nsp = nsp;
-         this.json = this; // compat
-         this.ids = 0;
-         this.acks = {};
-         this.receiveBuffer = [];
-         this.sendBuffer = [];
-         this.connected = false;
-         this.disconnected = true;
-         this.flags = {};
-         if (opts && opts.query) {
-           this.query = opts.query;
-         }
-         if (this.io.autoConnect) this.open();
-       }
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Socket.prototype);
-       
-       /**
-        * Subscribe to open, close and packet events
-        *
-        * @api private
-        */
-       
-       Socket.prototype.subEvents = function () {
-         if (this.subs) return;
-       
-         var io = this.io;
-         this.subs = [
-           on(io, 'open', bind(this, 'onopen')),
-           on(io, 'packet', bind(this, 'onpacket')),
-           on(io, 'close', bind(this, 'onclose'))
-         ];
-       };
-       
-       /**
-        * "Opens" the socket.
-        *
-        * @api public
-        */
-       
-       Socket.prototype.open =
-       Socket.prototype.connect = function () {
-         if (this.connected) return this;
-       
-         this.subEvents();
-         this.io.open(); // ensure open
-         if ('open' === this.io.readyState) this.onopen();
-         this.emit('connecting');
-         return this;
-       };
-       
-       /**
-        * Sends a `message` event.
-        *
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.send = function () {
-         var args = toArray(arguments);
-         args.unshift('message');
-         this.emit.apply(this, args);
-         return this;
-       };
-       
-       /**
-        * Override `emit`.
-        * If the event is in `events`, it's emitted normally.
-        *
-        * @param {String} event name
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.emit = function (ev) {
-         if (events.hasOwnProperty(ev)) {
-           emit.apply(this, arguments);
-           return this;
-         }
-       
-         var args = toArray(arguments);
-         var packet = {
-           type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,
-           data: args
-         };
-       
-         packet.options = {};
-         packet.options.compress = !this.flags || false !== this.flags.compress;
-       
-         // event ack callback
-         if ('function' === typeof args[args.length - 1]) {
-           debug('emitting packet with ack id %d', this.ids);
-           this.acks[this.ids] = args.pop();
-           packet.id = this.ids++;
-         }
-       
-         if (this.connected) {
-           this.packet(packet);
-         } else {
-           this.sendBuffer.push(packet);
-         }
-       
-         this.flags = {};
-       
-         return this;
-       };
-       
-       /**
-        * Sends a packet.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Socket.prototype.packet = function (packet) {
-         packet.nsp = this.nsp;
-         this.io.packet(packet);
-       };
-       
-       /**
-        * Called upon engine `open`.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onopen = function () {
-         debug('transport is open - connecting');
-       
-         // write connect packet if necessary
-         if ('/' !== this.nsp) {
-           if (this.query) {
-             var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;
-             debug('sending connect packet with query %s', query);
-             this.packet({type: parser.CONNECT, query: query});
-           } else {
-             this.packet({type: parser.CONNECT});
-           }
-         }
-       };
-       
-       /**
-        * Called upon engine `close`.
-        *
-        * @param {String} reason
-        * @api private
-        */
-       
-       Socket.prototype.onclose = function (reason) {
-         debug('close (%s)', reason);
-         this.connected = false;
-         this.disconnected = true;
-         delete this.id;
-         this.emit('disconnect', reason);
-       };
-       
-       /**
-        * Called with socket packet.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Socket.prototype.onpacket = function (packet) {
-         var sameNamespace = packet.nsp === this.nsp;
-         var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';
-       
-         if (!sameNamespace && !rootNamespaceError) return;
-       
-         switch (packet.type) {
-           case parser.CONNECT:
-             this.onconnect();
-             break;
-       
-           case parser.EVENT:
-             this.onevent(packet);
-             break;
-       
-           case parser.BINARY_EVENT:
-             this.onevent(packet);
-             break;
-       
-           case parser.ACK:
-             this.onack(packet);
-             break;
-       
-           case parser.BINARY_ACK:
-             this.onack(packet);
-             break;
-       
-           case parser.DISCONNECT:
-             this.ondisconnect();
-             break;
-       
-           case parser.ERROR:
-             this.emit('error', packet.data);
-             break;
-         }
-       };
-       
-       /**
-        * Called upon a server event.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Socket.prototype.onevent = function (packet) {
-         var args = packet.data || [];
-         debug('emitting event %j', args);
-       
-         if (null != packet.id) {
-           debug('attaching ack callback to event');
-           args.push(this.ack(packet.id));
-         }
-       
-         if (this.connected) {
-           emit.apply(this, args);
-         } else {
-           this.receiveBuffer.push(args);
-         }
-       };
-       
-       /**
-        * Produces an ack callback to emit with an event.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.ack = function (id) {
-         var self = this;
-         var sent = false;
-         return function () {
-           // prevent double callbacks
-           if (sent) return;
-           sent = true;
-           var args = toArray(arguments);
-           debug('sending ack %j', args);
-       
-           self.packet({
-             type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,
-             id: id,
-             data: args
-           });
-         };
-       };
-       
-       /**
-        * Called upon a server acknowlegement.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Socket.prototype.onack = function (packet) {
-         var ack = this.acks[packet.id];
-         if ('function' === typeof ack) {
-           debug('calling ack %s with %j', packet.id, packet.data);
-           ack.apply(this, packet.data);
-           delete this.acks[packet.id];
-         } else {
-           debug('bad ack %s', packet.id);
-         }
-       };
-       
-       /**
-        * Called upon server connect.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onconnect = function () {
-         this.connected = true;
-         this.disconnected = false;
-         this.emit('connect');
-         this.emitBuffered();
-       };
-       
-       /**
-        * Emit buffered events (received and emitted).
-        *
-        * @api private
-        */
-       
-       Socket.prototype.emitBuffered = function () {
-         var i;
-         for (i = 0; i < this.receiveBuffer.length; i++) {
-           emit.apply(this, this.receiveBuffer[i]);
-         }
-         this.receiveBuffer = [];
-       
-         for (i = 0; i < this.sendBuffer.length; i++) {
-           this.packet(this.sendBuffer[i]);
-         }
-         this.sendBuffer = [];
-       };
-       
-       /**
-        * Called upon server disconnect.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.ondisconnect = function () {
-         debug('server disconnect (%s)', this.nsp);
-         this.destroy();
-         this.onclose('io server disconnect');
-       };
-       
-       /**
-        * Called upon forced client/server side disconnections,
-        * this method ensures the manager stops tracking us and
-        * that reconnections don't get triggered for this.
-        *
-        * @api private.
-        */
-       
-       Socket.prototype.destroy = function () {
-         if (this.subs) {
-           // clean subscriptions to avoid reconnections
-           for (var i = 0; i < this.subs.length; i++) {
-             this.subs[i].destroy();
-           }
-           this.subs = null;
-         }
-       
-         this.io.destroy(this);
-       };
-       
-       /**
-        * Disconnects the socket manually.
-        *
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.close =
-       Socket.prototype.disconnect = function () {
-         if (this.connected) {
-           debug('performing disconnect (%s)', this.nsp);
-           this.packet({ type: parser.DISCONNECT });
-         }
-       
-         // remove socket from pool
-         this.destroy();
-       
-         if (this.connected) {
-           // fire events
-           this.onclose('io client disconnect');
-         }
-         return this;
-       };
-       
-       /**
-        * Sets the compress flag.
-        *
-        * @param {Boolean} if `true`, compresses the sending data
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.compress = function (compress) {
-         this.flags.compress = compress;
-         return this;
-       };
-       
-       /**
-        * Sets the binary flag
-        *
-        * @param {Boolean} whether the emitted data contains binary
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.binary = function (binary) {
-         this.flags.binary = binary;
-         return this;
-       };
-
-
-/***/ }),
-/* 40 */
-/***/ (function(module, exports) {
-
-       module.exports = toArray
-       
-       function toArray(list, index) {
-           var array = []
-       
-           index = index || 0
-       
-           for (var i = index || 0; i < list.length; i++) {
-               array[i - index] = list[i]
-           }
-       
-           return array
-       }
-
-
-/***/ }),
-/* 41 */
-/***/ (function(module, exports) {
-
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = on;
-       
-       /**
-        * Helper for subscriptions.
-        *
-        * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`
-        * @param {String} event name
-        * @param {Function} callback
-        * @api public
-        */
-       
-       function on (obj, ev, fn) {
-         obj.on(ev, fn);
-         return {
-           destroy: function () {
-             obj.removeListener(ev, fn);
-           }
-         };
-       }
-
-
-/***/ }),
-/* 42 */
-/***/ (function(module, exports) {
-
-       /**
-        * Slice reference.
-        */
-       
-       var slice = [].slice;
-       
-       /**
-        * Bind `obj` to `fn`.
-        *
-        * @param {Object} obj
-        * @param {Function|String} fn or string
-        * @return {Function}
-        * @api public
-        */
-       
-       module.exports = function(obj, fn){
-         if ('string' == typeof fn) fn = obj[fn];
-         if ('function' != typeof fn) throw new Error('bind() requires a function');
-         var args = slice.call(arguments, 2);
-         return function(){
-           return fn.apply(obj, args.concat(slice.call(arguments)));
-         }
-       };
-
-
-/***/ }),
-/* 43 */
-/***/ (function(module, exports) {
-
-       
-       /**
-        * Expose `Backoff`.
-        */
-       
-       module.exports = Backoff;
-       
-       /**
-        * Initialize backoff timer with `opts`.
-        *
-        * - `min` initial timeout in milliseconds [100]
-        * - `max` max timeout [10000]
-        * - `jitter` [0]
-        * - `factor` [2]
-        *
-        * @param {Object} opts
-        * @api public
-        */
-       
-       function Backoff(opts) {
-         opts = opts || {};
-         this.ms = opts.min || 100;
-         this.max = opts.max || 10000;
-         this.factor = opts.factor || 2;
-         this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;
-         this.attempts = 0;
-       }
-       
-       /**
-        * Return the backoff duration.
-        *
-        * @return {Number}
-        * @api public
-        */
-       
-       Backoff.prototype.duration = function(){
-         var ms = this.ms * Math.pow(this.factor, this.attempts++);
-         if (this.jitter) {
-           var rand =  Math.random();
-           var deviation = Math.floor(rand * this.jitter * ms);
-           ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;
-         }
-         return Math.min(ms, this.max) | 0;
-       };
-       
-       /**
-        * Reset the number of attempts.
-        *
-        * @api public
-        */
-       
-       Backoff.prototype.reset = function(){
-         this.attempts = 0;
-       };
-       
-       /**
-        * Set the minimum duration
-        *
-        * @api public
-        */
-       
-       Backoff.prototype.setMin = function(min){
-         this.ms = min;
-       };
-       
-       /**
-        * Set the maximum duration
-        *
-        * @api public
-        */
-       
-       Backoff.prototype.setMax = function(max){
-         this.max = max;
-       };
-       
-       /**
-        * Set the jitter
-        *
-        * @api public
-        */
-       
-       Backoff.prototype.setJitter = function(jitter){
-         this.jitter = jitter;
-       };
-       
-
-
-/***/ })
-/******/ ])
-});
-;
-//# sourceMappingURL=socket.io.dev.js.map
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io-client/dist/socket.io.dev.js.map b/signaling_server/service/node_modules/socket.io-client/dist/socket.io.dev.js.map
deleted file mode 100644 (file)
index 5da5afe..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 8eaf0a29f3d9e985ff91","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./~/debug/src/browser.js","webpack:///./~/process/browser.js","webpack:///./~/debug/src/common.js","webpack:///./~/ms/index.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/socket.io-parser/~/debug/src/browser.js","webpack:///./~/socket.io-parser/~/debug/src/debug.js","webpack:///./~/socket.io-parser/~/ms/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///ws (ignored)","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["exports","log","formatArgs","save","load","useColors","storage","localstorage","colors","window","process","type","__nwjs","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","$1","args","namespace","module","humanize","diff","c","color","splice","index","lastC","replace","namespaces","setItem","removeItem","error","r","getItem","env","DEBUG","localStorage","require","formatters","j","v","JSON","stringify","message","setup","createDebug","debug","default","coerce","disable","enable","enabled","Object","keys","forEach","key","instances","names","skips","selectColor","hash","i","length","charCodeAt","Math","abs","prevTime","self","curr","Number","Date","ms","prev","unshift","format","formatter","val","call","logFn","apply","destroy","extend","init","push","indexOf","delimiter","newDebug","split","len","substr","instance","map","toNamespace","join","name","test","regexp","toString","substring","Error","stack","chrome","local","err","Function","prototype","arguments","e","Array","bind"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;ACrCA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;AC5FA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC1EA;AACA;AACA;AACA;AACA;AACA;;AAEA,0GAAyG,IAAI,GAAG,IAAI,SAAS,IAAI;;AAEjI;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yEAAwE;AACxE;;AAEA;AACA,iBAAgB;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;AACA,yEAAwE;AACxE,mFAAkF;AAClF;AACA;;AAEA;AACA;;;;;;;;;;;ACtCA;;AAEA;;;;AAIAA,SAAQC,GAAR,GAAcA,GAAd;AACAD,SAAQE,UAAR,GAAqBA,UAArB;AACAF,SAAQG,IAAR,GAAeA,IAAf;AACAH,SAAQI,IAAR,GAAeA,IAAf;AACAJ,SAAQK,SAAR,GAAoBA,SAApB;AACAL,SAAQM,OAAR,GAAkBC,cAAlB;;AAEA;;;;AAIAP,SAAQQ,MAAR,GAAiB,CAChB,SADgB,EAEhB,SAFgB,EAGhB,SAHgB,EAIhB,SAJgB,EAKhB,SALgB,EAMhB,SANgB,EAOhB,SAPgB,EAQhB,SARgB,EAShB,SATgB,EAUhB,SAVgB,EAWhB,SAXgB,EAYhB,SAZgB,EAahB,SAbgB,EAchB,SAdgB,EAehB,SAfgB,EAgBhB,SAhBgB,EAiBhB,SAjBgB,EAkBhB,SAlBgB,EAmBhB,SAnBgB,EAoBhB,SApBgB,EAqBhB,SArBgB,EAsBhB,SAtBgB,EAuBhB,SAvBgB,EAwBhB,SAxBgB,EAyBhB,SAzBgB,EA0BhB,SA1BgB,EA2BhB,SA3BgB,EA4BhB,SA5BgB,EA6BhB,SA7BgB,EA8BhB,SA9BgB,EA+BhB,SA/BgB,EAgChB,SAhCgB,EAiChB,SAjCgB,EAkChB,SAlCgB,EAmChB,SAnCgB,EAoChB,SApCgB,EAqChB,SArCgB,EAsChB,SAtCgB,EAuChB,SAvCgB,EAwChB,SAxCgB,EAyChB,SAzCgB,EA0ChB,SA1CgB,EA2ChB,SA3CgB,EA4ChB,SA5CgB,EA6ChB,SA7CgB,EA8ChB,SA9CgB,EA+ChB,SA/CgB,EAgDhB,SAhDgB,EAiDhB,SAjDgB,EAkDhB,SAlDgB,EAmDhB,SAnDgB,EAoDhB,SApDgB,EAqDhB,SArDgB,EAsDhB,SAtDgB,EAuDhB,SAvDgB,EAwDhB,SAxDgB,EAyDhB,SAzDgB,EA0DhB,SA1DgB,EA2DhB,SA3DgB,EA4DhB,SA5DgB,EA6DhB,SA7DgB,EA8DhB,SA9DgB,EA+DhB,SA/DgB,EAgEhB,SAhEgB,EAiEhB,SAjEgB,EAkEhB,SAlEgB,EAmEhB,SAnEgB,EAoEhB,SApEgB,EAqEhB,SArEgB,EAsEhB,SAtEgB,EAuEhB,SAvEgB,EAwEhB,SAxEgB,EAyEhB,SAzEgB,EA0EhB,SA1EgB,EA2EhB,SA3EgB,EA4EhB,SA5EgB,CAAjB;;AA+EA;;;;;;;;AAQA;AACA,UAASH,SAAT,GAAqB;AACpB;AACA;AACA;AACA,MAAI,OAAOI,MAAP,KAAkB,WAAlB,IAAiCA,OAAOC,OAAxC,KAAoDD,OAAOC,OAAP,CAAeC,IAAf,KAAwB,UAAxB,IAAsCF,OAAOC,OAAP,CAAeE,MAAzG,CAAJ,EAAsH;AACrH,UAAO,IAAP;AACA;;AAED;AACA,MAAI,OAAOC,SAAP,KAAqB,WAArB,IAAoCA,UAAUC,SAA9C,IAA2DD,UAAUC,SAAV,CAAoBC,WAApB,GAAkCC,KAAlC,CAAwC,uBAAxC,CAA/D,EAAiI;AAChI,UAAO,KAAP;AACA;;AAED;AACA;AACA,SAAQ,OAAOC,QAAP,KAAoB,WAApB,IAAmCA,SAASC,eAA5C,IAA+DD,SAASC,eAAT,CAAyBC,KAAxF,IAAiGF,SAASC,eAAT,CAAyBC,KAAzB,CAA+BC,gBAAjI;AACN;AACC,SAAOX,MAAP,KAAkB,WAAlB,IAAiCA,OAAOY,OAAxC,KAAoDZ,OAAOY,OAAP,CAAeC,OAAf,IAA2Bb,OAAOY,OAAP,CAAeE,SAAf,IAA4Bd,OAAOY,OAAP,CAAeG,KAA1H,CAFK;AAGN;AACA;AACC,SAAOX,SAAP,KAAqB,WAArB,IAAoCA,UAAUC,SAA9C,IAA2DD,UAAUC,SAAV,CAAoBC,WAApB,GAAkCC,KAAlC,CAAwC,gBAAxC,CAA3D,IAAwHS,SAASC,OAAOC,EAAhB,EAAoB,EAApB,KAA2B,EAL9I;AAMN;AACC,SAAOd,SAAP,KAAqB,WAArB,IAAoCA,UAAUC,SAA9C,IAA2DD,UAAUC,SAAV,CAAoBC,WAApB,GAAkCC,KAAlC,CAAwC,oBAAxC,CAP7D;AAQA;;AAED;;;;;;AAMA,UAASd,UAAT,CAAoB0B,IAApB,EAA0B;AACzBA,OAAK,CAAL,IAAU,CAAC,KAAKvB,SAAL,GAAiB,IAAjB,GAAwB,EAAzB,IACT,KAAKwB,SADI,IAER,KAAKxB,SAAL,GAAiB,KAAjB,GAAyB,GAFjB,IAGTuB,KAAK,CAAL,CAHS,IAIR,KAAKvB,SAAL,GAAiB,KAAjB,GAAyB,GAJjB,IAKT,GALS,GAKHyB,OAAO9B,OAAP,CAAe+B,QAAf,CAAwB,KAAKC,IAA7B,CALP;;AAOA,MAAI,CAAC,KAAK3B,SAAV,EAAqB;AACpB;AACA;;AAED,MAAM4B,IAAI,YAAY,KAAKC,KAA3B;AACAN,OAAKO,MAAL,CAAY,CAAZ,EAAe,CAAf,EAAkBF,CAAlB,EAAqB,gBAArB;;AAEA;AACA;AACA;AACA,MAAIG,QAAQ,CAAZ;AACA,MAAIC,QAAQ,CAAZ;AACAT,OAAK,CAAL,EAAQU,OAAR,CAAgB,aAAhB,EAA+B,iBAAS;AACvC,OAAItB,UAAU,IAAd,EAAoB;AACnB;AACA;AACDoB;AACA,OAAIpB,UAAU,IAAd,EAAoB;AACnB;AACA;AACAqB,YAAQD,KAAR;AACA;AACD,GAVD;;AAYAR,OAAKO,MAAL,CAAYE,KAAZ,EAAmB,CAAnB,EAAsBJ,CAAtB;AACA;;AAED;;;;;;AAMA,UAAShC,GAAT,GAAsB;AAAA;;AACrB;AACA;AACA,SAAO,QAAOoB,OAAP,yCAAOA,OAAP,OAAmB,QAAnB,IACNA,QAAQpB,GADF,IAEN,qBAAQA,GAAR,2BAFD;AAGA;;AAED;;;;;;AAMA,UAASE,IAAT,CAAcoC,UAAd,EAA0B;AACzB,MAAI;AACH,OAAIA,UAAJ,EAAgB;AACfvC,YAAQM,OAAR,CAAgBkC,OAAhB,CAAwB,OAAxB,EAAiCD,UAAjC;AACA,IAFD,MAEO;AACNvC,YAAQM,OAAR,CAAgBmC,UAAhB,CAA2B,OAA3B;AACA;AACD,GAND,CAME,OAAOC,KAAP,EAAc;AACf;AACA;AACA;AACD;;AAED;;;;;;AAMA,UAAStC,IAAT,GAAgB;AACf,MAAIuC,UAAJ;AACA,MAAI;AACHA,OAAI3C,QAAQM,OAAR,CAAgBsC,OAAhB,CAAwB,OAAxB,CAAJ;AACA,GAFD,CAEE,OAAOF,KAAP,EAAc,CAGf;AAFA;AACA;;;AAGD;AACA,MAAI,CAACC,CAAD,IAAM,OAAOjC,OAAP,KAAmB,WAAzB,IAAwC,SAASA,OAArD,EAA8D;AAC7DiC,OAAIjC,QAAQmC,GAAR,CAAYC,KAAhB;AACA;;AAED,SAAOH,CAAP;AACA;;AAED;;;;;;;;;;;AAWA,UAASpC,YAAT,GAAwB;AACvB,MAAI;AACH;AACA;AACA,UAAOwC,YAAP;AACA,GAJD,CAIE,OAAOL,KAAP,EAAc;AACf;AACA;AACA;AACD;;AAEDZ,QAAO9B,OAAP,GAAiB,mBAAAgD,CAAQ,CAAR,EAAoBhD,OAApB,CAAjB;;KAEOiD,U,GAAcnB,OAAO9B,O,CAArBiD,U;;AAEP;;;;AAIAA,YAAWC,CAAX,GAAe,UAAUC,CAAV,EAAa;AAC3B,MAAI;AACH,UAAOC,KAAKC,SAAL,CAAeF,CAAf,CAAP;AACA,GAFD,CAEE,OAAOT,KAAP,EAAc;AACf,UAAO,iCAAiCA,MAAMY,OAA9C;AACA;AACD,EAND,C;;;;;;;ACjQA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;;AAErC;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;;;;;ACtLtC;;;;;AAKA,UAASC,KAAT,CAAeV,GAAf,EAAoB;AACnBW,cAAYC,KAAZ,GAAoBD,WAApB;AACAA,cAAYE,OAAZ,GAAsBF,WAAtB;AACAA,cAAYG,MAAZ,GAAqBA,MAArB;AACAH,cAAYI,OAAZ,GAAsBA,OAAtB;AACAJ,cAAYK,MAAZ,GAAqBA,MAArB;AACAL,cAAYM,OAAZ,GAAsBA,OAAtB;AACAN,cAAYzB,QAAZ,GAAuB,mBAAAiB,CAAQ,CAAR,CAAvB;;AAEAe,SAAOC,IAAP,CAAYnB,GAAZ,EAAiBoB,OAAjB,CAAyB,eAAO;AAC/BT,eAAYU,GAAZ,IAAmBrB,IAAIqB,GAAJ,CAAnB;AACA,GAFD;;AAIA;;;AAGAV,cAAYW,SAAZ,GAAwB,EAAxB;;AAEA;;;;AAIAX,cAAYY,KAAZ,GAAoB,EAApB;AACAZ,cAAYa,KAAZ,GAAoB,EAApB;;AAEA;;;;;AAKAb,cAAYP,UAAZ,GAAyB,EAAzB;;AAEA;;;;;;AAMA,WAASqB,WAAT,CAAqBzC,SAArB,EAAgC;AAC/B,OAAI0C,OAAO,CAAX;;AAEA,QAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAI3C,UAAU4C,MAA9B,EAAsCD,GAAtC,EAA2C;AAC1CD,WAAQ,CAACA,QAAQ,CAAT,IAAcA,IAAf,GAAuB1C,UAAU6C,UAAV,CAAqBF,CAArB,CAA9B;AACAD,YAAQ,CAAR,CAF0C,CAE/B;AACX;;AAED,UAAOf,YAAYhD,MAAZ,CAAmBmE,KAAKC,GAAL,CAASL,IAAT,IAAiBf,YAAYhD,MAAZ,CAAmBiE,MAAvD,CAAP;AACA;AACDjB,cAAYc,WAAZ,GAA0BA,WAA1B;;AAEA;;;;;;;AAOA,WAASd,WAAT,CAAqB3B,SAArB,EAAgC;AAC/B,OAAIgD,iBAAJ;;AAEA,YAASpB,KAAT,GAAwB;AAAA,sCAAN7B,IAAM;AAANA,SAAM;AAAA;;AACvB;AACA,QAAI,CAAC6B,MAAMK,OAAX,EAAoB;AACnB;AACA;;AAED,QAAMgB,OAAOrB,KAAb;;AAEA;AACA,QAAMsB,OAAOC,OAAO,IAAIC,IAAJ,EAAP,CAAb;AACA,QAAMC,KAAKH,QAAQF,YAAYE,IAApB,CAAX;AACAD,SAAK9C,IAAL,GAAYkD,EAAZ;AACAJ,SAAKK,IAAL,GAAYN,QAAZ;AACAC,SAAKC,IAAL,GAAYA,IAAZ;AACAF,eAAWE,IAAX;;AAEAnD,SAAK,CAAL,IAAU4B,YAAYG,MAAZ,CAAmB/B,KAAK,CAAL,CAAnB,CAAV;;AAEA,QAAI,OAAOA,KAAK,CAAL,CAAP,KAAmB,QAAvB,EAAiC;AAChC;AACAA,UAAKwD,OAAL,CAAa,IAAb;AACA;;AAED;AACA,QAAIhD,QAAQ,CAAZ;AACAR,SAAK,CAAL,IAAUA,KAAK,CAAL,EAAQU,OAAR,CAAgB,eAAhB,EAAiC,UAACtB,KAAD,EAAQqE,MAAR,EAAmB;AAC7D;AACA,SAAIrE,UAAU,IAAd,EAAoB;AACnB,aAAOA,KAAP;AACA;AACDoB;AACA,SAAMkD,YAAY9B,YAAYP,UAAZ,CAAuBoC,MAAvB,CAAlB;AACA,SAAI,OAAOC,SAAP,KAAqB,UAAzB,EAAqC;AACpC,UAAMC,MAAM3D,KAAKQ,KAAL,CAAZ;AACApB,cAAQsE,UAAUE,IAAV,CAAeV,IAAf,EAAqBS,GAArB,CAAR;;AAEA;AACA3D,WAAKO,MAAL,CAAYC,KAAZ,EAAmB,CAAnB;AACAA;AACA;AACD,YAAOpB,KAAP;AACA,KAhBS,CAAV;;AAkBA;AACAwC,gBAAYtD,UAAZ,CAAuBsF,IAAvB,CAA4BV,IAA5B,EAAkClD,IAAlC;;AAEA,QAAM6D,QAAQX,KAAK7E,GAAL,IAAYuD,YAAYvD,GAAtC;AACAwF,UAAMC,KAAN,CAAYZ,IAAZ,EAAkBlD,IAAlB;AACA;;AAED6B,SAAM5B,SAAN,GAAkBA,SAAlB;AACA4B,SAAMK,OAAN,GAAgBN,YAAYM,OAAZ,CAAoBjC,SAApB,CAAhB;AACA4B,SAAMpD,SAAN,GAAkBmD,YAAYnD,SAAZ,EAAlB;AACAoD,SAAMvB,KAAN,GAAcoC,YAAYzC,SAAZ,CAAd;AACA4B,SAAMkC,OAAN,GAAgBA,OAAhB;AACAlC,SAAMmC,MAAN,GAAeA,MAAf;AACA;AACA;;AAEA;AACA,OAAI,OAAOpC,YAAYqC,IAAnB,KAA4B,UAAhC,EAA4C;AAC3CrC,gBAAYqC,IAAZ,CAAiBpC,KAAjB;AACA;;AAEDD,eAAYW,SAAZ,CAAsB2B,IAAtB,CAA2BrC,KAA3B;;AAEA,UAAOA,KAAP;AACA;;AAED,WAASkC,OAAT,GAAmB;AAClB,OAAMvD,QAAQoB,YAAYW,SAAZ,CAAsB4B,OAAtB,CAA8B,IAA9B,CAAd;AACA,OAAI3D,UAAU,CAAC,CAAf,EAAkB;AACjBoB,gBAAYW,SAAZ,CAAsBhC,MAAtB,CAA6BC,KAA7B,EAAoC,CAApC;AACA,WAAO,IAAP;AACA;AACD,UAAO,KAAP;AACA;;AAED,WAASwD,MAAT,CAAgB/D,SAAhB,EAA2BmE,SAA3B,EAAsC;AACrC,OAAMC,WAAWzC,YAAY,KAAK3B,SAAL,IAAkB,OAAOmE,SAAP,KAAqB,WAArB,GAAmC,GAAnC,GAAyCA,SAA3D,IAAwEnE,SAApF,CAAjB;AACAoE,YAAShG,GAAT,GAAe,KAAKA,GAApB;AACA,UAAOgG,QAAP;AACA;;AAED;;;;;;;AAOA,WAASpC,MAAT,CAAgBtB,UAAhB,EAA4B;AAC3BiB,eAAYrD,IAAZ,CAAiBoC,UAAjB;;AAEAiB,eAAYY,KAAZ,GAAoB,EAApB;AACAZ,eAAYa,KAAZ,GAAoB,EAApB;;AAEA,OAAIG,UAAJ;AACA,OAAM0B,QAAQ,CAAC,OAAO3D,UAAP,KAAsB,QAAtB,GAAiCA,UAAjC,GAA8C,EAA/C,EAAmD2D,KAAnD,CAAyD,QAAzD,CAAd;AACA,OAAMC,MAAMD,MAAMzB,MAAlB;;AAEA,QAAKD,IAAI,CAAT,EAAYA,IAAI2B,GAAhB,EAAqB3B,GAArB,EAA0B;AACzB,QAAI,CAAC0B,MAAM1B,CAAN,CAAL,EAAe;AACd;AACA;AACA;;AAEDjC,iBAAa2D,MAAM1B,CAAN,EAASlC,OAAT,CAAiB,KAAjB,EAAwB,KAAxB,CAAb;;AAEA,QAAIC,WAAW,CAAX,MAAkB,GAAtB,EAA2B;AAC1BiB,iBAAYa,KAAZ,CAAkByB,IAAlB,CAAuB,IAAIpE,MAAJ,CAAW,MAAMa,WAAW6D,MAAX,CAAkB,CAAlB,CAAN,GAA6B,GAAxC,CAAvB;AACA,KAFD,MAEO;AACN5C,iBAAYY,KAAZ,CAAkB0B,IAAlB,CAAuB,IAAIpE,MAAJ,CAAW,MAAMa,UAAN,GAAmB,GAA9B,CAAvB;AACA;AACD;;AAED,QAAKiC,IAAI,CAAT,EAAYA,IAAIhB,YAAYW,SAAZ,CAAsBM,MAAtC,EAA8CD,GAA9C,EAAmD;AAClD,QAAM6B,WAAW7C,YAAYW,SAAZ,CAAsBK,CAAtB,CAAjB;AACA6B,aAASvC,OAAT,GAAmBN,YAAYM,OAAZ,CAAoBuC,SAASxE,SAA7B,CAAnB;AACA;AACD;;AAED;;;;;;AAMA,WAAS+B,OAAT,GAAmB;AAClB,OAAMrB,aAAa,6BACfiB,YAAYY,KAAZ,CAAkBkC,GAAlB,CAAsBC,WAAtB,CADe,sBAEf/C,YAAYa,KAAZ,CAAkBiC,GAAlB,CAAsBC,WAAtB,EAAmCD,GAAnC,CAAuC;AAAA,WAAa,MAAMzE,SAAnB;AAAA,IAAvC,CAFe,GAGjB2E,IAHiB,CAGZ,GAHY,CAAnB;AAIAhD,eAAYK,MAAZ,CAAmB,EAAnB;AACA,UAAOtB,UAAP;AACA;;AAED;;;;;;;AAOA,WAASuB,OAAT,CAAiB2C,IAAjB,EAAuB;AACtB,OAAIA,KAAKA,KAAKhC,MAAL,GAAc,CAAnB,MAA0B,GAA9B,EAAmC;AAClC,WAAO,IAAP;AACA;;AAED,OAAID,UAAJ;AACA,OAAI2B,YAAJ;;AAEA,QAAK3B,IAAI,CAAJ,EAAO2B,MAAM3C,YAAYa,KAAZ,CAAkBI,MAApC,EAA4CD,IAAI2B,GAAhD,EAAqD3B,GAArD,EAA0D;AACzD,QAAIhB,YAAYa,KAAZ,CAAkBG,CAAlB,EAAqBkC,IAArB,CAA0BD,IAA1B,CAAJ,EAAqC;AACpC,YAAO,KAAP;AACA;AACD;;AAED,QAAKjC,IAAI,CAAJ,EAAO2B,MAAM3C,YAAYY,KAAZ,CAAkBK,MAApC,EAA4CD,IAAI2B,GAAhD,EAAqD3B,GAArD,EAA0D;AACzD,QAAIhB,YAAYY,KAAZ,CAAkBI,CAAlB,EAAqBkC,IAArB,CAA0BD,IAA1B,CAAJ,EAAqC;AACpC,YAAO,IAAP;AACA;AACD;;AAED,UAAO,KAAP;AACA;;AAED;;;;;;;AAOA,WAASF,WAAT,CAAqBI,MAArB,EAA6B;AAC5B,UAAOA,OAAOC,QAAP,GACLC,SADK,CACK,CADL,EACQF,OAAOC,QAAP,GAAkBnC,MAAlB,GAA2B,CADnC,EAELnC,OAFK,CAEG,SAFH,EAEc,GAFd,CAAP;AAGA;;AAED;;;;;;;AAOA,WAASqB,MAAT,CAAgB4B,GAAhB,EAAqB;AACpB,OAAIA,eAAeuB,KAAnB,EAA0B;AACzB,WAAOvB,IAAIwB,KAAJ,IAAaxB,IAAIjC,OAAxB;AACA;AACD,UAAOiC,GAAP;AACA;;AAED/B,cAAYK,MAAZ,CAAmBL,YAAYpD,IAAZ,EAAnB;;AAEA,SAAOoD,WAAP;AACA;;AAED1B,QAAO9B,OAAP,GAAiBuD,KAAjB,C;;;;;;ACzQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,OAAO;AAClB,aAAY,MAAM;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B,uBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,sFAAqF;AACrF;;AAEA;AACA;AACA;AACA;AACA,MAAK,OAAO;AACZ;AACA;AACA,IAAG,qCAAqC;AACxC;AACA;AACA,MAAK;AACL;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,oBAAoB;AAChC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC9ZA;;;;;;AAMAvD,WAAU8B,OAA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CA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtJA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;AClKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC,WAAU;AACV;;AAEA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA,IAAG;AACH;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA,kCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,8BAA6B;AAC7B,IAAG;AACH,oBAAmB,iBAAiB;AACpC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC;AACxC,MAAK,yBAAyB;AAC9B,sBAAqB,gBAAgB;AACrC;AACA;AACA,MAAK,mDAAmD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5IA,kBAAiB;;AAEjB;AACA;AACA;;;;;;;;ACHA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AClBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB,2BAA2B;AAChD;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG,OAAO;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3jBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA2F;;AAE3F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA,+CAA8C,WAAW;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAqB,8BAA8B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA6C,OAAO;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA;AACA;AACA;;;;;;;AC3uBA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA,MAAK,YAAY;AACjB;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;;;;;;AChBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA,2BAA0B,iDAAiD;AAC3E;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,UAAS;AACT,4DAA2D;AAC3D;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,gIAA+H;AAC/H;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,iGAAgG;AAChG;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChaA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,iBAAiB;AACjD;AACA,EAAC;;AAED;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACpPA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,YAAW;;AAEX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+DAA8D,gBAAgB;AAC9E;;AAEA;;AAEA;;AAEA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B,qCAAqC;AAC/D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAc;AACd,MAAK;AACL,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA,+BAA8B,gBAAgB;AAC9C,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,aAAY,oBAAoB,oCAAoC;AACpE;;AAEA;;AAEA;AACA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY,YAAY;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oDAAmD;AACnD,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA,QAAO,OAAO;AACd;AACA;;AAEA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA,MAAK;;AAEL;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,EAAE;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;;;;;;;AC3lBA;AACA;AACA;AACA,aAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B,sCAAsC;;AAEhE,mBAAkB,gBAAgB;AAClC,iBAAgB,cAAc;AAC9B,qBAAoB,aAAa;;AAEjC;AACA;AACA;;AAEA;AACA;AACA,8BAA6B,SAAS;AACtC;AACA;AACA;AACA;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA,KAAI;AACJ,4BAA2B;AAC3B;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;;AAEA;AACA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;;;AClED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA,0DAAyD;AACzD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA,EAAC;;;;;;;ACnGD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,cAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAM,YAAY;;AAElB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;;AC9OA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,IAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;;;;;;ACtSA,gB;;;;;;;ACCA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA,G;;;;;;;ACRA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,mCAAmC;AACtD,MAAK;AACL,oBAAmB,qBAAqB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,+BAA+B;AAC5C;AACA;AACA;;AAEA,cAAa,4BAA4B;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB,0BAA0B;AAC3C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACrbA;;AAEA;AACA;;AAEA;;AAEA,6BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;;;;;;;;ACXA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,oBAAoB;AAC/B,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,gBAAgB;AAC3B,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"socket.io.dev.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 8eaf0a29f3d9e985ff91","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/index.js\n// module id = 0\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/url.js\n// module id = 1\n// module chunks = 0","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\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\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\nfunction log(...args) {\n\t// This hackery is required for IE8/9, where\n\t// the `console.log` function doesn't have 'apply'\n\treturn typeof console === 'object' &&\n\t\tconsole.log &&\n\t\tconsole.log(...args);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\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\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/browser.js","// 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;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 4\n// module chunks = 0","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* Active `debug` instances.\n\t*/\n\tcreateDebug.instances = [];\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.enabled = createDebug.enabled(namespace);\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = selectColor(namespace);\n\t\tdebug.destroy = destroy;\n\t\tdebug.extend = extend;\n\t\t// Debug.formatArgs = formatArgs;\n\t\t// debug.rawLog = rawLog;\n\n\t\t// env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\tcreateDebug.instances.push(debug);\n\n\t\treturn debug;\n\t}\n\n\tfunction destroy() {\n\t\tconst index = createDebug.instances.indexOf(this);\n\t\tif (index !== -1) {\n\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\tconst instance = createDebug.instances[i];\n\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/common.js","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\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' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\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 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\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  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= 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  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ms/index.js\n// module id = 6\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 7\n// module chunks = 0","/**\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  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\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  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\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' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\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  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\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;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\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-zA-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}\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 (!r && typeof process !== 'undefined' && 'env' in 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\n\n// WEBPACK FOOTER //\n// ./~/socket.io-parser/~/debug/src/browser.js","\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 = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\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, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % 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 createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\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    // turn the `arguments` into a proper Array\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.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-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 (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\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  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (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  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\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  if (name[name.length - 1] === '*') {\n    return true;\n  }\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\n\n// WEBPACK FOOTER //\n// ./~/socket.io-parser/~/debug/src/debug.js","/**\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 ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\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(\n    str\n  );\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/~/ms/index.js\n// module id = 10\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 11\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 12\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 13\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 14\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/manager.js\n// module id = 15\n// module chunks = 0","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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(JSON.parse(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 18\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('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 self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 19\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 20\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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 && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 21\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 22\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 23\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 24\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 25\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 26\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 27\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 28\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 29\n// module chunks = 0","/*\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 30\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 31\n// module chunks = 0","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 32\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 33\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 34\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('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 * Until https://github.com/tc39/proposal-global is shipped.\n */\nfunction glob () {\n  return typeof self !== 'undefined' ? self\n      : typeof window !== 'undefined' ? window\n      : typeof global !== 'undefined' ? global : {};\n}\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    var global = glob();\n    callbacks = global.___eio = (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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 35\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\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  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 36\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// ws (ignored)\n// module id = 37\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 38\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/socket.js\n// module id = 39\n// module chunks = 0","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 40\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/on.js\n// module id = 41\n// module chunks = 0","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 42\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 43\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io-client/dist/socket.io.js b/signaling_server/service/node_modules/socket.io-client/dist/socket.io.js
deleted file mode 100644 (file)
index 270777b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * Socket.IO v2.3.0
- * (c) 2014-2019 Guillermo Rauch
- * Released under the MIT License.
- */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){function r(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,r=o(t),i=r.source,u=r.id,p=r.path,h=c[u]&&p in c[u].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||h;return f?(a("ignoring socket cache for %s",i),n=s(i,e)):(c[u]||(a("new io instance for %s",i),c[u]=s(i,e)),n=c[u]),r.query&&!e.query&&(e.query=r.query),n.socket(r.path,e)}var o=n(1),i=n(7),s=n(15),a=n(3)("socket.io-client");t.exports=e=r;var c=e.managers={};e.protocol=i.protocol,e.connect=r,e.Manager=n(15),e.Socket=n(39)},function(t,e,n){function r(t,e){var n=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(i("protocol-less url %s",t),t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),i("parse %s",t),n=o(t)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";var r=n.host.indexOf(":")!==-1,s=r?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+s+":"+n.port,n.href=n.protocol+"://"+s+(e&&e.port===n.port?"":":"+n.port),n}var o=n(2),i=n(3)("socket.io-client:url");t.exports=r},function(t,e){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");o!=-1&&i!=-1&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s=n.exec(t||""),a={},c=14;c--;)a[r[c]]=s[c]||"";return o!=-1&&i!=-1&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a}},function(t,e,n){(function(r){"use strict";function o(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+t.exports.humanize(this.diff),this.useColors){var n="color: "+this.color;e.splice(1,0,n,"color: inherit");var r=0,o=0;e[0].replace(/%[a-zA-Z%]/g,function(t){"%%"!==t&&(r++,"%c"===t&&(o=r))}),e.splice(o,0,n)}}function s(){var t;return"object"===("undefined"==typeof console?"undefined":p(console))&&console.log&&(t=console).log.apply(t,arguments)}function a(t){try{t?e.storage.setItem("debug",t):e.storage.removeItem("debug")}catch(n){}}function c(){var t=void 0;try{t=e.storage.getItem("debug")}catch(n){}return!t&&"undefined"!=typeof r&&"env"in r&&(t=r.env.DEBUG),t}function u(){try{return localStorage}catch(t){}}var p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.log=s,e.formatArgs=i,e.save=a,e.load=c,e.useColors=o,e.storage=u(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.exports=n(5)(e);var h=t.exports.formatters;h.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}).call(e,n(4))},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(t){if(p===setTimeout)return setTimeout(t,0);if((p===n||!p)&&setTimeout)return p=setTimeout,setTimeout(t,0);try{return p(t,0)}catch(e){try{return p.call(null,t,0)}catch(e){return p.call(this,t,0)}}}function i(t){if(h===clearTimeout)return clearTimeout(t);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(t);try{return h(t)}catch(e){try{return h.call(null,t)}catch(e){return h.call(this,t)}}}function s(){y&&l&&(y=!1,l.length?d=l.concat(d):m=-1,d.length&&a())}function a(){if(!y){var t=o(s);y=!0;for(var e=d.length;e;){for(l=d,d=[];++m<e;)l&&l[m].run();m=-1,e=d.length}l=null,y=!1,i(t)}}function c(t,e){this.fun=t,this.array=e}function u(){}var p,h,f=t.exports={};!function(){try{p="function"==typeof setTimeout?setTimeout:n}catch(t){p=n}try{h="function"==typeof clearTimeout?clearTimeout:r}catch(t){h=r}}();var l,d=[],y=!1,m=-1;f.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];d.push(new c(t,e)),1!==d.length||y||o(a)},c.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=u,f.addListener=u,f.once=u,f.off=u,f.removeListener=u,f.removeAllListeners=u,f.emit=u,f.prependListener=u,f.prependOnceListener=u,f.listeners=function(t){return[]},f.binding=function(t){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(t){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},function(t,e,n){"use strict";function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}function o(t){function e(t){for(var e=0,n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return o.colors[Math.abs(e)%o.colors.length]}function o(t){function n(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];if(n.enabled){var s=n,a=Number(new Date),c=a-(r||a);s.diff=c,s.prev=r,s.curr=a,r=a,e[0]=o.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");var u=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,function(t,n){if("%%"===t)return t;u++;var r=o.formatters[n];if("function"==typeof r){var i=e[u];t=r.call(s,i),e.splice(u,1),u--}return t}),o.formatArgs.call(s,e);var p=s.log||o.log;p.apply(s,e)}}var r=void 0;return n.namespace=t,n.enabled=o.enabled(t),n.useColors=o.useColors(),n.color=e(t),n.destroy=i,n.extend=s,"function"==typeof o.init&&o.init(n),o.instances.push(n),n}function i(){var t=o.instances.indexOf(this);return t!==-1&&(o.instances.splice(t,1),!0)}function s(t,e){var n=o(this.namespace+("undefined"==typeof e?":":e)+t);return n.log=this.log,n}function a(t){o.save(t),o.names=[],o.skips=[];var e=void 0,n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length;for(e=0;e<r;e++)n[e]&&(t=n[e].replace(/\*/g,".*?"),"-"===t[0]?o.skips.push(new RegExp("^"+t.substr(1)+"$")):o.names.push(new RegExp("^"+t+"$")));for(e=0;e<o.instances.length;e++){var i=o.instances[e];i.enabled=o.enabled(i.namespace)}}function c(){var t=[].concat(r(o.names.map(p)),r(o.skips.map(p).map(function(t){return"-"+t}))).join(",");return o.enable(""),t}function u(t){if("*"===t[t.length-1])return!0;var e=void 0,n=void 0;for(e=0,n=o.skips.length;e<n;e++)if(o.skips[e].test(t))return!1;for(e=0,n=o.names.length;e<n;e++)if(o.names[e].test(t))return!0;return!1}function p(t){return t.toString().substring(2,t.toString().length-2).replace(/\.\*\?$/,"*")}function h(t){return t instanceof Error?t.stack||t.message:t}return o.debug=o,o["default"]=o,o.coerce=h,o.disable=c,o.enable=a,o.enabled=u,o.humanize=n(6),Object.keys(t).forEach(function(e){o[e]=t[e]}),o.instances=[],o.names=[],o.skips=[],o.formatters={},o.selectColor=e,o.enable(o.load()),o}t.exports=o},function(t,e){function n(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*h;case"weeks":case"week":case"w":return n*p;case"days":case"day":case"d":return n*u;case"hours":case"hour":case"hrs":case"hr":case"h":return n*c;case"minutes":case"minute":case"mins":case"min":case"m":return n*a;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function r(t){var e=Math.abs(t);return e>=u?Math.round(t/u)+"d":e>=c?Math.round(t/c)+"h":e>=a?Math.round(t/a)+"m":e>=s?Math.round(t/s)+"s":t+"ms"}function o(t){var e=Math.abs(t);return e>=u?i(t,e,u,"day"):e>=c?i(t,e,c,"hour"):e>=a?i(t,e,a,"minute"):e>=s?i(t,e,s,"second"):t+" ms"}function i(t,e,n,r){var o=e>=1.5*n;return Math.round(t/n)+" "+r+(o?"s":"")}var s=1e3,a=60*s,c=60*a,u=24*c,p=7*u,h=365.25*u;t.exports=function(t,e){e=e||{};var i=typeof t;if("string"===i&&t.length>0)return n(t);if("number"===i&&isFinite(t))return e["long"]?o(t):r(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){function r(){}function o(t){var n=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(n+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(n+=t.nsp+","),null!=t.id&&(n+=t.id),null!=t.data){var r=i(t.data);if(r===!1)return g;n+=r}return f("encoded %j as %s",t,n),n}function i(t){try{return JSON.stringify(t)}catch(e){return!1}}function s(t,e){function n(t){var n=d.deconstructPacket(t),r=o(n.packet),i=n.buffers;i.unshift(r),e(i)}d.removeBlobs(t,n)}function a(){this.reconstructor=null}function c(t){var n=0,r={type:Number(t.charAt(0))};if(null==e.types[r.type])return h("unknown packet type "+r.type);if(e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type){for(var o="";"-"!==t.charAt(++n)&&(o+=t.charAt(n),n!=t.length););if(o!=Number(o)||"-"!==t.charAt(n))throw new Error("Illegal attachments");r.attachments=Number(o)}if("/"===t.charAt(n+1))for(r.nsp="";++n;){var i=t.charAt(n);if(","===i)break;if(r.nsp+=i,n===t.length)break}else r.nsp="/";var s=t.charAt(n+1);if(""!==s&&Number(s)==s){for(r.id="";++n;){var i=t.charAt(n);if(null==i||Number(i)!=i){--n;break}if(r.id+=t.charAt(n),n===t.length)break}r.id=Number(r.id)}if(t.charAt(++n)){var a=u(t.substr(n)),c=a!==!1&&(r.type===e.ERROR||y(a));if(!c)return h("invalid payload");r.data=a}return f("decoded %s as %j",t,r),r}function u(t){try{return JSON.parse(t)}catch(e){return!1}}function p(t){this.reconPack=t,this.buffers=[]}function h(t){return{type:e.ERROR,data:"parser error: "+t}}var f=n(8)("socket.io-parser"),l=n(11),d=n(12),y=n(13),m=n(14);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=r,e.Decoder=a;var g=e.ERROR+'"encode error"';r.prototype.encode=function(t,n){if(f("encoding packet %j",t),e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,n);else{var r=o(t);n([r])}},l(a.prototype),a.prototype.add=function(t){var n;if("string"==typeof t)n=c(t),e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type?(this.reconstructor=new p(n),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",n)):this.emit("decoded",n);else{if(!m(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");n=this.reconstructor.takeBinaryData(t),n&&(this.reconstructor=null,this.emit("decoded",n))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},p.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=d.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},p.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,n){(function(r){"use strict";function o(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var o=0,i=0;t[0].replace(/%[a-zA-Z%]/g,function(t){"%%"!==t&&(o++,"%c"===t&&(i=o))}),t.splice(i,0,r)}}function s(){return"object"===("undefined"==typeof console?"undefined":p(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(n){}}function c(){var t;try{t=e.storage.debug}catch(n){}return!t&&"undefined"!=typeof r&&"env"in r&&(t=r.env.DEBUG),t}function u(){try{return window.localStorage}catch(t){}}var p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e=t.exports=n(9),e.log=s,e.formatArgs=i,e.save=a,e.load=c,e.useColors=o,e.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},e.enable(c())}).call(e,n(4))},function(t,e,n){"use strict";function r(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}function o(t){function n(){if(n.enabled){var t=n,r=+new Date,i=r-(o||r);t.diff=i,t.prev=o,t.curr=r,o=r;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var c=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,function(n,r){if("%%"===n)return n;c++;var o=e.formatters[r];if("function"==typeof o){var i=s[c];n=o.call(t,i),s.splice(c,1),c--}return n}),e.formatArgs.call(t,s);var u=n.log||e.log||console.log.bind(console);u.apply(t,s)}}var o;return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=r(t),n.destroy=i,"function"==typeof e.init&&e.init(n),e.instances.push(n),n}function i(){var t=e.instances.indexOf(this);return t!==-1&&(e.instances.splice(t,1),!0)}function s(t){e.save(t),e.names=[],e.skips=[];var n,r=("string"==typeof t?t:"").split(/[\s,]+/),o=r.length;for(n=0;n<o;n++)r[n]&&(t=r[n].replace(/\*/g,".*?"),"-"===t[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")));for(n=0;n<e.instances.length;n++){var i=e.instances[n];i.enabled=e.enabled(i.namespace)}}function a(){e.enable("")}function c(t){if("*"===t[t.length-1])return!0;var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1}function u(t){return t instanceof Error?t.stack||t.message:t}e=t.exports=o.debug=o["default"]=o,e.coerce=u,e.disable=a,e.enable=s,e.enabled=c,e.humanize=n(10),e.instances=[],e.names=[],e.skips=[],e.formatters={}},function(t,e){function n(t){if(t=String(t),!(t.length>100)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*p;case"days":case"day":case"d":return n*u;case"hours":case"hour":case"hrs":case"hr":case"h":return n*c;case"minutes":case"minute":case"mins":case"min":case"m":return n*a;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function r(t){return t>=u?Math.round(t/u)+"d":t>=c?Math.round(t/c)+"h":t>=a?Math.round(t/a)+"m":t>=s?Math.round(t/s)+"s":t+"ms"}function o(t){return i(t,u,"day")||i(t,c,"hour")||i(t,a,"minute")||i(t,s,"second")||t+" ms"}function i(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}var s=1e3,a=60*s,c=60*a,u=24*c,p=365.25*u;t.exports=function(t,e){e=e||{};var i=typeof t;if("string"===i&&t.length>0)return n(t);if("number"===i&&isNaN(t)===!1)return e["long"]?o(t):r(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){function r(t){if(t)return o(t)}function o(t){for(var e in r.prototype)t[e]=r.prototype[e];return t}t.exports=r,r.prototype.on=r.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},r.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var r,o=0;o<n.length;o++)if(r=n[o],r===e||r.fn===e){n.splice(o,1);break}return this},r.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),n=this._callbacks["$"+t];if(n){n=n.slice(0);for(var r=0,o=n.length;r<o;++r)n[r].apply(this,e)}return this},r.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},r.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,n){function r(t,e){if(!t)return t;if(s(t)){var n={_placeholder:!0,num:e.length};return e.push(t),n}if(i(t)){for(var o=new Array(t.length),a=0;a<t.length;a++)o[a]=r(t[a],e);return o}if("object"==typeof t&&!(t instanceof Date)){var o={};for(var c in t)o[c]=r(t[c],e);return o}return t}function o(t,e){if(!t)return t;if(t&&t._placeholder)return e[t.num];if(i(t))for(var n=0;n<t.length;n++)t[n]=o(t[n],e);else if("object"==typeof t)for(var r in t)t[r]=o(t[r],e);return t}var i=n(13),s=n(14),a=Object.prototype.toString,c="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===a.call(Blob),u="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===a.call(File);e.deconstructPacket=function(t){var e=[],n=t.data,o=t;return o.data=r(n,e),o.attachments=e.length,{packet:o,buffers:e}},e.reconstructPacket=function(t,e){return t.data=o(t.data,e),t.attachments=void 0,t},e.removeBlobs=function(t,e){function n(t,a,p){if(!t)return t;if(c&&t instanceof Blob||u&&t instanceof File){r++;var h=new FileReader;h.onload=function(){p?p[a]=this.result:o=this.result,--r||e(o)},h.readAsArrayBuffer(t)}else if(i(t))for(var f=0;f<t.length;f++)n(t[f],f,t);else if("object"==typeof t&&!s(t))for(var l in t)n(t[l],l,t)}var r=0,o=t;n(o),r||e(o)}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e){function n(t){return r&&Buffer.isBuffer(t)||o&&(t instanceof ArrayBuffer||i(t))}t.exports=n;var r="function"==typeof Buffer&&"function"==typeof Buffer.isBuffer,o="function"==typeof ArrayBuffer,i=function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer}},function(t,e,n){function r(t,e){if(!(this instanceof r))return new r(t,e);t&&"object"==typeof t&&(e=t,t=void 0),e=e||{},e.path=e.path||"/socket.io",this.nsps={},this.subs=[],this.opts=e,this.reconnection(e.reconnection!==!1),this.reconnectionAttempts(e.reconnectionAttempts||1/0),this.reconnectionDelay(e.reconnectionDelay||1e3),this.reconnectionDelayMax(e.reconnectionDelayMax||5e3),this.randomizationFactor(e.randomizationFactor||.5),this.backoff=new f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==e.timeout?2e4:e.timeout),this.readyState="closed",this.uri=t,this.connecting=[],this.lastPing=null,this.encoding=!1,this.packetBuffer=[];var n=e.parser||a;this.encoder=new n.Encoder,this.decoder=new n.Decoder,this.autoConnect=e.autoConnect!==!1,this.autoConnect&&this.open()}var o=n(16),i=n(39),s=n(11),a=n(7),c=n(41),u=n(42),p=n(3)("socket.io-client:manager"),h=n(38),f=n(43),l=Object.prototype.hasOwnProperty;t.exports=r,r.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var t in this.nsps)l.call(this.nsps,t)&&this.nsps[t].emit.apply(this.nsps[t],arguments)},r.prototype.updateSocketIds=function(){for(var t in this.nsps)l.call(this.nsps,t)&&(this.nsps[t].id=this.generateId(t))},r.prototype.generateId=function(t){return("/"===t?"":t+"#")+this.engine.id},s(r.prototype),r.prototype.reconnection=function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection},r.prototype.reconnectionAttempts=function(t){return arguments.length?(this._reconnectionAttempts=t,this):this._reconnectionAttempts},r.prototype.reconnectionDelay=function(t){return arguments.length?(this._reconnectionDelay=t,this.backoff&&this.backoff.setMin(t),this):this._reconnectionDelay},r.prototype.randomizationFactor=function(t){return arguments.length?(this._randomizationFactor=t,this.backoff&&this.backoff.setJitter(t),this):this._randomizationFactor},r.prototype.reconnectionDelayMax=function(t){return arguments.length?(this._reconnectionDelayMax=t,this.backoff&&this.backoff.setMax(t),this):this._reconnectionDelayMax},r.prototype.timeout=function(t){return arguments.length?(this._timeout=t,this):this._timeout},r.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},r.prototype.open=r.prototype.connect=function(t,e){if(p("readyState %s",this.readyState),~this.readyState.indexOf("open"))return this;p("opening %s",this.uri),this.engine=o(this.uri,this.opts);var n=this.engine,r=this;this.readyState="opening",this.skipReconnect=!1;var i=c(n,"open",function(){r.onopen(),t&&t()}),s=c(n,"error",function(e){if(p("connect_error"),r.cleanup(),r.readyState="closed",r.emitAll("connect_error",e),t){var n=new Error("Connection error");n.data=e,t(n)}else r.maybeReconnectOnOpen()});if(!1!==this._timeout){var a=this._timeout;p("connect attempt will timeout after %d",a);var u=setTimeout(function(){p("connect attempt timed out after %d",a),i.destroy(),n.close(),n.emit("error","timeout"),r.emitAll("connect_timeout",a)},a);this.subs.push({destroy:function(){clearTimeout(u)}})}return this.subs.push(i),this.subs.push(s),this},r.prototype.onopen=function(){p("open"),this.cleanup(),this.readyState="open",this.emit("open");var t=this.engine;this.subs.push(c(t,"data",u(this,"ondata"))),this.subs.push(c(t,"ping",u(this,"onping"))),this.subs.push(c(t,"pong",u(this,"onpong"))),this.subs.push(c(t,"error",u(this,"onerror"))),this.subs.push(c(t,"close",u(this,"onclose"))),this.subs.push(c(this.decoder,"decoded",u(this,"ondecoded")))},r.prototype.onping=function(){this.lastPing=new Date,this.emitAll("ping")},r.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)},r.prototype.ondata=function(t){this.decoder.add(t)},r.prototype.ondecoded=function(t){this.emit("packet",t)},r.prototype.onerror=function(t){p("error",t),this.emitAll("error",t)},r.prototype.socket=function(t,e){function n(){~h(o.connecting,r)||o.connecting.push(r)}var r=this.nsps[t];if(!r){r=new i(this,t,e),this.nsps[t]=r;var o=this;r.on("connecting",n),r.on("connect",function(){r.id=o.generateId(t)}),this.autoConnect&&n()}return r},r.prototype.destroy=function(t){var e=h(this.connecting,t);~e&&this.connecting.splice(e,1),this.connecting.length||this.close()},r.prototype.packet=function(t){p("writing packet %j",t);var e=this;t.query&&0===t.type&&(t.nsp+="?"+t.query),e.encoding?e.packetBuffer.push(t):(e.encoding=!0,this.encoder.encode(t,function(n){for(var r=0;r<n.length;r++)e.engine.write(n[r],t.options);e.encoding=!1,e.processPacketQueue()}))},r.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},r.prototype.cleanup=function(){p("cleanup");for(var t=this.subs.length,e=0;e<t;e++){var n=this.subs.shift();n.destroy()}this.packetBuffer=[],this.encoding=!1,this.lastPing=null,this.decoder.destroy()},r.prototype.close=r.prototype.disconnect=function(){p("disconnect"),this.skipReconnect=!0,this.reconnecting=!1,"opening"===this.readyState&&this.cleanup(),this.backoff.reset(),this.readyState="closed",this.engine&&this.engine.close()},r.prototype.onclose=function(t){p("onclose"),this.cleanup(),this.backoff.reset(),this.readyState="closed",this.emit("close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()},r.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var t=this;if(this.backoff.attempts>=this._reconnectionAttempts)p("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();p("will wait %dms before reconnect attempt",e),this.reconnecting=!0;var n=setTimeout(function(){t.skipReconnect||(p("attempting reconnect"),t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(p("reconnect attempt error"),t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):(p("reconnect success"),t.onreconnect())}))},e);this.subs.push({destroy:function(){clearTimeout(n)}})}},r.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,n){t.exports=n(17),t.exports.parser=n(24)},function(t,e,n){function r(t,e){return this instanceof r?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new r(t,e)}function o(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var i=n(18),s=n(11),a=n(3)("engine.io-client:socket"),c=n(38),u=n(24),p=n(2),h=n(32);t.exports=r,r.priorWebsocketSuccess=!1,s(r.prototype),r.protocol=u.protocol,r.Socket=r,r.Transport=n(23),r.transports=n(18),r.parser=n(24),r.prototype.createTransport=function(t){a('creating transport "%s"',t);var e=o(this.query);e.EIO=u.protocol,e.transport=t;var n=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var r=new i[t]({query:e,socket:this,agent:n.agent||this.agent,hostname:n.hostname||this.hostname,port:n.port||this.port,secure:n.secure||this.secure,path:n.path||this.path,forceJSONP:n.forceJSONP||this.forceJSONP,jsonp:n.jsonp||this.jsonp,forceBase64:n.forceBase64||this.forceBase64,enablesXDR:n.enablesXDR||this.enablesXDR,withCredentials:n.withCredentials||this.withCredentials,timestampRequests:n.timestampRequests||this.timestampRequests,timestampParam:n.timestampParam||this.timestampParam,policyPort:n.policyPort||this.policyPort,pfx:n.pfx||this.pfx,key:n.key||this.key,passphrase:n.passphrase||this.passphrase,cert:n.cert||this.cert,ca:n.ca||this.ca,ciphers:n.ciphers||this.ciphers,rejectUnauthorized:n.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:n.perMessageDeflate||this.perMessageDeflate,extraHeaders:n.extraHeaders||this.extraHeaders,forceNode:n.forceNode||this.forceNode,localAddress:n.localAddress||this.localAddress,requestTimeout:n.requestTimeout||this.requestTimeout,protocols:n.protocols||void 0,isReactNative:this.isReactNative});return r},r.prototype.open=function(){var t;if(this.rememberUpgrade&&r.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{
-if(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(n){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},r.prototype.setTransport=function(t){a("setting transport %s",t.name);var e=this;this.transport&&(a("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},r.prototype.probe=function(t){function e(){if(f.onlyBinaryUpgrades){var e=!this.supportsBinary&&f.transport.supportsBinary;h=h||e}h||(a('probe transport "%s" opened',t),p.send([{type:"ping",data:"probe"}]),p.once("packet",function(e){if(!h)if("pong"===e.type&&"probe"===e.data){if(a('probe transport "%s" pong',t),f.upgrading=!0,f.emit("upgrading",p),!p)return;r.priorWebsocketSuccess="websocket"===p.name,a('pausing current transport "%s"',f.transport.name),f.transport.pause(function(){h||"closed"!==f.readyState&&(a("changing transport and sending upgrade packet"),u(),f.setTransport(p),p.send([{type:"upgrade"}]),f.emit("upgrade",p),p=null,f.upgrading=!1,f.flush())})}else{a('probe transport "%s" failed',t);var n=new Error("probe error");n.transport=p.name,f.emit("upgradeError",n)}}))}function n(){h||(h=!0,u(),p.close(),p=null)}function o(e){var r=new Error("probe error: "+e);r.transport=p.name,n(),a('probe transport "%s" failed because of error: %s',t,e),f.emit("upgradeError",r)}function i(){o("transport closed")}function s(){o("socket closed")}function c(t){p&&t.name!==p.name&&(a('"%s" works - aborting "%s"',t.name,p.name),n())}function u(){p.removeListener("open",e),p.removeListener("error",o),p.removeListener("close",i),f.removeListener("close",s),f.removeListener("upgrading",c)}a('probing transport "%s"',t);var p=this.createTransport(t,{probe:1}),h=!1,f=this;r.priorWebsocketSuccess=!1,p.once("open",e),p.once("error",o),p.once("close",i),this.once("close",s),this.once("upgrading",c),p.open()},r.prototype.onOpen=function(){if(a("socket open"),this.readyState="open",r.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause){a("starting upgrade probes");for(var t=0,e=this.upgrades.length;t<e;t++)this.probe(this.upgrades[t])}},r.prototype.onPacket=function(t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(a('socket receive: type "%s", data "%s"',t.type,t.data),this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"pong":this.setPing(),this.emit("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}else a('packet received with socket readyState "%s"',this.readyState)},r.prototype.onHandshake=function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!==this.readyState&&(this.setPing(),this.removeListener("heartbeat",this.onHeartbeat),this.on("heartbeat",this.onHeartbeat))},r.prototype.onHeartbeat=function(t){clearTimeout(this.pingTimeoutTimer);var e=this;e.pingTimeoutTimer=setTimeout(function(){"closed"!==e.readyState&&e.onClose("ping timeout")},t||e.pingInterval+e.pingTimeout)},r.prototype.setPing=function(){var t=this;clearTimeout(t.pingIntervalTimer),t.pingIntervalTimer=setTimeout(function(){a("writing ping packet - expecting pong within %sms",t.pingTimeout),t.ping(),t.onHeartbeat(t.pingTimeout)},t.pingInterval)},r.prototype.ping=function(){var t=this;this.sendPacket("ping",function(){t.emit("ping")})},r.prototype.onDrain=function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()},r.prototype.flush=function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(a("flushing %d packets in socket",this.writeBuffer.length),this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))},r.prototype.write=r.prototype.send=function(t,e,n){return this.sendPacket("message",t,e,n),this},r.prototype.sendPacket=function(t,e,n,r){if("function"==typeof e&&(r=e,e=void 0),"function"==typeof n&&(r=n,n=null),"closing"!==this.readyState&&"closed"!==this.readyState){n=n||{},n.compress=!1!==n.compress;var o={type:t,data:e,options:n};this.emit("packetCreate",o),this.writeBuffer.push(o),r&&this.once("flush",r),this.flush()}},r.prototype.close=function(){function t(){r.onClose("forced close"),a("socket closing - telling transport to close"),r.transport.close()}function e(){r.removeListener("upgrade",e),r.removeListener("upgradeError",e),t()}function n(){r.once("upgrade",e),r.once("upgradeError",e)}if("opening"===this.readyState||"open"===this.readyState){this.readyState="closing";var r=this;this.writeBuffer.length?this.once("drain",function(){this.upgrading?n():t()}):this.upgrading?n():t()}return this},r.prototype.onError=function(t){a("socket error %j",t),r.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)},r.prototype.onClose=function(t,e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){a('socket close with reason: "%s"',t);var n=this;clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",t,e),n.writeBuffer=[],n.prevBufferLen=0}},r.prototype.filterUpgrades=function(t){for(var e=[],n=0,r=t.length;n<r;n++)~c(this.transports,t[n])&&e.push(t[n]);return e}},function(t,e,n){function r(t){var e,n=!1,r=!1,a=!1!==t.jsonp;if("undefined"!=typeof location){var c="https:"===location.protocol,u=location.port;u||(u=c?443:80),n=t.hostname!==location.hostname||u!==t.port,r=t.secure!==c}if(t.xdomain=n,t.xscheme=r,e=new o(t),"open"in e&&!t.forceJSONP)return new i(t);if(!a)throw new Error("JSONP disabled");return new s(t)}var o=n(19),i=n(21),s=n(35),a=n(36);e.polling=r,e.websocket=a},function(t,e,n){var r=n(20);t.exports=function(t){var e=t.xdomain,n=t.xscheme,o=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||r))return new XMLHttpRequest}catch(i){}try{if("undefined"!=typeof XDomainRequest&&!n&&o)return new XDomainRequest}catch(i){}if(!e)try{return new(self[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(i){}}},function(t,e){try{t.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(n){t.exports=!1}},function(t,e,n){function r(){}function o(t){if(c.call(this,t),this.requestTimeout=t.requestTimeout,this.extraHeaders=t.extraHeaders,"undefined"!=typeof location){var e="https:"===location.protocol,n=location.port;n||(n=e?443:80),this.xd="undefined"!=typeof location&&t.hostname!==location.hostname||n!==t.port,this.xs=t.secure!==e}}function i(t){this.method=t.method||"GET",this.uri=t.uri,this.xd=!!t.xd,this.xs=!!t.xs,this.async=!1!==t.async,this.data=void 0!==t.data?t.data:null,this.agent=t.agent,this.isBinary=t.isBinary,this.supportsBinary=t.supportsBinary,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.requestTimeout=t.requestTimeout,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.extraHeaders=t.extraHeaders,this.create()}function s(){for(var t in i.requests)i.requests.hasOwnProperty(t)&&i.requests[t].abort()}var a=n(19),c=n(22),u=n(11),p=n(33),h=n(3)("engine.io-client:polling-xhr");if(t.exports=o,t.exports.Request=i,p(o,c),o.prototype.supportsBinary=!0,o.prototype.request=function(t){return t=t||{},t.uri=this.uri(),t.xd=this.xd,t.xs=this.xs,t.agent=this.agent||!1,t.supportsBinary=this.supportsBinary,t.enablesXDR=this.enablesXDR,t.withCredentials=this.withCredentials,t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized,t.requestTimeout=this.requestTimeout,t.extraHeaders=this.extraHeaders,new i(t)},o.prototype.doWrite=function(t,e){var n="string"!=typeof t&&void 0!==t,r=this.request({method:"POST",data:t,isBinary:n}),o=this;r.on("success",e),r.on("error",function(t){o.onError("xhr post error",t)}),this.sendXhr=r},o.prototype.doPoll=function(){h("xhr poll");var t=this.request(),e=this;t.on("data",function(t){e.onData(t)}),t.on("error",function(t){e.onError("xhr poll error",t)}),this.pollXhr=t},u(i.prototype),i.prototype.create=function(){var t={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized;var e=this.xhr=new a(t),n=this;try{h("xhr open %s: %s",this.method,this.uri),e.open(this.method,this.uri,this.async);try{if(this.extraHeaders){e.setDisableHeaderCheck&&e.setDisableHeaderCheck(!0);for(var r in this.extraHeaders)this.extraHeaders.hasOwnProperty(r)&&e.setRequestHeader(r,this.extraHeaders[r])}}catch(o){}if("POST"===this.method)try{this.isBinary?e.setRequestHeader("Content-type","application/octet-stream"):e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(o){}try{e.setRequestHeader("Accept","*/*")}catch(o){}"withCredentials"in e&&(e.withCredentials=this.withCredentials),this.requestTimeout&&(e.timeout=this.requestTimeout),this.hasXDR()?(e.onload=function(){n.onLoad()},e.onerror=function(){n.onError(e.responseText)}):e.onreadystatechange=function(){if(2===e.readyState)try{var t=e.getResponseHeader("Content-Type");(n.supportsBinary&&"application/octet-stream"===t||"application/octet-stream; charset=UTF-8"===t)&&(e.responseType="arraybuffer")}catch(r){}4===e.readyState&&(200===e.status||1223===e.status?n.onLoad():setTimeout(function(){n.onError("number"==typeof e.status?e.status:0)},0))},h("xhr data %s",this.data),e.send(this.data)}catch(o){return void setTimeout(function(){n.onError(o)},0)}"undefined"!=typeof document&&(this.index=i.requestsCount++,i.requests[this.index]=this)},i.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},i.prototype.onData=function(t){this.emit("data",t),this.onSuccess()},i.prototype.onError=function(t){this.emit("error",t),this.cleanup(!0)},i.prototype.cleanup=function(t){if("undefined"!=typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=r:this.xhr.onreadystatechange=r,t)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete i.requests[this.index],this.xhr=null}},i.prototype.onLoad=function(){var t;try{var e;try{e=this.xhr.getResponseHeader("Content-Type")}catch(n){}t="application/octet-stream"===e||"application/octet-stream; charset=UTF-8"===e?this.xhr.response||this.xhr.responseText:this.xhr.responseText}catch(n){this.onError(n)}null!=t&&this.onData(t)},i.prototype.hasXDR=function(){return"undefined"!=typeof XDomainRequest&&!this.xs&&this.enablesXDR},i.prototype.abort=function(){this.cleanup()},i.requestsCount=0,i.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",s);else if("function"==typeof addEventListener){var f="onpagehide"in self?"pagehide":"unload";addEventListener(f,s,!1)}},function(t,e,n){function r(t){var e=t&&t.forceBase64;p&&!e||(this.supportsBinary=!1),o.call(this,t)}var o=n(23),i=n(32),s=n(24),a=n(33),c=n(34),u=n(3)("engine.io-client:polling");t.exports=r;var p=function(){var t=n(19),e=new t({xdomain:!1});return null!=e.responseType}();a(r,o),r.prototype.name="polling",r.prototype.doOpen=function(){this.poll()},r.prototype.pause=function(t){function e(){u("paused"),n.readyState="paused",t()}var n=this;if(this.readyState="pausing",this.polling||!this.writable){var r=0;this.polling&&(u("we are currently polling - waiting to pause"),r++,this.once("pollComplete",function(){u("pre-pause polling complete"),--r||e()})),this.writable||(u("we are currently writing - waiting to pause"),r++,this.once("drain",function(){u("pre-pause writing complete"),--r||e()}))}else e()},r.prototype.poll=function(){u("polling"),this.polling=!0,this.doPoll(),this.emit("poll")},r.prototype.onData=function(t){var e=this;u("polling got data %s",t);var n=function(t,n,r){return"opening"===e.readyState&&e.onOpen(),"close"===t.type?(e.onClose(),!1):void e.onPacket(t)};s.decodePayload(t,this.socket.binaryType,n),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState?this.poll():u('ignoring poll - transport state "%s"',this.readyState))},r.prototype.doClose=function(){function t(){u("writing close packet"),e.write([{type:"close"}])}var e=this;"open"===this.readyState?(u("transport open - closing"),t()):(u("transport not open - deferring close"),this.once("open",t))},r.prototype.write=function(t){var e=this;this.writable=!1;var n=function(){e.writable=!0,e.emit("drain")};s.encodePayload(t,this.supportsBinary,function(t){e.doWrite(t,n)})},r.prototype.uri=function(){var t=this.query||{},e=this.secure?"https":"http",n="";!1!==this.timestampRequests&&(t[this.timestampParam]=c()),this.supportsBinary||t.sid||(t.b64=1),t=i.encode(t),this.port&&("https"===e&&443!==Number(this.port)||"http"===e&&80!==Number(this.port))&&(n=":"+this.port),t.length&&(t="?"+t);var r=this.hostname.indexOf(":")!==-1;return e+"://"+(r?"["+this.hostname+"]":this.hostname)+n+this.path+t}},function(t,e,n){function r(t){this.path=t.path,this.hostname=t.hostname,this.port=t.port,this.secure=t.secure,this.query=t.query,this.timestampParam=t.timestampParam,this.timestampRequests=t.timestampRequests,this.readyState="",this.agent=t.agent||!1,this.socket=t.socket,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.forceNode=t.forceNode,this.isReactNative=t.isReactNative,this.extraHeaders=t.extraHeaders,this.localAddress=t.localAddress}var o=n(24),i=n(11);t.exports=r,i(r.prototype),r.prototype.onError=function(t,e){var n=new Error(t);return n.type="TransportError",n.description=e,this.emit("error",n),this},r.prototype.open=function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this},r.prototype.close=function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this},r.prototype.send=function(t){if("open"!==this.readyState)throw new Error("Transport not open");this.write(t)},r.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},r.prototype.onData=function(t){var e=o.decodePacket(t,this.socket.binaryType);this.onPacket(e)},r.prototype.onPacket=function(t){this.emit("packet",t)},r.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},function(t,e,n){function r(t,n){var r="b"+e.packets[t.type]+t.data.data;return n(r)}function o(t,n,r){if(!n)return e.encodeBase64Packet(t,r);var o=t.data,i=new Uint8Array(o),s=new Uint8Array(1+o.byteLength);s[0]=v[t.type];for(var a=0;a<i.length;a++)s[a+1]=i[a];return r(s.buffer)}function i(t,n,r){if(!n)return e.encodeBase64Packet(t,r);var o=new FileReader;return o.onload=function(){e.encodePacket({type:t.type,data:o.result},n,!0,r)},o.readAsArrayBuffer(t.data)}function s(t,n,r){if(!n)return e.encodeBase64Packet(t,r);if(g)return i(t,n,r);var o=new Uint8Array(1);o[0]=v[t.type];var s=new w([o.buffer,t.data]);return r(s)}function a(t){try{t=d.decode(t,{strict:!1})}catch(e){return!1}return t}function c(t,e,n){for(var r=new Array(t.length),o=l(t.length,n),i=function(t,n,o){e(n,function(e,n){r[t]=n,o(e,r)})},s=0;s<t.length;s++)i(s,t[s],o)}var u,p=n(25),h=n(26),f=n(27),l=n(28),d=n(29);"undefined"!=typeof ArrayBuffer&&(u=n(30));var y="undefined"!=typeof navigator&&/Android/i.test(navigator.userAgent),m="undefined"!=typeof navigator&&/PhantomJS/i.test(navigator.userAgent),g=y||m;e.protocol=3;var v=e.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},b=p(v),C={type:"error",data:"parser error"},w=n(31);e.encodePacket=function(t,e,n,i){"function"==typeof e&&(i=e,e=!1),"function"==typeof n&&(i=n,n=null);var a=void 0===t.data?void 0:t.data.buffer||t.data;if("undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer)return o(t,e,i);if("undefined"!=typeof w&&a instanceof w)return s(t,e,i);if(a&&a.base64)return r(t,i);var c=v[t.type];return void 0!==t.data&&(c+=n?d.encode(String(t.data),{strict:!1}):String(t.data)),i(""+c)},e.encodeBase64Packet=function(t,n){var r="b"+e.packets[t.type];if("undefined"!=typeof w&&t.data instanceof w){var o=new FileReader;return o.onload=function(){var t=o.result.split(",")[1];n(r+t)},o.readAsDataURL(t.data)}var i;try{i=String.fromCharCode.apply(null,new Uint8Array(t.data))}catch(s){for(var a=new Uint8Array(t.data),c=new Array(a.length),u=0;u<a.length;u++)c[u]=a[u];i=String.fromCharCode.apply(null,c)}return r+=btoa(i),n(r)},e.decodePacket=function(t,n,r){if(void 0===t)return C;if("string"==typeof t){if("b"===t.charAt(0))return e.decodeBase64Packet(t.substr(1),n);if(r&&(t=a(t),t===!1))return C;var o=t.charAt(0);return Number(o)==o&&b[o]?t.length>1?{type:b[o],data:t.substring(1)}:{type:b[o]}:C}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&"blob"===n&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var n=b[t.charAt(0)];if(!u)return{type:n,data:{base64:!0,data:t.substr(1)}};var r=u.decode(t.substr(1));return"blob"===e&&w&&(r=new w([r])),{type:n,data:r}},e.encodePayload=function(t,n,r){function o(t){return t.length+":"+t}function i(t,r){e.encodePacket(t,!!s&&n,!1,function(t){r(null,o(t))})}"function"==typeof n&&(r=n,n=null);var s=h(t);return n&&s?w&&!g?e.encodePayloadAsBlob(t,r):e.encodePayloadAsArrayBuffer(t,r):t.length?void c(t,i,function(t,e){return r(e.join(""))}):r("0:")},e.decodePayload=function(t,n,r){if("string"!=typeof t)return e.decodePayloadAsBinary(t,n,r);"function"==typeof n&&(r=n,n=null);var o;if(""===t)return r(C,0,1);for(var i,s,a="",c=0,u=t.length;c<u;c++){var p=t.charAt(c);if(":"===p){if(""===a||a!=(i=Number(a)))return r(C,0,1);if(s=t.substr(c+1,i),a!=s.length)return r(C,0,1);if(s.length){if(o=e.decodePacket(s,n,!1),C.type===o.type&&C.data===o.data)return r(C,0,1);var h=r(o,c+i,u);if(!1===h)return}c+=i,a=""}else a+=p}return""!==a?r(C,0,1):void 0},e.encodePayloadAsArrayBuffer=function(t,n){function r(t,n){e.encodePacket(t,!0,!0,function(t){return n(null,t)})}return t.length?void c(t,r,function(t,e){var r=e.reduce(function(t,e){var n;return n="string"==typeof e?e.length:e.byteLength,t+n.toString().length+n+2},0),o=new Uint8Array(r),i=0;return e.forEach(function(t){var e="string"==typeof t,n=t;if(e){for(var r=new Uint8Array(t.length),s=0;s<t.length;s++)r[s]=t.charCodeAt(s);n=r.buffer}e?o[i++]=0:o[i++]=1;for(var a=n.byteLength.toString(),s=0;s<a.length;s++)o[i++]=parseInt(a[s]);o[i++]=255;for(var r=new Uint8Array(n),s=0;s<r.length;s++)o[i++]=r[s]}),n(o.buffer)}):n(new ArrayBuffer(0))},e.encodePayloadAsBlob=function(t,n){function r(t,n){e.encodePacket(t,!0,!0,function(t){var e=new Uint8Array(1);if(e[0]=1,"string"==typeof t){for(var r=new Uint8Array(t.length),o=0;o<t.length;o++)r[o]=t.charCodeAt(o);t=r.buffer,e[0]=0}for(var i=t instanceof ArrayBuffer?t.byteLength:t.size,s=i.toString(),a=new Uint8Array(s.length+1),o=0;o<s.length;o++)a[o]=parseInt(s[o]);if(a[s.length]=255,w){var c=new w([e.buffer,a.buffer,t]);n(null,c)}})}c(t,r,function(t,e){return n(new w(e))})},e.decodePayloadAsBinary=function(t,n,r){"function"==typeof n&&(r=n,n=null);for(var o=t,i=[];o.byteLength>0;){for(var s=new Uint8Array(o),a=0===s[0],c="",u=1;255!==s[u];u++){if(c.length>310)return r(C,0,1);c+=s[u]}o=f(o,2+c.length),c=parseInt(c);var p=f(o,0,c);if(a)try{p=String.fromCharCode.apply(null,new Uint8Array(p))}catch(h){var l=new Uint8Array(p);p="";for(var u=0;u<l.length;u++)p+=String.fromCharCode(l[u])}i.push(p),o=f(o,c)}var d=i.length;i.forEach(function(t,o){r(e.decodePacket(t,n,!0),o,d)})}},function(t,e){t.exports=Object.keys||function(t){var e=[],n=Object.prototype.hasOwnProperty;for(var r in t)n.call(t,r)&&e.push(r);return e}},function(t,e,n){function r(t){if(!t||"object"!=typeof t)return!1;if(o(t)){for(var e=0,n=t.length;e<n;e++)if(r(t[e]))return!0;return!1}if("function"==typeof Buffer&&Buffer.isBuffer&&Buffer.isBuffer(t)||"function"==typeof ArrayBuffer&&t instanceof ArrayBuffer||s&&t instanceof Blob||a&&t instanceof File)return!0;if(t.toJSON&&"function"==typeof t.toJSON&&1===arguments.length)return r(t.toJSON(),!0);for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&r(t[i]))return!0;return!1}var o=n(13),i=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===i.call(Blob),a="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===i.call(File);t.exports=r},function(t,e){t.exports=function(t,e,n){var r=t.byteLength;if(e=e||0,n=n||r,t.slice)return t.slice(e,n);if(e<0&&(e+=r),n<0&&(n+=r),n>r&&(n=r),e>=r||e>=n||0===r)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(n-e),s=e,a=0;s<n;s++,a++)i[a]=o[s];return i.buffer}},function(t,e){function n(t,e,n){function o(t,r){if(o.count<=0)throw new Error("after called too many times");--o.count,t?(i=!0,e(t),e=n):0!==o.count||i||e(null,r)}var i=!1;return n=n||r,o.count=t,0===t?e():o}function r(){}t.exports=n},function(t,e){function n(t){for(var e,n,r=[],o=0,i=t.length;o<i;)e=t.charCodeAt(o++),e>=55296&&e<=56319&&o<i?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function r(t){for(var e,n=t.length,r=-1,o="";++r<n;)e=t[r],e>65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var n="";return 0==(4294965248&t)?n=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),n=d(t>>12&15|224),n+=i(t,6)):0==(4292870144&t)&&(n=d(t>>18&7|240),n+=i(t,12),n+=i(t,6)),n+=d(63&t|128)}function a(t,e){e=e||{};for(var r,o=!1!==e.strict,i=n(t),a=i.length,c=-1,u="";++c<a;)r=i[c],u+=s(r,o);return u}function c(){if(l>=f)throw Error("Invalid byte index");var t=255&h[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function u(t){var e,n,r,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&h[l],l++,0==(128&e))return e;if(192==(224&e)){if(n=c(),s=(31&e)<<6|n,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(n=c(),r=c(),s=(15&e)<<12|n<<6|r,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(n=c(),r=c(),i=c(),s=(7&e)<<18|n<<12|r<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function p(t,e){e=e||{};var o=!1!==e.strict;h=n(t),f=h.length,l=0;for(var i,s=[];(i=u(o))!==!1;)s.push(i);return r(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */
-var h,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:p}},function(t,e){!function(){"use strict";for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=new Uint8Array(256),r=0;r<t.length;r++)n[t.charCodeAt(r)]=r;e.encode=function(e){var n,r=new Uint8Array(e),o=r.length,i="";for(n=0;n<o;n+=3)i+=t[r[n]>>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(t){var e,r,o,i,s,a=.75*t.length,c=t.length,u=0;"="===t[t.length-1]&&(a--,"="===t[t.length-2]&&a--);var p=new ArrayBuffer(a),h=new Uint8Array(p);for(e=0;e<c;e+=4)r=n[t.charCodeAt(e)],o=n[t.charCodeAt(e+1)],i=n[t.charCodeAt(e+2)],s=n[t.charCodeAt(e+3)],h[u++]=r<<2|o>>4,h[u++]=(15&o)<<4|i>>2,h[u++]=(3&i)<<6|63&s;return p}}()},function(t,e){function n(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var n=new Uint8Array(t.byteLength);n.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=n.buffer}return e}return t})}function r(t,e){e=e||{};var r=new i;return n(t).forEach(function(t){r.append(t)}),e.type?r.getBlob(e.type):r.getBlob()}function o(t,e){return new Blob(n(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(e){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(e){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(r.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?r:void 0}()},function(t,e){e.encode=function(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e},e.decode=function(t){for(var e={},n=t.split("&"),r=0,o=n.length;r<o;r++){var i=n[r].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},function(t,e){t.exports=function(t,e){var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e){"use strict";function n(t){var e="";do e=s[t%a]+e,t=Math.floor(t/a);while(t>0);return e}function r(t){var e=0;for(p=0;p<t.length;p++)e=e*a+c[t.charAt(p)];return e}function o(){var t=n(+new Date);return t!==i?(u=0,i=t):t+"."+n(u++)}for(var i,s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),a=64,c={},u=0,p=0;p<a;p++)c[s[p]]=p;o.encode=n,o.decode=r,t.exports=o},function(t,e,n){(function(e){function r(){}function o(){return"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof e?e:{}}function i(t){if(s.call(this,t),this.query=this.query||{},!c){var e=o();c=e.___eio=e.___eio||[]}this.index=c.length;var n=this;c.push(function(t){n.onData(t)}),this.query.j=this.index,"function"==typeof addEventListener&&addEventListener("beforeunload",function(){n.script&&(n.script.onerror=r)},!1)}var s=n(22),a=n(33);t.exports=i;var c,u=/\n/g,p=/\\n/g;a(i,s),i.prototype.supportsBinary=!1,i.prototype.doClose=function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),s.prototype.doClose.call(this)},i.prototype.doPoll=function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var n=document.getElementsByTagName("script")[0];n?n.parentNode.insertBefore(e,n):(document.head||document.body).appendChild(e),this.script=e;var r="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);r&&setTimeout(function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)},100)},i.prototype.doWrite=function(t,e){function n(){r(),e()}function r(){if(o.iframe)try{o.form.removeChild(o.iframe)}catch(t){o.onError("jsonp polling iframe removal error",t)}try{var e='<iframe src="javascript:0" name="'+o.iframeId+'">';i=document.createElement(e)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),r(),t=t.replace(p,"\\\n"),this.area.value=t.replace(u,"\\n");try{this.form.submit()}catch(h){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&n()}:this.iframe.onload=n}}).call(e,function(){return this}())},function(t,e,n){function r(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(l=i),s.call(this,t)}var o,i,s=n(23),a=n(24),c=n(32),u=n(33),p=n(34),h=n(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=n(37)}catch(f){}var l=o||i;t.exports=r,u(r,s),r.prototype.name="websocket",r.prototype.supportsBinary=!0,r.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,n={agent:this.agent,perMessageDeflate:this.perMessageDeflate};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,this.extraHeaders&&(n.headers=this.extraHeaders),this.localAddress&&(n.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new l(t,e):new l(t):new l(t,e,n)}catch(r){return this.emit("error",r)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},r.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},r.prototype.write=function(t){function e(){n.emit("flush"),setTimeout(function(){n.writable=!0,n.emit("drain")},0)}var n=this;this.writable=!1;for(var r=t.length,o=0,i=r;o<i;o++)!function(t){a.encodePacket(t,n.supportsBinary,function(o){if(!n.usingBrowserWebSocket){var i={};if(t.options&&(i.compress=t.options.compress),n.perMessageDeflate){var s="string"==typeof o?Buffer.byteLength(o):o.length;s<n.perMessageDeflate.threshold&&(i.compress=!1)}}try{n.usingBrowserWebSocket?n.ws.send(o):n.ws.send(o,i)}catch(a){h("websocket closed before onclose event")}--r||e()})}(t[o])},r.prototype.onClose=function(){s.prototype.onClose.call(this)},r.prototype.doClose=function(){"undefined"!=typeof this.ws&&this.ws.close()},r.prototype.uri=function(){var t=this.query||{},e=this.secure?"wss":"ws",n="";this.port&&("wss"===e&&443!==Number(this.port)||"ws"===e&&80!==Number(this.port))&&(n=":"+this.port),this.timestampRequests&&(t[this.timestampParam]=p()),this.supportsBinary||(t.b64=1),t=c.encode(t),t.length&&(t="?"+t);var r=this.hostname.indexOf(":")!==-1;return e+"://"+(r?"["+this.hostname+"]":this.hostname)+n+this.path+t},r.prototype.check=function(){return!(!l||"__initialize"in l&&this.name===r.prototype.name)}},function(t,e){},function(t,e){var n=[].indexOf;t.exports=function(t,e){if(n)return t.indexOf(e);for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}},function(t,e,n){function r(t,e,n){this.io=t,this.nsp=e,this.json=this,this.ids=0,this.acks={},this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0,this.flags={},n&&n.query&&(this.query=n.query),this.io.autoConnect&&this.open()}var o=n(7),i=n(11),s=n(40),a=n(41),c=n(42),u=n(3)("socket.io-client:socket"),p=n(32),h=n(26);t.exports=e=r;var f={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1},l=i.prototype.emit;i(r.prototype),r.prototype.subEvents=function(){if(!this.subs){var t=this.io;this.subs=[a(t,"open",c(this,"onopen")),a(t,"packet",c(this,"onpacket")),a(t,"close",c(this,"onclose"))]}},r.prototype.open=r.prototype.connect=function(){return this.connected?this:(this.subEvents(),this.io.open(),"open"===this.io.readyState&&this.onopen(),this.emit("connecting"),this)},r.prototype.send=function(){var t=s(arguments);return t.unshift("message"),this.emit.apply(this,t),this},r.prototype.emit=function(t){if(f.hasOwnProperty(t))return l.apply(this,arguments),this;var e=s(arguments),n={type:(void 0!==this.flags.binary?this.flags.binary:h(e))?o.BINARY_EVENT:o.EVENT,data:e};return n.options={},n.options.compress=!this.flags||!1!==this.flags.compress,"function"==typeof e[e.length-1]&&(u("emitting packet with ack id %d",this.ids),this.acks[this.ids]=e.pop(),n.id=this.ids++),this.connected?this.packet(n):this.sendBuffer.push(n),this.flags={},this},r.prototype.packet=function(t){t.nsp=this.nsp,this.io.packet(t)},r.prototype.onopen=function(){if(u("transport is open - connecting"),"/"!==this.nsp)if(this.query){var t="object"==typeof this.query?p.encode(this.query):this.query;u("sending connect packet with query %s",t),this.packet({type:o.CONNECT,query:t})}else this.packet({type:o.CONNECT})},r.prototype.onclose=function(t){u("close (%s)",t),this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",t)},r.prototype.onpacket=function(t){var e=t.nsp===this.nsp,n=t.type===o.ERROR&&"/"===t.nsp;if(e||n)switch(t.type){case o.CONNECT:this.onconnect();break;case o.EVENT:this.onevent(t);break;case o.BINARY_EVENT:this.onevent(t);break;case o.ACK:this.onack(t);break;case o.BINARY_ACK:this.onack(t);break;case o.DISCONNECT:this.ondisconnect();break;case o.ERROR:this.emit("error",t.data)}},r.prototype.onevent=function(t){var e=t.data||[];u("emitting event %j",e),null!=t.id&&(u("attaching ack callback to event"),e.push(this.ack(t.id))),this.connected?l.apply(this,e):this.receiveBuffer.push(e)},r.prototype.ack=function(t){var e=this,n=!1;return function(){if(!n){n=!0;var r=s(arguments);u("sending ack %j",r),e.packet({type:h(r)?o.BINARY_ACK:o.ACK,id:t,data:r})}}},r.prototype.onack=function(t){var e=this.acks[t.id];"function"==typeof e?(u("calling ack %s with %j",t.id,t.data),e.apply(this,t.data),delete this.acks[t.id]):u("bad ack %s",t.id)},r.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},r.prototype.emitBuffered=function(){var t;for(t=0;t<this.receiveBuffer.length;t++)l.apply(this,this.receiveBuffer[t]);for(this.receiveBuffer=[],t=0;t<this.sendBuffer.length;t++)this.packet(this.sendBuffer[t]);this.sendBuffer=[]},r.prototype.ondisconnect=function(){u("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")},r.prototype.destroy=function(){if(this.subs){for(var t=0;t<this.subs.length;t++)this.subs[t].destroy();this.subs=null}this.io.destroy(this)},r.prototype.close=r.prototype.disconnect=function(){return this.connected&&(u("performing disconnect (%s)",this.nsp),this.packet({type:o.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this},r.prototype.compress=function(t){return this.flags.compress=t,this},r.prototype.binary=function(t){return this.flags.binary=t,this}},function(t,e){function n(t,e){var n=[];e=e||0;for(var r=e||0;r<t.length;r++)n[r-e]=t[r];return n}t.exports=n},function(t,e){function n(t,e,n){return t.on(e,n),{destroy:function(){t.removeListener(e,n)}}}t.exports=n},function(t,e){var n=[].slice;t.exports=function(t,e){if("string"==typeof e&&(e=t[e]),"function"!=typeof e)throw new Error("bind() requires a function");var r=n.call(arguments,2);return function(){return e.apply(t,r.concat(n.call(arguments)))}}},function(t,e){function n(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}}])});
-//# sourceMappingURL=socket.io.js.map
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io-client/dist/socket.io.js.map b/signaling_server/service/node_modules/socket.io-client/dist/socket.io.js.map
deleted file mode 100644 (file)
index 2c9c4c8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///socket.io.js","webpack:///webpack/bootstrap 9e45fccfabd75c66dd47","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./~/debug/src/browser.js","webpack:///./~/process/browser.js","webpack:///./~/debug/src/common.js","webpack:///./~/ms/index.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/socket.io-parser/~/debug/src/browser.js","webpack:///./~/socket.io-parser/~/debug/src/debug.js","webpack:///./~/socket.io-parser/~/ms/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","lookup","uri","opts","undefined","io","parsed","url","source","path","sameNamespace","cache","nsps","newConnection","forceNew","multiplex","debug","Manager","query","socket","parser","managers","protocol","connect","Socket","loc","obj","location","host","charAt","test","parseuri","port","ipv6","indexOf","href","re","parts","str","src","b","e","substring","replace","length","exec","i","authority","ipv6uri","process","useColors","window","type","__nwjs","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","$1","formatArgs","args","namespace","humanize","diff","color","splice","index","lastC","log","_console","_typeof","apply","arguments","save","namespaces","storage","setItem","removeItem","error","load","r","getItem","env","DEBUG","localstorage","localStorage","Symbol","iterator","constructor","prototype","colors","formatters","j","v","JSON","stringify","message","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","nextTick","Array","push","title","browser","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","_toConsumableArray","arr","isArray","arr2","from","setup","selectColor","hash","charCodeAt","createDebug","Math","abs","_len","_key","enabled","self","curr","Number","Date","ms","prevTime","prev","coerce","unshift","format","formatter","val","logFn","destroy","extend","init","instances","delimiter","newDebug","enable","names","skips","split","substr","instance","disable","map","toNamespace","join","regexp","toString","stack","Object","keys","forEach","key","parse","String","n","parseFloat","y","w","d","h","s","fmtShort","msAbs","round","fmtLong","plural","isPlural","options","isFinite","Encoder","encodeAsString","BINARY_EVENT","BINARY_ACK","attachments","nsp","data","payload","tryStringify","ERROR_PACKET","encodeAsBinary","callback","writeEncoding","bloblessData","deconstruction","binary","deconstructPacket","pack","packet","buffers","removeBlobs","Decoder","reconstructor","decodeString","types","buf","next","tryParse","isPayloadValid","ERROR","BinaryReconstructor","reconPack","msg","Emitter","isBuf","CONNECT","DISCONNECT","EVENT","ACK","encode","encoding","add","base64","takeBinaryData","finishedReconstruction","binData","reconstructPacket","Function","chrome","local","err","bind","floor","ceil","isNaN","mixin","addEventListener","event","fn","_callbacks","removeEventListener","callbacks","cb","slice","hasListeners","_deconstructPacket","placeholder","_placeholder","num","newData","_reconstructPacket","withNativeBlob","Blob","withNativeFile","File","packetData","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","FileReader","onload","result","readAsArrayBuffer","withNativeBuffer","Buffer","isBuffer","withNativeArrayBuffer","ArrayBuffer","isView","buffer","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","readyState","connecting","lastPing","packetBuffer","_parser","encoder","decoder","autoConnect","open","eio","has","hasOwnProperty","emitAll","updateSocketIds","generateId","engine","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","skipReconnect","openSub","onopen","errorSub","cleanup","timer","close","onping","onpong","ondata","ondecoded","onerror","onConnecting","encodedPackets","write","processPacketQueue","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","hostname","secure","agent","parseqs","decode","upgrade","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transports","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ca","ciphers","rejectUnauthorized","forceNode","isReactNative","product","extraHeaders","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","clone","o","priorWebsocketSuccess","Transport","createTransport","EIO","transport","sid","requestTimeout","protocols","setTransport","onDrain","onPacket","onError","onClose","probe","onTransportOpen","upgradeLosesBinary","supportsBinary","failed","send","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","to","onOpen","l","onHandshake","setPing","code","filterUpgrades","onHeartbeat","ping","sendPacket","writable","compress","cleanupAndClose","waitForUpgrade","desc","filteredUpgrades","polling","xhr","xd","xs","isSSL","xdomain","xscheme","XMLHttpRequest","XHR","JSONP","websocket","hasCORS","XDomainRequest","empty","Polling","Request","method","async","isBinary","create","unloadHandler","requests","abort","inherit","request","doWrite","req","sendXhr","doPoll","onData","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","onLoad","responseText","onreadystatechange","contentType","getResponseHeader","responseType","status","requestsCount","onSuccess","fromError","response","attachEvent","terminationEvent","hasXHR2","yeast","doOpen","poll","onPause","total","decodePayload","doClose","packets","callbackfn","encodePayload","schema","b64","description","decodePacket","encodeBase64Object","encodeArrayBuffer","encodeBase64Packet","contentArray","Uint8Array","resultBuffer","byteLength","encodeBlobAsArrayBuffer","fr","encodePacket","encodeBlob","dontSendBlobs","blob","tryDecode","utf8","strict","ary","each","done","after","eachWithIndex","el","base64encoder","hasBinary","sliceBuffer","isAndroid","isPhantomJS","pong","packetslist","utf8encode","encoded","readAsDataURL","b64data","fromCharCode","typed","basic","btoa","utf8decode","decodeBase64Packet","asArray","rest","setLengthHeader","encodeOne","doneCallback","encodePayloadAsBlob","encodePayloadAsArrayBuffer","results","decodePayloadAsBinary","chr","ret","totalLength","reduce","acc","resultArray","bufferIndex","isString","ab","view","lenStr","binaryIdentifier","size","lengthAry","bufferTail","tailArray","msgLength","toJSON","arraybuffer","start","end","bytes","abv","ii","count","err_cb","proxy","bail","ucs2decode","string","value","extra","output","counter","ucs2encode","stringFromCharCode","checkScalarValue","codePoint","toUpperCase","createByte","encodeCodePoint","symbol","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","tmp","chars","encoded1","encoded2","encoded3","encoded4","bufferLength","mapArrayBufferViews","chunk","copy","set","byteOffset","BlobBuilderConstructor","bb","BlobBuilder","part","append","getBlob","BlobConstructor","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","a","blobSupportsArrayBufferView","blobBuilderSupported","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","alphabet","decoded","now","seed","global","glob","JSONPPolling","___eio","script","rNewline","rEscapedNewline","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","isUAgecko","complete","initIframe","html","iframeId","area","className","position","top","left","target","setAttribute","action","submit","WS","usingBrowserWebSocket","BrowserWebSocket","WebSocketImpl","NodeWebSocket","WebSocket","MozWebSocket","check","headers","ws","supports","addEventListeners","onmessage","ev","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","toArray","hasBin","events","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","subEvents","pop","onpacket","rootNamespaceError","onconnect","onevent","onack","ondisconnect","ack","sent","emitBuffered","list","factor","pow","rand","random","deviation"],"mappings":"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","file":"socket.io.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar url = __webpack_require__(1);\n\tvar parser = __webpack_require__(7);\n\tvar Manager = __webpack_require__(15);\n\tvar debug = __webpack_require__(3)('socket.io-client');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = lookup;\n\t\n\t/**\n\t * Managers cache.\n\t */\n\t\n\tvar cache = exports.managers = {};\n\t\n\t/**\n\t * Looks up an existing `Manager` for multiplexing.\n\t * If the user summons:\n\t *\n\t *   `io('http://localhost/a');`\n\t *   `io('http://localhost/b');`\n\t *\n\t * We reuse the existing instance based on same scheme/port/host,\n\t * and we initialize sockets for each namespace.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction lookup (uri, opts) {\n\t  if (typeof uri === 'object') {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t\n\t  opts = opts || {};\n\t\n\t  var parsed = url(uri);\n\t  var source = parsed.source;\n\t  var id = parsed.id;\n\t  var path = parsed.path;\n\t  var sameNamespace = cache[id] && path in cache[id].nsps;\n\t  var newConnection = opts.forceNew || opts['force new connection'] ||\n\t                      false === opts.multiplex || sameNamespace;\n\t\n\t  var io;\n\t\n\t  if (newConnection) {\n\t    debug('ignoring socket cache for %s', source);\n\t    io = Manager(source, opts);\n\t  } else {\n\t    if (!cache[id]) {\n\t      debug('new io instance for %s', source);\n\t      cache[id] = Manager(source, opts);\n\t    }\n\t    io = cache[id];\n\t  }\n\t  if (parsed.query && !opts.query) {\n\t    opts.query = parsed.query;\n\t  }\n\t  return io.socket(parsed.path, opts);\n\t}\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = parser.protocol;\n\t\n\t/**\n\t * `connect`.\n\t *\n\t * @param {String} uri\n\t * @api public\n\t */\n\t\n\texports.connect = lookup;\n\t\n\t/**\n\t * Expose constructors for standalone build.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Manager = __webpack_require__(15);\n\texports.Socket = __webpack_require__(39);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parseuri = __webpack_require__(2);\n\tvar debug = __webpack_require__(3)('socket.io-client:url');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = url;\n\t\n\t/**\n\t * URL parser.\n\t *\n\t * @param {String} url\n\t * @param {Object} An object meant to mimic window.location.\n\t *                 Defaults to window.location.\n\t * @api public\n\t */\n\t\n\tfunction url (uri, loc) {\n\t  var obj = uri;\n\t\n\t  // default to window.location\n\t  loc = loc || (typeof location !== 'undefined' && location);\n\t  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\t\n\t  // relative path support\n\t  if ('string' === typeof uri) {\n\t    if ('/' === uri.charAt(0)) {\n\t      if ('/' === uri.charAt(1)) {\n\t        uri = loc.protocol + uri;\n\t      } else {\n\t        uri = loc.host + uri;\n\t      }\n\t    }\n\t\n\t    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\t      debug('protocol-less url %s', uri);\n\t      if ('undefined' !== typeof loc) {\n\t        uri = loc.protocol + '//' + uri;\n\t      } else {\n\t        uri = 'https://' + uri;\n\t      }\n\t    }\n\t\n\t    // parse\n\t    debug('parse %s', uri);\n\t    obj = parseuri(uri);\n\t  }\n\t\n\t  // make sure we treat `localhost:80` and `localhost` equally\n\t  if (!obj.port) {\n\t    if (/^(http|ws)$/.test(obj.protocol)) {\n\t      obj.port = '80';\n\t    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n\t      obj.port = '443';\n\t    }\n\t  }\n\t\n\t  obj.path = obj.path || '/';\n\t\n\t  var ipv6 = obj.host.indexOf(':') !== -1;\n\t  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\t\n\t  // define unique id\n\t  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n\t  // define href\n\t  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\t\n\t  return obj;\n\t}\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Parses an URI\r\n\t *\r\n\t * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n\t * @api private\r\n\t */\r\n\t\r\n\tvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\t\r\n\tvar parts = [\r\n\t    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n\t];\r\n\t\r\n\tmodule.exports = function parseuri(str) {\r\n\t    var src = str,\r\n\t        b = str.indexOf('['),\r\n\t        e = str.indexOf(']');\r\n\t\r\n\t    if (b != -1 && e != -1) {\r\n\t        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n\t    }\r\n\t\r\n\t    var m = re.exec(str || ''),\r\n\t        uri = {},\r\n\t        i = 14;\r\n\t\r\n\t    while (i--) {\r\n\t        uri[parts[i]] = m[i] || '';\r\n\t    }\r\n\t\r\n\t    if (b != -1 && e != -1) {\r\n\t        uri.source = src;\r\n\t        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n\t        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n\t        uri.ipv6uri = true;\r\n\t    }\r\n\t\r\n\t    return uri;\r\n\t};\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/* eslint-env browser */\n\t\n\t/**\n\t * This is the web browser implementation of `debug()`.\n\t */\n\t\n\texports.log = log;\n\texports.formatArgs = formatArgs;\n\texports.save = save;\n\texports.load = load;\n\texports.useColors = useColors;\n\texports.storage = localstorage();\n\t\n\t/**\n\t * Colors.\n\t */\n\t\n\texports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n\t\n\t/**\n\t * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n\t * and the Firebug extension (any Firefox version) are known\n\t * to support \"%c\" CSS customizations.\n\t *\n\t * TODO: add a `localStorage` variable to explicitly enable/disable colors\n\t */\n\t\n\t// eslint-disable-next-line complexity\n\tfunction useColors() {\n\t\t// NB: In an Electron preload script, document will be defined but not fully\n\t\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t\t// explicitly\n\t\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t// Internet Explorer and Edge do not support colors.\n\t\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t\treturn typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\ttypeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\ttypeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\ttypeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n\t}\n\t\n\t/**\n\t * Colorize log arguments if enabled.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction formatArgs(args) {\n\t\targs[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);\n\t\n\t\tif (!this.useColors) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar c = 'color: ' + this.color;\n\t\targs.splice(1, 0, c, 'color: inherit');\n\t\n\t\t// The final \"%c\" is somewhat tricky, because there could be other\n\t\t// arguments passed either before or after the %c, so we need to\n\t\t// figure out the correct index to insert the CSS into\n\t\tvar index = 0;\n\t\tvar lastC = 0;\n\t\targs[0].replace(/%[a-zA-Z%]/g, function (match) {\n\t\t\tif (match === '%%') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tindex++;\n\t\t\tif (match === '%c') {\n\t\t\t\t// We only are interested in the *last* %c\n\t\t\t\t// (the user may have provided their own)\n\t\t\t\tlastC = index;\n\t\t\t}\n\t\t});\n\t\n\t\targs.splice(lastC, 0, c);\n\t}\n\t\n\t/**\n\t * Invokes `console.log()` when available.\n\t * No-op when `console.log` is not a \"function\".\n\t *\n\t * @api public\n\t */\n\tfunction log() {\n\t\tvar _console;\n\t\n\t\t// This hackery is required for IE8/9, where\n\t\t// the `console.log` function doesn't have 'apply'\n\t\treturn (typeof console === 'undefined' ? 'undefined' : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);\n\t}\n\t\n\t/**\n\t * Save `namespaces`.\n\t *\n\t * @param {String} namespaces\n\t * @api private\n\t */\n\tfunction save(namespaces) {\n\t\ttry {\n\t\t\tif (namespaces) {\n\t\t\t\texports.storage.setItem('debug', namespaces);\n\t\t\t} else {\n\t\t\t\texports.storage.removeItem('debug');\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Swallow\n\t\t\t// XXX (@Qix-) should we be logging these?\n\t\t}\n\t}\n\t\n\t/**\n\t * Load `namespaces`.\n\t *\n\t * @return {String} returns the previously persisted debug modes\n\t * @api private\n\t */\n\tfunction load() {\n\t\tvar r = void 0;\n\t\ttry {\n\t\t\tr = exports.storage.getItem('debug');\n\t\t} catch (error) {}\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t\n\t\n\t\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\t\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\t\tr = process.env.DEBUG;\n\t\t}\n\t\n\t\treturn r;\n\t}\n\t\n\t/**\n\t * Localstorage attempts to return the localstorage.\n\t *\n\t * This is necessary because safari throws\n\t * when a user disables cookies/localstorage\n\t * and you attempt to access it.\n\t *\n\t * @return {LocalStorage}\n\t * @api private\n\t */\n\t\n\tfunction localstorage() {\n\t\ttry {\n\t\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t\t// The Browser also has localStorage in the global context.\n\t\t\treturn localStorage;\n\t\t} catch (error) {\n\t\t\t// Swallow\n\t\t\t// XXX (@Qix-) should we be logging these?\n\t\t}\n\t}\n\t\n\tmodule.exports = __webpack_require__(5)(exports);\n\t\n\tvar formatters = module.exports.formatters;\n\t\n\t/**\n\t * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n\t */\n\t\n\tformatters.j = function (v) {\n\t\ttry {\n\t\t\treturn JSON.stringify(v);\n\t\t} catch (error) {\n\t\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t\t}\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things.  But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals.  It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t    throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t    throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t    try {\n\t        if (typeof setTimeout === 'function') {\n\t            cachedSetTimeout = setTimeout;\n\t        } else {\n\t            cachedSetTimeout = defaultSetTimout;\n\t        }\n\t    } catch (e) {\n\t        cachedSetTimeout = defaultSetTimout;\n\t    }\n\t    try {\n\t        if (typeof clearTimeout === 'function') {\n\t            cachedClearTimeout = clearTimeout;\n\t        } else {\n\t            cachedClearTimeout = defaultClearTimeout;\n\t        }\n\t    } catch (e) {\n\t        cachedClearTimeout = defaultClearTimeout;\n\t    }\n\t} ())\n\tfunction runTimeout(fun) {\n\t    if (cachedSetTimeout === setTimeout) {\n\t        //normal enviroments in sane situations\n\t        return setTimeout(fun, 0);\n\t    }\n\t    // if setTimeout wasn't available but was latter defined\n\t    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t        cachedSetTimeout = setTimeout;\n\t        return setTimeout(fun, 0);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedSetTimeout(fun, 0);\n\t    } catch(e){\n\t        try {\n\t            // 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\t            return cachedSetTimeout.call(null, fun, 0);\n\t        } catch(e){\n\t            // 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\t            return cachedSetTimeout.call(this, fun, 0);\n\t        }\n\t    }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t    if (cachedClearTimeout === clearTimeout) {\n\t        //normal enviroments in sane situations\n\t        return clearTimeout(marker);\n\t    }\n\t    // if clearTimeout wasn't available but was latter defined\n\t    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t        cachedClearTimeout = clearTimeout;\n\t        return clearTimeout(marker);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedClearTimeout(marker);\n\t    } catch (e){\n\t        try {\n\t            // 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\t            return cachedClearTimeout.call(null, marker);\n\t        } catch (e){\n\t            // 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\t            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t            return cachedClearTimeout.call(this, marker);\n\t        }\n\t    }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t    if (!draining || !currentQueue) {\n\t        return;\n\t    }\n\t    draining = false;\n\t    if (currentQueue.length) {\n\t        queue = currentQueue.concat(queue);\n\t    } else {\n\t        queueIndex = -1;\n\t    }\n\t    if (queue.length) {\n\t        drainQueue();\n\t    }\n\t}\n\t\n\tfunction drainQueue() {\n\t    if (draining) {\n\t        return;\n\t    }\n\t    var timeout = runTimeout(cleanUpNextTick);\n\t    draining = true;\n\t\n\t    var len = queue.length;\n\t    while(len) {\n\t        currentQueue = queue;\n\t        queue = [];\n\t        while (++queueIndex < len) {\n\t            if (currentQueue) {\n\t                currentQueue[queueIndex].run();\n\t            }\n\t        }\n\t        queueIndex = -1;\n\t        len = queue.length;\n\t    }\n\t    currentQueue = null;\n\t    draining = false;\n\t    runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t    var args = new Array(arguments.length - 1);\n\t    if (arguments.length > 1) {\n\t        for (var i = 1; i < arguments.length; i++) {\n\t            args[i - 1] = arguments[i];\n\t        }\n\t    }\n\t    queue.push(new Item(fun, args));\n\t    if (queue.length === 1 && !draining) {\n\t        runTimeout(drainQueue);\n\t    }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t    this.fun = fun;\n\t    this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t    this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t    throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t    throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\t/**\n\t * This is the common logic for both the Node.js and web browser\n\t * implementations of `debug()`.\n\t */\n\t\n\tfunction setup(env) {\n\t\tcreateDebug.debug = createDebug;\n\t\tcreateDebug.default = createDebug;\n\t\tcreateDebug.coerce = coerce;\n\t\tcreateDebug.disable = disable;\n\t\tcreateDebug.enable = enable;\n\t\tcreateDebug.enabled = enabled;\n\t\tcreateDebug.humanize = __webpack_require__(6);\n\t\n\t\tObject.keys(env).forEach(function (key) {\n\t\t\tcreateDebug[key] = env[key];\n\t\t});\n\t\n\t\t/**\n\t * Active `debug` instances.\n\t */\n\t\tcreateDebug.instances = [];\n\t\n\t\t/**\n\t * The currently active debug mode names, and names to skip.\n\t */\n\t\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\t\n\t\t/**\n\t * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t *\n\t * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t */\n\t\tcreateDebug.formatters = {};\n\t\n\t\t/**\n\t * Selects a color for a debug namespace\n\t * @param {String} namespace The namespace string for the for the debug instance to be colored\n\t * @return {Number|String} An ANSI color code for the given namespace\n\t * @api private\n\t */\n\t\tfunction selectColor(namespace) {\n\t\t\tvar hash = 0;\n\t\n\t\t\tfor (var i = 0; i < namespace.length; i++) {\n\t\t\t\thash = (hash << 5) - hash + namespace.charCodeAt(i);\n\t\t\t\thash |= 0; // Convert to 32bit integer\n\t\t\t}\n\t\n\t\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t\t}\n\t\tcreateDebug.selectColor = selectColor;\n\t\n\t\t/**\n\t * Create a debugger with the given `namespace`.\n\t *\n\t * @param {String} namespace\n\t * @return {Function}\n\t * @api public\n\t */\n\t\tfunction createDebug(namespace) {\n\t\t\tvar prevTime = void 0;\n\t\n\t\t\tfunction debug() {\n\t\t\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\t\t\targs[_key] = arguments[_key];\n\t\t\t\t}\n\t\n\t\t\t\t// Disabled?\n\t\t\t\tif (!debug.enabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tvar self = debug;\n\t\n\t\t\t\t// Set `diff` timestamp\n\t\t\t\tvar curr = Number(new Date());\n\t\t\t\tvar ms = curr - (prevTime || curr);\n\t\t\t\tself.diff = ms;\n\t\t\t\tself.prev = prevTime;\n\t\t\t\tself.curr = curr;\n\t\t\t\tprevTime = curr;\n\t\n\t\t\t\targs[0] = createDebug.coerce(args[0]);\n\t\n\t\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\t\targs.unshift('%O');\n\t\t\t\t}\n\t\n\t\t\t\t// Apply any `formatters` transformations\n\t\t\t\tvar index = 0;\n\t\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n\t\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\t\tif (match === '%%') {\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t}\n\t\t\t\t\tindex++;\n\t\t\t\t\tvar formatter = createDebug.formatters[format];\n\t\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\t\tvar val = args[index];\n\t\t\t\t\t\tmatch = formatter.call(self, val);\n\t\n\t\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t}\n\t\t\t\t\treturn match;\n\t\t\t\t});\n\t\n\t\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\t\tcreateDebug.formatArgs.call(self, args);\n\t\n\t\t\t\tvar logFn = self.log || createDebug.log;\n\t\t\t\tlogFn.apply(self, args);\n\t\t\t}\n\t\n\t\t\tdebug.namespace = namespace;\n\t\t\tdebug.enabled = createDebug.enabled(namespace);\n\t\t\tdebug.useColors = createDebug.useColors();\n\t\t\tdebug.color = selectColor(namespace);\n\t\t\tdebug.destroy = destroy;\n\t\t\tdebug.extend = extend;\n\t\t\t// Debug.formatArgs = formatArgs;\n\t\t\t// debug.rawLog = rawLog;\n\t\n\t\t\t// env-specific initialization logic for debug instances\n\t\t\tif (typeof createDebug.init === 'function') {\n\t\t\t\tcreateDebug.init(debug);\n\t\t\t}\n\t\n\t\t\tcreateDebug.instances.push(debug);\n\t\n\t\t\treturn debug;\n\t\t}\n\t\n\t\tfunction destroy() {\n\t\t\tvar index = createDebug.instances.indexOf(this);\n\t\t\tif (index !== -1) {\n\t\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\n\t\tfunction extend(namespace, delimiter) {\n\t\t\tvar newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\t\tnewDebug.log = this.log;\n\t\t\treturn newDebug;\n\t\t}\n\t\n\t\t/**\n\t * Enables a debug mode by namespaces. This can include modes\n\t * separated by a colon and wildcards.\n\t *\n\t * @param {String} namespaces\n\t * @api public\n\t */\n\t\tfunction enable(namespaces) {\n\t\t\tcreateDebug.save(namespaces);\n\t\n\t\t\tcreateDebug.names = [];\n\t\t\tcreateDebug.skips = [];\n\t\n\t\t\tvar i = void 0;\n\t\t\tvar split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\t\tvar len = split.length;\n\t\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tif (!split[i]) {\n\t\t\t\t\t// ignore empty strings\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\n\t\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\t\n\t\t\t\tif (namespaces[0] === '-') {\n\t\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t\t} else {\n\t\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\t\tvar instance = createDebug.instances[i];\n\t\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\n\t\t\t}\n\t\t}\n\t\n\t\t/**\n\t * Disable debug output.\n\t *\n\t * @return {String} namespaces\n\t * @api public\n\t */\n\t\tfunction disable() {\n\t\t\tvar namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) {\n\t\t\t\treturn '-' + namespace;\n\t\t\t}))).join(',');\n\t\t\tcreateDebug.enable('');\n\t\t\treturn namespaces;\n\t\t}\n\t\n\t\t/**\n\t * Returns true if the given mode name is enabled, false otherwise.\n\t *\n\t * @param {String} name\n\t * @return {Boolean}\n\t * @api public\n\t */\n\t\tfunction enabled(name) {\n\t\t\tif (name[name.length - 1] === '*') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\tvar i = void 0;\n\t\t\tvar len = void 0;\n\t\n\t\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn false;\n\t\t}\n\t\n\t\t/**\n\t * Convert regexp to namespace\n\t *\n\t * @param {RegExp} regxep\n\t * @return {String} namespace\n\t * @api private\n\t */\n\t\tfunction toNamespace(regexp) {\n\t\t\treturn regexp.toString().substring(2, regexp.toString().length - 2).replace(/\\.\\*\\?$/, '*');\n\t\t}\n\t\n\t\t/**\n\t * Coerce `val`.\n\t *\n\t * @param {Mixed} val\n\t * @return {Mixed}\n\t * @api private\n\t */\n\t\tfunction coerce(val) {\n\t\t\tif (val instanceof Error) {\n\t\t\t\treturn val.stack || val.message;\n\t\t\t}\n\t\t\treturn val;\n\t\t}\n\t\n\t\tcreateDebug.enable(createDebug.load());\n\t\n\t\treturn createDebug;\n\t}\n\t\n\tmodule.exports = setup;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Helpers.\n\t */\n\t\n\tvar s = 1000;\n\tvar m = s * 60;\n\tvar h = m * 60;\n\tvar d = h * 24;\n\tvar w = d * 7;\n\tvar y = d * 365.25;\n\t\n\t/**\n\t * Parse or format the given `val`.\n\t *\n\t * Options:\n\t *\n\t *  - `long` verbose formatting [false]\n\t *\n\t * @param {String|Number} val\n\t * @param {Object} [options]\n\t * @throws {Error} throw an error if val is not a non-empty string or a number\n\t * @return {String|Number}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(val, options) {\n\t  options = options || {};\n\t  var type = typeof val;\n\t  if (type === 'string' && val.length > 0) {\n\t    return parse(val);\n\t  } else if (type === 'number' && isFinite(val)) {\n\t    return options.long ? fmtLong(val) : fmtShort(val);\n\t  }\n\t  throw new Error(\n\t    'val is not a non-empty string or a valid number. val=' +\n\t      JSON.stringify(val)\n\t  );\n\t};\n\t\n\t/**\n\t * Parse the given `str` and return milliseconds.\n\t *\n\t * @param {String} str\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction parse(str) {\n\t  str = String(str);\n\t  if (str.length > 100) {\n\t    return;\n\t  }\n\t  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n\t    str\n\t  );\n\t  if (!match) {\n\t    return;\n\t  }\n\t  var n = parseFloat(match[1]);\n\t  var type = (match[2] || 'ms').toLowerCase();\n\t  switch (type) {\n\t    case 'years':\n\t    case 'year':\n\t    case 'yrs':\n\t    case 'yr':\n\t    case 'y':\n\t      return n * y;\n\t    case 'weeks':\n\t    case 'week':\n\t    case 'w':\n\t      return n * w;\n\t    case 'days':\n\t    case 'day':\n\t    case 'd':\n\t      return n * d;\n\t    case 'hours':\n\t    case 'hour':\n\t    case 'hrs':\n\t    case 'hr':\n\t    case 'h':\n\t      return n * h;\n\t    case 'minutes':\n\t    case 'minute':\n\t    case 'mins':\n\t    case 'min':\n\t    case 'm':\n\t      return n * m;\n\t    case 'seconds':\n\t    case 'second':\n\t    case 'secs':\n\t    case 'sec':\n\t    case 's':\n\t      return n * s;\n\t    case 'milliseconds':\n\t    case 'millisecond':\n\t    case 'msecs':\n\t    case 'msec':\n\t    case 'ms':\n\t      return n;\n\t    default:\n\t      return undefined;\n\t  }\n\t}\n\t\n\t/**\n\t * Short format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtShort(ms) {\n\t  var msAbs = Math.abs(ms);\n\t  if (msAbs >= d) {\n\t    return Math.round(ms / d) + 'd';\n\t  }\n\t  if (msAbs >= h) {\n\t    return Math.round(ms / h) + 'h';\n\t  }\n\t  if (msAbs >= m) {\n\t    return Math.round(ms / m) + 'm';\n\t  }\n\t  if (msAbs >= s) {\n\t    return Math.round(ms / s) + 's';\n\t  }\n\t  return ms + 'ms';\n\t}\n\t\n\t/**\n\t * Long format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtLong(ms) {\n\t  var msAbs = Math.abs(ms);\n\t  if (msAbs >= d) {\n\t    return plural(ms, msAbs, d, 'day');\n\t  }\n\t  if (msAbs >= h) {\n\t    return plural(ms, msAbs, h, 'hour');\n\t  }\n\t  if (msAbs >= m) {\n\t    return plural(ms, msAbs, m, 'minute');\n\t  }\n\t  if (msAbs >= s) {\n\t    return plural(ms, msAbs, s, 'second');\n\t  }\n\t  return ms + ' ms';\n\t}\n\t\n\t/**\n\t * Pluralization helper.\n\t */\n\t\n\tfunction plural(ms, msAbs, n, name) {\n\t  var isPlural = msAbs >= n * 1.5;\n\t  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n\t}\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar debug = __webpack_require__(8)('socket.io-parser');\n\tvar Emitter = __webpack_require__(11);\n\tvar binary = __webpack_require__(12);\n\tvar isArray = __webpack_require__(13);\n\tvar isBuf = __webpack_require__(14);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = 4;\n\t\n\t/**\n\t * Packet types.\n\t *\n\t * @api public\n\t */\n\t\n\texports.types = [\n\t  'CONNECT',\n\t  'DISCONNECT',\n\t  'EVENT',\n\t  'ACK',\n\t  'ERROR',\n\t  'BINARY_EVENT',\n\t  'BINARY_ACK'\n\t];\n\t\n\t/**\n\t * Packet type `connect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.CONNECT = 0;\n\t\n\t/**\n\t * Packet type `disconnect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.DISCONNECT = 1;\n\t\n\t/**\n\t * Packet type `event`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.EVENT = 2;\n\t\n\t/**\n\t * Packet type `ack`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ACK = 3;\n\t\n\t/**\n\t * Packet type `error`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ERROR = 4;\n\t\n\t/**\n\t * Packet type 'binary event'\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_EVENT = 5;\n\t\n\t/**\n\t * Packet type `binary ack`. For acks with binary arguments.\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_ACK = 6;\n\t\n\t/**\n\t * Encoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Encoder = Encoder;\n\t\n\t/**\n\t * Decoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Decoder = Decoder;\n\t\n\t/**\n\t * A socket.io Encoder instance\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Encoder() {}\n\t\n\tvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\t\n\t/**\n\t * Encode a packet as a single string if non-binary, or as a\n\t * buffer sequence, depending on packet type.\n\t *\n\t * @param {Object} obj - packet object\n\t * @param {Function} callback - function to handle encodings (likely engine.write)\n\t * @return Calls callback with Array of encodings\n\t * @api public\n\t */\n\t\n\tEncoder.prototype.encode = function(obj, callback){\n\t  debug('encoding packet %j', obj);\n\t\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    encodeAsBinary(obj, callback);\n\t  } else {\n\t    var encoding = encodeAsString(obj);\n\t    callback([encoding]);\n\t  }\n\t};\n\t\n\t/**\n\t * Encode packet as string.\n\t *\n\t * @param {Object} packet\n\t * @return {String} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsString(obj) {\n\t\n\t  // first is type\n\t  var str = '' + obj.type;\n\t\n\t  // attachments if we have them\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    str += obj.attachments + '-';\n\t  }\n\t\n\t  // if we have a namespace other than `/`\n\t  // we append it followed by a comma `,`\n\t  if (obj.nsp && '/' !== obj.nsp) {\n\t    str += obj.nsp + ',';\n\t  }\n\t\n\t  // immediately followed by the id\n\t  if (null != obj.id) {\n\t    str += obj.id;\n\t  }\n\t\n\t  // json data\n\t  if (null != obj.data) {\n\t    var payload = tryStringify(obj.data);\n\t    if (payload !== false) {\n\t      str += payload;\n\t    } else {\n\t      return ERROR_PACKET;\n\t    }\n\t  }\n\t\n\t  debug('encoded %j as %s', obj, str);\n\t  return str;\n\t}\n\t\n\tfunction tryStringify(str) {\n\t  try {\n\t    return JSON.stringify(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Encode packet as 'buffer sequence' by removing blobs, and\n\t * deconstructing packet into object with placeholders and\n\t * a list of buffers.\n\t *\n\t * @param {Object} packet\n\t * @return {Buffer} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsBinary(obj, callback) {\n\t\n\t  function writeEncoding(bloblessData) {\n\t    var deconstruction = binary.deconstructPacket(bloblessData);\n\t    var pack = encodeAsString(deconstruction.packet);\n\t    var buffers = deconstruction.buffers;\n\t\n\t    buffers.unshift(pack); // add packet info to beginning of data list\n\t    callback(buffers); // write all the buffers\n\t  }\n\t\n\t  binary.removeBlobs(obj, writeEncoding);\n\t}\n\t\n\t/**\n\t * A socket.io Decoder instance\n\t *\n\t * @return {Object} decoder\n\t * @api public\n\t */\n\t\n\tfunction Decoder() {\n\t  this.reconstructor = null;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter` with Decoder.\n\t */\n\t\n\tEmitter(Decoder.prototype);\n\t\n\t/**\n\t * Decodes an encoded packet string into packet JSON.\n\t *\n\t * @param {String} obj - encoded packet\n\t * @return {Object} packet\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.add = function(obj) {\n\t  var packet;\n\t  if (typeof obj === 'string') {\n\t    packet = decodeString(obj);\n\t    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n\t      this.reconstructor = new BinaryReconstructor(packet);\n\t\n\t      // no attachments, labeled binary but no binary data to follow\n\t      if (this.reconstructor.reconPack.attachments === 0) {\n\t        this.emit('decoded', packet);\n\t      }\n\t    } else { // non-binary full packet\n\t      this.emit('decoded', packet);\n\t    }\n\t  } else if (isBuf(obj) || obj.base64) { // raw binary data\n\t    if (!this.reconstructor) {\n\t      throw new Error('got binary data when not reconstructing a packet');\n\t    } else {\n\t      packet = this.reconstructor.takeBinaryData(obj);\n\t      if (packet) { // received final buffer\n\t        this.reconstructor = null;\n\t        this.emit('decoded', packet);\n\t      }\n\t    }\n\t  } else {\n\t    throw new Error('Unknown type: ' + obj);\n\t  }\n\t};\n\t\n\t/**\n\t * Decode a packet String (JSON data)\n\t *\n\t * @param {String} str\n\t * @return {Object} packet\n\t * @api private\n\t */\n\t\n\tfunction decodeString(str) {\n\t  var i = 0;\n\t  // look up type\n\t  var p = {\n\t    type: Number(str.charAt(0))\n\t  };\n\t\n\t  if (null == exports.types[p.type]) {\n\t    return error('unknown packet type ' + p.type);\n\t  }\n\t\n\t  // look up attachments if type binary\n\t  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n\t    var buf = '';\n\t    while (str.charAt(++i) !== '-') {\n\t      buf += str.charAt(i);\n\t      if (i == str.length) break;\n\t    }\n\t    if (buf != Number(buf) || str.charAt(i) !== '-') {\n\t      throw new Error('Illegal attachments');\n\t    }\n\t    p.attachments = Number(buf);\n\t  }\n\t\n\t  // look up namespace (if any)\n\t  if ('/' === str.charAt(i + 1)) {\n\t    p.nsp = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (',' === c) break;\n\t      p.nsp += c;\n\t      if (i === str.length) break;\n\t    }\n\t  } else {\n\t    p.nsp = '/';\n\t  }\n\t\n\t  // look up id\n\t  var next = str.charAt(i + 1);\n\t  if ('' !== next && Number(next) == next) {\n\t    p.id = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (null == c || Number(c) != c) {\n\t        --i;\n\t        break;\n\t      }\n\t      p.id += str.charAt(i);\n\t      if (i === str.length) break;\n\t    }\n\t    p.id = Number(p.id);\n\t  }\n\t\n\t  // look up json data\n\t  if (str.charAt(++i)) {\n\t    var payload = tryParse(str.substr(i));\n\t    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n\t    if (isPayloadValid) {\n\t      p.data = payload;\n\t    } else {\n\t      return error('invalid payload');\n\t    }\n\t  }\n\t\n\t  debug('decoded %s as %j', str, p);\n\t  return p;\n\t}\n\t\n\tfunction tryParse(str) {\n\t  try {\n\t    return JSON.parse(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Deallocates a parser's resources\n\t *\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.destroy = function() {\n\t  if (this.reconstructor) {\n\t    this.reconstructor.finishedReconstruction();\n\t  }\n\t};\n\t\n\t/**\n\t * A manager of a binary event's 'buffer sequence'. Should\n\t * be constructed whenever a packet of type BINARY_EVENT is\n\t * decoded.\n\t *\n\t * @param {Object} packet\n\t * @return {BinaryReconstructor} initialized reconstructor\n\t * @api private\n\t */\n\t\n\tfunction BinaryReconstructor(packet) {\n\t  this.reconPack = packet;\n\t  this.buffers = [];\n\t}\n\t\n\t/**\n\t * Method to be called when binary data received from connection\n\t * after a BINARY_EVENT packet.\n\t *\n\t * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n\t * @return {null | Object} returns null if more binary data is expected or\n\t *   a reconstructed packet object if all buffers have been received.\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n\t  this.buffers.push(binData);\n\t  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n\t    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n\t    this.finishedReconstruction();\n\t    return packet;\n\t  }\n\t  return null;\n\t};\n\t\n\t/**\n\t * Cleans up binary packet reconstruction variables.\n\t *\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.finishedReconstruction = function() {\n\t  this.reconPack = null;\n\t  this.buffers = [];\n\t};\n\t\n\tfunction error(msg) {\n\t  return {\n\t    type: exports.ERROR,\n\t    data: 'parser error: ' + msg\n\t  };\n\t}\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * This is the web browser implementation of `debug()`.\n\t *\n\t * Expose `debug()` as the module.\n\t */\n\t\n\texports = module.exports = __webpack_require__(9);\n\texports.log = log;\n\texports.formatArgs = formatArgs;\n\texports.save = save;\n\texports.load = load;\n\texports.useColors = useColors;\n\texports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();\n\t\n\t/**\n\t * Colors.\n\t */\n\t\n\texports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n\t\n\t/**\n\t * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n\t * and the Firebug extension (any Firefox version) are known\n\t * to support \"%c\" CSS customizations.\n\t *\n\t * TODO: add a `localStorage` variable to explicitly enable/disable colors\n\t */\n\t\n\tfunction useColors() {\n\t  // NB: In an Electron preload script, document will be defined but not fully\n\t  // initialized. Since we know we're in Chrome, we'll just detect this case\n\t  // explicitly\n\t  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n\t    return true;\n\t  }\n\t\n\t  // Internet Explorer and Edge do not support colors.\n\t  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t    return false;\n\t  }\n\t\n\t  // is webkit? http://stackoverflow.com/a/16459606/376773\n\t  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n\t  // is firebug? http://stackoverflow.com/a/398120/376773\n\t  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n\t  // is firefox >= v31?\n\t  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n\t  // double check webkit in userAgent just in case we are in a worker\n\t  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n\t}\n\t\n\t/**\n\t * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n\t */\n\t\n\texports.formatters.j = function (v) {\n\t  try {\n\t    return JSON.stringify(v);\n\t  } catch (err) {\n\t    return '[UnexpectedJSONParseError]: ' + err.message;\n\t  }\n\t};\n\t\n\t/**\n\t * Colorize log arguments if enabled.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction formatArgs(args) {\n\t  var useColors = this.useColors;\n\t\n\t  args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);\n\t\n\t  if (!useColors) return;\n\t\n\t  var c = 'color: ' + this.color;\n\t  args.splice(1, 0, c, 'color: inherit');\n\t\n\t  // the final \"%c\" is somewhat tricky, because there could be other\n\t  // arguments passed either before or after the %c, so we need to\n\t  // figure out the correct index to insert the CSS into\n\t  var index = 0;\n\t  var lastC = 0;\n\t  args[0].replace(/%[a-zA-Z%]/g, function (match) {\n\t    if ('%%' === match) return;\n\t    index++;\n\t    if ('%c' === match) {\n\t      // we only are interested in the *last* %c\n\t      // (the user may have provided their own)\n\t      lastC = index;\n\t    }\n\t  });\n\t\n\t  args.splice(lastC, 0, c);\n\t}\n\t\n\t/**\n\t * Invokes `console.log()` when available.\n\t * No-op when `console.log` is not a \"function\".\n\t *\n\t * @api public\n\t */\n\t\n\tfunction log() {\n\t  // this hackery is required for IE8/9, where\n\t  // the `console.log` function doesn't have 'apply'\n\t  return 'object' === (typeof console === 'undefined' ? 'undefined' : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments);\n\t}\n\t\n\t/**\n\t * Save `namespaces`.\n\t *\n\t * @param {String} namespaces\n\t * @api private\n\t */\n\t\n\tfunction save(namespaces) {\n\t  try {\n\t    if (null == namespaces) {\n\t      exports.storage.removeItem('debug');\n\t    } else {\n\t      exports.storage.debug = namespaces;\n\t    }\n\t  } catch (e) {}\n\t}\n\t\n\t/**\n\t * Load `namespaces`.\n\t *\n\t * @return {String} returns the previously persisted debug modes\n\t * @api private\n\t */\n\t\n\tfunction load() {\n\t  var r;\n\t  try {\n\t    r = exports.storage.debug;\n\t  } catch (e) {}\n\t\n\t  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\t  if (!r && typeof process !== 'undefined' && 'env' in process) {\n\t    r = process.env.DEBUG;\n\t  }\n\t\n\t  return r;\n\t}\n\t\n\t/**\n\t * Enable namespaces listed in `localStorage.debug` initially.\n\t */\n\t\n\texports.enable(load());\n\t\n\t/**\n\t * Localstorage attempts to return the localstorage.\n\t *\n\t * This is necessary because safari throws\n\t * when a user disables cookies/localstorage\n\t * and you attempt to access it.\n\t *\n\t * @return {LocalStorage}\n\t * @api private\n\t */\n\t\n\tfunction localstorage() {\n\t  try {\n\t    return window.localStorage;\n\t  } catch (e) {}\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * This is the common logic for both the Node.js and web browser\n\t * implementations of `debug()`.\n\t *\n\t * Expose `debug()` as the module.\n\t */\n\t\n\texports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\n\texports.coerce = coerce;\n\texports.disable = disable;\n\texports.enable = enable;\n\texports.enabled = enabled;\n\texports.humanize = __webpack_require__(10);\n\t\n\t/**\n\t * Active `debug` instances.\n\t */\n\texports.instances = [];\n\t\n\t/**\n\t * The currently active debug mode names, and names to skip.\n\t */\n\t\n\texports.names = [];\n\texports.skips = [];\n\t\n\t/**\n\t * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t *\n\t * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t */\n\t\n\texports.formatters = {};\n\t\n\t/**\n\t * Select a color.\n\t * @param {String} namespace\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction selectColor(namespace) {\n\t  var hash = 0,\n\t      i;\n\t\n\t  for (i in namespace) {\n\t    hash = (hash << 5) - hash + namespace.charCodeAt(i);\n\t    hash |= 0; // Convert to 32bit integer\n\t  }\n\t\n\t  return exports.colors[Math.abs(hash) % exports.colors.length];\n\t}\n\t\n\t/**\n\t * Create a debugger with the given `namespace`.\n\t *\n\t * @param {String} namespace\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tfunction createDebug(namespace) {\n\t\n\t  var prevTime;\n\t\n\t  function debug() {\n\t    // disabled?\n\t    if (!debug.enabled) return;\n\t\n\t    var self = debug;\n\t\n\t    // set `diff` timestamp\n\t    var curr = +new Date();\n\t    var ms = curr - (prevTime || curr);\n\t    self.diff = ms;\n\t    self.prev = prevTime;\n\t    self.curr = curr;\n\t    prevTime = curr;\n\t\n\t    // turn the `arguments` into a proper Array\n\t    var args = new Array(arguments.length);\n\t    for (var i = 0; i < args.length; i++) {\n\t      args[i] = arguments[i];\n\t    }\n\t\n\t    args[0] = exports.coerce(args[0]);\n\t\n\t    if ('string' !== typeof args[0]) {\n\t      // anything else let's inspect with %O\n\t      args.unshift('%O');\n\t    }\n\t\n\t    // apply any `formatters` transformations\n\t    var index = 0;\n\t    args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n\t      // if we encounter an escaped % then don't increase the array index\n\t      if (match === '%%') return match;\n\t      index++;\n\t      var formatter = exports.formatters[format];\n\t      if ('function' === typeof formatter) {\n\t        var val = args[index];\n\t        match = formatter.call(self, val);\n\t\n\t        // now we need to remove `args[index]` since it's inlined in the `format`\n\t        args.splice(index, 1);\n\t        index--;\n\t      }\n\t      return match;\n\t    });\n\t\n\t    // apply env-specific formatting (colors, etc.)\n\t    exports.formatArgs.call(self, args);\n\t\n\t    var logFn = debug.log || exports.log || console.log.bind(console);\n\t    logFn.apply(self, args);\n\t  }\n\t\n\t  debug.namespace = namespace;\n\t  debug.enabled = exports.enabled(namespace);\n\t  debug.useColors = exports.useColors();\n\t  debug.color = selectColor(namespace);\n\t  debug.destroy = destroy;\n\t\n\t  // env-specific initialization logic for debug instances\n\t  if ('function' === typeof exports.init) {\n\t    exports.init(debug);\n\t  }\n\t\n\t  exports.instances.push(debug);\n\t\n\t  return debug;\n\t}\n\t\n\tfunction destroy() {\n\t  var index = exports.instances.indexOf(this);\n\t  if (index !== -1) {\n\t    exports.instances.splice(index, 1);\n\t    return true;\n\t  } else {\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Enables a debug mode by namespaces. This can include modes\n\t * separated by a colon and wildcards.\n\t *\n\t * @param {String} namespaces\n\t * @api public\n\t */\n\t\n\tfunction enable(namespaces) {\n\t  exports.save(namespaces);\n\t\n\t  exports.names = [];\n\t  exports.skips = [];\n\t\n\t  var i;\n\t  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t  var len = split.length;\n\t\n\t  for (i = 0; i < len; i++) {\n\t    if (!split[i]) continue; // ignore empty strings\n\t    namespaces = split[i].replace(/\\*/g, '.*?');\n\t    if (namespaces[0] === '-') {\n\t      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t    } else {\n\t      exports.names.push(new RegExp('^' + namespaces + '$'));\n\t    }\n\t  }\n\t\n\t  for (i = 0; i < exports.instances.length; i++) {\n\t    var instance = exports.instances[i];\n\t    instance.enabled = exports.enabled(instance.namespace);\n\t  }\n\t}\n\t\n\t/**\n\t * Disable debug output.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction disable() {\n\t  exports.enable('');\n\t}\n\t\n\t/**\n\t * Returns true if the given mode name is enabled, false otherwise.\n\t *\n\t * @param {String} name\n\t * @return {Boolean}\n\t * @api public\n\t */\n\t\n\tfunction enabled(name) {\n\t  if (name[name.length - 1] === '*') {\n\t    return true;\n\t  }\n\t  var i, len;\n\t  for (i = 0, len = exports.skips.length; i < len; i++) {\n\t    if (exports.skips[i].test(name)) {\n\t      return false;\n\t    }\n\t  }\n\t  for (i = 0, len = exports.names.length; i < len; i++) {\n\t    if (exports.names[i].test(name)) {\n\t      return true;\n\t    }\n\t  }\n\t  return false;\n\t}\n\t\n\t/**\n\t * Coerce `val`.\n\t *\n\t * @param {Mixed} val\n\t * @return {Mixed}\n\t * @api private\n\t */\n\t\n\tfunction coerce(val) {\n\t  if (val instanceof Error) return val.stack || val.message;\n\t  return val;\n\t}\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Helpers.\n\t */\n\t\n\tvar s = 1000;\n\tvar m = s * 60;\n\tvar h = m * 60;\n\tvar d = h * 24;\n\tvar y = d * 365.25;\n\t\n\t/**\n\t * Parse or format the given `val`.\n\t *\n\t * Options:\n\t *\n\t *  - `long` verbose formatting [false]\n\t *\n\t * @param {String|Number} val\n\t * @param {Object} [options]\n\t * @throws {Error} throw an error if val is not a non-empty string or a number\n\t * @return {String|Number}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(val, options) {\n\t  options = options || {};\n\t  var type = typeof val;\n\t  if (type === 'string' && val.length > 0) {\n\t    return parse(val);\n\t  } else if (type === 'number' && isNaN(val) === false) {\n\t    return options.long ? fmtLong(val) : fmtShort(val);\n\t  }\n\t  throw new Error(\n\t    'val is not a non-empty string or a valid number. val=' +\n\t      JSON.stringify(val)\n\t  );\n\t};\n\t\n\t/**\n\t * Parse the given `str` and return milliseconds.\n\t *\n\t * @param {String} str\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction parse(str) {\n\t  str = String(str);\n\t  if (str.length > 100) {\n\t    return;\n\t  }\n\t  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n\t    str\n\t  );\n\t  if (!match) {\n\t    return;\n\t  }\n\t  var n = parseFloat(match[1]);\n\t  var type = (match[2] || 'ms').toLowerCase();\n\t  switch (type) {\n\t    case 'years':\n\t    case 'year':\n\t    case 'yrs':\n\t    case 'yr':\n\t    case 'y':\n\t      return n * y;\n\t    case 'days':\n\t    case 'day':\n\t    case 'd':\n\t      return n * d;\n\t    case 'hours':\n\t    case 'hour':\n\t    case 'hrs':\n\t    case 'hr':\n\t    case 'h':\n\t      return n * h;\n\t    case 'minutes':\n\t    case 'minute':\n\t    case 'mins':\n\t    case 'min':\n\t    case 'm':\n\t      return n * m;\n\t    case 'seconds':\n\t    case 'second':\n\t    case 'secs':\n\t    case 'sec':\n\t    case 's':\n\t      return n * s;\n\t    case 'milliseconds':\n\t    case 'millisecond':\n\t    case 'msecs':\n\t    case 'msec':\n\t    case 'ms':\n\t      return n;\n\t    default:\n\t      return undefined;\n\t  }\n\t}\n\t\n\t/**\n\t * Short format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtShort(ms) {\n\t  if (ms >= d) {\n\t    return Math.round(ms / d) + 'd';\n\t  }\n\t  if (ms >= h) {\n\t    return Math.round(ms / h) + 'h';\n\t  }\n\t  if (ms >= m) {\n\t    return Math.round(ms / m) + 'm';\n\t  }\n\t  if (ms >= s) {\n\t    return Math.round(ms / s) + 's';\n\t  }\n\t  return ms + 'ms';\n\t}\n\t\n\t/**\n\t * Long format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtLong(ms) {\n\t  return plural(ms, d, 'day') ||\n\t    plural(ms, h, 'hour') ||\n\t    plural(ms, m, 'minute') ||\n\t    plural(ms, s, 'second') ||\n\t    ms + ' ms';\n\t}\n\t\n\t/**\n\t * Pluralization helper.\n\t */\n\t\n\tfunction plural(ms, n, name) {\n\t  if (ms < n) {\n\t    return;\n\t  }\n\t  if (ms < n * 1.5) {\n\t    return Math.floor(ms / n) + ' ' + name;\n\t  }\n\t  return Math.ceil(ms / n) + ' ' + name + 's';\n\t}\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\r\n\t/**\r\n\t * Expose `Emitter`.\r\n\t */\r\n\t\r\n\tif (true) {\r\n\t  module.exports = Emitter;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialize a new `Emitter`.\r\n\t *\r\n\t * @api public\r\n\t */\r\n\t\r\n\tfunction Emitter(obj) {\r\n\t  if (obj) return mixin(obj);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Mixin the emitter properties.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\tfunction mixin(obj) {\r\n\t  for (var key in Emitter.prototype) {\r\n\t    obj[key] = Emitter.prototype[key];\r\n\t  }\r\n\t  return obj;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Listen on the given `event` with `fn`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.on =\r\n\tEmitter.prototype.addEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n\t    .push(fn);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds an `event` listener that will be invoked a single\r\n\t * time then automatically removed.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.once = function(event, fn){\r\n\t  function on() {\r\n\t    this.off(event, on);\r\n\t    fn.apply(this, arguments);\r\n\t  }\r\n\t\r\n\t  on.fn = fn;\r\n\t  this.on(event, on);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Remove the given callback for `event` or all\r\n\t * registered callbacks.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.off =\r\n\tEmitter.prototype.removeListener =\r\n\tEmitter.prototype.removeAllListeners =\r\n\tEmitter.prototype.removeEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  // all\r\n\t  if (0 == arguments.length) {\r\n\t    this._callbacks = {};\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // specific event\r\n\t  var callbacks = this._callbacks['$' + event];\r\n\t  if (!callbacks) return this;\r\n\t\r\n\t  // remove all handlers\r\n\t  if (1 == arguments.length) {\r\n\t    delete this._callbacks['$' + event];\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // remove specific handler\r\n\t  var cb;\r\n\t  for (var i = 0; i < callbacks.length; i++) {\r\n\t    cb = callbacks[i];\r\n\t    if (cb === fn || cb.fn === fn) {\r\n\t      callbacks.splice(i, 1);\r\n\t      break;\r\n\t    }\r\n\t  }\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Emit `event` with the given args.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Mixed} ...\r\n\t * @return {Emitter}\r\n\t */\r\n\t\r\n\tEmitter.prototype.emit = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  var args = [].slice.call(arguments, 1)\r\n\t    , callbacks = this._callbacks['$' + event];\r\n\t\r\n\t  if (callbacks) {\r\n\t    callbacks = callbacks.slice(0);\r\n\t    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n\t      callbacks[i].apply(this, args);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Return array of callbacks for `event`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Array}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.listeners = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  return this._callbacks['$' + event] || [];\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if this emitter has `event` handlers.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Boolean}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.hasListeners = function(event){\r\n\t  return !! this.listeners(event).length;\r\n\t};\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*global Blob,File*/\n\t\n\t/**\n\t * Module requirements\n\t */\n\t\n\tvar isArray = __webpack_require__(13);\n\tvar isBuf = __webpack_require__(14);\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\n\tvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\t\n\t/**\n\t * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n\t * Anything with blobs or files should be fed through removeBlobs before coming\n\t * here.\n\t *\n\t * @param {Object} packet - socket.io event packet\n\t * @return {Object} with deconstructed packet and list of buffers\n\t * @api public\n\t */\n\t\n\texports.deconstructPacket = function(packet) {\n\t  var buffers = [];\n\t  var packetData = packet.data;\n\t  var pack = packet;\n\t  pack.data = _deconstructPacket(packetData, buffers);\n\t  pack.attachments = buffers.length; // number of binary 'attachments'\n\t  return {packet: pack, buffers: buffers};\n\t};\n\t\n\tfunction _deconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (isBuf(data)) {\n\t    var placeholder = { _placeholder: true, num: buffers.length };\n\t    buffers.push(data);\n\t    return placeholder;\n\t  } else if (isArray(data)) {\n\t    var newData = new Array(data.length);\n\t    for (var i = 0; i < data.length; i++) {\n\t      newData[i] = _deconstructPacket(data[i], buffers);\n\t    }\n\t    return newData;\n\t  } else if (typeof data === 'object' && !(data instanceof Date)) {\n\t    var newData = {};\n\t    for (var key in data) {\n\t      newData[key] = _deconstructPacket(data[key], buffers);\n\t    }\n\t    return newData;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Reconstructs a binary packet from its placeholder packet and buffers\n\t *\n\t * @param {Object} packet - event packet with placeholders\n\t * @param {Array} buffers - binary buffers to put in placeholder positions\n\t * @return {Object} reconstructed packet\n\t * @api public\n\t */\n\t\n\texports.reconstructPacket = function(packet, buffers) {\n\t  packet.data = _reconstructPacket(packet.data, buffers);\n\t  packet.attachments = undefined; // no longer useful\n\t  return packet;\n\t};\n\t\n\tfunction _reconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (data && data._placeholder) {\n\t    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n\t  } else if (isArray(data)) {\n\t    for (var i = 0; i < data.length; i++) {\n\t      data[i] = _reconstructPacket(data[i], buffers);\n\t    }\n\t  } else if (typeof data === 'object') {\n\t    for (var key in data) {\n\t      data[key] = _reconstructPacket(data[key], buffers);\n\t    }\n\t  }\n\t\n\t  return data;\n\t}\n\t\n\t/**\n\t * Asynchronously removes Blobs or Files from data via\n\t * FileReader's readAsArrayBuffer method. Used before encoding\n\t * data as msgpack. Calls callback with the blobless data.\n\t *\n\t * @param {Object} data\n\t * @param {Function} callback\n\t * @api private\n\t */\n\t\n\texports.removeBlobs = function(data, callback) {\n\t  function _removeBlobs(obj, curKey, containingObject) {\n\t    if (!obj) return obj;\n\t\n\t    // convert any blob\n\t    if ((withNativeBlob && obj instanceof Blob) ||\n\t        (withNativeFile && obj instanceof File)) {\n\t      pendingBlobs++;\n\t\n\t      // async filereader\n\t      var fileReader = new FileReader();\n\t      fileReader.onload = function() { // this.result == arraybuffer\n\t        if (containingObject) {\n\t          containingObject[curKey] = this.result;\n\t        }\n\t        else {\n\t          bloblessData = this.result;\n\t        }\n\t\n\t        // if nothing pending its callback time\n\t        if(! --pendingBlobs) {\n\t          callback(bloblessData);\n\t        }\n\t      };\n\t\n\t      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n\t    } else if (isArray(obj)) { // handle array\n\t      for (var i = 0; i < obj.length; i++) {\n\t        _removeBlobs(obj[i], i, obj);\n\t      }\n\t    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n\t      for (var key in obj) {\n\t        _removeBlobs(obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t\n\t  var pendingBlobs = 0;\n\t  var bloblessData = data;\n\t  _removeBlobs(bloblessData);\n\t  if (!pendingBlobs) {\n\t    callback(bloblessData);\n\t  }\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = Array.isArray || function (arr) {\n\t  return toString.call(arr) == '[object Array]';\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = isBuf;\n\t\n\tvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\n\tvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\t\n\tvar isView = function (obj) {\n\t  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n\t};\n\t\n\t/**\n\t * Returns true if obj is a buffer or an arraybuffer.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction isBuf(obj) {\n\t  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n\t          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n\t}\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar eio = __webpack_require__(16);\n\tvar Socket = __webpack_require__(39);\n\tvar Emitter = __webpack_require__(11);\n\tvar parser = __webpack_require__(7);\n\tvar on = __webpack_require__(41);\n\tvar bind = __webpack_require__(42);\n\tvar debug = __webpack_require__(3)('socket.io-client:manager');\n\tvar indexOf = __webpack_require__(38);\n\tvar Backoff = __webpack_require__(43);\n\t\n\t/**\n\t * IE6+ hasOwnProperty\n\t */\n\t\n\tvar has = Object.prototype.hasOwnProperty;\n\t\n\t/**\n\t * Module exports\n\t */\n\t\n\tmodule.exports = Manager;\n\t\n\t/**\n\t * `Manager` constructor.\n\t *\n\t * @param {String} engine instance or engine uri/opts\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Manager (uri, opts) {\n\t  if (!(this instanceof Manager)) return new Manager(uri, opts);\n\t  if (uri && ('object' === typeof uri)) {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t  opts = opts || {};\n\t\n\t  opts.path = opts.path || '/socket.io';\n\t  this.nsps = {};\n\t  this.subs = [];\n\t  this.opts = opts;\n\t  this.reconnection(opts.reconnection !== false);\n\t  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n\t  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n\t  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n\t  this.randomizationFactor(opts.randomizationFactor || 0.5);\n\t  this.backoff = new Backoff({\n\t    min: this.reconnectionDelay(),\n\t    max: this.reconnectionDelayMax(),\n\t    jitter: this.randomizationFactor()\n\t  });\n\t  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n\t  this.readyState = 'closed';\n\t  this.uri = uri;\n\t  this.connecting = [];\n\t  this.lastPing = null;\n\t  this.encoding = false;\n\t  this.packetBuffer = [];\n\t  var _parser = opts.parser || parser;\n\t  this.encoder = new _parser.Encoder();\n\t  this.decoder = new _parser.Decoder();\n\t  this.autoConnect = opts.autoConnect !== false;\n\t  if (this.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Propagate given event to sockets and emit on `this`\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.emitAll = function () {\n\t  this.emit.apply(this, arguments);\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Update `socket.id` of all sockets\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.updateSocketIds = function () {\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].id = this.generateId(nsp);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * generate `socket.id` for the given `nsp`\n\t *\n\t * @param {String} nsp\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tManager.prototype.generateId = function (nsp) {\n\t  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n\t};\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Manager.prototype);\n\t\n\t/**\n\t * Sets the `reconnection` config.\n\t *\n\t * @param {Boolean} true/false if it should automatically reconnect\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnection = function (v) {\n\t  if (!arguments.length) return this._reconnection;\n\t  this._reconnection = !!v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the reconnection attempts config.\n\t *\n\t * @param {Number} max reconnection attempts before giving up\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionAttempts = function (v) {\n\t  if (!arguments.length) return this._reconnectionAttempts;\n\t  this._reconnectionAttempts = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelay = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelay;\n\t  this._reconnectionDelay = v;\n\t  this.backoff && this.backoff.setMin(v);\n\t  return this;\n\t};\n\t\n\tManager.prototype.randomizationFactor = function (v) {\n\t  if (!arguments.length) return this._randomizationFactor;\n\t  this._randomizationFactor = v;\n\t  this.backoff && this.backoff.setJitter(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the maximum delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelayMax = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelayMax;\n\t  this._reconnectionDelayMax = v;\n\t  this.backoff && this.backoff.setMax(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the connection timeout. `false` to disable\n\t *\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.timeout = function (v) {\n\t  if (!arguments.length) return this._timeout;\n\t  this._timeout = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Starts trying to reconnect if reconnection is enabled and we have not\n\t * started reconnecting yet\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.maybeReconnectOnOpen = function () {\n\t  // Only try to reconnect if it's the first time we're connecting\n\t  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n\t    // keeps reconnection from firing twice for the same reconnection loop\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Sets the current transport `socket`.\n\t *\n\t * @param {Function} optional, callback\n\t * @return {Manager} self\n\t * @api public\n\t */\n\t\n\tManager.prototype.open =\n\tManager.prototype.connect = function (fn, opts) {\n\t  debug('readyState %s', this.readyState);\n\t  if (~this.readyState.indexOf('open')) return this;\n\t\n\t  debug('opening %s', this.uri);\n\t  this.engine = eio(this.uri, this.opts);\n\t  var socket = this.engine;\n\t  var self = this;\n\t  this.readyState = 'opening';\n\t  this.skipReconnect = false;\n\t\n\t  // emit `open`\n\t  var openSub = on(socket, 'open', function () {\n\t    self.onopen();\n\t    fn && fn();\n\t  });\n\t\n\t  // emit `connect_error`\n\t  var errorSub = on(socket, 'error', function (data) {\n\t    debug('connect_error');\n\t    self.cleanup();\n\t    self.readyState = 'closed';\n\t    self.emitAll('connect_error', data);\n\t    if (fn) {\n\t      var err = new Error('Connection error');\n\t      err.data = data;\n\t      fn(err);\n\t    } else {\n\t      // Only do this if there is no fn to handle the error\n\t      self.maybeReconnectOnOpen();\n\t    }\n\t  });\n\t\n\t  // emit `connect_timeout`\n\t  if (false !== this._timeout) {\n\t    var timeout = this._timeout;\n\t    debug('connect attempt will timeout after %d', timeout);\n\t\n\t    // set timer\n\t    var timer = setTimeout(function () {\n\t      debug('connect attempt timed out after %d', timeout);\n\t      openSub.destroy();\n\t      socket.close();\n\t      socket.emit('error', 'timeout');\n\t      self.emitAll('connect_timeout', timeout);\n\t    }, timeout);\n\t\n\t    this.subs.push({\n\t      destroy: function () {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t\n\t  this.subs.push(openSub);\n\t  this.subs.push(errorSub);\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport open.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onopen = function () {\n\t  debug('open');\n\t\n\t  // clear old subs\n\t  this.cleanup();\n\t\n\t  // mark as open\n\t  this.readyState = 'open';\n\t  this.emit('open');\n\t\n\t  // add new subs\n\t  var socket = this.engine;\n\t  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n\t  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n\t  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n\t  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n\t  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n\t  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n\t};\n\t\n\t/**\n\t * Called upon a ping.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onping = function () {\n\t  this.lastPing = new Date();\n\t  this.emitAll('ping');\n\t};\n\t\n\t/**\n\t * Called upon a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onpong = function () {\n\t  this.emitAll('pong', new Date() - this.lastPing);\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondata = function (data) {\n\t  this.decoder.add(data);\n\t};\n\t\n\t/**\n\t * Called when parser fully decodes a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondecoded = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon socket error.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onerror = function (err) {\n\t  debug('error', err);\n\t  this.emitAll('error', err);\n\t};\n\t\n\t/**\n\t * Creates a new socket for the given `nsp`.\n\t *\n\t * @return {Socket}\n\t * @api public\n\t */\n\t\n\tManager.prototype.socket = function (nsp, opts) {\n\t  var socket = this.nsps[nsp];\n\t  if (!socket) {\n\t    socket = new Socket(this, nsp, opts);\n\t    this.nsps[nsp] = socket;\n\t    var self = this;\n\t    socket.on('connecting', onConnecting);\n\t    socket.on('connect', function () {\n\t      socket.id = self.generateId(nsp);\n\t    });\n\t\n\t    if (this.autoConnect) {\n\t      // manually call here since connecting event is fired before listening\n\t      onConnecting();\n\t    }\n\t  }\n\t\n\t  function onConnecting () {\n\t    if (!~indexOf(self.connecting, socket)) {\n\t      self.connecting.push(socket);\n\t    }\n\t  }\n\t\n\t  return socket;\n\t};\n\t\n\t/**\n\t * Called upon a socket close.\n\t *\n\t * @param {Socket} socket\n\t */\n\t\n\tManager.prototype.destroy = function (socket) {\n\t  var index = indexOf(this.connecting, socket);\n\t  if (~index) this.connecting.splice(index, 1);\n\t  if (this.connecting.length) return;\n\t\n\t  this.close();\n\t};\n\t\n\t/**\n\t * Writes a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tManager.prototype.packet = function (packet) {\n\t  debug('writing packet %j', packet);\n\t  var self = this;\n\t  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\t\n\t  if (!self.encoding) {\n\t    // encode, then write to engine with result\n\t    self.encoding = true;\n\t    this.encoder.encode(packet, function (encodedPackets) {\n\t      for (var i = 0; i < encodedPackets.length; i++) {\n\t        self.engine.write(encodedPackets[i], packet.options);\n\t      }\n\t      self.encoding = false;\n\t      self.processPacketQueue();\n\t    });\n\t  } else { // add packet to the queue\n\t    self.packetBuffer.push(packet);\n\t  }\n\t};\n\t\n\t/**\n\t * If packet buffer is non-empty, begins encoding the\n\t * next packet in line.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.processPacketQueue = function () {\n\t  if (this.packetBuffer.length > 0 && !this.encoding) {\n\t    var pack = this.packetBuffer.shift();\n\t    this.packet(pack);\n\t  }\n\t};\n\t\n\t/**\n\t * Clean up transport subscriptions and packet buffer.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.cleanup = function () {\n\t  debug('cleanup');\n\t\n\t  var subsLength = this.subs.length;\n\t  for (var i = 0; i < subsLength; i++) {\n\t    var sub = this.subs.shift();\n\t    sub.destroy();\n\t  }\n\t\n\t  this.packetBuffer = [];\n\t  this.encoding = false;\n\t  this.lastPing = null;\n\t\n\t  this.decoder.destroy();\n\t};\n\t\n\t/**\n\t * Close the current socket.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.close =\n\tManager.prototype.disconnect = function () {\n\t  debug('disconnect');\n\t  this.skipReconnect = true;\n\t  this.reconnecting = false;\n\t  if ('opening' === this.readyState) {\n\t    // `onclose` will not fire because\n\t    // an open event never happened\n\t    this.cleanup();\n\t  }\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  if (this.engine) this.engine.close();\n\t};\n\t\n\t/**\n\t * Called upon engine close.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onclose = function (reason) {\n\t  debug('onclose');\n\t\n\t  this.cleanup();\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  this.emit('close', reason);\n\t\n\t  if (this._reconnection && !this.skipReconnect) {\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Attempt a reconnection.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.reconnect = function () {\n\t  if (this.reconnecting || this.skipReconnect) return this;\n\t\n\t  var self = this;\n\t\n\t  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\t    debug('reconnect failed');\n\t    this.backoff.reset();\n\t    this.emitAll('reconnect_failed');\n\t    this.reconnecting = false;\n\t  } else {\n\t    var delay = this.backoff.duration();\n\t    debug('will wait %dms before reconnect attempt', delay);\n\t\n\t    this.reconnecting = true;\n\t    var timer = setTimeout(function () {\n\t      if (self.skipReconnect) return;\n\t\n\t      debug('attempting reconnect');\n\t      self.emitAll('reconnect_attempt', self.backoff.attempts);\n\t      self.emitAll('reconnecting', self.backoff.attempts);\n\t\n\t      // check again for the case socket closed in above events\n\t      if (self.skipReconnect) return;\n\t\n\t      self.open(function (err) {\n\t        if (err) {\n\t          debug('reconnect attempt error');\n\t          self.reconnecting = false;\n\t          self.reconnect();\n\t          self.emitAll('reconnect_error', err.data);\n\t        } else {\n\t          debug('reconnect success');\n\t          self.onreconnect();\n\t        }\n\t      });\n\t    }, delay);\n\t\n\t    this.subs.push({\n\t      destroy: function () {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful reconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onreconnect = function () {\n\t  var attempt = this.backoff.attempts;\n\t  this.reconnecting = false;\n\t  this.backoff.reset();\n\t  this.updateSocketIds();\n\t  this.emitAll('reconnect', attempt);\n\t};\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\tmodule.exports = __webpack_require__(17);\n\t\n\t/**\n\t * Exports parser\n\t *\n\t * @api public\n\t *\n\t */\n\tmodule.exports.parser = __webpack_require__(24);\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar transports = __webpack_require__(18);\n\tvar Emitter = __webpack_require__(11);\n\tvar debug = __webpack_require__(3)('engine.io-client:socket');\n\tvar index = __webpack_require__(38);\n\tvar parser = __webpack_require__(24);\n\tvar parseuri = __webpack_require__(2);\n\tvar parseqs = __webpack_require__(32);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Socket;\n\t\n\t/**\n\t * Socket constructor.\n\t *\n\t * @param {String|Object} uri or options\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Socket (uri, opts) {\n\t  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\t\n\t  opts = opts || {};\n\t\n\t  if (uri && 'object' === typeof uri) {\n\t    opts = uri;\n\t    uri = null;\n\t  }\n\t\n\t  if (uri) {\n\t    uri = parseuri(uri);\n\t    opts.hostname = uri.host;\n\t    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n\t    opts.port = uri.port;\n\t    if (uri.query) opts.query = uri.query;\n\t  } else if (opts.host) {\n\t    opts.hostname = parseuri(opts.host).host;\n\t  }\n\t\n\t  this.secure = null != opts.secure ? opts.secure\n\t    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\t\n\t  if (opts.hostname && !opts.port) {\n\t    // if no port is specified manually, use the protocol default\n\t    opts.port = this.secure ? '443' : '80';\n\t  }\n\t\n\t  this.agent = opts.agent || false;\n\t  this.hostname = opts.hostname ||\n\t    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n\t  this.port = opts.port || (typeof location !== 'undefined' && location.port\n\t      ? location.port\n\t      : (this.secure ? 443 : 80));\n\t  this.query = opts.query || {};\n\t  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n\t  this.upgrade = false !== opts.upgrade;\n\t  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n\t  this.forceJSONP = !!opts.forceJSONP;\n\t  this.jsonp = false !== opts.jsonp;\n\t  this.forceBase64 = !!opts.forceBase64;\n\t  this.enablesXDR = !!opts.enablesXDR;\n\t  this.withCredentials = false !== opts.withCredentials;\n\t  this.timestampParam = opts.timestampParam || 't';\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.transports = opts.transports || ['polling', 'websocket'];\n\t  this.transportOptions = opts.transportOptions || {};\n\t  this.readyState = '';\n\t  this.writeBuffer = [];\n\t  this.prevBufferLen = 0;\n\t  this.policyPort = opts.policyPort || 843;\n\t  this.rememberUpgrade = opts.rememberUpgrade || false;\n\t  this.binaryType = null;\n\t  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n\t  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\t\n\t  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n\t  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n\t    this.perMessageDeflate.threshold = 1024;\n\t  }\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx || null;\n\t  this.key = opts.key || null;\n\t  this.passphrase = opts.passphrase || null;\n\t  this.cert = opts.cert || null;\n\t  this.ca = opts.ca || null;\n\t  this.ciphers = opts.ciphers || null;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n\t  this.forceNode = !!opts.forceNode;\n\t\n\t  // detect ReactNative environment\n\t  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\t\n\t  // other options for Node.js or ReactNative client\n\t  if (typeof self === 'undefined' || this.isReactNative) {\n\t    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n\t      this.extraHeaders = opts.extraHeaders;\n\t    }\n\t\n\t    if (opts.localAddress) {\n\t      this.localAddress = opts.localAddress;\n\t    }\n\t  }\n\t\n\t  // set on handshake\n\t  this.id = null;\n\t  this.upgrades = null;\n\t  this.pingInterval = null;\n\t  this.pingTimeout = null;\n\t\n\t  // set on heartbeat\n\t  this.pingIntervalTimer = null;\n\t  this.pingTimeoutTimer = null;\n\t\n\t  this.open();\n\t}\n\t\n\tSocket.priorWebsocketSuccess = false;\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.protocol = parser.protocol; // this is an int\n\t\n\t/**\n\t * Expose deps for legacy compatibility\n\t * and standalone browser access.\n\t */\n\t\n\tSocket.Socket = Socket;\n\tSocket.Transport = __webpack_require__(23);\n\tSocket.transports = __webpack_require__(18);\n\tSocket.parser = __webpack_require__(24);\n\t\n\t/**\n\t * Creates transport of the given type.\n\t *\n\t * @param {String} transport name\n\t * @return {Transport}\n\t * @api private\n\t */\n\t\n\tSocket.prototype.createTransport = function (name) {\n\t  debug('creating transport \"%s\"', name);\n\t  var query = clone(this.query);\n\t\n\t  // append engine.io protocol identifier\n\t  query.EIO = parser.protocol;\n\t\n\t  // transport name\n\t  query.transport = name;\n\t\n\t  // per-transport options\n\t  var options = this.transportOptions[name] || {};\n\t\n\t  // session id if we already have one\n\t  if (this.id) query.sid = this.id;\n\t\n\t  var transport = new transports[name]({\n\t    query: query,\n\t    socket: this,\n\t    agent: options.agent || this.agent,\n\t    hostname: options.hostname || this.hostname,\n\t    port: options.port || this.port,\n\t    secure: options.secure || this.secure,\n\t    path: options.path || this.path,\n\t    forceJSONP: options.forceJSONP || this.forceJSONP,\n\t    jsonp: options.jsonp || this.jsonp,\n\t    forceBase64: options.forceBase64 || this.forceBase64,\n\t    enablesXDR: options.enablesXDR || this.enablesXDR,\n\t    withCredentials: options.withCredentials || this.withCredentials,\n\t    timestampRequests: options.timestampRequests || this.timestampRequests,\n\t    timestampParam: options.timestampParam || this.timestampParam,\n\t    policyPort: options.policyPort || this.policyPort,\n\t    pfx: options.pfx || this.pfx,\n\t    key: options.key || this.key,\n\t    passphrase: options.passphrase || this.passphrase,\n\t    cert: options.cert || this.cert,\n\t    ca: options.ca || this.ca,\n\t    ciphers: options.ciphers || this.ciphers,\n\t    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n\t    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n\t    extraHeaders: options.extraHeaders || this.extraHeaders,\n\t    forceNode: options.forceNode || this.forceNode,\n\t    localAddress: options.localAddress || this.localAddress,\n\t    requestTimeout: options.requestTimeout || this.requestTimeout,\n\t    protocols: options.protocols || void (0),\n\t    isReactNative: this.isReactNative\n\t  });\n\t\n\t  return transport;\n\t};\n\t\n\tfunction clone (obj) {\n\t  var o = {};\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      o[i] = obj[i];\n\t    }\n\t  }\n\t  return o;\n\t}\n\t\n\t/**\n\t * Initializes transport to use and starts probe.\n\t *\n\t * @api private\n\t */\n\tSocket.prototype.open = function () {\n\t  var transport;\n\t  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n\t    transport = 'websocket';\n\t  } else if (0 === this.transports.length) {\n\t    // Emit error on next tick so it can be listened to\n\t    var self = this;\n\t    setTimeout(function () {\n\t      self.emit('error', 'No transports available');\n\t    }, 0);\n\t    return;\n\t  } else {\n\t    transport = this.transports[0];\n\t  }\n\t  this.readyState = 'opening';\n\t\n\t  // Retry with the next transport if the transport is disabled (jsonp: false)\n\t  try {\n\t    transport = this.createTransport(transport);\n\t  } catch (e) {\n\t    this.transports.shift();\n\t    this.open();\n\t    return;\n\t  }\n\t\n\t  transport.open();\n\t  this.setTransport(transport);\n\t};\n\t\n\t/**\n\t * Sets the current transport. Disables the existing one (if any).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setTransport = function (transport) {\n\t  debug('setting transport %s', transport.name);\n\t  var self = this;\n\t\n\t  if (this.transport) {\n\t    debug('clearing existing transport %s', this.transport.name);\n\t    this.transport.removeAllListeners();\n\t  }\n\t\n\t  // set up transport\n\t  this.transport = transport;\n\t\n\t  // set up transport listeners\n\t  transport\n\t  .on('drain', function () {\n\t    self.onDrain();\n\t  })\n\t  .on('packet', function (packet) {\n\t    self.onPacket(packet);\n\t  })\n\t  .on('error', function (e) {\n\t    self.onError(e);\n\t  })\n\t  .on('close', function () {\n\t    self.onClose('transport close');\n\t  });\n\t};\n\t\n\t/**\n\t * Probes a transport.\n\t *\n\t * @param {String} transport name\n\t * @api private\n\t */\n\t\n\tSocket.prototype.probe = function (name) {\n\t  debug('probing transport \"%s\"', name);\n\t  var transport = this.createTransport(name, { probe: 1 });\n\t  var failed = false;\n\t  var self = this;\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t\n\t  function onTransportOpen () {\n\t    if (self.onlyBinaryUpgrades) {\n\t      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n\t      failed = failed || upgradeLosesBinary;\n\t    }\n\t    if (failed) return;\n\t\n\t    debug('probe transport \"%s\" opened', name);\n\t    transport.send([{ type: 'ping', data: 'probe' }]);\n\t    transport.once('packet', function (msg) {\n\t      if (failed) return;\n\t      if ('pong' === msg.type && 'probe' === msg.data) {\n\t        debug('probe transport \"%s\" pong', name);\n\t        self.upgrading = true;\n\t        self.emit('upgrading', transport);\n\t        if (!transport) return;\n\t        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\t\n\t        debug('pausing current transport \"%s\"', self.transport.name);\n\t        self.transport.pause(function () {\n\t          if (failed) return;\n\t          if ('closed' === self.readyState) return;\n\t          debug('changing transport and sending upgrade packet');\n\t\n\t          cleanup();\n\t\n\t          self.setTransport(transport);\n\t          transport.send([{ type: 'upgrade' }]);\n\t          self.emit('upgrade', transport);\n\t          transport = null;\n\t          self.upgrading = false;\n\t          self.flush();\n\t        });\n\t      } else {\n\t        debug('probe transport \"%s\" failed', name);\n\t        var err = new Error('probe error');\n\t        err.transport = transport.name;\n\t        self.emit('upgradeError', err);\n\t      }\n\t    });\n\t  }\n\t\n\t  function freezeTransport () {\n\t    if (failed) return;\n\t\n\t    // Any callback called by transport should be ignored since now\n\t    failed = true;\n\t\n\t    cleanup();\n\t\n\t    transport.close();\n\t    transport = null;\n\t  }\n\t\n\t  // Handle any error that happens while probing\n\t  function onerror (err) {\n\t    var error = new Error('probe error: ' + err);\n\t    error.transport = transport.name;\n\t\n\t    freezeTransport();\n\t\n\t    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\t\n\t    self.emit('upgradeError', error);\n\t  }\n\t\n\t  function onTransportClose () {\n\t    onerror('transport closed');\n\t  }\n\t\n\t  // When the socket is closed while we're probing\n\t  function onclose () {\n\t    onerror('socket closed');\n\t  }\n\t\n\t  // When the socket is upgraded while we're probing\n\t  function onupgrade (to) {\n\t    if (transport && to.name !== transport.name) {\n\t      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n\t      freezeTransport();\n\t    }\n\t  }\n\t\n\t  // Remove all listeners on the transport and on self\n\t  function cleanup () {\n\t    transport.removeListener('open', onTransportOpen);\n\t    transport.removeListener('error', onerror);\n\t    transport.removeListener('close', onTransportClose);\n\t    self.removeListener('close', onclose);\n\t    self.removeListener('upgrading', onupgrade);\n\t  }\n\t\n\t  transport.once('open', onTransportOpen);\n\t  transport.once('error', onerror);\n\t  transport.once('close', onTransportClose);\n\t\n\t  this.once('close', onclose);\n\t  this.once('upgrading', onupgrade);\n\t\n\t  transport.open();\n\t};\n\t\n\t/**\n\t * Called when connection is deemed open.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.onOpen = function () {\n\t  debug('socket open');\n\t  this.readyState = 'open';\n\t  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n\t  this.emit('open');\n\t  this.flush();\n\t\n\t  // we check for `readyState` in case an `open`\n\t  // listener already closed the socket\n\t  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\t    debug('starting upgrade probes');\n\t    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n\t      this.probe(this.upgrades[i]);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Handles a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onPacket = function (packet) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState ||\n\t      'closing' === this.readyState) {\n\t    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\t\n\t    this.emit('packet', packet);\n\t\n\t    // Socket is live - any packet counts\n\t    this.emit('heartbeat');\n\t\n\t    switch (packet.type) {\n\t      case 'open':\n\t        this.onHandshake(JSON.parse(packet.data));\n\t        break;\n\t\n\t      case 'pong':\n\t        this.setPing();\n\t        this.emit('pong');\n\t        break;\n\t\n\t      case 'error':\n\t        var err = new Error('server error');\n\t        err.code = packet.data;\n\t        this.onError(err);\n\t        break;\n\t\n\t      case 'message':\n\t        this.emit('data', packet.data);\n\t        this.emit('message', packet.data);\n\t        break;\n\t    }\n\t  } else {\n\t    debug('packet received with socket readyState \"%s\"', this.readyState);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon handshake completion.\n\t *\n\t * @param {Object} handshake obj\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHandshake = function (data) {\n\t  this.emit('handshake', data);\n\t  this.id = data.sid;\n\t  this.transport.query.sid = data.sid;\n\t  this.upgrades = this.filterUpgrades(data.upgrades);\n\t  this.pingInterval = data.pingInterval;\n\t  this.pingTimeout = data.pingTimeout;\n\t  this.onOpen();\n\t  // In case open handler closes socket\n\t  if ('closed' === this.readyState) return;\n\t  this.setPing();\n\t\n\t  // Prolong liveness of socket on heartbeat\n\t  this.removeListener('heartbeat', this.onHeartbeat);\n\t  this.on('heartbeat', this.onHeartbeat);\n\t};\n\t\n\t/**\n\t * Resets ping timeout.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHeartbeat = function (timeout) {\n\t  clearTimeout(this.pingTimeoutTimer);\n\t  var self = this;\n\t  self.pingTimeoutTimer = setTimeout(function () {\n\t    if ('closed' === self.readyState) return;\n\t    self.onClose('ping timeout');\n\t  }, timeout || (self.pingInterval + self.pingTimeout));\n\t};\n\t\n\t/**\n\t * Pings server every `this.pingInterval` and expects response\n\t * within `this.pingTimeout` or closes connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setPing = function () {\n\t  var self = this;\n\t  clearTimeout(self.pingIntervalTimer);\n\t  self.pingIntervalTimer = setTimeout(function () {\n\t    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n\t    self.ping();\n\t    self.onHeartbeat(self.pingTimeout);\n\t  }, self.pingInterval);\n\t};\n\t\n\t/**\n\t* Sends a ping packet.\n\t*\n\t* @api private\n\t*/\n\t\n\tSocket.prototype.ping = function () {\n\t  var self = this;\n\t  this.sendPacket('ping', function () {\n\t    self.emit('ping');\n\t  });\n\t};\n\t\n\t/**\n\t * Called on `drain` event\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onDrain = function () {\n\t  this.writeBuffer.splice(0, this.prevBufferLen);\n\t\n\t  // setting prevBufferLen = 0 is very important\n\t  // for example, when upgrading, upgrade packet is sent over,\n\t  // and a nonzero prevBufferLen could cause problems on `drain`\n\t  this.prevBufferLen = 0;\n\t\n\t  if (0 === this.writeBuffer.length) {\n\t    this.emit('drain');\n\t  } else {\n\t    this.flush();\n\t  }\n\t};\n\t\n\t/**\n\t * Flush write buffers.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.flush = function () {\n\t  if ('closed' !== this.readyState && this.transport.writable &&\n\t    !this.upgrading && this.writeBuffer.length) {\n\t    debug('flushing %d packets in socket', this.writeBuffer.length);\n\t    this.transport.send(this.writeBuffer);\n\t    // keep track of current length of writeBuffer\n\t    // splice writeBuffer and callbackBuffer on `drain`\n\t    this.prevBufferLen = this.writeBuffer.length;\n\t    this.emit('flush');\n\t  }\n\t};\n\t\n\t/**\n\t * Sends a message.\n\t *\n\t * @param {String} message.\n\t * @param {Function} callback function.\n\t * @param {Object} options.\n\t * @return {Socket} for chaining.\n\t * @api public\n\t */\n\t\n\tSocket.prototype.write =\n\tSocket.prototype.send = function (msg, options, fn) {\n\t  this.sendPacket('message', msg, options, fn);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {String} packet type.\n\t * @param {String} data.\n\t * @param {Object} options.\n\t * @param {Function} callback function.\n\t * @api private\n\t */\n\t\n\tSocket.prototype.sendPacket = function (type, data, options, fn) {\n\t  if ('function' === typeof data) {\n\t    fn = data;\n\t    data = undefined;\n\t  }\n\t\n\t  if ('function' === typeof options) {\n\t    fn = options;\n\t    options = null;\n\t  }\n\t\n\t  if ('closing' === this.readyState || 'closed' === this.readyState) {\n\t    return;\n\t  }\n\t\n\t  options = options || {};\n\t  options.compress = false !== options.compress;\n\t\n\t  var packet = {\n\t    type: type,\n\t    data: data,\n\t    options: options\n\t  };\n\t  this.emit('packetCreate', packet);\n\t  this.writeBuffer.push(packet);\n\t  if (fn) this.once('flush', fn);\n\t  this.flush();\n\t};\n\t\n\t/**\n\t * Closes the connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.readyState = 'closing';\n\t\n\t    var self = this;\n\t\n\t    if (this.writeBuffer.length) {\n\t      this.once('drain', function () {\n\t        if (this.upgrading) {\n\t          waitForUpgrade();\n\t        } else {\n\t          close();\n\t        }\n\t      });\n\t    } else if (this.upgrading) {\n\t      waitForUpgrade();\n\t    } else {\n\t      close();\n\t    }\n\t  }\n\t\n\t  function close () {\n\t    self.onClose('forced close');\n\t    debug('socket closing - telling transport to close');\n\t    self.transport.close();\n\t  }\n\t\n\t  function cleanupAndClose () {\n\t    self.removeListener('upgrade', cleanupAndClose);\n\t    self.removeListener('upgradeError', cleanupAndClose);\n\t    close();\n\t  }\n\t\n\t  function waitForUpgrade () {\n\t    // wait for upgrade to finish since we can't send packets while pausing a transport\n\t    self.once('upgrade', cleanupAndClose);\n\t    self.once('upgradeError', cleanupAndClose);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport error\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onError = function (err) {\n\t  debug('socket error %j', err);\n\t  Socket.priorWebsocketSuccess = false;\n\t  this.emit('error', err);\n\t  this.onClose('transport error', err);\n\t};\n\t\n\t/**\n\t * Called upon transport close.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onClose = function (reason, desc) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\t    debug('socket close with reason: \"%s\"', reason);\n\t    var self = this;\n\t\n\t    // clear timers\n\t    clearTimeout(this.pingIntervalTimer);\n\t    clearTimeout(this.pingTimeoutTimer);\n\t\n\t    // stop event from firing again for transport\n\t    this.transport.removeAllListeners('close');\n\t\n\t    // ensure transport won't stay open\n\t    this.transport.close();\n\t\n\t    // ignore further transport communication\n\t    this.transport.removeAllListeners();\n\t\n\t    // set ready state\n\t    this.readyState = 'closed';\n\t\n\t    // clear session id\n\t    this.id = null;\n\t\n\t    // emit close event\n\t    this.emit('close', reason, desc);\n\t\n\t    // clean buffers after, so users can still\n\t    // grab the buffers on `close` event\n\t    self.writeBuffer = [];\n\t    self.prevBufferLen = 0;\n\t  }\n\t};\n\t\n\t/**\n\t * Filters upgrades, returning only those matching client transports.\n\t *\n\t * @param {Array} server upgrades\n\t * @api private\n\t *\n\t */\n\t\n\tSocket.prototype.filterUpgrades = function (upgrades) {\n\t  var filteredUpgrades = [];\n\t  for (var i = 0, j = upgrades.length; i < j; i++) {\n\t    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n\t  }\n\t  return filteredUpgrades;\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(19);\n\tvar XHR = __webpack_require__(21);\n\tvar JSONP = __webpack_require__(35);\n\tvar websocket = __webpack_require__(36);\n\t\n\t/**\n\t * Export transports.\n\t */\n\t\n\texports.polling = polling;\n\texports.websocket = websocket;\n\t\n\t/**\n\t * Polling transport polymorphic constructor.\n\t * Decides on xhr vs jsonp based on feature detection.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction polling (opts) {\n\t  var xhr;\n\t  var xd = false;\n\t  var xs = false;\n\t  var jsonp = false !== opts.jsonp;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    xd = opts.hostname !== location.hostname || port !== opts.port;\n\t    xs = opts.secure !== isSSL;\n\t  }\n\t\n\t  opts.xdomain = xd;\n\t  opts.xscheme = xs;\n\t  xhr = new XMLHttpRequest(opts);\n\t\n\t  if ('open' in xhr && !opts.forceJSONP) {\n\t    return new XHR(opts);\n\t  } else {\n\t    if (!jsonp) throw new Error('JSONP disabled');\n\t    return new JSONP(opts);\n\t  }\n\t}\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// browser shim for xmlhttprequest module\n\t\n\tvar hasCORS = __webpack_require__(20);\n\t\n\tmodule.exports = function (opts) {\n\t  var xdomain = opts.xdomain;\n\t\n\t  // scheme must be same when usign XDomainRequest\n\t  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t  var xscheme = opts.xscheme;\n\t\n\t  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n\t  // https://github.com/Automattic/engine.io-client/pull/217\n\t  var enablesXDR = opts.enablesXDR;\n\t\n\t  // XMLHttpRequest can be disabled on IE\n\t  try {\n\t    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n\t      return new XMLHttpRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  // Use XDomainRequest for IE8 if enablesXDR is true\n\t  // because loading bar keeps flashing when using jsonp-polling\n\t  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n\t  try {\n\t    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n\t      return new XDomainRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  if (!xdomain) {\n\t    try {\n\t      return new self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n\t    } catch (e) { }\n\t  }\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t *\n\t * Logic borrowed from Modernizr:\n\t *\n\t *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n\t */\n\t\n\ttry {\n\t  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n\t    'withCredentials' in new XMLHttpRequest();\n\t} catch (err) {\n\t  // if XMLHttp support is disabled in IE then it will throw\n\t  // when trying to create\n\t  module.exports = false;\n\t}\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global attachEvent */\n\t\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(19);\n\tvar Polling = __webpack_require__(22);\n\tvar Emitter = __webpack_require__(11);\n\tvar inherit = __webpack_require__(33);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling-xhr');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = XHR;\n\tmodule.exports.Request = Request;\n\t\n\t/**\n\t * Empty function\n\t */\n\t\n\tfunction empty () {}\n\t\n\t/**\n\t * XHR Polling constructor.\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction XHR (opts) {\n\t  Polling.call(this, opts);\n\t  this.requestTimeout = opts.requestTimeout;\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n\t      port !== opts.port;\n\t    this.xs = opts.secure !== isSSL;\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(XHR, Polling);\n\t\n\t/**\n\t * XHR supports binary\n\t */\n\t\n\tXHR.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Creates a request.\n\t *\n\t * @param {String} method\n\t * @api private\n\t */\n\t\n\tXHR.prototype.request = function (opts) {\n\t  opts = opts || {};\n\t  opts.uri = this.uri();\n\t  opts.xd = this.xd;\n\t  opts.xs = this.xs;\n\t  opts.agent = this.agent || false;\n\t  opts.supportsBinary = this.supportsBinary;\n\t  opts.enablesXDR = this.enablesXDR;\n\t  opts.withCredentials = this.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  opts.requestTimeout = this.requestTimeout;\n\t\n\t  // other options for Node.js client\n\t  opts.extraHeaders = this.extraHeaders;\n\t\n\t  return new Request(opts);\n\t};\n\t\n\t/**\n\t * Sends data.\n\t *\n\t * @param {String} data to send.\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doWrite = function (data, fn) {\n\t  var isBinary = typeof data !== 'string' && data !== undefined;\n\t  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n\t  var self = this;\n\t  req.on('success', fn);\n\t  req.on('error', function (err) {\n\t    self.onError('xhr post error', err);\n\t  });\n\t  this.sendXhr = req;\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doPoll = function () {\n\t  debug('xhr poll');\n\t  var req = this.request();\n\t  var self = this;\n\t  req.on('data', function (data) {\n\t    self.onData(data);\n\t  });\n\t  req.on('error', function (err) {\n\t    self.onError('xhr poll error', err);\n\t  });\n\t  this.pollXhr = req;\n\t};\n\t\n\t/**\n\t * Request constructor\n\t *\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Request (opts) {\n\t  this.method = opts.method || 'GET';\n\t  this.uri = opts.uri;\n\t  this.xd = !!opts.xd;\n\t  this.xs = !!opts.xs;\n\t  this.async = false !== opts.async;\n\t  this.data = undefined !== opts.data ? opts.data : null;\n\t  this.agent = opts.agent;\n\t  this.isBinary = opts.isBinary;\n\t  this.supportsBinary = opts.supportsBinary;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t  this.requestTimeout = opts.requestTimeout;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  this.create();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Request.prototype);\n\t\n\t/**\n\t * Creates the XHR object and sends the request.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.create = function () {\n\t  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t\n\t  var xhr = this.xhr = new XMLHttpRequest(opts);\n\t  var self = this;\n\t\n\t  try {\n\t    debug('xhr open %s: %s', this.method, this.uri);\n\t    xhr.open(this.method, this.uri, this.async);\n\t    try {\n\t      if (this.extraHeaders) {\n\t        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n\t        for (var i in this.extraHeaders) {\n\t          if (this.extraHeaders.hasOwnProperty(i)) {\n\t            xhr.setRequestHeader(i, this.extraHeaders[i]);\n\t          }\n\t        }\n\t      }\n\t    } catch (e) {}\n\t\n\t    if ('POST' === this.method) {\n\t      try {\n\t        if (this.isBinary) {\n\t          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n\t        } else {\n\t          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n\t        }\n\t      } catch (e) {}\n\t    }\n\t\n\t    try {\n\t      xhr.setRequestHeader('Accept', '*/*');\n\t    } catch (e) {}\n\t\n\t    // ie6 check\n\t    if ('withCredentials' in xhr) {\n\t      xhr.withCredentials = this.withCredentials;\n\t    }\n\t\n\t    if (this.requestTimeout) {\n\t      xhr.timeout = this.requestTimeout;\n\t    }\n\t\n\t    if (this.hasXDR()) {\n\t      xhr.onload = function () {\n\t        self.onLoad();\n\t      };\n\t      xhr.onerror = function () {\n\t        self.onError(xhr.responseText);\n\t      };\n\t    } else {\n\t      xhr.onreadystatechange = function () {\n\t        if (xhr.readyState === 2) {\n\t          try {\n\t            var contentType = xhr.getResponseHeader('Content-Type');\n\t            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t              xhr.responseType = 'arraybuffer';\n\t            }\n\t          } catch (e) {}\n\t        }\n\t        if (4 !== xhr.readyState) return;\n\t        if (200 === xhr.status || 1223 === xhr.status) {\n\t          self.onLoad();\n\t        } else {\n\t          // make sure the `error` event handler that's user-set\n\t          // does not throw in the same tick and gets caught here\n\t          setTimeout(function () {\n\t            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n\t          }, 0);\n\t        }\n\t      };\n\t    }\n\t\n\t    debug('xhr data %s', this.data);\n\t    xhr.send(this.data);\n\t  } catch (e) {\n\t    // Need to defer since .create() is called directly fhrom the constructor\n\t    // and thus the 'error' event can only be only bound *after* this exception\n\t    // occurs.  Therefore, also, we cannot throw here at all.\n\t    setTimeout(function () {\n\t      self.onError(e);\n\t    }, 0);\n\t    return;\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    this.index = Request.requestsCount++;\n\t    Request.requests[this.index] = this;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful response.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onSuccess = function () {\n\t  this.emit('success');\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Called if we have data.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onData = function (data) {\n\t  this.emit('data', data);\n\t  this.onSuccess();\n\t};\n\t\n\t/**\n\t * Called upon error.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onError = function (err) {\n\t  this.emit('error', err);\n\t  this.cleanup(true);\n\t};\n\t\n\t/**\n\t * Cleans up house.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.cleanup = function (fromError) {\n\t  if ('undefined' === typeof this.xhr || null === this.xhr) {\n\t    return;\n\t  }\n\t  // xmlhttprequest\n\t  if (this.hasXDR()) {\n\t    this.xhr.onload = this.xhr.onerror = empty;\n\t  } else {\n\t    this.xhr.onreadystatechange = empty;\n\t  }\n\t\n\t  if (fromError) {\n\t    try {\n\t      this.xhr.abort();\n\t    } catch (e) {}\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    delete Request.requests[this.index];\n\t  }\n\t\n\t  this.xhr = null;\n\t};\n\t\n\t/**\n\t * Called upon load.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onLoad = function () {\n\t  var data;\n\t  try {\n\t    var contentType;\n\t    try {\n\t      contentType = this.xhr.getResponseHeader('Content-Type');\n\t    } catch (e) {}\n\t    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t      data = this.xhr.response || this.xhr.responseText;\n\t    } else {\n\t      data = this.xhr.responseText;\n\t    }\n\t  } catch (e) {\n\t    this.onError(e);\n\t  }\n\t  if (null != data) {\n\t    this.onData(data);\n\t  }\n\t};\n\t\n\t/**\n\t * Check if it has XDomainRequest.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.hasXDR = function () {\n\t  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n\t};\n\t\n\t/**\n\t * Aborts the request.\n\t *\n\t * @api public\n\t */\n\t\n\tRequest.prototype.abort = function () {\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Aborts pending requests when unloading the window. This is needed to prevent\n\t * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n\t * emitted.\n\t */\n\t\n\tRequest.requestsCount = 0;\n\tRequest.requests = {};\n\t\n\tif (typeof document !== 'undefined') {\n\t  if (typeof attachEvent === 'function') {\n\t    attachEvent('onunload', unloadHandler);\n\t  } else if (typeof addEventListener === 'function') {\n\t    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n\t    addEventListener(terminationEvent, unloadHandler, false);\n\t  }\n\t}\n\t\n\tfunction unloadHandler () {\n\t  for (var i in Request.requests) {\n\t    if (Request.requests.hasOwnProperty(i)) {\n\t      Request.requests[i].abort();\n\t    }\n\t  }\n\t}\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(23);\n\tvar parseqs = __webpack_require__(32);\n\tvar parser = __webpack_require__(24);\n\tvar inherit = __webpack_require__(33);\n\tvar yeast = __webpack_require__(34);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Polling;\n\t\n\t/**\n\t * Is XHR2 supported?\n\t */\n\t\n\tvar hasXHR2 = (function () {\n\t  var XMLHttpRequest = __webpack_require__(19);\n\t  var xhr = new XMLHttpRequest({ xdomain: false });\n\t  return null != xhr.responseType;\n\t})();\n\t\n\t/**\n\t * Polling interface.\n\t *\n\t * @param {Object} opts\n\t * @api private\n\t */\n\t\n\tfunction Polling (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (!hasXHR2 || forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(Polling, Transport);\n\t\n\t/**\n\t * Transport name.\n\t */\n\t\n\tPolling.prototype.name = 'polling';\n\t\n\t/**\n\t * Opens the socket (triggers polling). We write a PING message to determine\n\t * when the transport is open.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doOpen = function () {\n\t  this.poll();\n\t};\n\t\n\t/**\n\t * Pauses polling.\n\t *\n\t * @param {Function} callback upon buffers are flushed and transport is paused\n\t * @api private\n\t */\n\t\n\tPolling.prototype.pause = function (onPause) {\n\t  var self = this;\n\t\n\t  this.readyState = 'pausing';\n\t\n\t  function pause () {\n\t    debug('paused');\n\t    self.readyState = 'paused';\n\t    onPause();\n\t  }\n\t\n\t  if (this.polling || !this.writable) {\n\t    var total = 0;\n\t\n\t    if (this.polling) {\n\t      debug('we are currently polling - waiting to pause');\n\t      total++;\n\t      this.once('pollComplete', function () {\n\t        debug('pre-pause polling complete');\n\t        --total || pause();\n\t      });\n\t    }\n\t\n\t    if (!this.writable) {\n\t      debug('we are currently writing - waiting to pause');\n\t      total++;\n\t      this.once('drain', function () {\n\t        debug('pre-pause writing complete');\n\t        --total || pause();\n\t      });\n\t    }\n\t  } else {\n\t    pause();\n\t  }\n\t};\n\t\n\t/**\n\t * Starts polling cycle.\n\t *\n\t * @api public\n\t */\n\t\n\tPolling.prototype.poll = function () {\n\t  debug('polling');\n\t  this.polling = true;\n\t  this.doPoll();\n\t  this.emit('poll');\n\t};\n\t\n\t/**\n\t * Overloads onData to detect payloads.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.onData = function (data) {\n\t  var self = this;\n\t  debug('polling got data %s', data);\n\t  var callback = function (packet, index, total) {\n\t    // if its the first message we consider the transport open\n\t    if ('opening' === self.readyState) {\n\t      self.onOpen();\n\t    }\n\t\n\t    // if its a close packet, we close the ongoing requests\n\t    if ('close' === packet.type) {\n\t      self.onClose();\n\t      return false;\n\t    }\n\t\n\t    // otherwise bypass onData and handle the message\n\t    self.onPacket(packet);\n\t  };\n\t\n\t  // decode payload\n\t  parser.decodePayload(data, this.socket.binaryType, callback);\n\t\n\t  // if an event did not trigger closing\n\t  if ('closed' !== this.readyState) {\n\t    // if we got data we're not polling\n\t    this.polling = false;\n\t    this.emit('pollComplete');\n\t\n\t    if ('open' === this.readyState) {\n\t      this.poll();\n\t    } else {\n\t      debug('ignoring poll - transport state \"%s\"', this.readyState);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * For polling, send a close packet.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doClose = function () {\n\t  var self = this;\n\t\n\t  function close () {\n\t    debug('writing close packet');\n\t    self.write([{ type: 'close' }]);\n\t  }\n\t\n\t  if ('open' === this.readyState) {\n\t    debug('transport open - closing');\n\t    close();\n\t  } else {\n\t    // in case we're trying to close while\n\t    // handshaking is in progress (GH-164)\n\t    debug('transport not open - deferring close');\n\t    this.once('open', close);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes a packets payload.\n\t *\n\t * @param {Array} data packets\n\t * @param {Function} drain callback\n\t * @api private\n\t */\n\t\n\tPolling.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t  var callbackfn = function () {\n\t    self.writable = true;\n\t    self.emit('drain');\n\t  };\n\t\n\t  parser.encodePayload(packets, this.supportsBinary, function (data) {\n\t    self.doWrite(data, callbackfn);\n\t  });\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'https' : 'http';\n\t  var port = '';\n\t\n\t  // cache busting is forced\n\t  if (false !== this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  if (!this.supportsBinary && !query.sid) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n\t     ('http' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(24);\n\tvar Emitter = __webpack_require__(11);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Transport;\n\t\n\t/**\n\t * Transport abstract constructor.\n\t *\n\t * @param {Object} options.\n\t * @api private\n\t */\n\t\n\tfunction Transport (opts) {\n\t  this.path = opts.path;\n\t  this.hostname = opts.hostname;\n\t  this.port = opts.port;\n\t  this.secure = opts.secure;\n\t  this.query = opts.query;\n\t  this.timestampParam = opts.timestampParam;\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.readyState = '';\n\t  this.agent = opts.agent || false;\n\t  this.socket = opts.socket;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t  this.forceNode = opts.forceNode;\n\t\n\t  // results of ReactNative environment detection\n\t  this.isReactNative = opts.isReactNative;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t  this.localAddress = opts.localAddress;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Transport.prototype);\n\t\n\t/**\n\t * Emits an error.\n\t *\n\t * @param {String} str\n\t * @return {Transport} for chaining\n\t * @api public\n\t */\n\t\n\tTransport.prototype.onError = function (msg, desc) {\n\t  var err = new Error(msg);\n\t  err.type = 'TransportError';\n\t  err.description = desc;\n\t  this.emit('error', err);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Opens the transport.\n\t *\n\t * @api public\n\t */\n\t\n\tTransport.prototype.open = function () {\n\t  if ('closed' === this.readyState || '' === this.readyState) {\n\t    this.readyState = 'opening';\n\t    this.doOpen();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Closes the transport.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.doClose();\n\t    this.onClose();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends multiple packets.\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\tTransport.prototype.send = function (packets) {\n\t  if ('open' === this.readyState) {\n\t    this.write(packets);\n\t  } else {\n\t    throw new Error('Transport not open');\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon open\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onOpen = function () {\n\t  this.readyState = 'open';\n\t  this.writable = true;\n\t  this.emit('open');\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @param {String} data\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onData = function (data) {\n\t  var packet = parser.decodePacket(data, this.socket.binaryType);\n\t  this.onPacket(packet);\n\t};\n\t\n\t/**\n\t * Called with a decoded packet.\n\t */\n\t\n\tTransport.prototype.onPacket = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon close.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onClose = function () {\n\t  this.readyState = 'closed';\n\t  this.emit('close');\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar keys = __webpack_require__(25);\n\tvar hasBinary = __webpack_require__(26);\n\tvar sliceBuffer = __webpack_require__(27);\n\tvar after = __webpack_require__(28);\n\tvar utf8 = __webpack_require__(29);\n\t\n\tvar base64encoder;\n\tif (typeof ArrayBuffer !== 'undefined') {\n\t  base64encoder = __webpack_require__(30);\n\t}\n\t\n\t/**\n\t * Check if we are running an android browser. That requires us to use\n\t * ArrayBuffer with polling transports...\n\t *\n\t * http://ghinda.net/jpeg-blob-ajax-android/\n\t */\n\t\n\tvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Check if we are running in PhantomJS.\n\t * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n\t * https://github.com/ariya/phantomjs/issues/11395\n\t * @type boolean\n\t */\n\tvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\t\n\t/**\n\t * When true, avoids using Blobs to encode payloads.\n\t * @type boolean\n\t */\n\tvar dontSendBlobs = isAndroid || isPhantomJS;\n\t\n\t/**\n\t * Current protocol version.\n\t */\n\t\n\texports.protocol = 3;\n\t\n\t/**\n\t * Packet types.\n\t */\n\t\n\tvar packets = exports.packets = {\n\t    open:     0    // non-ws\n\t  , close:    1    // non-ws\n\t  , ping:     2\n\t  , pong:     3\n\t  , message:  4\n\t  , upgrade:  5\n\t  , noop:     6\n\t};\n\t\n\tvar packetslist = keys(packets);\n\t\n\t/**\n\t * Premade error packet.\n\t */\n\t\n\tvar err = { type: 'error', data: 'parser error' };\n\t\n\t/**\n\t * Create a blob api even for blob builder when vendor prefixes exist\n\t */\n\t\n\tvar Blob = __webpack_require__(31);\n\t\n\t/**\n\t * Encodes a packet.\n\t *\n\t *     <packet type id> [ <data> ]\n\t *\n\t * Example:\n\t *\n\t *     5hello world\n\t *     3\n\t *     4\n\t *\n\t * Binary is encoded in an identical principle\n\t *\n\t * @api private\n\t */\n\t\n\texports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = false;\n\t  }\n\t\n\t  if (typeof utf8encode === 'function') {\n\t    callback = utf8encode;\n\t    utf8encode = null;\n\t  }\n\t\n\t  var data = (packet.data === undefined)\n\t    ? undefined\n\t    : packet.data.buffer || packet.data;\n\t\n\t  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n\t    return encodeArrayBuffer(packet, supportsBinary, callback);\n\t  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n\t    return encodeBlob(packet, supportsBinary, callback);\n\t  }\n\t\n\t  // might be an object with { base64: true, data: dataAsBase64String }\n\t  if (data && data.base64) {\n\t    return encodeBase64Object(packet, callback);\n\t  }\n\t\n\t  // Sending data as a utf-8 string\n\t  var encoded = packets[packet.type];\n\t\n\t  // data fragment is optional\n\t  if (undefined !== packet.data) {\n\t    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n\t  }\n\t\n\t  return callback('' + encoded);\n\t\n\t};\n\t\n\tfunction encodeBase64Object(packet, callback) {\n\t  // packet data is an object { base64: true, data: dataAsBase64String }\n\t  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n\t  return callback(message);\n\t}\n\t\n\t/**\n\t * Encode packet helpers for binary types\n\t */\n\t\n\tfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var data = packet.data;\n\t  var contentArray = new Uint8Array(data);\n\t  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\t\n\t  resultBuffer[0] = packets[packet.type];\n\t  for (var i = 0; i < contentArray.length; i++) {\n\t    resultBuffer[i+1] = contentArray[i];\n\t  }\n\t\n\t  return callback(resultBuffer.buffer);\n\t}\n\t\n\tfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var fr = new FileReader();\n\t  fr.onload = function() {\n\t    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n\t  };\n\t  return fr.readAsArrayBuffer(packet.data);\n\t}\n\t\n\tfunction encodeBlob(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  if (dontSendBlobs) {\n\t    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n\t  }\n\t\n\t  var length = new Uint8Array(1);\n\t  length[0] = packets[packet.type];\n\t  var blob = new Blob([length.buffer, packet.data]);\n\t\n\t  return callback(blob);\n\t}\n\t\n\t/**\n\t * Encodes a packet with binary data in a base64 string\n\t *\n\t * @param {Object} packet, has `type` and `data`\n\t * @return {String} base64 encoded message\n\t */\n\t\n\texports.encodeBase64Packet = function(packet, callback) {\n\t  var message = 'b' + exports.packets[packet.type];\n\t  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n\t    var fr = new FileReader();\n\t    fr.onload = function() {\n\t      var b64 = fr.result.split(',')[1];\n\t      callback(message + b64);\n\t    };\n\t    return fr.readAsDataURL(packet.data);\n\t  }\n\t\n\t  var b64data;\n\t  try {\n\t    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n\t  } catch (e) {\n\t    // iPhone Safari doesn't let you apply with typed arrays\n\t    var typed = new Uint8Array(packet.data);\n\t    var basic = new Array(typed.length);\n\t    for (var i = 0; i < typed.length; i++) {\n\t      basic[i] = typed[i];\n\t    }\n\t    b64data = String.fromCharCode.apply(null, basic);\n\t  }\n\t  message += btoa(b64data);\n\t  return callback(message);\n\t};\n\t\n\t/**\n\t * Decodes a packet. Changes format to Blob if requested.\n\t *\n\t * @return {Object} with `type` and `data` (if any)\n\t * @api private\n\t */\n\t\n\texports.decodePacket = function (data, binaryType, utf8decode) {\n\t  if (data === undefined) {\n\t    return err;\n\t  }\n\t  // String data\n\t  if (typeof data === 'string') {\n\t    if (data.charAt(0) === 'b') {\n\t      return exports.decodeBase64Packet(data.substr(1), binaryType);\n\t    }\n\t\n\t    if (utf8decode) {\n\t      data = tryDecode(data);\n\t      if (data === false) {\n\t        return err;\n\t      }\n\t    }\n\t    var type = data.charAt(0);\n\t\n\t    if (Number(type) != type || !packetslist[type]) {\n\t      return err;\n\t    }\n\t\n\t    if (data.length > 1) {\n\t      return { type: packetslist[type], data: data.substring(1) };\n\t    } else {\n\t      return { type: packetslist[type] };\n\t    }\n\t  }\n\t\n\t  var asArray = new Uint8Array(data);\n\t  var type = asArray[0];\n\t  var rest = sliceBuffer(data, 1);\n\t  if (Blob && binaryType === 'blob') {\n\t    rest = new Blob([rest]);\n\t  }\n\t  return { type: packetslist[type], data: rest };\n\t};\n\t\n\tfunction tryDecode(data) {\n\t  try {\n\t    data = utf8.decode(data, { strict: false });\n\t  } catch (e) {\n\t    return false;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Decodes a packet encoded in a base64 string\n\t *\n\t * @param {String} base64 encoded message\n\t * @return {Object} with `type` and `data` (if any)\n\t */\n\t\n\texports.decodeBase64Packet = function(msg, binaryType) {\n\t  var type = packetslist[msg.charAt(0)];\n\t  if (!base64encoder) {\n\t    return { type: type, data: { base64: true, data: msg.substr(1) } };\n\t  }\n\t\n\t  var data = base64encoder.decode(msg.substr(1));\n\t\n\t  if (binaryType === 'blob' && Blob) {\n\t    data = new Blob([data]);\n\t  }\n\t\n\t  return { type: type, data: data };\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload).\n\t *\n\t *     <length>:data\n\t *\n\t * Example:\n\t *\n\t *     11:hello world2:hi\n\t *\n\t * If any contents are binary, they will be encoded as base64 strings. Base64\n\t * encoded strings are marked with a b before the length specifier\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\texports.encodePayload = function (packets, supportsBinary, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = null;\n\t  }\n\t\n\t  var isBinary = hasBinary(packets);\n\t\n\t  if (supportsBinary && isBinary) {\n\t    if (Blob && !dontSendBlobs) {\n\t      return exports.encodePayloadAsBlob(packets, callback);\n\t    }\n\t\n\t    return exports.encodePayloadAsArrayBuffer(packets, callback);\n\t  }\n\t\n\t  if (!packets.length) {\n\t    return callback('0:');\n\t  }\n\t\n\t  function setLengthHeader(message) {\n\t    return message.length + ':' + message;\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n\t      doneCallback(null, setLengthHeader(message));\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(results.join(''));\n\t  });\n\t};\n\t\n\t/**\n\t * Async array map using after\n\t */\n\t\n\tfunction map(ary, each, done) {\n\t  var result = new Array(ary.length);\n\t  var next = after(ary.length, done);\n\t\n\t  var eachWithIndex = function(i, el, cb) {\n\t    each(el, function(error, msg) {\n\t      result[i] = msg;\n\t      cb(error, result);\n\t    });\n\t  };\n\t\n\t  for (var i = 0; i < ary.length; i++) {\n\t    eachWithIndex(i, ary[i], next);\n\t  }\n\t}\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Possible binary contents are\n\t * decoded from their base64 representation\n\t *\n\t * @param {String} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayload = function (data, binaryType, callback) {\n\t  if (typeof data !== 'string') {\n\t    return exports.decodePayloadAsBinary(data, binaryType, callback);\n\t  }\n\t\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var packet;\n\t  if (data === '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t  var length = '', n, msg;\n\t\n\t  for (var i = 0, l = data.length; i < l; i++) {\n\t    var chr = data.charAt(i);\n\t\n\t    if (chr !== ':') {\n\t      length += chr;\n\t      continue;\n\t    }\n\t\n\t    if (length === '' || (length != (n = Number(length)))) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    msg = data.substr(i + 1, n);\n\t\n\t    if (length != msg.length) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    if (msg.length) {\n\t      packet = exports.decodePacket(msg, binaryType, false);\n\t\n\t      if (err.type === packet.type && err.data === packet.data) {\n\t        // parser error in individual packet - ignoring payload\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      var ret = callback(packet, i + n, l);\n\t      if (false === ret) return;\n\t    }\n\t\n\t    // advance cursor\n\t    i += n;\n\t    length = '';\n\t  }\n\t\n\t  if (length !== '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload) as binary.\n\t *\n\t * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n\t * 255><data>\n\t *\n\t * Example:\n\t * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n\t *\n\t * @param {Array} packets\n\t * @return {ArrayBuffer} encoded payload\n\t * @api private\n\t */\n\t\n\texports.encodePayloadAsArrayBuffer = function(packets, callback) {\n\t  if (!packets.length) {\n\t    return callback(new ArrayBuffer(0));\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(data) {\n\t      return doneCallback(null, data);\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, encodedPackets) {\n\t    var totalLength = encodedPackets.reduce(function(acc, p) {\n\t      var len;\n\t      if (typeof p === 'string'){\n\t        len = p.length;\n\t      } else {\n\t        len = p.byteLength;\n\t      }\n\t      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n\t    }, 0);\n\t\n\t    var resultArray = new Uint8Array(totalLength);\n\t\n\t    var bufferIndex = 0;\n\t    encodedPackets.forEach(function(p) {\n\t      var isString = typeof p === 'string';\n\t      var ab = p;\n\t      if (isString) {\n\t        var view = new Uint8Array(p.length);\n\t        for (var i = 0; i < p.length; i++) {\n\t          view[i] = p.charCodeAt(i);\n\t        }\n\t        ab = view.buffer;\n\t      }\n\t\n\t      if (isString) { // not true binary\n\t        resultArray[bufferIndex++] = 0;\n\t      } else { // true binary\n\t        resultArray[bufferIndex++] = 1;\n\t      }\n\t\n\t      var lenStr = ab.byteLength.toString();\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n\t      }\n\t      resultArray[bufferIndex++] = 255;\n\t\n\t      var view = new Uint8Array(ab);\n\t      for (var i = 0; i < view.length; i++) {\n\t        resultArray[bufferIndex++] = view[i];\n\t      }\n\t    });\n\t\n\t    return callback(resultArray.buffer);\n\t  });\n\t};\n\t\n\t/**\n\t * Encode as Blob\n\t */\n\t\n\texports.encodePayloadAsBlob = function(packets, callback) {\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(encoded) {\n\t      var binaryIdentifier = new Uint8Array(1);\n\t      binaryIdentifier[0] = 1;\n\t      if (typeof encoded === 'string') {\n\t        var view = new Uint8Array(encoded.length);\n\t        for (var i = 0; i < encoded.length; i++) {\n\t          view[i] = encoded.charCodeAt(i);\n\t        }\n\t        encoded = view.buffer;\n\t        binaryIdentifier[0] = 0;\n\t      }\n\t\n\t      var len = (encoded instanceof ArrayBuffer)\n\t        ? encoded.byteLength\n\t        : encoded.size;\n\t\n\t      var lenStr = len.toString();\n\t      var lengthAry = new Uint8Array(lenStr.length + 1);\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        lengthAry[i] = parseInt(lenStr[i]);\n\t      }\n\t      lengthAry[lenStr.length] = 255;\n\t\n\t      if (Blob) {\n\t        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n\t        doneCallback(null, blob);\n\t      }\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(new Blob(results));\n\t  });\n\t};\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Strings are decoded by\n\t * interpreting each byte as a key code for entries marked to start with 0. See\n\t * description of encodePayloadAsBinary\n\t *\n\t * @param {ArrayBuffer} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayloadAsBinary = function (data, binaryType, callback) {\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var bufferTail = data;\n\t  var buffers = [];\n\t\n\t  while (bufferTail.byteLength > 0) {\n\t    var tailArray = new Uint8Array(bufferTail);\n\t    var isString = tailArray[0] === 0;\n\t    var msgLength = '';\n\t\n\t    for (var i = 1; ; i++) {\n\t      if (tailArray[i] === 255) break;\n\t\n\t      // 310 = char length of Number.MAX_VALUE\n\t      if (msgLength.length > 310) {\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      msgLength += tailArray[i];\n\t    }\n\t\n\t    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n\t    msgLength = parseInt(msgLength);\n\t\n\t    var msg = sliceBuffer(bufferTail, 0, msgLength);\n\t    if (isString) {\n\t      try {\n\t        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n\t      } catch (e) {\n\t        // iPhone Safari doesn't let you apply to typed arrays\n\t        var typed = new Uint8Array(msg);\n\t        msg = '';\n\t        for (var i = 0; i < typed.length; i++) {\n\t          msg += String.fromCharCode(typed[i]);\n\t        }\n\t      }\n\t    }\n\t\n\t    buffers.push(msg);\n\t    bufferTail = sliceBuffer(bufferTail, msgLength);\n\t  }\n\t\n\t  var total = buffers.length;\n\t  buffers.forEach(function(buffer, i) {\n\t    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n\t  });\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Gets the keys for an object.\n\t *\n\t * @return {Array} keys\n\t * @api private\n\t */\n\t\n\tmodule.exports = Object.keys || function keys (obj){\n\t  var arr = [];\n\t  var has = Object.prototype.hasOwnProperty;\n\t\n\t  for (var i in obj) {\n\t    if (has.call(obj, i)) {\n\t      arr.push(i);\n\t    }\n\t  }\n\t  return arr;\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global Blob File */\n\t\n\t/*\n\t * Module requirements.\n\t */\n\t\n\tvar isArray = __webpack_require__(13);\n\t\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' ||\n\t                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\n\tvar withNativeFile = typeof File === 'function' ||\n\t                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = hasBinary;\n\t\n\t/**\n\t * Checks for binary data.\n\t *\n\t * Supports Buffer, ArrayBuffer, Blob and File.\n\t *\n\t * @param {Object} anything\n\t * @api public\n\t */\n\t\n\tfunction hasBinary (obj) {\n\t  if (!obj || typeof obj !== 'object') {\n\t    return false;\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      if (hasBinary(obj[i])) {\n\t        return true;\n\t      }\n\t    }\n\t    return false;\n\t  }\n\t\n\t  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n\t    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n\t    (withNativeBlob && obj instanceof Blob) ||\n\t    (withNativeFile && obj instanceof File)\n\t  ) {\n\t    return true;\n\t  }\n\t\n\t  // see: https://github.com/Automattic/has-binary/pull/4\n\t  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n\t    return hasBinary(obj.toJSON(), true);\n\t  }\n\t\n\t  for (var key in obj) {\n\t    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * An abstraction for slicing an arraybuffer even when\n\t * ArrayBuffer.prototype.slice is not supported\n\t *\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(arraybuffer, start, end) {\n\t  var bytes = arraybuffer.byteLength;\n\t  start = start || 0;\n\t  end = end || bytes;\n\t\n\t  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\t\n\t  if (start < 0) { start += bytes; }\n\t  if (end < 0) { end += bytes; }\n\t  if (end > bytes) { end = bytes; }\n\t\n\t  if (start >= bytes || start >= end || bytes === 0) {\n\t    return new ArrayBuffer(0);\n\t  }\n\t\n\t  var abv = new Uint8Array(arraybuffer);\n\t  var result = new Uint8Array(end - start);\n\t  for (var i = start, ii = 0; i < end; i++, ii++) {\n\t    result[ii] = abv[i];\n\t  }\n\t  return result.buffer;\n\t};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = after\n\t\n\tfunction after(count, callback, err_cb) {\n\t    var bail = false\n\t    err_cb = err_cb || noop\n\t    proxy.count = count\n\t\n\t    return (count === 0) ? callback() : proxy\n\t\n\t    function proxy(err, result) {\n\t        if (proxy.count <= 0) {\n\t            throw new Error('after called too many times')\n\t        }\n\t        --proxy.count\n\t\n\t        // after first error, rest are passed to err_cb\n\t        if (err) {\n\t            bail = true\n\t            callback(err)\n\t            // future error callbacks will go to error handler\n\t            callback = err_cb\n\t        } else if (proxy.count === 0 && !bail) {\n\t            callback(null, result)\n\t        }\n\t    }\n\t}\n\t\n\tfunction noop() {}\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\n\t/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\t\n\tvar stringFromCharCode = String.fromCharCode;\n\t\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\t\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\t\n\tfunction checkScalarValue(codePoint, strict) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tif (strict) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t\t' is not a scalar value'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\t\n\tfunction encodeCodePoint(codePoint, strict) {\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\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t}\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\t\n\tfunction utf8encode(string, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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, strict);\n\t\t}\n\t\treturn byteString;\n\t}\n\t\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\t\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\t\n\tfunction decodeSymbol(strict) {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\t\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\t\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = 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\t\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 checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\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 & 0x07) << 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\t\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\t\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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(strict)) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\t\n\tmodule.exports = {\n\t\tversion: '2.1.2',\n\t\tencode: utf8encode,\n\t\tdecode: utf8decode\n\t};\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\n\t/*\n\t * base64-arraybuffer\n\t * https://github.com/niklasvh/base64-arraybuffer\n\t *\n\t * Copyright (c) 2012 Niklas von Hertzen\n\t * Licensed under the MIT license.\n\t */\n\t(function(){\n\t  \"use strict\";\n\t\n\t  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\t\n\t  // Use a lookup table to find the index.\n\t  var lookup = new Uint8Array(256);\n\t  for (var i = 0; i < chars.length; i++) {\n\t    lookup[chars.charCodeAt(i)] = i;\n\t  }\n\t\n\t  exports.encode = function(arraybuffer) {\n\t    var bytes = new Uint8Array(arraybuffer),\n\t    i, len = bytes.length, base64 = \"\";\n\t\n\t    for (i = 0; i < len; i+=3) {\n\t      base64 += chars[bytes[i] >> 2];\n\t      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n\t      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n\t      base64 += chars[bytes[i + 2] & 63];\n\t    }\n\t\n\t    if ((len % 3) === 2) {\n\t      base64 = base64.substring(0, base64.length - 1) + \"=\";\n\t    } else if (len % 3 === 1) {\n\t      base64 = base64.substring(0, base64.length - 2) + \"==\";\n\t    }\n\t\n\t    return base64;\n\t  };\n\t\n\t  exports.decode =  function(base64) {\n\t    var bufferLength = base64.length * 0.75,\n\t    len = base64.length, i, p = 0,\n\t    encoded1, encoded2, encoded3, encoded4;\n\t\n\t    if (base64[base64.length - 1] === \"=\") {\n\t      bufferLength--;\n\t      if (base64[base64.length - 2] === \"=\") {\n\t        bufferLength--;\n\t      }\n\t    }\n\t\n\t    var arraybuffer = new ArrayBuffer(bufferLength),\n\t    bytes = new Uint8Array(arraybuffer);\n\t\n\t    for (i = 0; i < len; i+=4) {\n\t      encoded1 = lookup[base64.charCodeAt(i)];\n\t      encoded2 = lookup[base64.charCodeAt(i+1)];\n\t      encoded3 = lookup[base64.charCodeAt(i+2)];\n\t      encoded4 = lookup[base64.charCodeAt(i+3)];\n\t\n\t      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n\t      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n\t      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n\t    }\n\t\n\t    return arraybuffer;\n\t  };\n\t})();\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Create a blob builder even when vendor prefixes exist\r\n\t */\r\n\t\r\n\tvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n\t  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n\t  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n\t  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n\t  false;\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor is supported\r\n\t */\r\n\t\r\n\tvar blobSupported = (function() {\r\n\t  try {\r\n\t    var a = new Blob(['hi']);\r\n\t    return a.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor supports ArrayBufferViews\r\n\t * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n\t */\r\n\t\r\n\tvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n\t  try {\r\n\t    var b = new Blob([new Uint8Array([1,2])]);\r\n\t    return b.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if BlobBuilder is supported\r\n\t */\r\n\t\r\n\tvar blobBuilderSupported = BlobBuilder\r\n\t  && BlobBuilder.prototype.append\r\n\t  && BlobBuilder.prototype.getBlob;\r\n\t\r\n\t/**\r\n\t * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n\t * Used by BlobBuilder constructor and old browsers that didn't\r\n\t * support it in the Blob constructor.\r\n\t */\r\n\t\r\n\tfunction mapArrayBufferViews(ary) {\r\n\t  return ary.map(function(chunk) {\r\n\t    if (chunk.buffer instanceof ArrayBuffer) {\r\n\t      var buf = chunk.buffer;\r\n\t\r\n\t      // if this is a subarray, make a copy so we only\r\n\t      // include the subarray region from the underlying buffer\r\n\t      if (chunk.byteLength !== buf.byteLength) {\r\n\t        var copy = new Uint8Array(chunk.byteLength);\r\n\t        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n\t        buf = copy.buffer;\r\n\t      }\r\n\t\r\n\t      return buf;\r\n\t    }\r\n\t\r\n\t    return chunk;\r\n\t  });\r\n\t}\r\n\t\r\n\tfunction BlobBuilderConstructor(ary, options) {\r\n\t  options = options || {};\r\n\t\r\n\t  var bb = new BlobBuilder();\r\n\t  mapArrayBufferViews(ary).forEach(function(part) {\r\n\t    bb.append(part);\r\n\t  });\r\n\t\r\n\t  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n\t};\r\n\t\r\n\tfunction BlobConstructor(ary, options) {\r\n\t  return new Blob(mapArrayBufferViews(ary), options || {});\r\n\t};\r\n\t\r\n\tif (typeof Blob !== 'undefined') {\r\n\t  BlobBuilderConstructor.prototype = Blob.prototype;\r\n\t  BlobConstructor.prototype = Blob.prototype;\r\n\t}\r\n\t\r\n\tmodule.exports = (function() {\r\n\t  if (blobSupported) {\r\n\t    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n\t  } else if (blobBuilderSupported) {\r\n\t    return BlobBuilderConstructor;\r\n\t  } else {\r\n\t    return undefined;\r\n\t  }\r\n\t})();\r\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Compiles a querystring\r\n\t * Returns string representation of the object\r\n\t *\r\n\t * @param {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\texports.encode = function (obj) {\r\n\t  var str = '';\r\n\t\r\n\t  for (var i in obj) {\r\n\t    if (obj.hasOwnProperty(i)) {\r\n\t      if (str.length) str += '&';\r\n\t      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return str;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Parses a simple querystring into an object\r\n\t *\r\n\t * @param {String} qs\r\n\t * @api private\r\n\t */\r\n\t\r\n\texports.decode = function(qs){\r\n\t  var qry = {};\r\n\t  var pairs = qs.split('&');\r\n\t  for (var i = 0, l = pairs.length; i < l; i++) {\r\n\t    var pair = pairs[i].split('=');\r\n\t    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n\t  }\r\n\t  return qry;\r\n\t};\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = function(a, b){\n\t  var fn = function(){};\n\t  fn.prototype = b.prototype;\n\t  a.prototype = new fn;\n\t  a.prototype.constructor = a;\n\t};\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n\t  , length = 64\n\t  , map = {}\n\t  , seed = 0\n\t  , i = 0\n\t  , prev;\n\t\n\t/**\n\t * Return a string representing the specified number.\n\t *\n\t * @param {Number} num The number to convert.\n\t * @returns {String} The string representation of the number.\n\t * @api public\n\t */\n\tfunction encode(num) {\n\t  var encoded = '';\n\t\n\t  do {\n\t    encoded = alphabet[num % length] + encoded;\n\t    num = Math.floor(num / length);\n\t  } while (num > 0);\n\t\n\t  return encoded;\n\t}\n\t\n\t/**\n\t * Return the integer value specified by the given string.\n\t *\n\t * @param {String} str The string to convert.\n\t * @returns {Number} The integer value represented by the string.\n\t * @api public\n\t */\n\tfunction decode(str) {\n\t  var decoded = 0;\n\t\n\t  for (i = 0; i < str.length; i++) {\n\t    decoded = decoded * length + map[str.charAt(i)];\n\t  }\n\t\n\t  return decoded;\n\t}\n\t\n\t/**\n\t * Yeast: A tiny growing id generator.\n\t *\n\t * @returns {String} A unique id.\n\t * @api public\n\t */\n\tfunction yeast() {\n\t  var now = encode(+new Date());\n\t\n\t  if (now !== prev) return seed = 0, prev = now;\n\t  return now +'.'+ encode(seed++);\n\t}\n\t\n\t//\n\t// Map each character to its index.\n\t//\n\tfor (; i < length; i++) map[alphabet[i]] = i;\n\t\n\t//\n\t// Expose the `yeast`, `encode` and `decode` functions.\n\t//\n\tyeast.encode = encode;\n\tyeast.decode = decode;\n\tmodule.exports = yeast;\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Module requirements.\n\t */\n\t\n\tvar Polling = __webpack_require__(22);\n\tvar inherit = __webpack_require__(33);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = JSONPPolling;\n\t\n\t/**\n\t * Cached regular expressions.\n\t */\n\t\n\tvar rNewline = /\\n/g;\n\tvar rEscapedNewline = /\\\\n/g;\n\t\n\t/**\n\t * Global JSONP callbacks.\n\t */\n\t\n\tvar callbacks;\n\t\n\t/**\n\t * Noop.\n\t */\n\t\n\tfunction empty () { }\n\t\n\t/**\n\t * Until https://github.com/tc39/proposal-global is shipped.\n\t */\n\tfunction glob () {\n\t  return typeof self !== 'undefined' ? self\n\t      : typeof window !== 'undefined' ? window\n\t      : typeof global !== 'undefined' ? global : {};\n\t}\n\t\n\t/**\n\t * JSONP Polling constructor.\n\t *\n\t * @param {Object} opts.\n\t * @api public\n\t */\n\t\n\tfunction JSONPPolling (opts) {\n\t  Polling.call(this, opts);\n\t\n\t  this.query = this.query || {};\n\t\n\t  // define global callbacks array if not present\n\t  // we do this here (lazily) to avoid unneeded global pollution\n\t  if (!callbacks) {\n\t    // we need to consider multiple engines in the same page\n\t    var global = glob();\n\t    callbacks = global.___eio = (global.___eio || []);\n\t  }\n\t\n\t  // callback identifier\n\t  this.index = callbacks.length;\n\t\n\t  // add callback to jsonp global\n\t  var self = this;\n\t  callbacks.push(function (msg) {\n\t    self.onData(msg);\n\t  });\n\t\n\t  // append to query string\n\t  this.query.j = this.index;\n\t\n\t  // prevent spurious errors from being emitted when the window is unloaded\n\t  if (typeof addEventListener === 'function') {\n\t    addEventListener('beforeunload', function () {\n\t      if (self.script) self.script.onerror = empty;\n\t    }, false);\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(JSONPPolling, Polling);\n\t\n\t/*\n\t * JSONP only supports binary as base64 encoded strings\n\t */\n\t\n\tJSONPPolling.prototype.supportsBinary = false;\n\t\n\t/**\n\t * Closes the socket.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doClose = function () {\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  if (this.form) {\n\t    this.form.parentNode.removeChild(this.form);\n\t    this.form = null;\n\t    this.iframe = null;\n\t  }\n\t\n\t  Polling.prototype.doClose.call(this);\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doPoll = function () {\n\t  var self = this;\n\t  var script = document.createElement('script');\n\t\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  script.async = true;\n\t  script.src = this.uri();\n\t  script.onerror = function (e) {\n\t    self.onError('jsonp poll error', e);\n\t  };\n\t\n\t  var insertAt = document.getElementsByTagName('script')[0];\n\t  if (insertAt) {\n\t    insertAt.parentNode.insertBefore(script, insertAt);\n\t  } else {\n\t    (document.head || document.body).appendChild(script);\n\t  }\n\t  this.script = script;\n\t\n\t  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\t\n\t  if (isUAgecko) {\n\t    setTimeout(function () {\n\t      var iframe = document.createElement('iframe');\n\t      document.body.appendChild(iframe);\n\t      document.body.removeChild(iframe);\n\t    }, 100);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes with a hidden iframe.\n\t *\n\t * @param {String} data to send\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doWrite = function (data, fn) {\n\t  var self = this;\n\t\n\t  if (!this.form) {\n\t    var form = document.createElement('form');\n\t    var area = document.createElement('textarea');\n\t    var id = this.iframeId = 'eio_iframe_' + this.index;\n\t    var iframe;\n\t\n\t    form.className = 'socketio';\n\t    form.style.position = 'absolute';\n\t    form.style.top = '-1000px';\n\t    form.style.left = '-1000px';\n\t    form.target = id;\n\t    form.method = 'POST';\n\t    form.setAttribute('accept-charset', 'utf-8');\n\t    area.name = 'd';\n\t    form.appendChild(area);\n\t    document.body.appendChild(form);\n\t\n\t    this.form = form;\n\t    this.area = area;\n\t  }\n\t\n\t  this.form.action = this.uri();\n\t\n\t  function complete () {\n\t    initIframe();\n\t    fn();\n\t  }\n\t\n\t  function initIframe () {\n\t    if (self.iframe) {\n\t      try {\n\t        self.form.removeChild(self.iframe);\n\t      } catch (e) {\n\t        self.onError('jsonp polling iframe removal error', e);\n\t      }\n\t    }\n\t\n\t    try {\n\t      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n\t      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n\t      iframe = document.createElement(html);\n\t    } catch (e) {\n\t      iframe = document.createElement('iframe');\n\t      iframe.name = self.iframeId;\n\t      iframe.src = 'javascript:0';\n\t    }\n\t\n\t    iframe.id = self.iframeId;\n\t\n\t    self.form.appendChild(iframe);\n\t    self.iframe = iframe;\n\t  }\n\t\n\t  initIframe();\n\t\n\t  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n\t  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n\t  data = data.replace(rEscapedNewline, '\\\\\\n');\n\t  this.area.value = data.replace(rNewline, '\\\\n');\n\t\n\t  try {\n\t    this.form.submit();\n\t  } catch (e) {}\n\t\n\t  if (this.iframe.attachEvent) {\n\t    this.iframe.onreadystatechange = function () {\n\t      if (self.iframe.readyState === 'complete') {\n\t        complete();\n\t      }\n\t    };\n\t  } else {\n\t    this.iframe.onload = complete;\n\t  }\n\t};\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(23);\n\tvar parser = __webpack_require__(24);\n\tvar parseqs = __webpack_require__(32);\n\tvar inherit = __webpack_require__(33);\n\tvar yeast = __webpack_require__(34);\n\tvar debug = __webpack_require__(3)('engine.io-client:websocket');\n\t\n\tvar BrowserWebSocket, NodeWebSocket;\n\t\n\tif (typeof WebSocket !== 'undefined') {\n\t  BrowserWebSocket = WebSocket;\n\t} else if (typeof self !== 'undefined') {\n\t  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n\t}\n\t\n\tif (typeof window === 'undefined') {\n\t  try {\n\t    NodeWebSocket = __webpack_require__(37);\n\t  } catch (e) { }\n\t}\n\t\n\t/**\n\t * Get either the `WebSocket` or `MozWebSocket` globals\n\t * in the browser or try to resolve WebSocket-compatible\n\t * interface exposed by `ws` for Node-like environment.\n\t */\n\t\n\tvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = WS;\n\t\n\t/**\n\t * WebSocket transport constructor.\n\t *\n\t * @api {Object} connection options\n\t * @api public\n\t */\n\t\n\tfunction WS (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  this.perMessageDeflate = opts.perMessageDeflate;\n\t  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n\t  this.protocols = opts.protocols;\n\t  if (!this.usingBrowserWebSocket) {\n\t    WebSocketImpl = NodeWebSocket;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(WS, Transport);\n\t\n\t/**\n\t * Transport name.\n\t *\n\t * @api public\n\t */\n\t\n\tWS.prototype.name = 'websocket';\n\t\n\t/*\n\t * WebSockets support binary\n\t */\n\t\n\tWS.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Opens socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doOpen = function () {\n\t  if (!this.check()) {\n\t    // let probe timeout\n\t    return;\n\t  }\n\t\n\t  var uri = this.uri();\n\t  var protocols = this.protocols;\n\t  var opts = {\n\t    agent: this.agent,\n\t    perMessageDeflate: this.perMessageDeflate\n\t  };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  if (this.extraHeaders) {\n\t    opts.headers = this.extraHeaders;\n\t  }\n\t  if (this.localAddress) {\n\t    opts.localAddress = this.localAddress;\n\t  }\n\t\n\t  try {\n\t    this.ws =\n\t      this.usingBrowserWebSocket && !this.isReactNative\n\t        ? protocols\n\t          ? new WebSocketImpl(uri, protocols)\n\t          : new WebSocketImpl(uri)\n\t        : new WebSocketImpl(uri, protocols, opts);\n\t  } catch (err) {\n\t    return this.emit('error', err);\n\t  }\n\t\n\t  if (this.ws.binaryType === undefined) {\n\t    this.supportsBinary = false;\n\t  }\n\t\n\t  if (this.ws.supports && this.ws.supports.binary) {\n\t    this.supportsBinary = true;\n\t    this.ws.binaryType = 'nodebuffer';\n\t  } else {\n\t    this.ws.binaryType = 'arraybuffer';\n\t  }\n\t\n\t  this.addEventListeners();\n\t};\n\t\n\t/**\n\t * Adds event listeners to the socket\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.addEventListeners = function () {\n\t  var self = this;\n\t\n\t  this.ws.onopen = function () {\n\t    self.onOpen();\n\t  };\n\t  this.ws.onclose = function () {\n\t    self.onClose();\n\t  };\n\t  this.ws.onmessage = function (ev) {\n\t    self.onData(ev.data);\n\t  };\n\t  this.ws.onerror = function (e) {\n\t    self.onError('websocket error', e);\n\t  };\n\t};\n\t\n\t/**\n\t * Writes data to socket.\n\t *\n\t * @param {Array} array of packets.\n\t * @api private\n\t */\n\t\n\tWS.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t\n\t  // encodePacket efficient as it uses WS framing\n\t  // no need for encodePayload\n\t  var total = packets.length;\n\t  for (var i = 0, l = total; i < l; i++) {\n\t    (function (packet) {\n\t      parser.encodePacket(packet, self.supportsBinary, function (data) {\n\t        if (!self.usingBrowserWebSocket) {\n\t          // always create a new object (GH-437)\n\t          var opts = {};\n\t          if (packet.options) {\n\t            opts.compress = packet.options.compress;\n\t          }\n\t\n\t          if (self.perMessageDeflate) {\n\t            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n\t            if (len < self.perMessageDeflate.threshold) {\n\t              opts.compress = false;\n\t            }\n\t          }\n\t        }\n\t\n\t        // Sometimes the websocket has already been closed but the browser didn't\n\t        // have a chance of informing us about it yet, in that case send will\n\t        // throw an error\n\t        try {\n\t          if (self.usingBrowserWebSocket) {\n\t            // TypeError is thrown when passing the second argument on Safari\n\t            self.ws.send(data);\n\t          } else {\n\t            self.ws.send(data, opts);\n\t          }\n\t        } catch (e) {\n\t          debug('websocket closed before onclose event');\n\t        }\n\t\n\t        --total || done();\n\t      });\n\t    })(packets[i]);\n\t  }\n\t\n\t  function done () {\n\t    self.emit('flush');\n\t\n\t    // fake drain\n\t    // defer to next tick to allow Socket to clear writeBuffer\n\t    setTimeout(function () {\n\t      self.writable = true;\n\t      self.emit('drain');\n\t    }, 0);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon close\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.onClose = function () {\n\t  Transport.prototype.onClose.call(this);\n\t};\n\t\n\t/**\n\t * Closes socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doClose = function () {\n\t  if (typeof this.ws !== 'undefined') {\n\t    this.ws.close();\n\t  }\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'wss' : 'ws';\n\t  var port = '';\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n\t    ('ws' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // append timestamp to URI\n\t  if (this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  // communicate binary support capabilities\n\t  if (!this.supportsBinary) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\t\n\t/**\n\t * Feature detection for WebSocket.\n\t *\n\t * @return {Boolean} whether this transport is available.\n\t * @api public\n\t */\n\t\n\tWS.prototype.check = function () {\n\t  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n\t};\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\n\t/* (ignored) */\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\n\t\n\tvar indexOf = [].indexOf;\n\t\n\tmodule.exports = function(arr, obj){\n\t  if (indexOf) return arr.indexOf(obj);\n\t  for (var i = 0; i < arr.length; ++i) {\n\t    if (arr[i] === obj) return i;\n\t  }\n\t  return -1;\n\t};\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(7);\n\tvar Emitter = __webpack_require__(11);\n\tvar toArray = __webpack_require__(40);\n\tvar on = __webpack_require__(41);\n\tvar bind = __webpack_require__(42);\n\tvar debug = __webpack_require__(3)('socket.io-client:socket');\n\tvar parseqs = __webpack_require__(32);\n\tvar hasBin = __webpack_require__(26);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = Socket;\n\t\n\t/**\n\t * Internal events (blacklisted).\n\t * These events can't be emitted by the user.\n\t *\n\t * @api private\n\t */\n\t\n\tvar events = {\n\t  connect: 1,\n\t  connect_error: 1,\n\t  connect_timeout: 1,\n\t  connecting: 1,\n\t  disconnect: 1,\n\t  error: 1,\n\t  reconnect: 1,\n\t  reconnect_attempt: 1,\n\t  reconnect_failed: 1,\n\t  reconnect_error: 1,\n\t  reconnecting: 1,\n\t  ping: 1,\n\t  pong: 1\n\t};\n\t\n\t/**\n\t * Shortcut to `Emitter#emit`.\n\t */\n\t\n\tvar emit = Emitter.prototype.emit;\n\t\n\t/**\n\t * `Socket` constructor.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Socket (io, nsp, opts) {\n\t  this.io = io;\n\t  this.nsp = nsp;\n\t  this.json = this; // compat\n\t  this.ids = 0;\n\t  this.acks = {};\n\t  this.receiveBuffer = [];\n\t  this.sendBuffer = [];\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  this.flags = {};\n\t  if (opts && opts.query) {\n\t    this.query = opts.query;\n\t  }\n\t  if (this.io.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Subscribe to open, close and packet events\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.subEvents = function () {\n\t  if (this.subs) return;\n\t\n\t  var io = this.io;\n\t  this.subs = [\n\t    on(io, 'open', bind(this, 'onopen')),\n\t    on(io, 'packet', bind(this, 'onpacket')),\n\t    on(io, 'close', bind(this, 'onclose'))\n\t  ];\n\t};\n\t\n\t/**\n\t * \"Opens\" the socket.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.open =\n\tSocket.prototype.connect = function () {\n\t  if (this.connected) return this;\n\t\n\t  this.subEvents();\n\t  this.io.open(); // ensure open\n\t  if ('open' === this.io.readyState) this.onopen();\n\t  this.emit('connecting');\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a `message` event.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.send = function () {\n\t  var args = toArray(arguments);\n\t  args.unshift('message');\n\t  this.emit.apply(this, args);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Override `emit`.\n\t * If the event is in `events`, it's emitted normally.\n\t *\n\t * @param {String} event name\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.emit = function (ev) {\n\t  if (events.hasOwnProperty(ev)) {\n\t    emit.apply(this, arguments);\n\t    return this;\n\t  }\n\t\n\t  var args = toArray(arguments);\n\t  var packet = {\n\t    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n\t    data: args\n\t  };\n\t\n\t  packet.options = {};\n\t  packet.options.compress = !this.flags || false !== this.flags.compress;\n\t\n\t  // event ack callback\n\t  if ('function' === typeof args[args.length - 1]) {\n\t    debug('emitting packet with ack id %d', this.ids);\n\t    this.acks[this.ids] = args.pop();\n\t    packet.id = this.ids++;\n\t  }\n\t\n\t  if (this.connected) {\n\t    this.packet(packet);\n\t  } else {\n\t    this.sendBuffer.push(packet);\n\t  }\n\t\n\t  this.flags = {};\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.packet = function (packet) {\n\t  packet.nsp = this.nsp;\n\t  this.io.packet(packet);\n\t};\n\t\n\t/**\n\t * Called upon engine `open`.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onopen = function () {\n\t  debug('transport is open - connecting');\n\t\n\t  // write connect packet if necessary\n\t  if ('/' !== this.nsp) {\n\t    if (this.query) {\n\t      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\t      debug('sending connect packet with query %s', query);\n\t      this.packet({type: parser.CONNECT, query: query});\n\t    } else {\n\t      this.packet({type: parser.CONNECT});\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon engine `close`.\n\t *\n\t * @param {String} reason\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onclose = function (reason) {\n\t  debug('close (%s)', reason);\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  delete this.id;\n\t  this.emit('disconnect', reason);\n\t};\n\t\n\t/**\n\t * Called with socket packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onpacket = function (packet) {\n\t  var sameNamespace = packet.nsp === this.nsp;\n\t  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\t\n\t  if (!sameNamespace && !rootNamespaceError) return;\n\t\n\t  switch (packet.type) {\n\t    case parser.CONNECT:\n\t      this.onconnect();\n\t      break;\n\t\n\t    case parser.EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.BINARY_EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.BINARY_ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.DISCONNECT:\n\t      this.ondisconnect();\n\t      break;\n\t\n\t    case parser.ERROR:\n\t      this.emit('error', packet.data);\n\t      break;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon a server event.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onevent = function (packet) {\n\t  var args = packet.data || [];\n\t  debug('emitting event %j', args);\n\t\n\t  if (null != packet.id) {\n\t    debug('attaching ack callback to event');\n\t    args.push(this.ack(packet.id));\n\t  }\n\t\n\t  if (this.connected) {\n\t    emit.apply(this, args);\n\t  } else {\n\t    this.receiveBuffer.push(args);\n\t  }\n\t};\n\t\n\t/**\n\t * Produces an ack callback to emit with an event.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ack = function (id) {\n\t  var self = this;\n\t  var sent = false;\n\t  return function () {\n\t    // prevent double callbacks\n\t    if (sent) return;\n\t    sent = true;\n\t    var args = toArray(arguments);\n\t    debug('sending ack %j', args);\n\t\n\t    self.packet({\n\t      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n\t      id: id,\n\t      data: args\n\t    });\n\t  };\n\t};\n\t\n\t/**\n\t * Called upon a server acknowlegement.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onack = function (packet) {\n\t  var ack = this.acks[packet.id];\n\t  if ('function' === typeof ack) {\n\t    debug('calling ack %s with %j', packet.id, packet.data);\n\t    ack.apply(this, packet.data);\n\t    delete this.acks[packet.id];\n\t  } else {\n\t    debug('bad ack %s', packet.id);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon server connect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onconnect = function () {\n\t  this.connected = true;\n\t  this.disconnected = false;\n\t  this.emit('connect');\n\t  this.emitBuffered();\n\t};\n\t\n\t/**\n\t * Emit buffered events (received and emitted).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.emitBuffered = function () {\n\t  var i;\n\t  for (i = 0; i < this.receiveBuffer.length; i++) {\n\t    emit.apply(this, this.receiveBuffer[i]);\n\t  }\n\t  this.receiveBuffer = [];\n\t\n\t  for (i = 0; i < this.sendBuffer.length; i++) {\n\t    this.packet(this.sendBuffer[i]);\n\t  }\n\t  this.sendBuffer = [];\n\t};\n\t\n\t/**\n\t * Called upon server disconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ondisconnect = function () {\n\t  debug('server disconnect (%s)', this.nsp);\n\t  this.destroy();\n\t  this.onclose('io server disconnect');\n\t};\n\t\n\t/**\n\t * Called upon forced client/server side disconnections,\n\t * this method ensures the manager stops tracking us and\n\t * that reconnections don't get triggered for this.\n\t *\n\t * @api private.\n\t */\n\t\n\tSocket.prototype.destroy = function () {\n\t  if (this.subs) {\n\t    // clean subscriptions to avoid reconnections\n\t    for (var i = 0; i < this.subs.length; i++) {\n\t      this.subs[i].destroy();\n\t    }\n\t    this.subs = null;\n\t  }\n\t\n\t  this.io.destroy(this);\n\t};\n\t\n\t/**\n\t * Disconnects the socket manually.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.close =\n\tSocket.prototype.disconnect = function () {\n\t  if (this.connected) {\n\t    debug('performing disconnect (%s)', this.nsp);\n\t    this.packet({ type: parser.DISCONNECT });\n\t  }\n\t\n\t  // remove socket from pool\n\t  this.destroy();\n\t\n\t  if (this.connected) {\n\t    // fire events\n\t    this.onclose('io client disconnect');\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the compress flag.\n\t *\n\t * @param {Boolean} if `true`, compresses the sending data\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.compress = function (compress) {\n\t  this.flags.compress = compress;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the binary flag\n\t *\n\t * @param {Boolean} whether the emitted data contains binary\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.binary = function (binary) {\n\t  this.flags.binary = binary;\n\t  return this;\n\t};\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = toArray\n\t\n\tfunction toArray(list, index) {\n\t    var array = []\n\t\n\t    index = index || 0\n\t\n\t    for (var i = index || 0; i < list.length; i++) {\n\t        array[i - index] = list[i]\n\t    }\n\t\n\t    return array\n\t}\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = on;\n\t\n\t/**\n\t * Helper for subscriptions.\n\t *\n\t * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n\t * @param {String} event name\n\t * @param {Function} callback\n\t * @api public\n\t */\n\t\n\tfunction on (obj, ev, fn) {\n\t  obj.on(ev, fn);\n\t  return {\n\t    destroy: function () {\n\t      obj.removeListener(ev, fn);\n\t    }\n\t  };\n\t}\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Slice reference.\n\t */\n\t\n\tvar slice = [].slice;\n\t\n\t/**\n\t * Bind `obj` to `fn`.\n\t *\n\t * @param {Object} obj\n\t * @param {Function|String} fn or string\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(obj, fn){\n\t  if ('string' == typeof fn) fn = obj[fn];\n\t  if ('function' != typeof fn) throw new Error('bind() requires a function');\n\t  var args = slice.call(arguments, 2);\n\t  return function(){\n\t    return fn.apply(obj, args.concat(slice.call(arguments)));\n\t  }\n\t};\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Expose `Backoff`.\n\t */\n\t\n\tmodule.exports = Backoff;\n\t\n\t/**\n\t * Initialize backoff timer with `opts`.\n\t *\n\t * - `min` initial timeout in milliseconds [100]\n\t * - `max` max timeout [10000]\n\t * - `jitter` [0]\n\t * - `factor` [2]\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction Backoff(opts) {\n\t  opts = opts || {};\n\t  this.ms = opts.min || 100;\n\t  this.max = opts.max || 10000;\n\t  this.factor = opts.factor || 2;\n\t  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n\t  this.attempts = 0;\n\t}\n\t\n\t/**\n\t * Return the backoff duration.\n\t *\n\t * @return {Number}\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.duration = function(){\n\t  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n\t  if (this.jitter) {\n\t    var rand =  Math.random();\n\t    var deviation = Math.floor(rand * this.jitter * ms);\n\t    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n\t  }\n\t  return Math.min(ms, this.max) | 0;\n\t};\n\t\n\t/**\n\t * Reset the number of attempts.\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.reset = function(){\n\t  this.attempts = 0;\n\t};\n\t\n\t/**\n\t * Set the minimum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMin = function(min){\n\t  this.ms = min;\n\t};\n\t\n\t/**\n\t * Set the maximum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMax = function(max){\n\t  this.max = max;\n\t};\n\t\n\t/**\n\t * Set the jitter\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setJitter = function(jitter){\n\t  this.jitter = jitter;\n\t};\n\t\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// socket.io.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9e45fccfabd75c66dd47","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/index.js\n// module id = 0\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/url.js\n// module id = 1\n// module chunks = 0","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\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\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\nfunction log(...args) {\n\t// This hackery is required for IE8/9, where\n\t// the `console.log` function doesn't have 'apply'\n\treturn typeof console === 'object' &&\n\t\tconsole.log &&\n\t\tconsole.log(...args);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\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\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/browser.js","// 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;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 4\n// module chunks = 0","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* Active `debug` instances.\n\t*/\n\tcreateDebug.instances = [];\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.enabled = createDebug.enabled(namespace);\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = selectColor(namespace);\n\t\tdebug.destroy = destroy;\n\t\tdebug.extend = extend;\n\t\t// Debug.formatArgs = formatArgs;\n\t\t// debug.rawLog = rawLog;\n\n\t\t// env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\tcreateDebug.instances.push(debug);\n\n\t\treturn debug;\n\t}\n\n\tfunction destroy() {\n\t\tconst index = createDebug.instances.indexOf(this);\n\t\tif (index !== -1) {\n\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\tconst instance = createDebug.instances[i];\n\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/common.js","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\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' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\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 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\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  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= 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  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ms/index.js\n// module id = 6\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 7\n// module chunks = 0","/**\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  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\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  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\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' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\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  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\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;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\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-zA-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}\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 (!r && typeof process !== 'undefined' && 'env' in 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\n\n// WEBPACK FOOTER //\n// ./~/socket.io-parser/~/debug/src/browser.js","\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 = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\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, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % 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 createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\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    // turn the `arguments` into a proper Array\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.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-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 (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\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  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (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  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\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  if (name[name.length - 1] === '*') {\n    return true;\n  }\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\n\n// WEBPACK FOOTER //\n// ./~/socket.io-parser/~/debug/src/debug.js","/**\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 ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\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(\n    str\n  );\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/~/ms/index.js\n// module id = 10\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 11\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 12\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 13\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 14\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/manager.js\n// module id = 15\n// module chunks = 0","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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(JSON.parse(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 18\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('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 self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 19\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 20\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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 && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 21\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 22\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 23\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 24\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 25\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 26\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 27\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 28\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 29\n// module chunks = 0","/*\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 30\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 31\n// module chunks = 0","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 32\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 33\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 34\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('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 * Until https://github.com/tc39/proposal-global is shipped.\n */\nfunction glob () {\n  return typeof self !== 'undefined' ? self\n      : typeof window !== 'undefined' ? window\n      : typeof global !== 'undefined' ? global : {};\n}\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    var global = glob();\n    callbacks = global.___eio = (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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 35\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\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  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 36\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 38\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/socket.js\n// module id = 39\n// module chunks = 0","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 40\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/on.js\n// module id = 41\n// module chunks = 0","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 42\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 43\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.dev.js b/signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.dev.js
deleted file mode 100644 (file)
index d6b3fd8..0000000
+++ /dev/null
@@ -1,5853 +0,0 @@
-/*!
- * Socket.IO v2.3.0
- * (c) 2014-2019 Guillermo Rauch
- * Released under the MIT License.
- */
-(function webpackUniversalModuleDefinition(root, factory) {
-       if(typeof exports === 'object' && typeof module === 'object')
-               module.exports = factory();
-       else if(typeof define === 'function' && define.amd)
-               define([], factory);
-       else if(typeof exports === 'object')
-               exports["io"] = factory();
-       else
-               root["io"] = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/       // The module cache
-/******/       var installedModules = {};
-/******/
-/******/       // The require function
-/******/       function __webpack_require__(moduleId) {
-/******/
-/******/               // Check if module is in cache
-/******/               if(installedModules[moduleId])
-/******/                       return installedModules[moduleId].exports;
-/******/
-/******/               // Create a new module (and put it into the cache)
-/******/               var module = installedModules[moduleId] = {
-/******/                       exports: {},
-/******/                       id: moduleId,
-/******/                       loaded: false
-/******/               };
-/******/
-/******/               // Execute the module function
-/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/               // Flag the module as loaded
-/******/               module.loaded = true;
-/******/
-/******/               // Return the exports of the module
-/******/               return module.exports;
-/******/       }
-/******/
-/******/
-/******/       // expose the modules object (__webpack_modules__)
-/******/       __webpack_require__.m = modules;
-/******/
-/******/       // expose the module cache
-/******/       __webpack_require__.c = installedModules;
-/******/
-/******/       // __webpack_public_path__
-/******/       __webpack_require__.p = "";
-/******/
-/******/       // Load entry module and return exports
-/******/       return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var url = __webpack_require__(1);
-       var parser = __webpack_require__(4);
-       var Manager = __webpack_require__(9);
-       var debug = __webpack_require__(3)('socket.io-client');
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = exports = lookup;
-       
-       /**
-        * Managers cache.
-        */
-       
-       var cache = exports.managers = {};
-       
-       /**
-        * Looks up an existing `Manager` for multiplexing.
-        * If the user summons:
-        *
-        *   `io('http://localhost/a');`
-        *   `io('http://localhost/b');`
-        *
-        * We reuse the existing instance based on same scheme/port/host,
-        * and we initialize sockets for each namespace.
-        *
-        * @api public
-        */
-       
-       function lookup(uri, opts) {
-         if ((typeof uri === 'undefined' ? 'undefined' : _typeof(uri)) === 'object') {
-           opts = uri;
-           uri = undefined;
-         }
-       
-         opts = opts || {};
-       
-         var parsed = url(uri);
-         var source = parsed.source;
-         var id = parsed.id;
-         var path = parsed.path;
-         var sameNamespace = cache[id] && path in cache[id].nsps;
-         var newConnection = opts.forceNew || opts['force new connection'] || false === opts.multiplex || sameNamespace;
-       
-         var io;
-       
-         if (newConnection) {
-       
-           io = Manager(source, opts);
-         } else {
-           if (!cache[id]) {
-       
-             cache[id] = Manager(source, opts);
-           }
-           io = cache[id];
-         }
-         if (parsed.query && !opts.query) {
-           opts.query = parsed.query;
-         }
-         return io.socket(parsed.path, opts);
-       }
-       
-       /**
-        * Protocol version.
-        *
-        * @api public
-        */
-       
-       exports.protocol = parser.protocol;
-       
-       /**
-        * `connect`.
-        *
-        * @param {String} uri
-        * @api public
-        */
-       
-       exports.connect = lookup;
-       
-       /**
-        * Expose constructors for standalone build.
-        *
-        * @api public
-        */
-       
-       exports.Manager = __webpack_require__(9);
-       exports.Socket = __webpack_require__(33);
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var parseuri = __webpack_require__(2);
-       var debug = __webpack_require__(3)('socket.io-client:url');
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = url;
-       
-       /**
-        * URL parser.
-        *
-        * @param {String} url
-        * @param {Object} An object meant to mimic window.location.
-        *                 Defaults to window.location.
-        * @api public
-        */
-       
-       function url(uri, loc) {
-         var obj = uri;
-       
-         // default to window.location
-         loc = loc || typeof location !== 'undefined' && location;
-         if (null == uri) uri = loc.protocol + '//' + loc.host;
-       
-         // relative path support
-         if ('string' === typeof uri) {
-           if ('/' === uri.charAt(0)) {
-             if ('/' === uri.charAt(1)) {
-               uri = loc.protocol + uri;
-             } else {
-               uri = loc.host + uri;
-             }
-           }
-       
-           if (!/^(https?|wss?):\/\//.test(uri)) {
-       
-             if ('undefined' !== typeof loc) {
-               uri = loc.protocol + '//' + uri;
-             } else {
-               uri = 'https://' + uri;
-             }
-           }
-       
-           // parse
-       
-           obj = parseuri(uri);
-         }
-       
-         // make sure we treat `localhost:80` and `localhost` equally
-         if (!obj.port) {
-           if (/^(http|ws)$/.test(obj.protocol)) {
-             obj.port = '80';
-           } else if (/^(http|ws)s$/.test(obj.protocol)) {
-             obj.port = '443';
-           }
-         }
-       
-         obj.path = obj.path || '/';
-       
-         var ipv6 = obj.host.indexOf(':') !== -1;
-         var host = ipv6 ? '[' + obj.host + ']' : obj.host;
-       
-         // define unique id
-         obj.id = obj.protocol + '://' + host + ':' + obj.port;
-         // define href
-         obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : ':' + obj.port);
-       
-         return obj;
-       }
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports) {
-
-       /**
-        * Parses an URI
-        *
-        * @author Steven Levithan <stevenlevithan.com> (MIT license)
-        * @api private
-        */
-       
-       var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
-       
-       var parts = [
-           'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'
-       ];
-       
-       module.exports = function parseuri(str) {
-           var src = str,
-               b = str.indexOf('['),
-               e = str.indexOf(']');
-       
-           if (b != -1 && e != -1) {
-               str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);
-           }
-       
-           var m = re.exec(str || ''),
-               uri = {},
-               i = 14;
-       
-           while (i--) {
-               uri[parts[i]] = m[i] || '';
-           }
-       
-           if (b != -1 && e != -1) {
-               uri.source = src;
-               uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');
-               uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');
-               uri.ipv6uri = true;
-           }
-       
-           return uri;
-       };
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
-       "use strict";
-       
-       module.exports = function () {
-         return function () {};
-       };
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var debug = __webpack_require__(3)('socket.io-parser');
-       var Emitter = __webpack_require__(5);
-       var binary = __webpack_require__(6);
-       var isArray = __webpack_require__(7);
-       var isBuf = __webpack_require__(8);
-       
-       /**
-        * Protocol version.
-        *
-        * @api public
-        */
-       
-       exports.protocol = 4;
-       
-       /**
-        * Packet types.
-        *
-        * @api public
-        */
-       
-       exports.types = [
-         'CONNECT',
-         'DISCONNECT',
-         'EVENT',
-         'ACK',
-         'ERROR',
-         'BINARY_EVENT',
-         'BINARY_ACK'
-       ];
-       
-       /**
-        * Packet type `connect`.
-        *
-        * @api public
-        */
-       
-       exports.CONNECT = 0;
-       
-       /**
-        * Packet type `disconnect`.
-        *
-        * @api public
-        */
-       
-       exports.DISCONNECT = 1;
-       
-       /**
-        * Packet type `event`.
-        *
-        * @api public
-        */
-       
-       exports.EVENT = 2;
-       
-       /**
-        * Packet type `ack`.
-        *
-        * @api public
-        */
-       
-       exports.ACK = 3;
-       
-       /**
-        * Packet type `error`.
-        *
-        * @api public
-        */
-       
-       exports.ERROR = 4;
-       
-       /**
-        * Packet type 'binary event'
-        *
-        * @api public
-        */
-       
-       exports.BINARY_EVENT = 5;
-       
-       /**
-        * Packet type `binary ack`. For acks with binary arguments.
-        *
-        * @api public
-        */
-       
-       exports.BINARY_ACK = 6;
-       
-       /**
-        * Encoder constructor.
-        *
-        * @api public
-        */
-       
-       exports.Encoder = Encoder;
-       
-       /**
-        * Decoder constructor.
-        *
-        * @api public
-        */
-       
-       exports.Decoder = Decoder;
-       
-       /**
-        * A socket.io Encoder instance
-        *
-        * @api public
-        */
-       
-       function Encoder() {}
-       
-       var ERROR_PACKET = exports.ERROR + '"encode error"';
-       
-       /**
-        * Encode a packet as a single string if non-binary, or as a
-        * buffer sequence, depending on packet type.
-        *
-        * @param {Object} obj - packet object
-        * @param {Function} callback - function to handle encodings (likely engine.write)
-        * @return Calls callback with Array of encodings
-        * @api public
-        */
-       
-       Encoder.prototype.encode = function(obj, callback){
-       
-       
-         if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
-           encodeAsBinary(obj, callback);
-         } else {
-           var encoding = encodeAsString(obj);
-           callback([encoding]);
-         }
-       };
-       
-       /**
-        * Encode packet as string.
-        *
-        * @param {Object} packet
-        * @return {String} encoded
-        * @api private
-        */
-       
-       function encodeAsString(obj) {
-       
-         // first is type
-         var str = '' + obj.type;
-       
-         // attachments if we have them
-         if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
-           str += obj.attachments + '-';
-         }
-       
-         // if we have a namespace other than `/`
-         // we append it followed by a comma `,`
-         if (obj.nsp && '/' !== obj.nsp) {
-           str += obj.nsp + ',';
-         }
-       
-         // immediately followed by the id
-         if (null != obj.id) {
-           str += obj.id;
-         }
-       
-         // json data
-         if (null != obj.data) {
-           var payload = tryStringify(obj.data);
-           if (payload !== false) {
-             str += payload;
-           } else {
-             return ERROR_PACKET;
-           }
-         }
-       
-       
-         return str;
-       }
-       
-       function tryStringify(str) {
-         try {
-           return JSON.stringify(str);
-         } catch(e){
-           return false;
-         }
-       }
-       
-       /**
-        * Encode packet as 'buffer sequence' by removing blobs, and
-        * deconstructing packet into object with placeholders and
-        * a list of buffers.
-        *
-        * @param {Object} packet
-        * @return {Buffer} encoded
-        * @api private
-        */
-       
-       function encodeAsBinary(obj, callback) {
-       
-         function writeEncoding(bloblessData) {
-           var deconstruction = binary.deconstructPacket(bloblessData);
-           var pack = encodeAsString(deconstruction.packet);
-           var buffers = deconstruction.buffers;
-       
-           buffers.unshift(pack); // add packet info to beginning of data list
-           callback(buffers); // write all the buffers
-         }
-       
-         binary.removeBlobs(obj, writeEncoding);
-       }
-       
-       /**
-        * A socket.io Decoder instance
-        *
-        * @return {Object} decoder
-        * @api public
-        */
-       
-       function Decoder() {
-         this.reconstructor = null;
-       }
-       
-       /**
-        * Mix in `Emitter` with Decoder.
-        */
-       
-       Emitter(Decoder.prototype);
-       
-       /**
-        * Decodes an encoded packet string into packet JSON.
-        *
-        * @param {String} obj - encoded packet
-        * @return {Object} packet
-        * @api public
-        */
-       
-       Decoder.prototype.add = function(obj) {
-         var packet;
-         if (typeof obj === 'string') {
-           packet = decodeString(obj);
-           if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json
-             this.reconstructor = new BinaryReconstructor(packet);
-       
-             // no attachments, labeled binary but no binary data to follow
-             if (this.reconstructor.reconPack.attachments === 0) {
-               this.emit('decoded', packet);
-             }
-           } else { // non-binary full packet
-             this.emit('decoded', packet);
-           }
-         } else if (isBuf(obj) || obj.base64) { // raw binary data
-           if (!this.reconstructor) {
-             throw new Error('got binary data when not reconstructing a packet');
-           } else {
-             packet = this.reconstructor.takeBinaryData(obj);
-             if (packet) { // received final buffer
-               this.reconstructor = null;
-               this.emit('decoded', packet);
-             }
-           }
-         } else {
-           throw new Error('Unknown type: ' + obj);
-         }
-       };
-       
-       /**
-        * Decode a packet String (JSON data)
-        *
-        * @param {String} str
-        * @return {Object} packet
-        * @api private
-        */
-       
-       function decodeString(str) {
-         var i = 0;
-         // look up type
-         var p = {
-           type: Number(str.charAt(0))
-         };
-       
-         if (null == exports.types[p.type]) {
-           return error('unknown packet type ' + p.type);
-         }
-       
-         // look up attachments if type binary
-         if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {
-           var buf = '';
-           while (str.charAt(++i) !== '-') {
-             buf += str.charAt(i);
-             if (i == str.length) break;
-           }
-           if (buf != Number(buf) || str.charAt(i) !== '-') {
-             throw new Error('Illegal attachments');
-           }
-           p.attachments = Number(buf);
-         }
-       
-         // look up namespace (if any)
-         if ('/' === str.charAt(i + 1)) {
-           p.nsp = '';
-           while (++i) {
-             var c = str.charAt(i);
-             if (',' === c) break;
-             p.nsp += c;
-             if (i === str.length) break;
-           }
-         } else {
-           p.nsp = '/';
-         }
-       
-         // look up id
-         var next = str.charAt(i + 1);
-         if ('' !== next && Number(next) == next) {
-           p.id = '';
-           while (++i) {
-             var c = str.charAt(i);
-             if (null == c || Number(c) != c) {
-               --i;
-               break;
-             }
-             p.id += str.charAt(i);
-             if (i === str.length) break;
-           }
-           p.id = Number(p.id);
-         }
-       
-         // look up json data
-         if (str.charAt(++i)) {
-           var payload = tryParse(str.substr(i));
-           var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));
-           if (isPayloadValid) {
-             p.data = payload;
-           } else {
-             return error('invalid payload');
-           }
-         }
-       
-       
-         return p;
-       }
-       
-       function tryParse(str) {
-         try {
-           return JSON.parse(str);
-         } catch(e){
-           return false;
-         }
-       }
-       
-       /**
-        * Deallocates a parser's resources
-        *
-        * @api public
-        */
-       
-       Decoder.prototype.destroy = function() {
-         if (this.reconstructor) {
-           this.reconstructor.finishedReconstruction();
-         }
-       };
-       
-       /**
-        * A manager of a binary event's 'buffer sequence'. Should
-        * be constructed whenever a packet of type BINARY_EVENT is
-        * decoded.
-        *
-        * @param {Object} packet
-        * @return {BinaryReconstructor} initialized reconstructor
-        * @api private
-        */
-       
-       function BinaryReconstructor(packet) {
-         this.reconPack = packet;
-         this.buffers = [];
-       }
-       
-       /**
-        * Method to be called when binary data received from connection
-        * after a BINARY_EVENT packet.
-        *
-        * @param {Buffer | ArrayBuffer} binData - the raw binary data received
-        * @return {null | Object} returns null if more binary data is expected or
-        *   a reconstructed packet object if all buffers have been received.
-        * @api private
-        */
-       
-       BinaryReconstructor.prototype.takeBinaryData = function(binData) {
-         this.buffers.push(binData);
-         if (this.buffers.length === this.reconPack.attachments) { // done with buffer list
-           var packet = binary.reconstructPacket(this.reconPack, this.buffers);
-           this.finishedReconstruction();
-           return packet;
-         }
-         return null;
-       };
-       
-       /**
-        * Cleans up binary packet reconstruction variables.
-        *
-        * @api private
-        */
-       
-       BinaryReconstructor.prototype.finishedReconstruction = function() {
-         this.reconPack = null;
-         this.buffers = [];
-       };
-       
-       function error(msg) {
-         return {
-           type: exports.ERROR,
-           data: 'parser error: ' + msg
-         };
-       }
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       /**
-        * Expose `Emitter`.
-        */
-       
-       if (true) {
-         module.exports = Emitter;
-       }
-       
-       /**
-        * Initialize a new `Emitter`.
-        *
-        * @api public
-        */
-       
-       function Emitter(obj) {
-         if (obj) return mixin(obj);
-       };
-       
-       /**
-        * Mixin the emitter properties.
-        *
-        * @param {Object} obj
-        * @return {Object}
-        * @api private
-        */
-       
-       function mixin(obj) {
-         for (var key in Emitter.prototype) {
-           obj[key] = Emitter.prototype[key];
-         }
-         return obj;
-       }
-       
-       /**
-        * Listen on the given `event` with `fn`.
-        *
-        * @param {String} event
-        * @param {Function} fn
-        * @return {Emitter}
-        * @api public
-        */
-       
-       Emitter.prototype.on =
-       Emitter.prototype.addEventListener = function(event, fn){
-         this._callbacks = this._callbacks || {};
-         (this._callbacks['$' + event] = this._callbacks['$' + event] || [])
-           .push(fn);
-         return this;
-       };
-       
-       /**
-        * Adds an `event` listener that will be invoked a single
-        * time then automatically removed.
-        *
-        * @param {String} event
-        * @param {Function} fn
-        * @return {Emitter}
-        * @api public
-        */
-       
-       Emitter.prototype.once = function(event, fn){
-         function on() {
-           this.off(event, on);
-           fn.apply(this, arguments);
-         }
-       
-         on.fn = fn;
-         this.on(event, on);
-         return this;
-       };
-       
-       /**
-        * Remove the given callback for `event` or all
-        * registered callbacks.
-        *
-        * @param {String} event
-        * @param {Function} fn
-        * @return {Emitter}
-        * @api public
-        */
-       
-       Emitter.prototype.off =
-       Emitter.prototype.removeListener =
-       Emitter.prototype.removeAllListeners =
-       Emitter.prototype.removeEventListener = function(event, fn){
-         this._callbacks = this._callbacks || {};
-       
-         // all
-         if (0 == arguments.length) {
-           this._callbacks = {};
-           return this;
-         }
-       
-         // specific event
-         var callbacks = this._callbacks['$' + event];
-         if (!callbacks) return this;
-       
-         // remove all handlers
-         if (1 == arguments.length) {
-           delete this._callbacks['$' + event];
-           return this;
-         }
-       
-         // remove specific handler
-         var cb;
-         for (var i = 0; i < callbacks.length; i++) {
-           cb = callbacks[i];
-           if (cb === fn || cb.fn === fn) {
-             callbacks.splice(i, 1);
-             break;
-           }
-         }
-         return this;
-       };
-       
-       /**
-        * Emit `event` with the given args.
-        *
-        * @param {String} event
-        * @param {Mixed} ...
-        * @return {Emitter}
-        */
-       
-       Emitter.prototype.emit = function(event){
-         this._callbacks = this._callbacks || {};
-         var args = [].slice.call(arguments, 1)
-           , callbacks = this._callbacks['$' + event];
-       
-         if (callbacks) {
-           callbacks = callbacks.slice(0);
-           for (var i = 0, len = callbacks.length; i < len; ++i) {
-             callbacks[i].apply(this, args);
-           }
-         }
-       
-         return this;
-       };
-       
-       /**
-        * Return array of callbacks for `event`.
-        *
-        * @param {String} event
-        * @return {Array}
-        * @api public
-        */
-       
-       Emitter.prototype.listeners = function(event){
-         this._callbacks = this._callbacks || {};
-         return this._callbacks['$' + event] || [];
-       };
-       
-       /**
-        * Check if this emitter has `event` handlers.
-        *
-        * @param {String} event
-        * @return {Boolean}
-        * @api public
-        */
-       
-       Emitter.prototype.hasListeners = function(event){
-         return !! this.listeners(event).length;
-       };
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /*global Blob,File*/
-       
-       /**
-        * Module requirements
-        */
-       
-       var isArray = __webpack_require__(7);
-       var isBuf = __webpack_require__(8);
-       var toString = Object.prototype.toString;
-       var withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');
-       var withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');
-       
-       /**
-        * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.
-        * Anything with blobs or files should be fed through removeBlobs before coming
-        * here.
-        *
-        * @param {Object} packet - socket.io event packet
-        * @return {Object} with deconstructed packet and list of buffers
-        * @api public
-        */
-       
-       exports.deconstructPacket = function(packet) {
-         var buffers = [];
-         var packetData = packet.data;
-         var pack = packet;
-         pack.data = _deconstructPacket(packetData, buffers);
-         pack.attachments = buffers.length; // number of binary 'attachments'
-         return {packet: pack, buffers: buffers};
-       };
-       
-       function _deconstructPacket(data, buffers) {
-         if (!data) return data;
-       
-         if (isBuf(data)) {
-           var placeholder = { _placeholder: true, num: buffers.length };
-           buffers.push(data);
-           return placeholder;
-         } else if (isArray(data)) {
-           var newData = new Array(data.length);
-           for (var i = 0; i < data.length; i++) {
-             newData[i] = _deconstructPacket(data[i], buffers);
-           }
-           return newData;
-         } else if (typeof data === 'object' && !(data instanceof Date)) {
-           var newData = {};
-           for (var key in data) {
-             newData[key] = _deconstructPacket(data[key], buffers);
-           }
-           return newData;
-         }
-         return data;
-       }
-       
-       /**
-        * Reconstructs a binary packet from its placeholder packet and buffers
-        *
-        * @param {Object} packet - event packet with placeholders
-        * @param {Array} buffers - binary buffers to put in placeholder positions
-        * @return {Object} reconstructed packet
-        * @api public
-        */
-       
-       exports.reconstructPacket = function(packet, buffers) {
-         packet.data = _reconstructPacket(packet.data, buffers);
-         packet.attachments = undefined; // no longer useful
-         return packet;
-       };
-       
-       function _reconstructPacket(data, buffers) {
-         if (!data) return data;
-       
-         if (data && data._placeholder) {
-           return buffers[data.num]; // appropriate buffer (should be natural order anyway)
-         } else if (isArray(data)) {
-           for (var i = 0; i < data.length; i++) {
-             data[i] = _reconstructPacket(data[i], buffers);
-           }
-         } else if (typeof data === 'object') {
-           for (var key in data) {
-             data[key] = _reconstructPacket(data[key], buffers);
-           }
-         }
-       
-         return data;
-       }
-       
-       /**
-        * Asynchronously removes Blobs or Files from data via
-        * FileReader's readAsArrayBuffer method. Used before encoding
-        * data as msgpack. Calls callback with the blobless data.
-        *
-        * @param {Object} data
-        * @param {Function} callback
-        * @api private
-        */
-       
-       exports.removeBlobs = function(data, callback) {
-         function _removeBlobs(obj, curKey, containingObject) {
-           if (!obj) return obj;
-       
-           // convert any blob
-           if ((withNativeBlob && obj instanceof Blob) ||
-               (withNativeFile && obj instanceof File)) {
-             pendingBlobs++;
-       
-             // async filereader
-             var fileReader = new FileReader();
-             fileReader.onload = function() { // this.result == arraybuffer
-               if (containingObject) {
-                 containingObject[curKey] = this.result;
-               }
-               else {
-                 bloblessData = this.result;
-               }
-       
-               // if nothing pending its callback time
-               if(! --pendingBlobs) {
-                 callback(bloblessData);
-               }
-             };
-       
-             fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer
-           } else if (isArray(obj)) { // handle array
-             for (var i = 0; i < obj.length; i++) {
-               _removeBlobs(obj[i], i, obj);
-             }
-           } else if (typeof obj === 'object' && !isBuf(obj)) { // and object
-             for (var key in obj) {
-               _removeBlobs(obj[key], key, obj);
-             }
-           }
-         }
-       
-         var pendingBlobs = 0;
-         var bloblessData = data;
-         _removeBlobs(bloblessData);
-         if (!pendingBlobs) {
-           callback(bloblessData);
-         }
-       };
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports) {
-
-       var toString = {}.toString;
-       
-       module.exports = Array.isArray || function (arr) {
-         return toString.call(arr) == '[object Array]';
-       };
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports) {
-
-       
-       module.exports = isBuf;
-       
-       var withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';
-       var withNativeArrayBuffer = typeof ArrayBuffer === 'function';
-       
-       var isView = function (obj) {
-         return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);
-       };
-       
-       /**
-        * Returns true if obj is a buffer or an arraybuffer.
-        *
-        * @api private
-        */
-       
-       function isBuf(obj) {
-         return (withNativeBuffer && Buffer.isBuffer(obj)) ||
-                 (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));
-       }
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var eio = __webpack_require__(10);
-       var Socket = __webpack_require__(33);
-       var Emitter = __webpack_require__(5);
-       var parser = __webpack_require__(4);
-       var on = __webpack_require__(35);
-       var bind = __webpack_require__(36);
-       var debug = __webpack_require__(3)('socket.io-client:manager');
-       var indexOf = __webpack_require__(32);
-       var Backoff = __webpack_require__(37);
-       
-       /**
-        * IE6+ hasOwnProperty
-        */
-       
-       var has = Object.prototype.hasOwnProperty;
-       
-       /**
-        * Module exports
-        */
-       
-       module.exports = Manager;
-       
-       /**
-        * `Manager` constructor.
-        *
-        * @param {String} engine instance or engine uri/opts
-        * @param {Object} options
-        * @api public
-        */
-       
-       function Manager(uri, opts) {
-         if (!(this instanceof Manager)) return new Manager(uri, opts);
-         if (uri && 'object' === (typeof uri === 'undefined' ? 'undefined' : _typeof(uri))) {
-           opts = uri;
-           uri = undefined;
-         }
-         opts = opts || {};
-       
-         opts.path = opts.path || '/socket.io';
-         this.nsps = {};
-         this.subs = [];
-         this.opts = opts;
-         this.reconnection(opts.reconnection !== false);
-         this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);
-         this.reconnectionDelay(opts.reconnectionDelay || 1000);
-         this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);
-         this.randomizationFactor(opts.randomizationFactor || 0.5);
-         this.backoff = new Backoff({
-           min: this.reconnectionDelay(),
-           max: this.reconnectionDelayMax(),
-           jitter: this.randomizationFactor()
-         });
-         this.timeout(null == opts.timeout ? 20000 : opts.timeout);
-         this.readyState = 'closed';
-         this.uri = uri;
-         this.connecting = [];
-         this.lastPing = null;
-         this.encoding = false;
-         this.packetBuffer = [];
-         var _parser = opts.parser || parser;
-         this.encoder = new _parser.Encoder();
-         this.decoder = new _parser.Decoder();
-         this.autoConnect = opts.autoConnect !== false;
-         if (this.autoConnect) this.open();
-       }
-       
-       /**
-        * Propagate given event to sockets and emit on `this`
-        *
-        * @api private
-        */
-       
-       Manager.prototype.emitAll = function () {
-         this.emit.apply(this, arguments);
-         for (var nsp in this.nsps) {
-           if (has.call(this.nsps, nsp)) {
-             this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);
-           }
-         }
-       };
-       
-       /**
-        * Update `socket.id` of all sockets
-        *
-        * @api private
-        */
-       
-       Manager.prototype.updateSocketIds = function () {
-         for (var nsp in this.nsps) {
-           if (has.call(this.nsps, nsp)) {
-             this.nsps[nsp].id = this.generateId(nsp);
-           }
-         }
-       };
-       
-       /**
-        * generate `socket.id` for the given `nsp`
-        *
-        * @param {String} nsp
-        * @return {String}
-        * @api private
-        */
-       
-       Manager.prototype.generateId = function (nsp) {
-         return (nsp === '/' ? '' : nsp + '#') + this.engine.id;
-       };
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Manager.prototype);
-       
-       /**
-        * Sets the `reconnection` config.
-        *
-        * @param {Boolean} true/false if it should automatically reconnect
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.reconnection = function (v) {
-         if (!arguments.length) return this._reconnection;
-         this._reconnection = !!v;
-         return this;
-       };
-       
-       /**
-        * Sets the reconnection attempts config.
-        *
-        * @param {Number} max reconnection attempts before giving up
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.reconnectionAttempts = function (v) {
-         if (!arguments.length) return this._reconnectionAttempts;
-         this._reconnectionAttempts = v;
-         return this;
-       };
-       
-       /**
-        * Sets the delay between reconnections.
-        *
-        * @param {Number} delay
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.reconnectionDelay = function (v) {
-         if (!arguments.length) return this._reconnectionDelay;
-         this._reconnectionDelay = v;
-         this.backoff && this.backoff.setMin(v);
-         return this;
-       };
-       
-       Manager.prototype.randomizationFactor = function (v) {
-         if (!arguments.length) return this._randomizationFactor;
-         this._randomizationFactor = v;
-         this.backoff && this.backoff.setJitter(v);
-         return this;
-       };
-       
-       /**
-        * Sets the maximum delay between reconnections.
-        *
-        * @param {Number} delay
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.reconnectionDelayMax = function (v) {
-         if (!arguments.length) return this._reconnectionDelayMax;
-         this._reconnectionDelayMax = v;
-         this.backoff && this.backoff.setMax(v);
-         return this;
-       };
-       
-       /**
-        * Sets the connection timeout. `false` to disable
-        *
-        * @return {Manager} self or value
-        * @api public
-        */
-       
-       Manager.prototype.timeout = function (v) {
-         if (!arguments.length) return this._timeout;
-         this._timeout = v;
-         return this;
-       };
-       
-       /**
-        * Starts trying to reconnect if reconnection is enabled and we have not
-        * started reconnecting yet
-        *
-        * @api private
-        */
-       
-       Manager.prototype.maybeReconnectOnOpen = function () {
-         // Only try to reconnect if it's the first time we're connecting
-         if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {
-           // keeps reconnection from firing twice for the same reconnection loop
-           this.reconnect();
-         }
-       };
-       
-       /**
-        * Sets the current transport `socket`.
-        *
-        * @param {Function} optional, callback
-        * @return {Manager} self
-        * @api public
-        */
-       
-       Manager.prototype.open = Manager.prototype.connect = function (fn, opts) {
-       
-         if (~this.readyState.indexOf('open')) return this;
-       
-         this.engine = eio(this.uri, this.opts);
-         var socket = this.engine;
-         var self = this;
-         this.readyState = 'opening';
-         this.skipReconnect = false;
-       
-         // emit `open`
-         var openSub = on(socket, 'open', function () {
-           self.onopen();
-           fn && fn();
-         });
-       
-         // emit `connect_error`
-         var errorSub = on(socket, 'error', function (data) {
-       
-           self.cleanup();
-           self.readyState = 'closed';
-           self.emitAll('connect_error', data);
-           if (fn) {
-             var err = new Error('Connection error');
-             err.data = data;
-             fn(err);
-           } else {
-             // Only do this if there is no fn to handle the error
-             self.maybeReconnectOnOpen();
-           }
-         });
-       
-         // emit `connect_timeout`
-         if (false !== this._timeout) {
-           var timeout = this._timeout;
-       
-           // set timer
-           var timer = setTimeout(function () {
-       
-             openSub.destroy();
-             socket.close();
-             socket.emit('error', 'timeout');
-             self.emitAll('connect_timeout', timeout);
-           }, timeout);
-       
-           this.subs.push({
-             destroy: function destroy() {
-               clearTimeout(timer);
-             }
-           });
-         }
-       
-         this.subs.push(openSub);
-         this.subs.push(errorSub);
-       
-         return this;
-       };
-       
-       /**
-        * Called upon transport open.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onopen = function () {
-       
-         // clear old subs
-         this.cleanup();
-       
-         // mark as open
-         this.readyState = 'open';
-         this.emit('open');
-       
-         // add new subs
-         var socket = this.engine;
-         this.subs.push(on(socket, 'data', bind(this, 'ondata')));
-         this.subs.push(on(socket, 'ping', bind(this, 'onping')));
-         this.subs.push(on(socket, 'pong', bind(this, 'onpong')));
-         this.subs.push(on(socket, 'error', bind(this, 'onerror')));
-         this.subs.push(on(socket, 'close', bind(this, 'onclose')));
-         this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));
-       };
-       
-       /**
-        * Called upon a ping.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onping = function () {
-         this.lastPing = new Date();
-         this.emitAll('ping');
-       };
-       
-       /**
-        * Called upon a packet.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onpong = function () {
-         this.emitAll('pong', new Date() - this.lastPing);
-       };
-       
-       /**
-        * Called with data.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.ondata = function (data) {
-         this.decoder.add(data);
-       };
-       
-       /**
-        * Called when parser fully decodes a packet.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.ondecoded = function (packet) {
-         this.emit('packet', packet);
-       };
-       
-       /**
-        * Called upon socket error.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onerror = function (err) {
-       
-         this.emitAll('error', err);
-       };
-       
-       /**
-        * Creates a new socket for the given `nsp`.
-        *
-        * @return {Socket}
-        * @api public
-        */
-       
-       Manager.prototype.socket = function (nsp, opts) {
-         var socket = this.nsps[nsp];
-         if (!socket) {
-           socket = new Socket(this, nsp, opts);
-           this.nsps[nsp] = socket;
-           var self = this;
-           socket.on('connecting', onConnecting);
-           socket.on('connect', function () {
-             socket.id = self.generateId(nsp);
-           });
-       
-           if (this.autoConnect) {
-             // manually call here since connecting event is fired before listening
-             onConnecting();
-           }
-         }
-       
-         function onConnecting() {
-           if (!~indexOf(self.connecting, socket)) {
-             self.connecting.push(socket);
-           }
-         }
-       
-         return socket;
-       };
-       
-       /**
-        * Called upon a socket close.
-        *
-        * @param {Socket} socket
-        */
-       
-       Manager.prototype.destroy = function (socket) {
-         var index = indexOf(this.connecting, socket);
-         if (~index) this.connecting.splice(index, 1);
-         if (this.connecting.length) return;
-       
-         this.close();
-       };
-       
-       /**
-        * Writes a packet.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Manager.prototype.packet = function (packet) {
-       
-         var self = this;
-         if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;
-       
-         if (!self.encoding) {
-           // encode, then write to engine with result
-           self.encoding = true;
-           this.encoder.encode(packet, function (encodedPackets) {
-             for (var i = 0; i < encodedPackets.length; i++) {
-               self.engine.write(encodedPackets[i], packet.options);
-             }
-             self.encoding = false;
-             self.processPacketQueue();
-           });
-         } else {
-           // add packet to the queue
-           self.packetBuffer.push(packet);
-         }
-       };
-       
-       /**
-        * If packet buffer is non-empty, begins encoding the
-        * next packet in line.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.processPacketQueue = function () {
-         if (this.packetBuffer.length > 0 && !this.encoding) {
-           var pack = this.packetBuffer.shift();
-           this.packet(pack);
-         }
-       };
-       
-       /**
-        * Clean up transport subscriptions and packet buffer.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.cleanup = function () {
-       
-         var subsLength = this.subs.length;
-         for (var i = 0; i < subsLength; i++) {
-           var sub = this.subs.shift();
-           sub.destroy();
-         }
-       
-         this.packetBuffer = [];
-         this.encoding = false;
-         this.lastPing = null;
-       
-         this.decoder.destroy();
-       };
-       
-       /**
-        * Close the current socket.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.close = Manager.prototype.disconnect = function () {
-       
-         this.skipReconnect = true;
-         this.reconnecting = false;
-         if ('opening' === this.readyState) {
-           // `onclose` will not fire because
-           // an open event never happened
-           this.cleanup();
-         }
-         this.backoff.reset();
-         this.readyState = 'closed';
-         if (this.engine) this.engine.close();
-       };
-       
-       /**
-        * Called upon engine close.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onclose = function (reason) {
-       
-         this.cleanup();
-         this.backoff.reset();
-         this.readyState = 'closed';
-         this.emit('close', reason);
-       
-         if (this._reconnection && !this.skipReconnect) {
-           this.reconnect();
-         }
-       };
-       
-       /**
-        * Attempt a reconnection.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.reconnect = function () {
-         if (this.reconnecting || this.skipReconnect) return this;
-       
-         var self = this;
-       
-         if (this.backoff.attempts >= this._reconnectionAttempts) {
-       
-           this.backoff.reset();
-           this.emitAll('reconnect_failed');
-           this.reconnecting = false;
-         } else {
-           var delay = this.backoff.duration();
-       
-           this.reconnecting = true;
-           var timer = setTimeout(function () {
-             if (self.skipReconnect) return;
-       
-             self.emitAll('reconnect_attempt', self.backoff.attempts);
-             self.emitAll('reconnecting', self.backoff.attempts);
-       
-             // check again for the case socket closed in above events
-             if (self.skipReconnect) return;
-       
-             self.open(function (err) {
-               if (err) {
-       
-                 self.reconnecting = false;
-                 self.reconnect();
-                 self.emitAll('reconnect_error', err.data);
-               } else {
-       
-                 self.onreconnect();
-               }
-             });
-           }, delay);
-       
-           this.subs.push({
-             destroy: function destroy() {
-               clearTimeout(timer);
-             }
-           });
-         }
-       };
-       
-       /**
-        * Called upon successful reconnect.
-        *
-        * @api private
-        */
-       
-       Manager.prototype.onreconnect = function () {
-         var attempt = this.backoff.attempts;
-         this.reconnecting = false;
-         this.backoff.reset();
-         this.updateSocketIds();
-         this.emitAll('reconnect', attempt);
-       };
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       
-       module.exports = __webpack_require__(11);
-       
-       /**
-        * Exports parser
-        *
-        * @api public
-        *
-        */
-       module.exports.parser = __webpack_require__(18);
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var transports = __webpack_require__(12);
-       var Emitter = __webpack_require__(5);
-       var debug = __webpack_require__(3)('engine.io-client:socket');
-       var index = __webpack_require__(32);
-       var parser = __webpack_require__(18);
-       var parseuri = __webpack_require__(2);
-       var parseqs = __webpack_require__(26);
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = Socket;
-       
-       /**
-        * Socket constructor.
-        *
-        * @param {String|Object} uri or options
-        * @param {Object} options
-        * @api public
-        */
-       
-       function Socket (uri, opts) {
-         if (!(this instanceof Socket)) return new Socket(uri, opts);
-       
-         opts = opts || {};
-       
-         if (uri && 'object' === typeof uri) {
-           opts = uri;
-           uri = null;
-         }
-       
-         if (uri) {
-           uri = parseuri(uri);
-           opts.hostname = uri.host;
-           opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';
-           opts.port = uri.port;
-           if (uri.query) opts.query = uri.query;
-         } else if (opts.host) {
-           opts.hostname = parseuri(opts.host).host;
-         }
-       
-         this.secure = null != opts.secure ? opts.secure
-           : (typeof location !== 'undefined' && 'https:' === location.protocol);
-       
-         if (opts.hostname && !opts.port) {
-           // if no port is specified manually, use the protocol default
-           opts.port = this.secure ? '443' : '80';
-         }
-       
-         this.agent = opts.agent || false;
-         this.hostname = opts.hostname ||
-           (typeof location !== 'undefined' ? location.hostname : 'localhost');
-         this.port = opts.port || (typeof location !== 'undefined' && location.port
-             ? location.port
-             : (this.secure ? 443 : 80));
-         this.query = opts.query || {};
-         if ('string' === typeof this.query) this.query = parseqs.decode(this.query);
-         this.upgrade = false !== opts.upgrade;
-         this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
-         this.forceJSONP = !!opts.forceJSONP;
-         this.jsonp = false !== opts.jsonp;
-         this.forceBase64 = !!opts.forceBase64;
-         this.enablesXDR = !!opts.enablesXDR;
-         this.withCredentials = false !== opts.withCredentials;
-         this.timestampParam = opts.timestampParam || 't';
-         this.timestampRequests = opts.timestampRequests;
-         this.transports = opts.transports || ['polling', 'websocket'];
-         this.transportOptions = opts.transportOptions || {};
-         this.readyState = '';
-         this.writeBuffer = [];
-         this.prevBufferLen = 0;
-         this.policyPort = opts.policyPort || 843;
-         this.rememberUpgrade = opts.rememberUpgrade || false;
-         this.binaryType = null;
-         this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
-         this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;
-       
-         if (true === this.perMessageDeflate) this.perMessageDeflate = {};
-         if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {
-           this.perMessageDeflate.threshold = 1024;
-         }
-       
-         // SSL options for Node.js client
-         this.pfx = opts.pfx || null;
-         this.key = opts.key || null;
-         this.passphrase = opts.passphrase || null;
-         this.cert = opts.cert || null;
-         this.ca = opts.ca || null;
-         this.ciphers = opts.ciphers || null;
-         this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;
-         this.forceNode = !!opts.forceNode;
-       
-         // detect ReactNative environment
-         this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');
-       
-         // other options for Node.js or ReactNative client
-         if (typeof self === 'undefined' || this.isReactNative) {
-           if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {
-             this.extraHeaders = opts.extraHeaders;
-           }
-       
-           if (opts.localAddress) {
-             this.localAddress = opts.localAddress;
-           }
-         }
-       
-         // set on handshake
-         this.id = null;
-         this.upgrades = null;
-         this.pingInterval = null;
-         this.pingTimeout = null;
-       
-         // set on heartbeat
-         this.pingIntervalTimer = null;
-         this.pingTimeoutTimer = null;
-       
-         this.open();
-       }
-       
-       Socket.priorWebsocketSuccess = false;
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Socket.prototype);
-       
-       /**
-        * Protocol version.
-        *
-        * @api public
-        */
-       
-       Socket.protocol = parser.protocol; // this is an int
-       
-       /**
-        * Expose deps for legacy compatibility
-        * and standalone browser access.
-        */
-       
-       Socket.Socket = Socket;
-       Socket.Transport = __webpack_require__(17);
-       Socket.transports = __webpack_require__(12);
-       Socket.parser = __webpack_require__(18);
-       
-       /**
-        * Creates transport of the given type.
-        *
-        * @param {String} transport name
-        * @return {Transport}
-        * @api private
-        */
-       
-       Socket.prototype.createTransport = function (name) {
-       
-         var query = clone(this.query);
-       
-         // append engine.io protocol identifier
-         query.EIO = parser.protocol;
-       
-         // transport name
-         query.transport = name;
-       
-         // per-transport options
-         var options = this.transportOptions[name] || {};
-       
-         // session id if we already have one
-         if (this.id) query.sid = this.id;
-       
-         var transport = new transports[name]({
-           query: query,
-           socket: this,
-           agent: options.agent || this.agent,
-           hostname: options.hostname || this.hostname,
-           port: options.port || this.port,
-           secure: options.secure || this.secure,
-           path: options.path || this.path,
-           forceJSONP: options.forceJSONP || this.forceJSONP,
-           jsonp: options.jsonp || this.jsonp,
-           forceBase64: options.forceBase64 || this.forceBase64,
-           enablesXDR: options.enablesXDR || this.enablesXDR,
-           withCredentials: options.withCredentials || this.withCredentials,
-           timestampRequests: options.timestampRequests || this.timestampRequests,
-           timestampParam: options.timestampParam || this.timestampParam,
-           policyPort: options.policyPort || this.policyPort,
-           pfx: options.pfx || this.pfx,
-           key: options.key || this.key,
-           passphrase: options.passphrase || this.passphrase,
-           cert: options.cert || this.cert,
-           ca: options.ca || this.ca,
-           ciphers: options.ciphers || this.ciphers,
-           rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,
-           perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,
-           extraHeaders: options.extraHeaders || this.extraHeaders,
-           forceNode: options.forceNode || this.forceNode,
-           localAddress: options.localAddress || this.localAddress,
-           requestTimeout: options.requestTimeout || this.requestTimeout,
-           protocols: options.protocols || void (0),
-           isReactNative: this.isReactNative
-         });
-       
-         return transport;
-       };
-       
-       function clone (obj) {
-         var o = {};
-         for (var i in obj) {
-           if (obj.hasOwnProperty(i)) {
-             o[i] = obj[i];
-           }
-         }
-         return o;
-       }
-       
-       /**
-        * Initializes transport to use and starts probe.
-        *
-        * @api private
-        */
-       Socket.prototype.open = function () {
-         var transport;
-         if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {
-           transport = 'websocket';
-         } else if (0 === this.transports.length) {
-           // Emit error on next tick so it can be listened to
-           var self = this;
-           setTimeout(function () {
-             self.emit('error', 'No transports available');
-           }, 0);
-           return;
-         } else {
-           transport = this.transports[0];
-         }
-         this.readyState = 'opening';
-       
-         // Retry with the next transport if the transport is disabled (jsonp: false)
-         try {
-           transport = this.createTransport(transport);
-         } catch (e) {
-           this.transports.shift();
-           this.open();
-           return;
-         }
-       
-         transport.open();
-         this.setTransport(transport);
-       };
-       
-       /**
-        * Sets the current transport. Disables the existing one (if any).
-        *
-        * @api private
-        */
-       
-       Socket.prototype.setTransport = function (transport) {
-       
-         var self = this;
-       
-         if (this.transport) {
-       
-           this.transport.removeAllListeners();
-         }
-       
-         // set up transport
-         this.transport = transport;
-       
-         // set up transport listeners
-         transport
-         .on('drain', function () {
-           self.onDrain();
-         })
-         .on('packet', function (packet) {
-           self.onPacket(packet);
-         })
-         .on('error', function (e) {
-           self.onError(e);
-         })
-         .on('close', function () {
-           self.onClose('transport close');
-         });
-       };
-       
-       /**
-        * Probes a transport.
-        *
-        * @param {String} transport name
-        * @api private
-        */
-       
-       Socket.prototype.probe = function (name) {
-       
-         var transport = this.createTransport(name, { probe: 1 });
-         var failed = false;
-         var self = this;
-       
-         Socket.priorWebsocketSuccess = false;
-       
-         function onTransportOpen () {
-           if (self.onlyBinaryUpgrades) {
-             var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
-             failed = failed || upgradeLosesBinary;
-           }
-           if (failed) return;
-       
-       
-           transport.send([{ type: 'ping', data: 'probe' }]);
-           transport.once('packet', function (msg) {
-             if (failed) return;
-             if ('pong' === msg.type && 'probe' === msg.data) {
-       
-               self.upgrading = true;
-               self.emit('upgrading', transport);
-               if (!transport) return;
-               Socket.priorWebsocketSuccess = 'websocket' === transport.name;
-       
-       
-               self.transport.pause(function () {
-                 if (failed) return;
-                 if ('closed' === self.readyState) return;
-       
-       
-                 cleanup();
-       
-                 self.setTransport(transport);
-                 transport.send([{ type: 'upgrade' }]);
-                 self.emit('upgrade', transport);
-                 transport = null;
-                 self.upgrading = false;
-                 self.flush();
-               });
-             } else {
-       
-               var err = new Error('probe error');
-               err.transport = transport.name;
-               self.emit('upgradeError', err);
-             }
-           });
-         }
-       
-         function freezeTransport () {
-           if (failed) return;
-       
-           // Any callback called by transport should be ignored since now
-           failed = true;
-       
-           cleanup();
-       
-           transport.close();
-           transport = null;
-         }
-       
-         // Handle any error that happens while probing
-         function onerror (err) {
-           var error = new Error('probe error: ' + err);
-           error.transport = transport.name;
-       
-           freezeTransport();
-       
-       
-       
-           self.emit('upgradeError', error);
-         }
-       
-         function onTransportClose () {
-           onerror('transport closed');
-         }
-       
-         // When the socket is closed while we're probing
-         function onclose () {
-           onerror('socket closed');
-         }
-       
-         // When the socket is upgraded while we're probing
-         function onupgrade (to) {
-           if (transport && to.name !== transport.name) {
-       
-             freezeTransport();
-           }
-         }
-       
-         // Remove all listeners on the transport and on self
-         function cleanup () {
-           transport.removeListener('open', onTransportOpen);
-           transport.removeListener('error', onerror);
-           transport.removeListener('close', onTransportClose);
-           self.removeListener('close', onclose);
-           self.removeListener('upgrading', onupgrade);
-         }
-       
-         transport.once('open', onTransportOpen);
-         transport.once('error', onerror);
-         transport.once('close', onTransportClose);
-       
-         this.once('close', onclose);
-         this.once('upgrading', onupgrade);
-       
-         transport.open();
-       };
-       
-       /**
-        * Called when connection is deemed open.
-        *
-        * @api public
-        */
-       
-       Socket.prototype.onOpen = function () {
-       
-         this.readyState = 'open';
-         Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;
-         this.emit('open');
-         this.flush();
-       
-         // we check for `readyState` in case an `open`
-         // listener already closed the socket
-         if ('open' === this.readyState && this.upgrade && this.transport.pause) {
-       
-           for (var i = 0, l = this.upgrades.length; i < l; i++) {
-             this.probe(this.upgrades[i]);
-           }
-         }
-       };
-       
-       /**
-        * Handles a packet.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onPacket = function (packet) {
-         if ('opening' === this.readyState || 'open' === this.readyState ||
-             'closing' === this.readyState) {
-       
-       
-           this.emit('packet', packet);
-       
-           // Socket is live - any packet counts
-           this.emit('heartbeat');
-       
-           switch (packet.type) {
-             case 'open':
-               this.onHandshake(JSON.parse(packet.data));
-               break;
-       
-             case 'pong':
-               this.setPing();
-               this.emit('pong');
-               break;
-       
-             case 'error':
-               var err = new Error('server error');
-               err.code = packet.data;
-               this.onError(err);
-               break;
-       
-             case 'message':
-               this.emit('data', packet.data);
-               this.emit('message', packet.data);
-               break;
-           }
-         } else {
-       
-         }
-       };
-       
-       /**
-        * Called upon handshake completion.
-        *
-        * @param {Object} handshake obj
-        * @api private
-        */
-       
-       Socket.prototype.onHandshake = function (data) {
-         this.emit('handshake', data);
-         this.id = data.sid;
-         this.transport.query.sid = data.sid;
-         this.upgrades = this.filterUpgrades(data.upgrades);
-         this.pingInterval = data.pingInterval;
-         this.pingTimeout = data.pingTimeout;
-         this.onOpen();
-         // In case open handler closes socket
-         if ('closed' === this.readyState) return;
-         this.setPing();
-       
-         // Prolong liveness of socket on heartbeat
-         this.removeListener('heartbeat', this.onHeartbeat);
-         this.on('heartbeat', this.onHeartbeat);
-       };
-       
-       /**
-        * Resets ping timeout.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onHeartbeat = function (timeout) {
-         clearTimeout(this.pingTimeoutTimer);
-         var self = this;
-         self.pingTimeoutTimer = setTimeout(function () {
-           if ('closed' === self.readyState) return;
-           self.onClose('ping timeout');
-         }, timeout || (self.pingInterval + self.pingTimeout));
-       };
-       
-       /**
-        * Pings server every `this.pingInterval` and expects response
-        * within `this.pingTimeout` or closes connection.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.setPing = function () {
-         var self = this;
-         clearTimeout(self.pingIntervalTimer);
-         self.pingIntervalTimer = setTimeout(function () {
-       
-           self.ping();
-           self.onHeartbeat(self.pingTimeout);
-         }, self.pingInterval);
-       };
-       
-       /**
-       * Sends a ping packet.
-       *
-       * @api private
-       */
-       
-       Socket.prototype.ping = function () {
-         var self = this;
-         this.sendPacket('ping', function () {
-           self.emit('ping');
-         });
-       };
-       
-       /**
-        * Called on `drain` event
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onDrain = function () {
-         this.writeBuffer.splice(0, this.prevBufferLen);
-       
-         // setting prevBufferLen = 0 is very important
-         // for example, when upgrading, upgrade packet is sent over,
-         // and a nonzero prevBufferLen could cause problems on `drain`
-         this.prevBufferLen = 0;
-       
-         if (0 === this.writeBuffer.length) {
-           this.emit('drain');
-         } else {
-           this.flush();
-         }
-       };
-       
-       /**
-        * Flush write buffers.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.flush = function () {
-         if ('closed' !== this.readyState && this.transport.writable &&
-           !this.upgrading && this.writeBuffer.length) {
-       
-           this.transport.send(this.writeBuffer);
-           // keep track of current length of writeBuffer
-           // splice writeBuffer and callbackBuffer on `drain`
-           this.prevBufferLen = this.writeBuffer.length;
-           this.emit('flush');
-         }
-       };
-       
-       /**
-        * Sends a message.
-        *
-        * @param {String} message.
-        * @param {Function} callback function.
-        * @param {Object} options.
-        * @return {Socket} for chaining.
-        * @api public
-        */
-       
-       Socket.prototype.write =
-       Socket.prototype.send = function (msg, options, fn) {
-         this.sendPacket('message', msg, options, fn);
-         return this;
-       };
-       
-       /**
-        * Sends a packet.
-        *
-        * @param {String} packet type.
-        * @param {String} data.
-        * @param {Object} options.
-        * @param {Function} callback function.
-        * @api private
-        */
-       
-       Socket.prototype.sendPacket = function (type, data, options, fn) {
-         if ('function' === typeof data) {
-           fn = data;
-           data = undefined;
-         }
-       
-         if ('function' === typeof options) {
-           fn = options;
-           options = null;
-         }
-       
-         if ('closing' === this.readyState || 'closed' === this.readyState) {
-           return;
-         }
-       
-         options = options || {};
-         options.compress = false !== options.compress;
-       
-         var packet = {
-           type: type,
-           data: data,
-           options: options
-         };
-         this.emit('packetCreate', packet);
-         this.writeBuffer.push(packet);
-         if (fn) this.once('flush', fn);
-         this.flush();
-       };
-       
-       /**
-        * Closes the connection.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.close = function () {
-         if ('opening' === this.readyState || 'open' === this.readyState) {
-           this.readyState = 'closing';
-       
-           var self = this;
-       
-           if (this.writeBuffer.length) {
-             this.once('drain', function () {
-               if (this.upgrading) {
-                 waitForUpgrade();
-               } else {
-                 close();
-               }
-             });
-           } else if (this.upgrading) {
-             waitForUpgrade();
-           } else {
-             close();
-           }
-         }
-       
-         function close () {
-           self.onClose('forced close');
-       
-           self.transport.close();
-         }
-       
-         function cleanupAndClose () {
-           self.removeListener('upgrade', cleanupAndClose);
-           self.removeListener('upgradeError', cleanupAndClose);
-           close();
-         }
-       
-         function waitForUpgrade () {
-           // wait for upgrade to finish since we can't send packets while pausing a transport
-           self.once('upgrade', cleanupAndClose);
-           self.once('upgradeError', cleanupAndClose);
-         }
-       
-         return this;
-       };
-       
-       /**
-        * Called upon transport error
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onError = function (err) {
-       
-         Socket.priorWebsocketSuccess = false;
-         this.emit('error', err);
-         this.onClose('transport error', err);
-       };
-       
-       /**
-        * Called upon transport close.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onClose = function (reason, desc) {
-         if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {
-       
-           var self = this;
-       
-           // clear timers
-           clearTimeout(this.pingIntervalTimer);
-           clearTimeout(this.pingTimeoutTimer);
-       
-           // stop event from firing again for transport
-           this.transport.removeAllListeners('close');
-       
-           // ensure transport won't stay open
-           this.transport.close();
-       
-           // ignore further transport communication
-           this.transport.removeAllListeners();
-       
-           // set ready state
-           this.readyState = 'closed';
-       
-           // clear session id
-           this.id = null;
-       
-           // emit close event
-           this.emit('close', reason, desc);
-       
-           // clean buffers after, so users can still
-           // grab the buffers on `close` event
-           self.writeBuffer = [];
-           self.prevBufferLen = 0;
-         }
-       };
-       
-       /**
-        * Filters upgrades, returning only those matching client transports.
-        *
-        * @param {Array} server upgrades
-        * @api private
-        *
-        */
-       
-       Socket.prototype.filterUpgrades = function (upgrades) {
-         var filteredUpgrades = [];
-         for (var i = 0, j = upgrades.length; i < j; i++) {
-           if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
-         }
-         return filteredUpgrades;
-       };
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies
-        */
-       
-       var XMLHttpRequest = __webpack_require__(13);
-       var XHR = __webpack_require__(15);
-       var JSONP = __webpack_require__(29);
-       var websocket = __webpack_require__(30);
-       
-       /**
-        * Export transports.
-        */
-       
-       exports.polling = polling;
-       exports.websocket = websocket;
-       
-       /**
-        * Polling transport polymorphic constructor.
-        * Decides on xhr vs jsonp based on feature detection.
-        *
-        * @api private
-        */
-       
-       function polling (opts) {
-         var xhr;
-         var xd = false;
-         var xs = false;
-         var jsonp = false !== opts.jsonp;
-       
-         if (typeof location !== 'undefined') {
-           var isSSL = 'https:' === location.protocol;
-           var port = location.port;
-       
-           // some user agents have empty `location.port`
-           if (!port) {
-             port = isSSL ? 443 : 80;
-           }
-       
-           xd = opts.hostname !== location.hostname || port !== opts.port;
-           xs = opts.secure !== isSSL;
-         }
-       
-         opts.xdomain = xd;
-         opts.xscheme = xs;
-         xhr = new XMLHttpRequest(opts);
-       
-         if ('open' in xhr && !opts.forceJSONP) {
-           return new XHR(opts);
-         } else {
-           if (!jsonp) throw new Error('JSONP disabled');
-           return new JSONP(opts);
-         }
-       }
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       // browser shim for xmlhttprequest module
-       
-       var hasCORS = __webpack_require__(14);
-       
-       module.exports = function (opts) {
-         var xdomain = opts.xdomain;
-       
-         // scheme must be same when usign XDomainRequest
-         // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
-         var xscheme = opts.xscheme;
-       
-         // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.
-         // https://github.com/Automattic/engine.io-client/pull/217
-         var enablesXDR = opts.enablesXDR;
-       
-         // XMLHttpRequest can be disabled on IE
-         try {
-           if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {
-             return new XMLHttpRequest();
-           }
-         } catch (e) { }
-       
-         // Use XDomainRequest for IE8 if enablesXDR is true
-         // because loading bar keeps flashing when using jsonp-polling
-         // https://github.com/yujiosaka/socke.io-ie8-loading-example
-         try {
-           if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {
-             return new XDomainRequest();
-           }
-         } catch (e) { }
-       
-         if (!xdomain) {
-           try {
-             return new self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
-           } catch (e) { }
-         }
-       };
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports) {
-
-       
-       /**
-        * Module exports.
-        *
-        * Logic borrowed from Modernizr:
-        *
-        *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js
-        */
-       
-       try {
-         module.exports = typeof XMLHttpRequest !== 'undefined' &&
-           'withCredentials' in new XMLHttpRequest();
-       } catch (err) {
-         // if XMLHttp support is disabled in IE then it will throw
-         // when trying to create
-         module.exports = false;
-       }
-
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /* global attachEvent */
-       
-       /**
-        * Module requirements.
-        */
-       
-       var XMLHttpRequest = __webpack_require__(13);
-       var Polling = __webpack_require__(16);
-       var Emitter = __webpack_require__(5);
-       var inherit = __webpack_require__(27);
-       var debug = __webpack_require__(3)('engine.io-client:polling-xhr');
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = XHR;
-       module.exports.Request = Request;
-       
-       /**
-        * Empty function
-        */
-       
-       function empty () {}
-       
-       /**
-        * XHR Polling constructor.
-        *
-        * @param {Object} opts
-        * @api public
-        */
-       
-       function XHR (opts) {
-         Polling.call(this, opts);
-         this.requestTimeout = opts.requestTimeout;
-         this.extraHeaders = opts.extraHeaders;
-       
-         if (typeof location !== 'undefined') {
-           var isSSL = 'https:' === location.protocol;
-           var port = location.port;
-       
-           // some user agents have empty `location.port`
-           if (!port) {
-             port = isSSL ? 443 : 80;
-           }
-       
-           this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||
-             port !== opts.port;
-           this.xs = opts.secure !== isSSL;
-         }
-       }
-       
-       /**
-        * Inherits from Polling.
-        */
-       
-       inherit(XHR, Polling);
-       
-       /**
-        * XHR supports binary
-        */
-       
-       XHR.prototype.supportsBinary = true;
-       
-       /**
-        * Creates a request.
-        *
-        * @param {String} method
-        * @api private
-        */
-       
-       XHR.prototype.request = function (opts) {
-         opts = opts || {};
-         opts.uri = this.uri();
-         opts.xd = this.xd;
-         opts.xs = this.xs;
-         opts.agent = this.agent || false;
-         opts.supportsBinary = this.supportsBinary;
-         opts.enablesXDR = this.enablesXDR;
-         opts.withCredentials = this.withCredentials;
-       
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
-         opts.requestTimeout = this.requestTimeout;
-       
-         // other options for Node.js client
-         opts.extraHeaders = this.extraHeaders;
-       
-         return new Request(opts);
-       };
-       
-       /**
-        * Sends data.
-        *
-        * @param {String} data to send.
-        * @param {Function} called upon flush.
-        * @api private
-        */
-       
-       XHR.prototype.doWrite = function (data, fn) {
-         var isBinary = typeof data !== 'string' && data !== undefined;
-         var req = this.request({ method: 'POST', data: data, isBinary: isBinary });
-         var self = this;
-         req.on('success', fn);
-         req.on('error', function (err) {
-           self.onError('xhr post error', err);
-         });
-         this.sendXhr = req;
-       };
-       
-       /**
-        * Starts a poll cycle.
-        *
-        * @api private
-        */
-       
-       XHR.prototype.doPoll = function () {
-       
-         var req = this.request();
-         var self = this;
-         req.on('data', function (data) {
-           self.onData(data);
-         });
-         req.on('error', function (err) {
-           self.onError('xhr poll error', err);
-         });
-         this.pollXhr = req;
-       };
-       
-       /**
-        * Request constructor
-        *
-        * @param {Object} options
-        * @api public
-        */
-       
-       function Request (opts) {
-         this.method = opts.method || 'GET';
-         this.uri = opts.uri;
-         this.xd = !!opts.xd;
-         this.xs = !!opts.xs;
-         this.async = false !== opts.async;
-         this.data = undefined !== opts.data ? opts.data : null;
-         this.agent = opts.agent;
-         this.isBinary = opts.isBinary;
-         this.supportsBinary = opts.supportsBinary;
-         this.enablesXDR = opts.enablesXDR;
-         this.withCredentials = opts.withCredentials;
-         this.requestTimeout = opts.requestTimeout;
-       
-         // SSL options for Node.js client
-         this.pfx = opts.pfx;
-         this.key = opts.key;
-         this.passphrase = opts.passphrase;
-         this.cert = opts.cert;
-         this.ca = opts.ca;
-         this.ciphers = opts.ciphers;
-         this.rejectUnauthorized = opts.rejectUnauthorized;
-       
-         // other options for Node.js client
-         this.extraHeaders = opts.extraHeaders;
-       
-         this.create();
-       }
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Request.prototype);
-       
-       /**
-        * Creates the XHR object and sends the request.
-        *
-        * @api private
-        */
-       
-       Request.prototype.create = function () {
-         var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };
-       
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
-       
-         var xhr = this.xhr = new XMLHttpRequest(opts);
-         var self = this;
-       
-         try {
-       
-           xhr.open(this.method, this.uri, this.async);
-           try {
-             if (this.extraHeaders) {
-               xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);
-               for (var i in this.extraHeaders) {
-                 if (this.extraHeaders.hasOwnProperty(i)) {
-                   xhr.setRequestHeader(i, this.extraHeaders[i]);
-                 }
-               }
-             }
-           } catch (e) {}
-       
-           if ('POST' === this.method) {
-             try {
-               if (this.isBinary) {
-                 xhr.setRequestHeader('Content-type', 'application/octet-stream');
-               } else {
-                 xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
-               }
-             } catch (e) {}
-           }
-       
-           try {
-             xhr.setRequestHeader('Accept', '*/*');
-           } catch (e) {}
-       
-           // ie6 check
-           if ('withCredentials' in xhr) {
-             xhr.withCredentials = this.withCredentials;
-           }
-       
-           if (this.requestTimeout) {
-             xhr.timeout = this.requestTimeout;
-           }
-       
-           if (this.hasXDR()) {
-             xhr.onload = function () {
-               self.onLoad();
-             };
-             xhr.onerror = function () {
-               self.onError(xhr.responseText);
-             };
-           } else {
-             xhr.onreadystatechange = function () {
-               if (xhr.readyState === 2) {
-                 try {
-                   var contentType = xhr.getResponseHeader('Content-Type');
-                   if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {
-                     xhr.responseType = 'arraybuffer';
-                   }
-                 } catch (e) {}
-               }
-               if (4 !== xhr.readyState) return;
-               if (200 === xhr.status || 1223 === xhr.status) {
-                 self.onLoad();
-               } else {
-                 // make sure the `error` event handler that's user-set
-                 // does not throw in the same tick and gets caught here
-                 setTimeout(function () {
-                   self.onError(typeof xhr.status === 'number' ? xhr.status : 0);
-                 }, 0);
-               }
-             };
-           }
-       
-       
-           xhr.send(this.data);
-         } catch (e) {
-           // Need to defer since .create() is called directly fhrom the constructor
-           // and thus the 'error' event can only be only bound *after* this exception
-           // occurs.  Therefore, also, we cannot throw here at all.
-           setTimeout(function () {
-             self.onError(e);
-           }, 0);
-           return;
-         }
-       
-         if (typeof document !== 'undefined') {
-           this.index = Request.requestsCount++;
-           Request.requests[this.index] = this;
-         }
-       };
-       
-       /**
-        * Called upon successful response.
-        *
-        * @api private
-        */
-       
-       Request.prototype.onSuccess = function () {
-         this.emit('success');
-         this.cleanup();
-       };
-       
-       /**
-        * Called if we have data.
-        *
-        * @api private
-        */
-       
-       Request.prototype.onData = function (data) {
-         this.emit('data', data);
-         this.onSuccess();
-       };
-       
-       /**
-        * Called upon error.
-        *
-        * @api private
-        */
-       
-       Request.prototype.onError = function (err) {
-         this.emit('error', err);
-         this.cleanup(true);
-       };
-       
-       /**
-        * Cleans up house.
-        *
-        * @api private
-        */
-       
-       Request.prototype.cleanup = function (fromError) {
-         if ('undefined' === typeof this.xhr || null === this.xhr) {
-           return;
-         }
-         // xmlhttprequest
-         if (this.hasXDR()) {
-           this.xhr.onload = this.xhr.onerror = empty;
-         } else {
-           this.xhr.onreadystatechange = empty;
-         }
-       
-         if (fromError) {
-           try {
-             this.xhr.abort();
-           } catch (e) {}
-         }
-       
-         if (typeof document !== 'undefined') {
-           delete Request.requests[this.index];
-         }
-       
-         this.xhr = null;
-       };
-       
-       /**
-        * Called upon load.
-        *
-        * @api private
-        */
-       
-       Request.prototype.onLoad = function () {
-         var data;
-         try {
-           var contentType;
-           try {
-             contentType = this.xhr.getResponseHeader('Content-Type');
-           } catch (e) {}
-           if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {
-             data = this.xhr.response || this.xhr.responseText;
-           } else {
-             data = this.xhr.responseText;
-           }
-         } catch (e) {
-           this.onError(e);
-         }
-         if (null != data) {
-           this.onData(data);
-         }
-       };
-       
-       /**
-        * Check if it has XDomainRequest.
-        *
-        * @api private
-        */
-       
-       Request.prototype.hasXDR = function () {
-         return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;
-       };
-       
-       /**
-        * Aborts the request.
-        *
-        * @api public
-        */
-       
-       Request.prototype.abort = function () {
-         this.cleanup();
-       };
-       
-       /**
-        * Aborts pending requests when unloading the window. This is needed to prevent
-        * memory leaks (e.g. when using IE) and to ensure that no spurious error is
-        * emitted.
-        */
-       
-       Request.requestsCount = 0;
-       Request.requests = {};
-       
-       if (typeof document !== 'undefined') {
-         if (typeof attachEvent === 'function') {
-           attachEvent('onunload', unloadHandler);
-         } else if (typeof addEventListener === 'function') {
-           var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';
-           addEventListener(terminationEvent, unloadHandler, false);
-         }
-       }
-       
-       function unloadHandler () {
-         for (var i in Request.requests) {
-           if (Request.requests.hasOwnProperty(i)) {
-             Request.requests[i].abort();
-           }
-         }
-       }
-
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var Transport = __webpack_require__(17);
-       var parseqs = __webpack_require__(26);
-       var parser = __webpack_require__(18);
-       var inherit = __webpack_require__(27);
-       var yeast = __webpack_require__(28);
-       var debug = __webpack_require__(3)('engine.io-client:polling');
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = Polling;
-       
-       /**
-        * Is XHR2 supported?
-        */
-       
-       var hasXHR2 = (function () {
-         var XMLHttpRequest = __webpack_require__(13);
-         var xhr = new XMLHttpRequest({ xdomain: false });
-         return null != xhr.responseType;
-       })();
-       
-       /**
-        * Polling interface.
-        *
-        * @param {Object} opts
-        * @api private
-        */
-       
-       function Polling (opts) {
-         var forceBase64 = (opts && opts.forceBase64);
-         if (!hasXHR2 || forceBase64) {
-           this.supportsBinary = false;
-         }
-         Transport.call(this, opts);
-       }
-       
-       /**
-        * Inherits from Transport.
-        */
-       
-       inherit(Polling, Transport);
-       
-       /**
-        * Transport name.
-        */
-       
-       Polling.prototype.name = 'polling';
-       
-       /**
-        * Opens the socket (triggers polling). We write a PING message to determine
-        * when the transport is open.
-        *
-        * @api private
-        */
-       
-       Polling.prototype.doOpen = function () {
-         this.poll();
-       };
-       
-       /**
-        * Pauses polling.
-        *
-        * @param {Function} callback upon buffers are flushed and transport is paused
-        * @api private
-        */
-       
-       Polling.prototype.pause = function (onPause) {
-         var self = this;
-       
-         this.readyState = 'pausing';
-       
-         function pause () {
-       
-           self.readyState = 'paused';
-           onPause();
-         }
-       
-         if (this.polling || !this.writable) {
-           var total = 0;
-       
-           if (this.polling) {
-       
-             total++;
-             this.once('pollComplete', function () {
-       
-               --total || pause();
-             });
-           }
-       
-           if (!this.writable) {
-       
-             total++;
-             this.once('drain', function () {
-       
-               --total || pause();
-             });
-           }
-         } else {
-           pause();
-         }
-       };
-       
-       /**
-        * Starts polling cycle.
-        *
-        * @api public
-        */
-       
-       Polling.prototype.poll = function () {
-       
-         this.polling = true;
-         this.doPoll();
-         this.emit('poll');
-       };
-       
-       /**
-        * Overloads onData to detect payloads.
-        *
-        * @api private
-        */
-       
-       Polling.prototype.onData = function (data) {
-         var self = this;
-       
-         var callback = function (packet, index, total) {
-           // if its the first message we consider the transport open
-           if ('opening' === self.readyState) {
-             self.onOpen();
-           }
-       
-           // if its a close packet, we close the ongoing requests
-           if ('close' === packet.type) {
-             self.onClose();
-             return false;
-           }
-       
-           // otherwise bypass onData and handle the message
-           self.onPacket(packet);
-         };
-       
-         // decode payload
-         parser.decodePayload(data, this.socket.binaryType, callback);
-       
-         // if an event did not trigger closing
-         if ('closed' !== this.readyState) {
-           // if we got data we're not polling
-           this.polling = false;
-           this.emit('pollComplete');
-       
-           if ('open' === this.readyState) {
-             this.poll();
-           } else {
-       
-           }
-         }
-       };
-       
-       /**
-        * For polling, send a close packet.
-        *
-        * @api private
-        */
-       
-       Polling.prototype.doClose = function () {
-         var self = this;
-       
-         function close () {
-       
-           self.write([{ type: 'close' }]);
-         }
-       
-         if ('open' === this.readyState) {
-       
-           close();
-         } else {
-           // in case we're trying to close while
-           // handshaking is in progress (GH-164)
-       
-           this.once('open', close);
-         }
-       };
-       
-       /**
-        * Writes a packets payload.
-        *
-        * @param {Array} data packets
-        * @param {Function} drain callback
-        * @api private
-        */
-       
-       Polling.prototype.write = function (packets) {
-         var self = this;
-         this.writable = false;
-         var callbackfn = function () {
-           self.writable = true;
-           self.emit('drain');
-         };
-       
-         parser.encodePayload(packets, this.supportsBinary, function (data) {
-           self.doWrite(data, callbackfn);
-         });
-       };
-       
-       /**
-        * Generates uri for connection.
-        *
-        * @api private
-        */
-       
-       Polling.prototype.uri = function () {
-         var query = this.query || {};
-         var schema = this.secure ? 'https' : 'http';
-         var port = '';
-       
-         // cache busting is forced
-         if (false !== this.timestampRequests) {
-           query[this.timestampParam] = yeast();
-         }
-       
-         if (!this.supportsBinary && !query.sid) {
-           query.b64 = 1;
-         }
-       
-         query = parseqs.encode(query);
-       
-         // avoid port if default for schema
-         if (this.port && (('https' === schema && Number(this.port) !== 443) ||
-            ('http' === schema && Number(this.port) !== 80))) {
-           port = ':' + this.port;
-         }
-       
-         // prepend ? to query
-         if (query.length) {
-           query = '?' + query;
-         }
-       
-         var ipv6 = this.hostname.indexOf(':') !== -1;
-         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
-       };
-
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var parser = __webpack_require__(18);
-       var Emitter = __webpack_require__(5);
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = Transport;
-       
-       /**
-        * Transport abstract constructor.
-        *
-        * @param {Object} options.
-        * @api private
-        */
-       
-       function Transport (opts) {
-         this.path = opts.path;
-         this.hostname = opts.hostname;
-         this.port = opts.port;
-         this.secure = opts.secure;
-         this.query = opts.query;
-         this.timestampParam = opts.timestampParam;
-         this.timestampRequests = opts.timestampRequests;
-         this.readyState = '';
-         this.agent = opts.agent || false;
-         this.socket = opts.socket;
-         this.enablesXDR = opts.enablesXDR;
-         this.withCredentials = opts.withCredentials;
-       
-         // SSL options for Node.js client
-         this.pfx = opts.pfx;
-         this.key = opts.key;
-         this.passphrase = opts.passphrase;
-         this.cert = opts.cert;
-         this.ca = opts.ca;
-         this.ciphers = opts.ciphers;
-         this.rejectUnauthorized = opts.rejectUnauthorized;
-         this.forceNode = opts.forceNode;
-       
-         // results of ReactNative environment detection
-         this.isReactNative = opts.isReactNative;
-       
-         // other options for Node.js client
-         this.extraHeaders = opts.extraHeaders;
-         this.localAddress = opts.localAddress;
-       }
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Transport.prototype);
-       
-       /**
-        * Emits an error.
-        *
-        * @param {String} str
-        * @return {Transport} for chaining
-        * @api public
-        */
-       
-       Transport.prototype.onError = function (msg, desc) {
-         var err = new Error(msg);
-         err.type = 'TransportError';
-         err.description = desc;
-         this.emit('error', err);
-         return this;
-       };
-       
-       /**
-        * Opens the transport.
-        *
-        * @api public
-        */
-       
-       Transport.prototype.open = function () {
-         if ('closed' === this.readyState || '' === this.readyState) {
-           this.readyState = 'opening';
-           this.doOpen();
-         }
-       
-         return this;
-       };
-       
-       /**
-        * Closes the transport.
-        *
-        * @api private
-        */
-       
-       Transport.prototype.close = function () {
-         if ('opening' === this.readyState || 'open' === this.readyState) {
-           this.doClose();
-           this.onClose();
-         }
-       
-         return this;
-       };
-       
-       /**
-        * Sends multiple packets.
-        *
-        * @param {Array} packets
-        * @api private
-        */
-       
-       Transport.prototype.send = function (packets) {
-         if ('open' === this.readyState) {
-           this.write(packets);
-         } else {
-           throw new Error('Transport not open');
-         }
-       };
-       
-       /**
-        * Called upon open
-        *
-        * @api private
-        */
-       
-       Transport.prototype.onOpen = function () {
-         this.readyState = 'open';
-         this.writable = true;
-         this.emit('open');
-       };
-       
-       /**
-        * Called with data.
-        *
-        * @param {String} data
-        * @api private
-        */
-       
-       Transport.prototype.onData = function (data) {
-         var packet = parser.decodePacket(data, this.socket.binaryType);
-         this.onPacket(packet);
-       };
-       
-       /**
-        * Called with a decoded packet.
-        */
-       
-       Transport.prototype.onPacket = function (packet) {
-         this.emit('packet', packet);
-       };
-       
-       /**
-        * Called upon close.
-        *
-        * @api private
-        */
-       
-       Transport.prototype.onClose = function () {
-         this.readyState = 'closed';
-         this.emit('close');
-       };
-
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var keys = __webpack_require__(19);
-       var hasBinary = __webpack_require__(20);
-       var sliceBuffer = __webpack_require__(21);
-       var after = __webpack_require__(22);
-       var utf8 = __webpack_require__(23);
-       
-       var base64encoder;
-       if (typeof ArrayBuffer !== 'undefined') {
-         base64encoder = __webpack_require__(24);
-       }
-       
-       /**
-        * Check if we are running an android browser. That requires us to use
-        * ArrayBuffer with polling transports...
-        *
-        * http://ghinda.net/jpeg-blob-ajax-android/
-        */
-       
-       var isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);
-       
-       /**
-        * Check if we are running in PhantomJS.
-        * Uploading a Blob with PhantomJS does not work correctly, as reported here:
-        * https://github.com/ariya/phantomjs/issues/11395
-        * @type boolean
-        */
-       var isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);
-       
-       /**
-        * When true, avoids using Blobs to encode payloads.
-        * @type boolean
-        */
-       var dontSendBlobs = isAndroid || isPhantomJS;
-       
-       /**
-        * Current protocol version.
-        */
-       
-       exports.protocol = 3;
-       
-       /**
-        * Packet types.
-        */
-       
-       var packets = exports.packets = {
-           open:     0    // non-ws
-         , close:    1    // non-ws
-         , ping:     2
-         , pong:     3
-         , message:  4
-         , upgrade:  5
-         , noop:     6
-       };
-       
-       var packetslist = keys(packets);
-       
-       /**
-        * Premade error packet.
-        */
-       
-       var err = { type: 'error', data: 'parser error' };
-       
-       /**
-        * Create a blob api even for blob builder when vendor prefixes exist
-        */
-       
-       var Blob = __webpack_require__(25);
-       
-       /**
-        * Encodes a packet.
-        *
-        *     <packet type id> [ <data> ]
-        *
-        * Example:
-        *
-        *     5hello world
-        *     3
-        *     4
-        *
-        * Binary is encoded in an identical principle
-        *
-        * @api private
-        */
-       
-       exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
-         if (typeof supportsBinary === 'function') {
-           callback = supportsBinary;
-           supportsBinary = false;
-         }
-       
-         if (typeof utf8encode === 'function') {
-           callback = utf8encode;
-           utf8encode = null;
-         }
-       
-         var data = (packet.data === undefined)
-           ? undefined
-           : packet.data.buffer || packet.data;
-       
-         if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {
-           return encodeArrayBuffer(packet, supportsBinary, callback);
-         } else if (typeof Blob !== 'undefined' && data instanceof Blob) {
-           return encodeBlob(packet, supportsBinary, callback);
-         }
-       
-         // might be an object with { base64: true, data: dataAsBase64String }
-         if (data && data.base64) {
-           return encodeBase64Object(packet, callback);
-         }
-       
-         // Sending data as a utf-8 string
-         var encoded = packets[packet.type];
-       
-         // data fragment is optional
-         if (undefined !== packet.data) {
-           encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);
-         }
-       
-         return callback('' + encoded);
-       
-       };
-       
-       function encodeBase64Object(packet, callback) {
-         // packet data is an object { base64: true, data: dataAsBase64String }
-         var message = 'b' + exports.packets[packet.type] + packet.data.data;
-         return callback(message);
-       }
-       
-       /**
-        * Encode packet helpers for binary types
-        */
-       
-       function encodeArrayBuffer(packet, supportsBinary, callback) {
-         if (!supportsBinary) {
-           return exports.encodeBase64Packet(packet, callback);
-         }
-       
-         var data = packet.data;
-         var contentArray = new Uint8Array(data);
-         var resultBuffer = new Uint8Array(1 + data.byteLength);
-       
-         resultBuffer[0] = packets[packet.type];
-         for (var i = 0; i < contentArray.length; i++) {
-           resultBuffer[i+1] = contentArray[i];
-         }
-       
-         return callback(resultBuffer.buffer);
-       }
-       
-       function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {
-         if (!supportsBinary) {
-           return exports.encodeBase64Packet(packet, callback);
-         }
-       
-         var fr = new FileReader();
-         fr.onload = function() {
-           exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);
-         };
-         return fr.readAsArrayBuffer(packet.data);
-       }
-       
-       function encodeBlob(packet, supportsBinary, callback) {
-         if (!supportsBinary) {
-           return exports.encodeBase64Packet(packet, callback);
-         }
-       
-         if (dontSendBlobs) {
-           return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);
-         }
-       
-         var length = new Uint8Array(1);
-         length[0] = packets[packet.type];
-         var blob = new Blob([length.buffer, packet.data]);
-       
-         return callback(blob);
-       }
-       
-       /**
-        * Encodes a packet with binary data in a base64 string
-        *
-        * @param {Object} packet, has `type` and `data`
-        * @return {String} base64 encoded message
-        */
-       
-       exports.encodeBase64Packet = function(packet, callback) {
-         var message = 'b' + exports.packets[packet.type];
-         if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {
-           var fr = new FileReader();
-           fr.onload = function() {
-             var b64 = fr.result.split(',')[1];
-             callback(message + b64);
-           };
-           return fr.readAsDataURL(packet.data);
-         }
-       
-         var b64data;
-         try {
-           b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));
-         } catch (e) {
-           // iPhone Safari doesn't let you apply with typed arrays
-           var typed = new Uint8Array(packet.data);
-           var basic = new Array(typed.length);
-           for (var i = 0; i < typed.length; i++) {
-             basic[i] = typed[i];
-           }
-           b64data = String.fromCharCode.apply(null, basic);
-         }
-         message += btoa(b64data);
-         return callback(message);
-       };
-       
-       /**
-        * Decodes a packet. Changes format to Blob if requested.
-        *
-        * @return {Object} with `type` and `data` (if any)
-        * @api private
-        */
-       
-       exports.decodePacket = function (data, binaryType, utf8decode) {
-         if (data === undefined) {
-           return err;
-         }
-         // String data
-         if (typeof data === 'string') {
-           if (data.charAt(0) === 'b') {
-             return exports.decodeBase64Packet(data.substr(1), binaryType);
-           }
-       
-           if (utf8decode) {
-             data = tryDecode(data);
-             if (data === false) {
-               return err;
-             }
-           }
-           var type = data.charAt(0);
-       
-           if (Number(type) != type || !packetslist[type]) {
-             return err;
-           }
-       
-           if (data.length > 1) {
-             return { type: packetslist[type], data: data.substring(1) };
-           } else {
-             return { type: packetslist[type] };
-           }
-         }
-       
-         var asArray = new Uint8Array(data);
-         var type = asArray[0];
-         var rest = sliceBuffer(data, 1);
-         if (Blob && binaryType === 'blob') {
-           rest = new Blob([rest]);
-         }
-         return { type: packetslist[type], data: rest };
-       };
-       
-       function tryDecode(data) {
-         try {
-           data = utf8.decode(data, { strict: false });
-         } catch (e) {
-           return false;
-         }
-         return data;
-       }
-       
-       /**
-        * Decodes a packet encoded in a base64 string
-        *
-        * @param {String} base64 encoded message
-        * @return {Object} with `type` and `data` (if any)
-        */
-       
-       exports.decodeBase64Packet = function(msg, binaryType) {
-         var type = packetslist[msg.charAt(0)];
-         if (!base64encoder) {
-           return { type: type, data: { base64: true, data: msg.substr(1) } };
-         }
-       
-         var data = base64encoder.decode(msg.substr(1));
-       
-         if (binaryType === 'blob' && Blob) {
-           data = new Blob([data]);
-         }
-       
-         return { type: type, data: data };
-       };
-       
-       /**
-        * Encodes multiple messages (payload).
-        *
-        *     <length>:data
-        *
-        * Example:
-        *
-        *     11:hello world2:hi
-        *
-        * If any contents are binary, they will be encoded as base64 strings. Base64
-        * encoded strings are marked with a b before the length specifier
-        *
-        * @param {Array} packets
-        * @api private
-        */
-       
-       exports.encodePayload = function (packets, supportsBinary, callback) {
-         if (typeof supportsBinary === 'function') {
-           callback = supportsBinary;
-           supportsBinary = null;
-         }
-       
-         var isBinary = hasBinary(packets);
-       
-         if (supportsBinary && isBinary) {
-           if (Blob && !dontSendBlobs) {
-             return exports.encodePayloadAsBlob(packets, callback);
-           }
-       
-           return exports.encodePayloadAsArrayBuffer(packets, callback);
-         }
-       
-         if (!packets.length) {
-           return callback('0:');
-         }
-       
-         function setLengthHeader(message) {
-           return message.length + ':' + message;
-         }
-       
-         function encodeOne(packet, doneCallback) {
-           exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {
-             doneCallback(null, setLengthHeader(message));
-           });
-         }
-       
-         map(packets, encodeOne, function(err, results) {
-           return callback(results.join(''));
-         });
-       };
-       
-       /**
-        * Async array map using after
-        */
-       
-       function map(ary, each, done) {
-         var result = new Array(ary.length);
-         var next = after(ary.length, done);
-       
-         var eachWithIndex = function(i, el, cb) {
-           each(el, function(error, msg) {
-             result[i] = msg;
-             cb(error, result);
-           });
-         };
-       
-         for (var i = 0; i < ary.length; i++) {
-           eachWithIndex(i, ary[i], next);
-         }
-       }
-       
-       /*
-        * Decodes data when a payload is maybe expected. Possible binary contents are
-        * decoded from their base64 representation
-        *
-        * @param {String} data, callback method
-        * @api public
-        */
-       
-       exports.decodePayload = function (data, binaryType, callback) {
-         if (typeof data !== 'string') {
-           return exports.decodePayloadAsBinary(data, binaryType, callback);
-         }
-       
-         if (typeof binaryType === 'function') {
-           callback = binaryType;
-           binaryType = null;
-         }
-       
-         var packet;
-         if (data === '') {
-           // parser error - ignoring payload
-           return callback(err, 0, 1);
-         }
-       
-         var length = '', n, msg;
-       
-         for (var i = 0, l = data.length; i < l; i++) {
-           var chr = data.charAt(i);
-       
-           if (chr !== ':') {
-             length += chr;
-             continue;
-           }
-       
-           if (length === '' || (length != (n = Number(length)))) {
-             // parser error - ignoring payload
-             return callback(err, 0, 1);
-           }
-       
-           msg = data.substr(i + 1, n);
-       
-           if (length != msg.length) {
-             // parser error - ignoring payload
-             return callback(err, 0, 1);
-           }
-       
-           if (msg.length) {
-             packet = exports.decodePacket(msg, binaryType, false);
-       
-             if (err.type === packet.type && err.data === packet.data) {
-               // parser error in individual packet - ignoring payload
-               return callback(err, 0, 1);
-             }
-       
-             var ret = callback(packet, i + n, l);
-             if (false === ret) return;
-           }
-       
-           // advance cursor
-           i += n;
-           length = '';
-         }
-       
-         if (length !== '') {
-           // parser error - ignoring payload
-           return callback(err, 0, 1);
-         }
-       
-       };
-       
-       /**
-        * Encodes multiple messages (payload) as binary.
-        *
-        * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number
-        * 255><data>
-        *
-        * Example:
-        * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers
-        *
-        * @param {Array} packets
-        * @return {ArrayBuffer} encoded payload
-        * @api private
-        */
-       
-       exports.encodePayloadAsArrayBuffer = function(packets, callback) {
-         if (!packets.length) {
-           return callback(new ArrayBuffer(0));
-         }
-       
-         function encodeOne(packet, doneCallback) {
-           exports.encodePacket(packet, true, true, function(data) {
-             return doneCallback(null, data);
-           });
-         }
-       
-         map(packets, encodeOne, function(err, encodedPackets) {
-           var totalLength = encodedPackets.reduce(function(acc, p) {
-             var len;
-             if (typeof p === 'string'){
-               len = p.length;
-             } else {
-               len = p.byteLength;
-             }
-             return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2
-           }, 0);
-       
-           var resultArray = new Uint8Array(totalLength);
-       
-           var bufferIndex = 0;
-           encodedPackets.forEach(function(p) {
-             var isString = typeof p === 'string';
-             var ab = p;
-             if (isString) {
-               var view = new Uint8Array(p.length);
-               for (var i = 0; i < p.length; i++) {
-                 view[i] = p.charCodeAt(i);
-               }
-               ab = view.buffer;
-             }
-       
-             if (isString) { // not true binary
-               resultArray[bufferIndex++] = 0;
-             } else { // true binary
-               resultArray[bufferIndex++] = 1;
-             }
-       
-             var lenStr = ab.byteLength.toString();
-             for (var i = 0; i < lenStr.length; i++) {
-               resultArray[bufferIndex++] = parseInt(lenStr[i]);
-             }
-             resultArray[bufferIndex++] = 255;
-       
-             var view = new Uint8Array(ab);
-             for (var i = 0; i < view.length; i++) {
-               resultArray[bufferIndex++] = view[i];
-             }
-           });
-       
-           return callback(resultArray.buffer);
-         });
-       };
-       
-       /**
-        * Encode as Blob
-        */
-       
-       exports.encodePayloadAsBlob = function(packets, callback) {
-         function encodeOne(packet, doneCallback) {
-           exports.encodePacket(packet, true, true, function(encoded) {
-             var binaryIdentifier = new Uint8Array(1);
-             binaryIdentifier[0] = 1;
-             if (typeof encoded === 'string') {
-               var view = new Uint8Array(encoded.length);
-               for (var i = 0; i < encoded.length; i++) {
-                 view[i] = encoded.charCodeAt(i);
-               }
-               encoded = view.buffer;
-               binaryIdentifier[0] = 0;
-             }
-       
-             var len = (encoded instanceof ArrayBuffer)
-               ? encoded.byteLength
-               : encoded.size;
-       
-             var lenStr = len.toString();
-             var lengthAry = new Uint8Array(lenStr.length + 1);
-             for (var i = 0; i < lenStr.length; i++) {
-               lengthAry[i] = parseInt(lenStr[i]);
-             }
-             lengthAry[lenStr.length] = 255;
-       
-             if (Blob) {
-               var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);
-               doneCallback(null, blob);
-             }
-           });
-         }
-       
-         map(packets, encodeOne, function(err, results) {
-           return callback(new Blob(results));
-         });
-       };
-       
-       /*
-        * Decodes data when a payload is maybe expected. Strings are decoded by
-        * interpreting each byte as a key code for entries marked to start with 0. See
-        * description of encodePayloadAsBinary
-        *
-        * @param {ArrayBuffer} data, callback method
-        * @api public
-        */
-       
-       exports.decodePayloadAsBinary = function (data, binaryType, callback) {
-         if (typeof binaryType === 'function') {
-           callback = binaryType;
-           binaryType = null;
-         }
-       
-         var bufferTail = data;
-         var buffers = [];
-       
-         while (bufferTail.byteLength > 0) {
-           var tailArray = new Uint8Array(bufferTail);
-           var isString = tailArray[0] === 0;
-           var msgLength = '';
-       
-           for (var i = 1; ; i++) {
-             if (tailArray[i] === 255) break;
-       
-             // 310 = char length of Number.MAX_VALUE
-             if (msgLength.length > 310) {
-               return callback(err, 0, 1);
-             }
-       
-             msgLength += tailArray[i];
-           }
-       
-           bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);
-           msgLength = parseInt(msgLength);
-       
-           var msg = sliceBuffer(bufferTail, 0, msgLength);
-           if (isString) {
-             try {
-               msg = String.fromCharCode.apply(null, new Uint8Array(msg));
-             } catch (e) {
-               // iPhone Safari doesn't let you apply to typed arrays
-               var typed = new Uint8Array(msg);
-               msg = '';
-               for (var i = 0; i < typed.length; i++) {
-                 msg += String.fromCharCode(typed[i]);
-               }
-             }
-           }
-       
-           buffers.push(msg);
-           bufferTail = sliceBuffer(bufferTail, msgLength);
-         }
-       
-         var total = buffers.length;
-         buffers.forEach(function(buffer, i) {
-           callback(exports.decodePacket(buffer, binaryType, true), i, total);
-         });
-       };
-
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports) {
-
-       
-       /**
-        * Gets the keys for an object.
-        *
-        * @return {Array} keys
-        * @api private
-        */
-       
-       module.exports = Object.keys || function keys (obj){
-         var arr = [];
-         var has = Object.prototype.hasOwnProperty;
-       
-         for (var i in obj) {
-           if (has.call(obj, i)) {
-             arr.push(i);
-           }
-         }
-         return arr;
-       };
-
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /* global Blob File */
-       
-       /*
-        * Module requirements.
-        */
-       
-       var isArray = __webpack_require__(7);
-       
-       var toString = Object.prototype.toString;
-       var withNativeBlob = typeof Blob === 'function' ||
-                               typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';
-       var withNativeFile = typeof File === 'function' ||
-                               typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = hasBinary;
-       
-       /**
-        * Checks for binary data.
-        *
-        * Supports Buffer, ArrayBuffer, Blob and File.
-        *
-        * @param {Object} anything
-        * @api public
-        */
-       
-       function hasBinary (obj) {
-         if (!obj || typeof obj !== 'object') {
-           return false;
-         }
-       
-         if (isArray(obj)) {
-           for (var i = 0, l = obj.length; i < l; i++) {
-             if (hasBinary(obj[i])) {
-               return true;
-             }
-           }
-           return false;
-         }
-       
-         if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||
-           (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||
-           (withNativeBlob && obj instanceof Blob) ||
-           (withNativeFile && obj instanceof File)
-         ) {
-           return true;
-         }
-       
-         // see: https://github.com/Automattic/has-binary/pull/4
-         if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {
-           return hasBinary(obj.toJSON(), true);
-         }
-       
-         for (var key in obj) {
-           if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {
-             return true;
-           }
-         }
-       
-         return false;
-       }
-
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports) {
-
-       /**
-        * An abstraction for slicing an arraybuffer even when
-        * ArrayBuffer.prototype.slice is not supported
-        *
-        * @api public
-        */
-       
-       module.exports = function(arraybuffer, start, end) {
-         var bytes = arraybuffer.byteLength;
-         start = start || 0;
-         end = end || bytes;
-       
-         if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
-       
-         if (start < 0) { start += bytes; }
-         if (end < 0) { end += bytes; }
-         if (end > bytes) { end = bytes; }
-       
-         if (start >= bytes || start >= end || bytes === 0) {
-           return new ArrayBuffer(0);
-         }
-       
-         var abv = new Uint8Array(arraybuffer);
-         var result = new Uint8Array(end - start);
-         for (var i = start, ii = 0; i < end; i++, ii++) {
-           result[ii] = abv[i];
-         }
-         return result.buffer;
-       };
-
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports) {
-
-       module.exports = after
-       
-       function after(count, callback, err_cb) {
-           var bail = false
-           err_cb = err_cb || noop
-           proxy.count = count
-       
-           return (count === 0) ? callback() : proxy
-       
-           function proxy(err, result) {
-               if (proxy.count <= 0) {
-                   throw new Error('after called too many times')
-               }
-               --proxy.count
-       
-               // after first error, rest are passed to err_cb
-               if (err) {
-                   bail = true
-                   callback(err)
-                   // future error callbacks will go to error handler
-                   callback = err_cb
-               } else if (proxy.count === 0 && !bail) {
-                   callback(null, result)
-               }
-           }
-       }
-       
-       function noop() {}
-
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports) {
-
-       /*! https://mths.be/utf8js v2.1.2 by @mathias */
-       
-       var stringFromCharCode = String.fromCharCode;
-       
-       // Taken from https://mths.be/punycode
-       function ucs2decode(string) {
-               var output = [];
-               var counter = 0;
-               var length = string.length;
-               var value;
-               var extra;
-               while (counter < length) {
-                       value = string.charCodeAt(counter++);
-                       if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
-                               // high surrogate, and there is a next character
-                               extra = string.charCodeAt(counter++);
-                               if ((extra & 0xFC00) == 0xDC00) { // low surrogate
-                                       output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
-                               } else {
-                                       // unmatched surrogate; only append this code unit, in case the next
-                                       // code unit is the high surrogate of a surrogate pair
-                                       output.push(value);
-                                       counter--;
-                               }
-                       } else {
-                               output.push(value);
-                       }
-               }
-               return output;
-       }
-       
-       // Taken from https://mths.be/punycode
-       function ucs2encode(array) {
-               var length = array.length;
-               var index = -1;
-               var value;
-               var output = '';
-               while (++index < length) {
-                       value = array[index];
-                       if (value > 0xFFFF) {
-                               value -= 0x10000;
-                               output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
-                               value = 0xDC00 | value & 0x3FF;
-                       }
-                       output += stringFromCharCode(value);
-               }
-               return output;
-       }
-       
-       function checkScalarValue(codePoint, strict) {
-               if (codePoint >= 0xD800 && codePoint <= 0xDFFF) {
-                       if (strict) {
-                               throw Error(
-                                       'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +
-                                       ' is not a scalar value'
-                               );
-                       }
-                       return false;
-               }
-               return true;
-       }
-       /*--------------------------------------------------------------------------*/
-       
-       function createByte(codePoint, shift) {
-               return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
-       }
-       
-       function encodeCodePoint(codePoint, strict) {
-               if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
-                       return stringFromCharCode(codePoint);
-               }
-               var symbol = '';
-               if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
-                       symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
-               }
-               else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
-                       if (!checkScalarValue(codePoint, strict)) {
-                               codePoint = 0xFFFD;
-                       }
-                       symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
-                       symbol += createByte(codePoint, 6);
-               }
-               else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
-                       symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
-                       symbol += createByte(codePoint, 12);
-                       symbol += createByte(codePoint, 6);
-               }
-               symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
-               return symbol;
-       }
-       
-       function utf8encode(string, opts) {
-               opts = opts || {};
-               var strict = false !== opts.strict;
-       
-               var codePoints = ucs2decode(string);
-               var length = codePoints.length;
-               var index = -1;
-               var codePoint;
-               var byteString = '';
-               while (++index < length) {
-                       codePoint = codePoints[index];
-                       byteString += encodeCodePoint(codePoint, strict);
-               }
-               return byteString;
-       }
-       
-       /*--------------------------------------------------------------------------*/
-       
-       function readContinuationByte() {
-               if (byteIndex >= byteCount) {
-                       throw Error('Invalid byte index');
-               }
-       
-               var continuationByte = byteArray[byteIndex] & 0xFF;
-               byteIndex++;
-       
-               if ((continuationByte & 0xC0) == 0x80) {
-                       return continuationByte & 0x3F;
-               }
-       
-               // If we end up here, it’s not a continuation byte
-               throw Error('Invalid continuation byte');
-       }
-       
-       function decodeSymbol(strict) {
-               var byte1;
-               var byte2;
-               var byte3;
-               var byte4;
-               var codePoint;
-       
-               if (byteIndex > byteCount) {
-                       throw Error('Invalid byte index');
-               }
-       
-               if (byteIndex == byteCount) {
-                       return false;
-               }
-       
-               // Read first byte
-               byte1 = byteArray[byteIndex] & 0xFF;
-               byteIndex++;
-       
-               // 1-byte sequence (no continuation bytes)
-               if ((byte1 & 0x80) == 0) {
-                       return byte1;
-               }
-       
-               // 2-byte sequence
-               if ((byte1 & 0xE0) == 0xC0) {
-                       byte2 = readContinuationByte();
-                       codePoint = ((byte1 & 0x1F) << 6) | byte2;
-                       if (codePoint >= 0x80) {
-                               return codePoint;
-                       } else {
-                               throw Error('Invalid continuation byte');
-                       }
-               }
-       
-               // 3-byte sequence (may include unpaired surrogates)
-               if ((byte1 & 0xF0) == 0xE0) {
-                       byte2 = readContinuationByte();
-                       byte3 = readContinuationByte();
-                       codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
-                       if (codePoint >= 0x0800) {
-                               return checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;
-                       } else {
-                               throw Error('Invalid continuation byte');
-                       }
-               }
-       
-               // 4-byte sequence
-               if ((byte1 & 0xF8) == 0xF0) {
-                       byte2 = readContinuationByte();
-                       byte3 = readContinuationByte();
-                       byte4 = readContinuationByte();
-                       codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |
-                               (byte3 << 0x06) | byte4;
-                       if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
-                               return codePoint;
-                       }
-               }
-       
-               throw Error('Invalid UTF-8 detected');
-       }
-       
-       var byteArray;
-       var byteCount;
-       var byteIndex;
-       function utf8decode(byteString, opts) {
-               opts = opts || {};
-               var strict = false !== opts.strict;
-       
-               byteArray = ucs2decode(byteString);
-               byteCount = byteArray.length;
-               byteIndex = 0;
-               var codePoints = [];
-               var tmp;
-               while ((tmp = decodeSymbol(strict)) !== false) {
-                       codePoints.push(tmp);
-               }
-               return ucs2encode(codePoints);
-       }
-       
-       module.exports = {
-               version: '2.1.2',
-               encode: utf8encode,
-               decode: utf8decode
-       };
-
-
-/***/ }),
-/* 24 */
-/***/ (function(module, exports) {
-
-       /*
-        * base64-arraybuffer
-        * https://github.com/niklasvh/base64-arraybuffer
-        *
-        * Copyright (c) 2012 Niklas von Hertzen
-        * Licensed under the MIT license.
-        */
-       (function(){
-         "use strict";
-       
-         var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-       
-         // Use a lookup table to find the index.
-         var lookup = new Uint8Array(256);
-         for (var i = 0; i < chars.length; i++) {
-           lookup[chars.charCodeAt(i)] = i;
-         }
-       
-         exports.encode = function(arraybuffer) {
-           var bytes = new Uint8Array(arraybuffer),
-           i, len = bytes.length, base64 = "";
-       
-           for (i = 0; i < len; i+=3) {
-             base64 += chars[bytes[i] >> 2];
-             base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
-             base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
-             base64 += chars[bytes[i + 2] & 63];
-           }
-       
-           if ((len % 3) === 2) {
-             base64 = base64.substring(0, base64.length - 1) + "=";
-           } else if (len % 3 === 1) {
-             base64 = base64.substring(0, base64.length - 2) + "==";
-           }
-       
-           return base64;
-         };
-       
-         exports.decode =  function(base64) {
-           var bufferLength = base64.length * 0.75,
-           len = base64.length, i, p = 0,
-           encoded1, encoded2, encoded3, encoded4;
-       
-           if (base64[base64.length - 1] === "=") {
-             bufferLength--;
-             if (base64[base64.length - 2] === "=") {
-               bufferLength--;
-             }
-           }
-       
-           var arraybuffer = new ArrayBuffer(bufferLength),
-           bytes = new Uint8Array(arraybuffer);
-       
-           for (i = 0; i < len; i+=4) {
-             encoded1 = lookup[base64.charCodeAt(i)];
-             encoded2 = lookup[base64.charCodeAt(i+1)];
-             encoded3 = lookup[base64.charCodeAt(i+2)];
-             encoded4 = lookup[base64.charCodeAt(i+3)];
-       
-             bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
-             bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
-             bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
-           }
-       
-           return arraybuffer;
-         };
-       })();
-
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports) {
-
-       /**
-        * Create a blob builder even when vendor prefixes exist
-        */
-       
-       var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :
-         typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :
-         typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :
-         typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : 
-         false;
-       
-       /**
-        * Check if Blob constructor is supported
-        */
-       
-       var blobSupported = (function() {
-         try {
-           var a = new Blob(['hi']);
-           return a.size === 2;
-         } catch(e) {
-           return false;
-         }
-       })();
-       
-       /**
-        * Check if Blob constructor supports ArrayBufferViews
-        * Fails in Safari 6, so we need to map to ArrayBuffers there.
-        */
-       
-       var blobSupportsArrayBufferView = blobSupported && (function() {
-         try {
-           var b = new Blob([new Uint8Array([1,2])]);
-           return b.size === 2;
-         } catch(e) {
-           return false;
-         }
-       })();
-       
-       /**
-        * Check if BlobBuilder is supported
-        */
-       
-       var blobBuilderSupported = BlobBuilder
-         && BlobBuilder.prototype.append
-         && BlobBuilder.prototype.getBlob;
-       
-       /**
-        * Helper function that maps ArrayBufferViews to ArrayBuffers
-        * Used by BlobBuilder constructor and old browsers that didn't
-        * support it in the Blob constructor.
-        */
-       
-       function mapArrayBufferViews(ary) {
-         return ary.map(function(chunk) {
-           if (chunk.buffer instanceof ArrayBuffer) {
-             var buf = chunk.buffer;
-       
-             // if this is a subarray, make a copy so we only
-             // include the subarray region from the underlying buffer
-             if (chunk.byteLength !== buf.byteLength) {
-               var copy = new Uint8Array(chunk.byteLength);
-               copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));
-               buf = copy.buffer;
-             }
-       
-             return buf;
-           }
-       
-           return chunk;
-         });
-       }
-       
-       function BlobBuilderConstructor(ary, options) {
-         options = options || {};
-       
-         var bb = new BlobBuilder();
-         mapArrayBufferViews(ary).forEach(function(part) {
-           bb.append(part);
-         });
-       
-         return (options.type) ? bb.getBlob(options.type) : bb.getBlob();
-       };
-       
-       function BlobConstructor(ary, options) {
-         return new Blob(mapArrayBufferViews(ary), options || {});
-       };
-       
-       if (typeof Blob !== 'undefined') {
-         BlobBuilderConstructor.prototype = Blob.prototype;
-         BlobConstructor.prototype = Blob.prototype;
-       }
-       
-       module.exports = (function() {
-         if (blobSupported) {
-           return blobSupportsArrayBufferView ? Blob : BlobConstructor;
-         } else if (blobBuilderSupported) {
-           return BlobBuilderConstructor;
-         } else {
-           return undefined;
-         }
-       })();
-
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports) {
-
-       /**
-        * Compiles a querystring
-        * Returns string representation of the object
-        *
-        * @param {Object}
-        * @api private
-        */
-       
-       exports.encode = function (obj) {
-         var str = '';
-       
-         for (var i in obj) {
-           if (obj.hasOwnProperty(i)) {
-             if (str.length) str += '&';
-             str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
-           }
-         }
-       
-         return str;
-       };
-       
-       /**
-        * Parses a simple querystring into an object
-        *
-        * @param {String} qs
-        * @api private
-        */
-       
-       exports.decode = function(qs){
-         var qry = {};
-         var pairs = qs.split('&');
-         for (var i = 0, l = pairs.length; i < l; i++) {
-           var pair = pairs[i].split('=');
-           qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
-         }
-         return qry;
-       };
-
-
-/***/ }),
-/* 27 */
-/***/ (function(module, exports) {
-
-       
-       module.exports = function(a, b){
-         var fn = function(){};
-         fn.prototype = b.prototype;
-         a.prototype = new fn;
-         a.prototype.constructor = a;
-       };
-
-/***/ }),
-/* 28 */
-/***/ (function(module, exports) {
-
-       'use strict';
-       
-       var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')
-         , length = 64
-         , map = {}
-         , seed = 0
-         , i = 0
-         , prev;
-       
-       /**
-        * Return a string representing the specified number.
-        *
-        * @param {Number} num The number to convert.
-        * @returns {String} The string representation of the number.
-        * @api public
-        */
-       function encode(num) {
-         var encoded = '';
-       
-         do {
-           encoded = alphabet[num % length] + encoded;
-           num = Math.floor(num / length);
-         } while (num > 0);
-       
-         return encoded;
-       }
-       
-       /**
-        * Return the integer value specified by the given string.
-        *
-        * @param {String} str The string to convert.
-        * @returns {Number} The integer value represented by the string.
-        * @api public
-        */
-       function decode(str) {
-         var decoded = 0;
-       
-         for (i = 0; i < str.length; i++) {
-           decoded = decoded * length + map[str.charAt(i)];
-         }
-       
-         return decoded;
-       }
-       
-       /**
-        * Yeast: A tiny growing id generator.
-        *
-        * @returns {String} A unique id.
-        * @api public
-        */
-       function yeast() {
-         var now = encode(+new Date());
-       
-         if (now !== prev) return seed = 0, prev = now;
-         return now +'.'+ encode(seed++);
-       }
-       
-       //
-       // Map each character to its index.
-       //
-       for (; i < length; i++) map[alphabet[i]] = i;
-       
-       //
-       // Expose the `yeast`, `encode` and `decode` functions.
-       //
-       yeast.encode = encode;
-       yeast.decode = decode;
-       module.exports = yeast;
-
-
-/***/ }),
-/* 29 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(global) {/**
-        * Module requirements.
-        */
-       
-       var Polling = __webpack_require__(16);
-       var inherit = __webpack_require__(27);
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = JSONPPolling;
-       
-       /**
-        * Cached regular expressions.
-        */
-       
-       var rNewline = /\n/g;
-       var rEscapedNewline = /\\n/g;
-       
-       /**
-        * Global JSONP callbacks.
-        */
-       
-       var callbacks;
-       
-       /**
-        * Noop.
-        */
-       
-       function empty () { }
-       
-       /**
-        * Until https://github.com/tc39/proposal-global is shipped.
-        */
-       function glob () {
-         return typeof self !== 'undefined' ? self
-             : typeof window !== 'undefined' ? window
-             : typeof global !== 'undefined' ? global : {};
-       }
-       
-       /**
-        * JSONP Polling constructor.
-        *
-        * @param {Object} opts.
-        * @api public
-        */
-       
-       function JSONPPolling (opts) {
-         Polling.call(this, opts);
-       
-         this.query = this.query || {};
-       
-         // define global callbacks array if not present
-         // we do this here (lazily) to avoid unneeded global pollution
-         if (!callbacks) {
-           // we need to consider multiple engines in the same page
-           var global = glob();
-           callbacks = global.___eio = (global.___eio || []);
-         }
-       
-         // callback identifier
-         this.index = callbacks.length;
-       
-         // add callback to jsonp global
-         var self = this;
-         callbacks.push(function (msg) {
-           self.onData(msg);
-         });
-       
-         // append to query string
-         this.query.j = this.index;
-       
-         // prevent spurious errors from being emitted when the window is unloaded
-         if (typeof addEventListener === 'function') {
-           addEventListener('beforeunload', function () {
-             if (self.script) self.script.onerror = empty;
-           }, false);
-         }
-       }
-       
-       /**
-        * Inherits from Polling.
-        */
-       
-       inherit(JSONPPolling, Polling);
-       
-       /*
-        * JSONP only supports binary as base64 encoded strings
-        */
-       
-       JSONPPolling.prototype.supportsBinary = false;
-       
-       /**
-        * Closes the socket.
-        *
-        * @api private
-        */
-       
-       JSONPPolling.prototype.doClose = function () {
-         if (this.script) {
-           this.script.parentNode.removeChild(this.script);
-           this.script = null;
-         }
-       
-         if (this.form) {
-           this.form.parentNode.removeChild(this.form);
-           this.form = null;
-           this.iframe = null;
-         }
-       
-         Polling.prototype.doClose.call(this);
-       };
-       
-       /**
-        * Starts a poll cycle.
-        *
-        * @api private
-        */
-       
-       JSONPPolling.prototype.doPoll = function () {
-         var self = this;
-         var script = document.createElement('script');
-       
-         if (this.script) {
-           this.script.parentNode.removeChild(this.script);
-           this.script = null;
-         }
-       
-         script.async = true;
-         script.src = this.uri();
-         script.onerror = function (e) {
-           self.onError('jsonp poll error', e);
-         };
-       
-         var insertAt = document.getElementsByTagName('script')[0];
-         if (insertAt) {
-           insertAt.parentNode.insertBefore(script, insertAt);
-         } else {
-           (document.head || document.body).appendChild(script);
-         }
-         this.script = script;
-       
-         var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);
-       
-         if (isUAgecko) {
-           setTimeout(function () {
-             var iframe = document.createElement('iframe');
-             document.body.appendChild(iframe);
-             document.body.removeChild(iframe);
-           }, 100);
-         }
-       };
-       
-       /**
-        * Writes with a hidden iframe.
-        *
-        * @param {String} data to send
-        * @param {Function} called upon flush.
-        * @api private
-        */
-       
-       JSONPPolling.prototype.doWrite = function (data, fn) {
-         var self = this;
-       
-         if (!this.form) {
-           var form = document.createElement('form');
-           var area = document.createElement('textarea');
-           var id = this.iframeId = 'eio_iframe_' + this.index;
-           var iframe;
-       
-           form.className = 'socketio';
-           form.style.position = 'absolute';
-           form.style.top = '-1000px';
-           form.style.left = '-1000px';
-           form.target = id;
-           form.method = 'POST';
-           form.setAttribute('accept-charset', 'utf-8');
-           area.name = 'd';
-           form.appendChild(area);
-           document.body.appendChild(form);
-       
-           this.form = form;
-           this.area = area;
-         }
-       
-         this.form.action = this.uri();
-       
-         function complete () {
-           initIframe();
-           fn();
-         }
-       
-         function initIframe () {
-           if (self.iframe) {
-             try {
-               self.form.removeChild(self.iframe);
-             } catch (e) {
-               self.onError('jsonp polling iframe removal error', e);
-             }
-           }
-       
-           try {
-             // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
-             var html = '<iframe src="javascript:0" name="' + self.iframeId + '">';
-             iframe = document.createElement(html);
-           } catch (e) {
-             iframe = document.createElement('iframe');
-             iframe.name = self.iframeId;
-             iframe.src = 'javascript:0';
-           }
-       
-           iframe.id = self.iframeId;
-       
-           self.form.appendChild(iframe);
-           self.iframe = iframe;
-         }
-       
-         initIframe();
-       
-         // escape \n to prevent it from being converted into \r\n by some UAs
-         // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side
-         data = data.replace(rEscapedNewline, '\\\n');
-         this.area.value = data.replace(rNewline, '\\n');
-       
-         try {
-           this.form.submit();
-         } catch (e) {}
-       
-         if (this.iframe.attachEvent) {
-           this.iframe.onreadystatechange = function () {
-             if (self.iframe.readyState === 'complete') {
-               complete();
-             }
-           };
-         } else {
-           this.iframe.onload = complete;
-         }
-       };
-       
-       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
-
-/***/ }),
-/* 30 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-       
-       var Transport = __webpack_require__(17);
-       var parser = __webpack_require__(18);
-       var parseqs = __webpack_require__(26);
-       var inherit = __webpack_require__(27);
-       var yeast = __webpack_require__(28);
-       var debug = __webpack_require__(3)('engine.io-client:websocket');
-       
-       var BrowserWebSocket, NodeWebSocket;
-       
-       if (typeof WebSocket !== 'undefined') {
-         BrowserWebSocket = WebSocket;
-       } else if (typeof self !== 'undefined') {
-         BrowserWebSocket = self.WebSocket || self.MozWebSocket;
-       }
-       
-       if (typeof window === 'undefined') {
-         try {
-           NodeWebSocket = __webpack_require__(31);
-         } catch (e) { }
-       }
-       
-       /**
-        * Get either the `WebSocket` or `MozWebSocket` globals
-        * in the browser or try to resolve WebSocket-compatible
-        * interface exposed by `ws` for Node-like environment.
-        */
-       
-       var WebSocketImpl = BrowserWebSocket || NodeWebSocket;
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = WS;
-       
-       /**
-        * WebSocket transport constructor.
-        *
-        * @api {Object} connection options
-        * @api public
-        */
-       
-       function WS (opts) {
-         var forceBase64 = (opts && opts.forceBase64);
-         if (forceBase64) {
-           this.supportsBinary = false;
-         }
-         this.perMessageDeflate = opts.perMessageDeflate;
-         this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;
-         this.protocols = opts.protocols;
-         if (!this.usingBrowserWebSocket) {
-           WebSocketImpl = NodeWebSocket;
-         }
-         Transport.call(this, opts);
-       }
-       
-       /**
-        * Inherits from Transport.
-        */
-       
-       inherit(WS, Transport);
-       
-       /**
-        * Transport name.
-        *
-        * @api public
-        */
-       
-       WS.prototype.name = 'websocket';
-       
-       /*
-        * WebSockets support binary
-        */
-       
-       WS.prototype.supportsBinary = true;
-       
-       /**
-        * Opens socket.
-        *
-        * @api private
-        */
-       
-       WS.prototype.doOpen = function () {
-         if (!this.check()) {
-           // let probe timeout
-           return;
-         }
-       
-         var uri = this.uri();
-         var protocols = this.protocols;
-         var opts = {
-           agent: this.agent,
-           perMessageDeflate: this.perMessageDeflate
-         };
-       
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
-         if (this.extraHeaders) {
-           opts.headers = this.extraHeaders;
-         }
-         if (this.localAddress) {
-           opts.localAddress = this.localAddress;
-         }
-       
-         try {
-           this.ws =
-             this.usingBrowserWebSocket && !this.isReactNative
-               ? protocols
-                 ? new WebSocketImpl(uri, protocols)
-                 : new WebSocketImpl(uri)
-               : new WebSocketImpl(uri, protocols, opts);
-         } catch (err) {
-           return this.emit('error', err);
-         }
-       
-         if (this.ws.binaryType === undefined) {
-           this.supportsBinary = false;
-         }
-       
-         if (this.ws.supports && this.ws.supports.binary) {
-           this.supportsBinary = true;
-           this.ws.binaryType = 'nodebuffer';
-         } else {
-           this.ws.binaryType = 'arraybuffer';
-         }
-       
-         this.addEventListeners();
-       };
-       
-       /**
-        * Adds event listeners to the socket
-        *
-        * @api private
-        */
-       
-       WS.prototype.addEventListeners = function () {
-         var self = this;
-       
-         this.ws.onopen = function () {
-           self.onOpen();
-         };
-         this.ws.onclose = function () {
-           self.onClose();
-         };
-         this.ws.onmessage = function (ev) {
-           self.onData(ev.data);
-         };
-         this.ws.onerror = function (e) {
-           self.onError('websocket error', e);
-         };
-       };
-       
-       /**
-        * Writes data to socket.
-        *
-        * @param {Array} array of packets.
-        * @api private
-        */
-       
-       WS.prototype.write = function (packets) {
-         var self = this;
-         this.writable = false;
-       
-         // encodePacket efficient as it uses WS framing
-         // no need for encodePayload
-         var total = packets.length;
-         for (var i = 0, l = total; i < l; i++) {
-           (function (packet) {
-             parser.encodePacket(packet, self.supportsBinary, function (data) {
-               if (!self.usingBrowserWebSocket) {
-                 // always create a new object (GH-437)
-                 var opts = {};
-                 if (packet.options) {
-                   opts.compress = packet.options.compress;
-                 }
-       
-                 if (self.perMessageDeflate) {
-                   var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;
-                   if (len < self.perMessageDeflate.threshold) {
-                     opts.compress = false;
-                   }
-                 }
-               }
-       
-               // Sometimes the websocket has already been closed but the browser didn't
-               // have a chance of informing us about it yet, in that case send will
-               // throw an error
-               try {
-                 if (self.usingBrowserWebSocket) {
-                   // TypeError is thrown when passing the second argument on Safari
-                   self.ws.send(data);
-                 } else {
-                   self.ws.send(data, opts);
-                 }
-               } catch (e) {
-       
-               }
-       
-               --total || done();
-             });
-           })(packets[i]);
-         }
-       
-         function done () {
-           self.emit('flush');
-       
-           // fake drain
-           // defer to next tick to allow Socket to clear writeBuffer
-           setTimeout(function () {
-             self.writable = true;
-             self.emit('drain');
-           }, 0);
-         }
-       };
-       
-       /**
-        * Called upon close
-        *
-        * @api private
-        */
-       
-       WS.prototype.onClose = function () {
-         Transport.prototype.onClose.call(this);
-       };
-       
-       /**
-        * Closes socket.
-        *
-        * @api private
-        */
-       
-       WS.prototype.doClose = function () {
-         if (typeof this.ws !== 'undefined') {
-           this.ws.close();
-         }
-       };
-       
-       /**
-        * Generates uri for connection.
-        *
-        * @api private
-        */
-       
-       WS.prototype.uri = function () {
-         var query = this.query || {};
-         var schema = this.secure ? 'wss' : 'ws';
-         var port = '';
-       
-         // avoid port if default for schema
-         if (this.port && (('wss' === schema && Number(this.port) !== 443) ||
-           ('ws' === schema && Number(this.port) !== 80))) {
-           port = ':' + this.port;
-         }
-       
-         // append timestamp to URI
-         if (this.timestampRequests) {
-           query[this.timestampParam] = yeast();
-         }
-       
-         // communicate binary support capabilities
-         if (!this.supportsBinary) {
-           query.b64 = 1;
-         }
-       
-         query = parseqs.encode(query);
-       
-         // prepend ? to query
-         if (query.length) {
-           query = '?' + query;
-         }
-       
-         var ipv6 = this.hostname.indexOf(':') !== -1;
-         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
-       };
-       
-       /**
-        * Feature detection for WebSocket.
-        *
-        * @return {Boolean} whether this transport is available.
-        * @api public
-        */
-       
-       WS.prototype.check = function () {
-         return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);
-       };
-
-
-/***/ }),
-/* 31 */
-/***/ (function(module, exports) {
-
-       /* (ignored) */
-
-/***/ }),
-/* 32 */
-/***/ (function(module, exports) {
-
-       
-       var indexOf = [].indexOf;
-       
-       module.exports = function(arr, obj){
-         if (indexOf) return arr.indexOf(obj);
-         for (var i = 0; i < arr.length; ++i) {
-           if (arr[i] === obj) return i;
-         }
-         return -1;
-       };
-
-/***/ }),
-/* 33 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-       
-       /**
-        * Module dependencies.
-        */
-       
-       var parser = __webpack_require__(4);
-       var Emitter = __webpack_require__(5);
-       var toArray = __webpack_require__(34);
-       var on = __webpack_require__(35);
-       var bind = __webpack_require__(36);
-       var debug = __webpack_require__(3)('socket.io-client:socket');
-       var parseqs = __webpack_require__(26);
-       var hasBin = __webpack_require__(20);
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = exports = Socket;
-       
-       /**
-        * Internal events (blacklisted).
-        * These events can't be emitted by the user.
-        *
-        * @api private
-        */
-       
-       var events = {
-         connect: 1,
-         connect_error: 1,
-         connect_timeout: 1,
-         connecting: 1,
-         disconnect: 1,
-         error: 1,
-         reconnect: 1,
-         reconnect_attempt: 1,
-         reconnect_failed: 1,
-         reconnect_error: 1,
-         reconnecting: 1,
-         ping: 1,
-         pong: 1
-       };
-       
-       /**
-        * Shortcut to `Emitter#emit`.
-        */
-       
-       var emit = Emitter.prototype.emit;
-       
-       /**
-        * `Socket` constructor.
-        *
-        * @api public
-        */
-       
-       function Socket(io, nsp, opts) {
-         this.io = io;
-         this.nsp = nsp;
-         this.json = this; // compat
-         this.ids = 0;
-         this.acks = {};
-         this.receiveBuffer = [];
-         this.sendBuffer = [];
-         this.connected = false;
-         this.disconnected = true;
-         this.flags = {};
-         if (opts && opts.query) {
-           this.query = opts.query;
-         }
-         if (this.io.autoConnect) this.open();
-       }
-       
-       /**
-        * Mix in `Emitter`.
-        */
-       
-       Emitter(Socket.prototype);
-       
-       /**
-        * Subscribe to open, close and packet events
-        *
-        * @api private
-        */
-       
-       Socket.prototype.subEvents = function () {
-         if (this.subs) return;
-       
-         var io = this.io;
-         this.subs = [on(io, 'open', bind(this, 'onopen')), on(io, 'packet', bind(this, 'onpacket')), on(io, 'close', bind(this, 'onclose'))];
-       };
-       
-       /**
-        * "Opens" the socket.
-        *
-        * @api public
-        */
-       
-       Socket.prototype.open = Socket.prototype.connect = function () {
-         if (this.connected) return this;
-       
-         this.subEvents();
-         this.io.open(); // ensure open
-         if ('open' === this.io.readyState) this.onopen();
-         this.emit('connecting');
-         return this;
-       };
-       
-       /**
-        * Sends a `message` event.
-        *
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.send = function () {
-         var args = toArray(arguments);
-         args.unshift('message');
-         this.emit.apply(this, args);
-         return this;
-       };
-       
-       /**
-        * Override `emit`.
-        * If the event is in `events`, it's emitted normally.
-        *
-        * @param {String} event name
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.emit = function (ev) {
-         if (events.hasOwnProperty(ev)) {
-           emit.apply(this, arguments);
-           return this;
-         }
-       
-         var args = toArray(arguments);
-         var packet = {
-           type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,
-           data: args
-         };
-       
-         packet.options = {};
-         packet.options.compress = !this.flags || false !== this.flags.compress;
-       
-         // event ack callback
-         if ('function' === typeof args[args.length - 1]) {
-       
-           this.acks[this.ids] = args.pop();
-           packet.id = this.ids++;
-         }
-       
-         if (this.connected) {
-           this.packet(packet);
-         } else {
-           this.sendBuffer.push(packet);
-         }
-       
-         this.flags = {};
-       
-         return this;
-       };
-       
-       /**
-        * Sends a packet.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Socket.prototype.packet = function (packet) {
-         packet.nsp = this.nsp;
-         this.io.packet(packet);
-       };
-       
-       /**
-        * Called upon engine `open`.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onopen = function () {
-       
-         // write connect packet if necessary
-         if ('/' !== this.nsp) {
-           if (this.query) {
-             var query = _typeof(this.query) === 'object' ? parseqs.encode(this.query) : this.query;
-       
-             this.packet({ type: parser.CONNECT, query: query });
-           } else {
-             this.packet({ type: parser.CONNECT });
-           }
-         }
-       };
-       
-       /**
-        * Called upon engine `close`.
-        *
-        * @param {String} reason
-        * @api private
-        */
-       
-       Socket.prototype.onclose = function (reason) {
-       
-         this.connected = false;
-         this.disconnected = true;
-         delete this.id;
-         this.emit('disconnect', reason);
-       };
-       
-       /**
-        * Called with socket packet.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Socket.prototype.onpacket = function (packet) {
-         var sameNamespace = packet.nsp === this.nsp;
-         var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';
-       
-         if (!sameNamespace && !rootNamespaceError) return;
-       
-         switch (packet.type) {
-           case parser.CONNECT:
-             this.onconnect();
-             break;
-       
-           case parser.EVENT:
-             this.onevent(packet);
-             break;
-       
-           case parser.BINARY_EVENT:
-             this.onevent(packet);
-             break;
-       
-           case parser.ACK:
-             this.onack(packet);
-             break;
-       
-           case parser.BINARY_ACK:
-             this.onack(packet);
-             break;
-       
-           case parser.DISCONNECT:
-             this.ondisconnect();
-             break;
-       
-           case parser.ERROR:
-             this.emit('error', packet.data);
-             break;
-         }
-       };
-       
-       /**
-        * Called upon a server event.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Socket.prototype.onevent = function (packet) {
-         var args = packet.data || [];
-       
-         if (null != packet.id) {
-       
-           args.push(this.ack(packet.id));
-         }
-       
-         if (this.connected) {
-           emit.apply(this, args);
-         } else {
-           this.receiveBuffer.push(args);
-         }
-       };
-       
-       /**
-        * Produces an ack callback to emit with an event.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.ack = function (id) {
-         var self = this;
-         var sent = false;
-         return function () {
-           // prevent double callbacks
-           if (sent) return;
-           sent = true;
-           var args = toArray(arguments);
-       
-           self.packet({
-             type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,
-             id: id,
-             data: args
-           });
-         };
-       };
-       
-       /**
-        * Called upon a server acknowlegement.
-        *
-        * @param {Object} packet
-        * @api private
-        */
-       
-       Socket.prototype.onack = function (packet) {
-         var ack = this.acks[packet.id];
-         if ('function' === typeof ack) {
-       
-           ack.apply(this, packet.data);
-           delete this.acks[packet.id];
-         } else {}
-       };
-       
-       /**
-        * Called upon server connect.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.onconnect = function () {
-         this.connected = true;
-         this.disconnected = false;
-         this.emit('connect');
-         this.emitBuffered();
-       };
-       
-       /**
-        * Emit buffered events (received and emitted).
-        *
-        * @api private
-        */
-       
-       Socket.prototype.emitBuffered = function () {
-         var i;
-         for (i = 0; i < this.receiveBuffer.length; i++) {
-           emit.apply(this, this.receiveBuffer[i]);
-         }
-         this.receiveBuffer = [];
-       
-         for (i = 0; i < this.sendBuffer.length; i++) {
-           this.packet(this.sendBuffer[i]);
-         }
-         this.sendBuffer = [];
-       };
-       
-       /**
-        * Called upon server disconnect.
-        *
-        * @api private
-        */
-       
-       Socket.prototype.ondisconnect = function () {
-       
-         this.destroy();
-         this.onclose('io server disconnect');
-       };
-       
-       /**
-        * Called upon forced client/server side disconnections,
-        * this method ensures the manager stops tracking us and
-        * that reconnections don't get triggered for this.
-        *
-        * @api private.
-        */
-       
-       Socket.prototype.destroy = function () {
-         if (this.subs) {
-           // clean subscriptions to avoid reconnections
-           for (var i = 0; i < this.subs.length; i++) {
-             this.subs[i].destroy();
-           }
-           this.subs = null;
-         }
-       
-         this.io.destroy(this);
-       };
-       
-       /**
-        * Disconnects the socket manually.
-        *
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.close = Socket.prototype.disconnect = function () {
-         if (this.connected) {
-       
-           this.packet({ type: parser.DISCONNECT });
-         }
-       
-         // remove socket from pool
-         this.destroy();
-       
-         if (this.connected) {
-           // fire events
-           this.onclose('io client disconnect');
-         }
-         return this;
-       };
-       
-       /**
-        * Sets the compress flag.
-        *
-        * @param {Boolean} if `true`, compresses the sending data
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.compress = function (compress) {
-         this.flags.compress = compress;
-         return this;
-       };
-       
-       /**
-        * Sets the binary flag
-        *
-        * @param {Boolean} whether the emitted data contains binary
-        * @return {Socket} self
-        * @api public
-        */
-       
-       Socket.prototype.binary = function (binary) {
-         this.flags.binary = binary;
-         return this;
-       };
-
-/***/ }),
-/* 34 */
-/***/ (function(module, exports) {
-
-       module.exports = toArray
-       
-       function toArray(list, index) {
-           var array = []
-       
-           index = index || 0
-       
-           for (var i = index || 0; i < list.length; i++) {
-               array[i - index] = list[i]
-           }
-       
-           return array
-       }
-
-
-/***/ }),
-/* 35 */
-/***/ (function(module, exports) {
-
-       "use strict";
-       
-       /**
-        * Module exports.
-        */
-       
-       module.exports = on;
-       
-       /**
-        * Helper for subscriptions.
-        *
-        * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`
-        * @param {String} event name
-        * @param {Function} callback
-        * @api public
-        */
-       
-       function on(obj, ev, fn) {
-         obj.on(ev, fn);
-         return {
-           destroy: function destroy() {
-             obj.removeListener(ev, fn);
-           }
-         };
-       }
-
-/***/ }),
-/* 36 */
-/***/ (function(module, exports) {
-
-       /**
-        * Slice reference.
-        */
-       
-       var slice = [].slice;
-       
-       /**
-        * Bind `obj` to `fn`.
-        *
-        * @param {Object} obj
-        * @param {Function|String} fn or string
-        * @return {Function}
-        * @api public
-        */
-       
-       module.exports = function(obj, fn){
-         if ('string' == typeof fn) fn = obj[fn];
-         if ('function' != typeof fn) throw new Error('bind() requires a function');
-         var args = slice.call(arguments, 2);
-         return function(){
-           return fn.apply(obj, args.concat(slice.call(arguments)));
-         }
-       };
-
-
-/***/ }),
-/* 37 */
-/***/ (function(module, exports) {
-
-       
-       /**
-        * Expose `Backoff`.
-        */
-       
-       module.exports = Backoff;
-       
-       /**
-        * Initialize backoff timer with `opts`.
-        *
-        * - `min` initial timeout in milliseconds [100]
-        * - `max` max timeout [10000]
-        * - `jitter` [0]
-        * - `factor` [2]
-        *
-        * @param {Object} opts
-        * @api public
-        */
-       
-       function Backoff(opts) {
-         opts = opts || {};
-         this.ms = opts.min || 100;
-         this.max = opts.max || 10000;
-         this.factor = opts.factor || 2;
-         this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;
-         this.attempts = 0;
-       }
-       
-       /**
-        * Return the backoff duration.
-        *
-        * @return {Number}
-        * @api public
-        */
-       
-       Backoff.prototype.duration = function(){
-         var ms = this.ms * Math.pow(this.factor, this.attempts++);
-         if (this.jitter) {
-           var rand =  Math.random();
-           var deviation = Math.floor(rand * this.jitter * ms);
-           ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;
-         }
-         return Math.min(ms, this.max) | 0;
-       };
-       
-       /**
-        * Reset the number of attempts.
-        *
-        * @api public
-        */
-       
-       Backoff.prototype.reset = function(){
-         this.attempts = 0;
-       };
-       
-       /**
-        * Set the minimum duration
-        *
-        * @api public
-        */
-       
-       Backoff.prototype.setMin = function(min){
-         this.ms = min;
-       };
-       
-       /**
-        * Set the maximum duration
-        *
-        * @api public
-        */
-       
-       Backoff.prototype.setMax = function(max){
-         this.max = max;
-       };
-       
-       /**
-        * Set the jitter
-        *
-        * @api public
-        */
-       
-       Backoff.prototype.setJitter = function(jitter){
-         this.jitter = jitter;
-       };
-       
-
-
-/***/ })
-/******/ ])
-});
-;
-//# sourceMappingURL=socket.io.slim.dev.js.map
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.dev.js.map b/signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.dev.js.map
deleted file mode 100644 (file)
index 5082289..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 808b2ef720f56a2d39b6","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./support/noop.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///ws (ignored)","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["url","require","parser","Manager","debug","module","exports","lookup","cache","managers","uri","opts","undefined","parsed","source","id","path","sameNamespace","nsps","newConnection","forceNew","multiplex","io","query","socket","protocol","connect","Socket","parseuri","loc","obj","location","host","charAt","test","port","ipv6","indexOf","href","eio","Emitter","on","bind","Backoff","has","Object","prototype","hasOwnProperty","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","min","max","jitter","timeout","readyState","connecting","lastPing","encoding","packetBuffer","_parser","encoder","Encoder","decoder","Decoder","autoConnect","open","emitAll","emit","apply","arguments","nsp","call","updateSocketIds","generateId","engine","v","length","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","fn","self","skipReconnect","openSub","onopen","errorSub","data","cleanup","err","Error","timer","setTimeout","destroy","close","push","clearTimeout","onping","Date","onpong","ondata","add","ondecoded","packet","onerror","onConnecting","index","splice","type","encode","encodedPackets","i","write","options","processPacketQueue","pack","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","toArray","parseqs","hasBin","events","connect_error","connect_timeout","error","reconnect_attempt","reconnect_failed","reconnect_error","ping","pong","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","subEvents","send","args","unshift","ev","binary","BINARY_EVENT","EVENT","compress","pop","CONNECT","onpacket","rootNamespaceError","ERROR","onconnect","onevent","ACK","onack","BINARY_ACK","DISCONNECT","ondisconnect","ack","sent","emitBuffered","removeListener"],"mappings":"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AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;;;AAGA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B,uBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,sFAAqF;AACrF;;AAEA;AACA;AACA;AACA;AACA,MAAK,OAAO;AACZ;AACA;AACA,IAAG,qCAAqC;AACxC;AACA;AACA,MAAK;AACL;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,oBAAoB;AAChC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7ZA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;AClKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC,WAAU;AACV;;AAEA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA,IAAG;AACH;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA,kCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,8BAA6B;AAC7B,IAAG;AACH,oBAAmB,iBAAiB;AACpC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC;AACxC,MAAK,yBAAyB;AAC9B,sBAAqB,gBAAgB;AACrC;AACA;AACA,MAAK,mDAAmD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5IA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AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA2F;;AAE3F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;;AAEA,+CAA8C,WAAW;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA,sBAAqB,8BAA8B;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;;AAEA;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8CAA6C,OAAO;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA;AACA;AACA;;;;;;;AC3uBA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA,MAAK,YAAY;AACjB;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;;;;;;AChBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA,2BAA0B,iDAAiD;AAC3E;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,UAAS;AACT,4DAA2D;AAC3D;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,gIAA+H;AAC/H;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;;AAGA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,iGAAgG;AAChG;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChaA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,iBAAiB;AACjD;AACA,EAAC;;AAED;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,kBAAiB,gBAAgB;AACjC;;AAEA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACpPA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,YAAW;;AAEX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+DAA8D,gBAAgB;AAC9E;;AAEA;;AAEA;;AAEA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B,qCAAqC;AAC/D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAc;AACd,MAAK;AACL,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA,+BAA8B,gBAAgB;AAC9C,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,aAAY,oBAAoB,oCAAoC;AACpE;;AAEA;;AAEA;AACA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY,YAAY;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oDAAmD;AACnD,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA,QAAO,OAAO;AACd;AACA;;AAEA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA,MAAK;;AAEL;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,EAAE;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;;;;;;;AC3lBA;AACA;AACA;AACA,aAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B,sCAAsC;;AAEhE,mBAAkB,gBAAgB;AAClC,iBAAgB,cAAc;AAC9B,qBAAoB,aAAa;;AAEjC;AACA;AACA;;AAEA;AACA;AACA,8BAA6B,SAAS;AACtC;AACA;AACA;AACA;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA,KAAI;AACJ,4BAA2B;AAC3B;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;;AAEA;AACA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;;;AClED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA,0DAAyD;AACzD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA,EAAC;;;;;;;ACnGD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,cAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAM,YAAY;;AAElB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;;AC9OA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,IAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;;AAET;;AAEA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;;;;;;ACtSA,gB;;;;;;;ACCA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA,G;;;;;;;;;;ACRA;;;;AAIA,KAAI3I,SAAS,mBAAAD,CAAQ,CAAR,CAAb;AACA,KAAIuC,UAAU,mBAAAvC,CAAQ,CAAR,CAAd;AACA,KAAI6I,UAAU,mBAAA7I,CA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","file":"socket.io.slim.dev.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 808b2ef720f56a2d39b6","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/index.js","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/url.js","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","\nmodule.exports = function () { return function () {}; };\n\n\n\n// WEBPACK FOOTER //\n// ./support/noop.js","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 4\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 5\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 6\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 7\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 8\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n\n  if (~this.readyState.indexOf('open')) return this;\n\n\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n\n\n    // set timer\n    var timer = setTimeout(function () {\n\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/manager.js","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 10\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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\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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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\n  var self = this;\n\n  if (this.transport) {\n\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\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\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\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n\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\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\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\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\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\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\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(JSON.parse(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\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\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\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\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\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\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 11\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 12\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('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 self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 13\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 14\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 15\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n\n      total++;\n      this.once('pollComplete', function () {\n\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n\n      total++;\n      this.once('drain', function () {\n\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\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\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\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\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n\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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 18\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 19\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 20\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 21\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 22\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 23\n// module chunks = 0","/*\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 24\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 25\n// module chunks = 0","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 26\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 27\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 28\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('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 * Until https://github.com/tc39/proposal-global is shipped.\n */\nfunction glob () {\n  return typeof self !== 'undefined' ? self\n      : typeof window !== 'undefined' ? window\n      : typeof global !== 'undefined' ? global : {};\n}\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    var global = glob();\n    callbacks = global.___eio = (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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 29\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\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  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 30\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// ws (ignored)\n// module id = 31\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 32\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n\n\n  if (null != packet.id) {\n\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/socket.js","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 34\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/on.js","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 36\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 37\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.js b/signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.js
deleted file mode 100644 (file)
index 2d89d90..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * Socket.IO v2.3.0
- * (c) 2014-2019 Guillermo Rauch
- * Released under the MIT License.
- */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function n(t,e){"object"===("undefined"==typeof t?"undefined":o(t))&&(e=t,t=void 0),e=e||{};var r,n=i(t),s=n.source,p=n.id,h=n.path,u=c[p]&&h in c[p].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||u;return f?r=a(s,e):(c[p]||(c[p]=a(s,e)),r=c[p]),n.query&&!e.query&&(e.query=n.query),r.socket(n.path,e)}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(1),s=r(4),a=r(9);r(3)("socket.io-client");t.exports=e=n;var c=e.managers={};e.protocol=s.protocol,e.connect=n,e.Manager=r(9),e.Socket=r(33)},function(t,e,r){"use strict";function n(t,e){var r=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),r=o(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var n=r.host.indexOf(":")!==-1,i=n?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+i+":"+r.port,r.href=r.protocol+"://"+i+(e&&e.port===r.port?"":":"+r.port),r}var o=r(2);r(3)("socket.io-client:url");t.exports=n},function(t,e){var r=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,n=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");o!=-1&&i!=-1&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s=r.exec(t||""),a={},c=14;c--;)a[n[c]]=s[c]||"";return o!=-1&&i!=-1&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a}},function(t,e){"use strict";t.exports=function(){return function(){}}},function(t,e,r){function n(){}function o(t){var r=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(r+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(r+=t.nsp+","),null!=t.id&&(r+=t.id),null!=t.data){var n=i(t.data);if(n===!1)return m;r+=n}return r}function i(t){try{return JSON.stringify(t)}catch(t){return!1}}function s(t,e){function r(t){var r=l.deconstructPacket(t),n=o(r.packet),i=r.buffers;i.unshift(n),e(i)}l.removeBlobs(t,r)}function a(){this.reconstructor=null}function c(t){var r=0,n={type:Number(t.charAt(0))};if(null==e.types[n.type])return u("unknown packet type "+n.type);if(e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type){for(var o="";"-"!==t.charAt(++r)&&(o+=t.charAt(r),r!=t.length););if(o!=Number(o)||"-"!==t.charAt(r))throw new Error("Illegal attachments");n.attachments=Number(o)}if("/"===t.charAt(r+1))for(n.nsp="";++r;){var i=t.charAt(r);if(","===i)break;if(n.nsp+=i,r===t.length)break}else n.nsp="/";var s=t.charAt(r+1);if(""!==s&&Number(s)==s){for(n.id="";++r;){var i=t.charAt(r);if(null==i||Number(i)!=i){--r;break}if(n.id+=t.charAt(r),r===t.length)break}n.id=Number(n.id)}if(t.charAt(++r)){var a=p(t.substr(r)),c=a!==!1&&(n.type===e.ERROR||d(a));if(!c)return u("invalid payload");n.data=a}return n}function p(t){try{return JSON.parse(t)}catch(t){return!1}}function h(t){this.reconPack=t,this.buffers=[]}function u(t){return{type:e.ERROR,data:"parser error: "+t}}var f=(r(3)("socket.io-parser"),r(5)),l=r(6),d=r(7),y=r(8);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=n,e.Decoder=a;var m=e.ERROR+'"encode error"';n.prototype.encode=function(t,r){if(e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,r);else{var n=o(t);r([n])}},f(a.prototype),a.prototype.add=function(t){var r;if("string"==typeof t)r=c(t),e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type?(this.reconstructor=new h(r),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",r)):this.emit("decoded",r);else{if(!y(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");r=this.reconstructor.takeBinaryData(t),r&&(this.reconstructor=null,this.emit("decoded",r))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},h.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=l.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},h.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,r){function n(t){if(t)return o(t)}function o(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},n.prototype.once=function(t,e){function r(){this.off(t,r),e.apply(this,arguments)}return r.fn=e,this.on(t,r),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var n,o=0;o<r.length;o++)if(n=r[o],n===e||n.fn===e){r.splice(o,1);break}return this},n.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),r=this._callbacks["$"+t];if(r){r=r.slice(0);for(var n=0,o=r.length;n<o;++n)r[n].apply(this,e)}return this},n.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},n.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,r){function n(t,e){if(!t)return t;if(s(t)){var r={_placeholder:!0,num:e.length};return e.push(t),r}if(i(t)){for(var o=new Array(t.length),a=0;a<t.length;a++)o[a]=n(t[a],e);return o}if("object"==typeof t&&!(t instanceof Date)){var o={};for(var c in t)o[c]=n(t[c],e);return o}return t}function o(t,e){if(!t)return t;if(t&&t._placeholder)return e[t.num];if(i(t))for(var r=0;r<t.length;r++)t[r]=o(t[r],e);else if("object"==typeof t)for(var n in t)t[n]=o(t[n],e);return t}var i=r(7),s=r(8),a=Object.prototype.toString,c="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===a.call(Blob),p="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===a.call(File);e.deconstructPacket=function(t){var e=[],r=t.data,o=t;return o.data=n(r,e),o.attachments=e.length,{packet:o,buffers:e}},e.reconstructPacket=function(t,e){return t.data=o(t.data,e),t.attachments=void 0,t},e.removeBlobs=function(t,e){function r(t,a,h){if(!t)return t;if(c&&t instanceof Blob||p&&t instanceof File){n++;var u=new FileReader;u.onload=function(){h?h[a]=this.result:o=this.result,--n||e(o)},u.readAsArrayBuffer(t)}else if(i(t))for(var f=0;f<t.length;f++)r(t[f],f,t);else if("object"==typeof t&&!s(t))for(var l in t)r(t[l],l,t)}var n=0,o=t;r(o),n||e(o)}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e){function r(t){return n&&Buffer.isBuffer(t)||o&&(t instanceof ArrayBuffer||i(t))}t.exports=r;var n="function"==typeof Buffer&&"function"==typeof Buffer.isBuffer,o="function"==typeof ArrayBuffer,i=function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer}},function(t,e,r){"use strict";function n(t,e){if(!(this instanceof n))return new n(t,e);t&&"object"===("undefined"==typeof t?"undefined":o(t))&&(e=t,t=void 0),e=e||{},e.path=e.path||"/socket.io",this.nsps={},this.subs=[],this.opts=e,this.reconnection(e.reconnection!==!1),this.reconnectionAttempts(e.reconnectionAttempts||1/0),this.reconnectionDelay(e.reconnectionDelay||1e3),this.reconnectionDelayMax(e.reconnectionDelayMax||5e3),this.randomizationFactor(e.randomizationFactor||.5),this.backoff=new f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==e.timeout?2e4:e.timeout),this.readyState="closed",this.uri=t,this.connecting=[],this.lastPing=null,this.encoding=!1,this.packetBuffer=[];var r=e.parser||c;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this.autoConnect=e.autoConnect!==!1,this.autoConnect&&this.open()}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(10),s=r(33),a=r(5),c=r(4),p=r(35),h=r(36),u=(r(3)("socket.io-client:manager"),r(32)),f=r(37),l=Object.prototype.hasOwnProperty;t.exports=n,n.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var t in this.nsps)l.call(this.nsps,t)&&this.nsps[t].emit.apply(this.nsps[t],arguments)},n.prototype.updateSocketIds=function(){for(var t in this.nsps)l.call(this.nsps,t)&&(this.nsps[t].id=this.generateId(t))},n.prototype.generateId=function(t){return("/"===t?"":t+"#")+this.engine.id},a(n.prototype),n.prototype.reconnection=function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection},n.prototype.reconnectionAttempts=function(t){return arguments.length?(this._reconnectionAttempts=t,this):this._reconnectionAttempts},n.prototype.reconnectionDelay=function(t){return arguments.length?(this._reconnectionDelay=t,this.backoff&&this.backoff.setMin(t),this):this._reconnectionDelay},n.prototype.randomizationFactor=function(t){return arguments.length?(this._randomizationFactor=t,this.backoff&&this.backoff.setJitter(t),this):this._randomizationFactor},n.prototype.reconnectionDelayMax=function(t){return arguments.length?(this._reconnectionDelayMax=t,this.backoff&&this.backoff.setMax(t),this):this._reconnectionDelayMax},n.prototype.timeout=function(t){return arguments.length?(this._timeout=t,this):this._timeout},n.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},n.prototype.open=n.prototype.connect=function(t,e){if(~this.readyState.indexOf("open"))return this;this.engine=i(this.uri,this.opts);var r=this.engine,n=this;this.readyState="opening",this.skipReconnect=!1;var o=p(r,"open",function(){n.onopen(),t&&t()}),s=p(r,"error",function(e){if(n.cleanup(),n.readyState="closed",n.emitAll("connect_error",e),t){var r=new Error("Connection error");r.data=e,t(r)}else n.maybeReconnectOnOpen()});if(!1!==this._timeout){var a=this._timeout,c=setTimeout(function(){o.destroy(),r.close(),r.emit("error","timeout"),n.emitAll("connect_timeout",a)},a);this.subs.push({destroy:function(){clearTimeout(c)}})}return this.subs.push(o),this.subs.push(s),this},n.prototype.onopen=function(){this.cleanup(),this.readyState="open",this.emit("open");var t=this.engine;this.subs.push(p(t,"data",h(this,"ondata"))),this.subs.push(p(t,"ping",h(this,"onping"))),this.subs.push(p(t,"pong",h(this,"onpong"))),this.subs.push(p(t,"error",h(this,"onerror"))),this.subs.push(p(t,"close",h(this,"onclose"))),this.subs.push(p(this.decoder,"decoded",h(this,"ondecoded")))},n.prototype.onping=function(){this.lastPing=new Date,this.emitAll("ping")},n.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)},n.prototype.ondata=function(t){this.decoder.add(t)},n.prototype.ondecoded=function(t){this.emit("packet",t)},n.prototype.onerror=function(t){this.emitAll("error",t)},n.prototype.socket=function(t,e){function r(){~u(o.connecting,n)||o.connecting.push(n)}var n=this.nsps[t];if(!n){n=new s(this,t,e),this.nsps[t]=n;var o=this;n.on("connecting",r),n.on("connect",function(){n.id=o.generateId(t)}),this.autoConnect&&r()}return n},n.prototype.destroy=function(t){var e=u(this.connecting,t);~e&&this.connecting.splice(e,1),this.connecting.length||this.close()},n.prototype.packet=function(t){var e=this;t.query&&0===t.type&&(t.nsp+="?"+t.query),e.encoding?e.packetBuffer.push(t):(e.encoding=!0,this.encoder.encode(t,function(r){for(var n=0;n<r.length;n++)e.engine.write(r[n],t.options);e.encoding=!1,e.processPacketQueue()}))},n.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},n.prototype.cleanup=function(){for(var t=this.subs.length,e=0;e<t;e++){var r=this.subs.shift();r.destroy()}this.packetBuffer=[],this.encoding=!1,this.lastPing=null,this.decoder.destroy()},n.prototype.close=n.prototype.disconnect=function(){this.skipReconnect=!0,this.reconnecting=!1,"opening"===this.readyState&&this.cleanup(),this.backoff.reset(),this.readyState="closed",this.engine&&this.engine.close()},n.prototype.onclose=function(t){this.cleanup(),this.backoff.reset(),this.readyState="closed",this.emit("close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()},n.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();this.reconnecting=!0;var r=setTimeout(function(){t.skipReconnect||(t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):t.onreconnect()}))},e);this.subs.push({destroy:function(){clearTimeout(r)}})}},n.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,r){t.exports=r(11),t.exports.parser=r(18)},function(t,e,r){function n(t,e){return this instanceof n?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new n(t,e)}function o(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}var i=r(12),s=r(5),a=(r(3)("engine.io-client:socket"),r(32)),c=r(18),p=r(2),h=r(26);t.exports=n,n.priorWebsocketSuccess=!1,s(n.prototype),n.protocol=c.protocol,n.Socket=n,n.Transport=r(17),n.transports=r(12),n.parser=r(18),n.prototype.createTransport=function(t){var e=o(this.query);e.EIO=c.protocol,e.transport=t;var r=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var n=new i[t]({query:e,socket:this,agent:r.agent||this.agent,hostname:r.hostname||this.hostname,port:r.port||this.port,secure:r.secure||this.secure,path:r.path||this.path,forceJSONP:r.forceJSONP||this.forceJSONP,jsonp:r.jsonp||this.jsonp,forceBase64:r.forceBase64||this.forceBase64,enablesXDR:r.enablesXDR||this.enablesXDR,withCredentials:r.withCredentials||this.withCredentials,timestampRequests:r.timestampRequests||this.timestampRequests,timestampParam:r.timestampParam||this.timestampParam,policyPort:r.policyPort||this.policyPort,pfx:r.pfx||this.pfx,key:r.key||this.key,passphrase:r.passphrase||this.passphrase,cert:r.cert||this.cert,ca:r.ca||this.ca,ciphers:r.ciphers||this.ciphers,rejectUnauthorized:r.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:r.perMessageDeflate||this.perMessageDeflate,extraHeaders:r.extraHeaders||this.extraHeaders,forceNode:r.forceNode||this.forceNode,localAddress:r.localAddress||this.localAddress,requestTimeout:r.requestTimeout||this.requestTimeout,protocols:r.protocols||void 0,isReactNative:this.isReactNative});return n},n.prototype.open=function(){var t;if(this.rememberUpgrade&&n.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{if(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},n.prototype.setTransport=function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},n.prototype.probe=function(t){function e(){if(u.onlyBinaryUpgrades){var t=!this.supportsBinary&&u.transport.supportsBinary;h=h||t}h||(p.send([{type:"ping",data:"probe"}]),p.once("packet",function(t){if(!h)if("pong"===t.type&&"probe"===t.data){if(u.upgrading=!0,u.emit("upgrading",p),!p)return;n.priorWebsocketSuccess="websocket"===p.name,u.transport.pause(function(){h||"closed"!==u.readyState&&(c(),u.setTransport(p),p.send([{type:"upgrade"}]),u.emit("upgrade",p),p=null,u.upgrading=!1,u.flush())})}else{var e=new Error("probe error");e.transport=p.name,u.emit("upgradeError",e)}}))}function r(){h||(h=!0,c(),p.close(),p=null)}function o(t){var e=new Error("probe error: "+t);e.transport=p.name,r(),u.emit("upgradeError",e)}function i(){o("transport closed")}function s(){o("socket closed")}function a(t){p&&t.name!==p.name&&r()}function c(){p.removeListener("open",e),p.removeListener("error",o),p.removeListener("close",i),u.removeListener("close",s),u.removeListener("upgrading",a)}var p=this.createTransport(t,{probe:1}),h=!1,u=this;n.priorWebsocketSuccess=!1,p.once("open",e),p.once("error",o),p.once("close",i),this.once("close",s),this.once("upgrading",a),p.open()},n.prototype.onOpen=function(){if(this.readyState="open",n.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t<e;t++)this.probe(this.upgrades[t])},n.prototype.onPacket=function(t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"pong":this.setPing(),this.emit("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}},n.prototype.onHandshake=function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!==this.readyState&&(this.setPing(),this.removeListener("heartbeat",this.onHeartbeat),this.on("heartbeat",this.onHeartbeat))},n.prototype.onHeartbeat=function(t){clearTimeout(this.pingTimeoutTimer);var e=this;e.pingTimeoutTimer=setTimeout(function(){"closed"!==e.readyState&&e.onClose("ping timeout")},t||e.pingInterval+e.pingTimeout)},n.prototype.setPing=function(){var t=this;clearTimeout(t.pingIntervalTimer),t.pingIntervalTimer=setTimeout(function(){t.ping(),t.onHeartbeat(t.pingTimeout)},t.pingInterval)},n.prototype.ping=function(){var t=this;this.sendPacket("ping",function(){t.emit("ping")})},n.prototype.onDrain=function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()},n.prototype.flush=function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))},n.prototype.write=n.prototype.send=function(t,e,r){return this.sendPacket("message",t,e,r),this},n.prototype.sendPacket=function(t,e,r,n){if("function"==typeof e&&(n=e,e=void 0),"function"==typeof r&&(n=r,r=null),"closing"!==this.readyState&&"closed"!==this.readyState){r=r||{},r.compress=!1!==r.compress;var o={type:t,data:e,options:r};this.emit("packetCreate",o),this.writeBuffer.push(o),n&&this.once("flush",n),this.flush()}},n.prototype.close=function(){function t(){n.onClose("forced close"),n.transport.close()}function e(){n.removeListener("upgrade",e),n.removeListener("upgradeError",e),t()}function r(){n.once("upgrade",e),n.once("upgradeError",e)}if("opening"===this.readyState||"open"===this.readyState){this.readyState="closing";var n=this;this.writeBuffer.length?this.once("drain",function(){this.upgrading?r():t()}):this.upgrading?r():t()}return this},n.prototype.onError=function(t){n.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)},n.prototype.onClose=function(t,e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){var r=this;clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",t,e),r.writeBuffer=[],r.prevBufferLen=0}},n.prototype.filterUpgrades=function(t){for(var e=[],r=0,n=t.length;r<n;r++)~a(this.transports,t[r])&&e.push(t[r]);return e}},function(t,e,r){function n(t){var e,r=!1,n=!1,a=!1!==t.jsonp;if("undefined"!=typeof location){var c="https:"===location.protocol,p=location.port;p||(p=c?443:80),r=t.hostname!==location.hostname||p!==t.port,n=t.secure!==c}if(t.xdomain=r,t.xscheme=n,e=new o(t),"open"in e&&!t.forceJSONP)return new i(t);if(!a)throw new Error("JSONP disabled");return new s(t)}var o=r(13),i=r(15),s=r(29),a=r(30);e.polling=n,e.websocket=a},function(t,e,r){var n=r(14);t.exports=function(t){var e=t.xdomain,r=t.xscheme,o=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||n))return new XMLHttpRequest}catch(t){}try{if("undefined"!=typeof XDomainRequest&&!r&&o)return new XDomainRequest}catch(t){}if(!e)try{return new(self[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}},function(t,e){try{t.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){t.exports=!1}},function(t,e,r){function n(){}function o(t){if(c.call(this,t),this.requestTimeout=t.requestTimeout,this.extraHeaders=t.extraHeaders,"undefined"!=typeof location){var e="https:"===location.protocol,r=location.port;r||(r=e?443:80),this.xd="undefined"!=typeof location&&t.hostname!==location.hostname||r!==t.port,this.xs=t.secure!==e}}function i(t){this.method=t.method||"GET",this.uri=t.uri,this.xd=!!t.xd,this.xs=!!t.xs,this.async=!1!==t.async,this.data=void 0!==t.data?t.data:null,this.agent=t.agent,this.isBinary=t.isBinary,this.supportsBinary=t.supportsBinary,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.requestTimeout=t.requestTimeout,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.extraHeaders=t.extraHeaders,this.create()}function s(){for(var t in i.requests)i.requests.hasOwnProperty(t)&&i.requests[t].abort()}var a=r(13),c=r(16),p=r(5),h=r(27);r(3)("engine.io-client:polling-xhr");if(t.exports=o,t.exports.Request=i,h(o,c),o.prototype.supportsBinary=!0,o.prototype.request=function(t){return t=t||{},t.uri=this.uri(),t.xd=this.xd,t.xs=this.xs,t.agent=this.agent||!1,t.supportsBinary=this.supportsBinary,t.enablesXDR=this.enablesXDR,t.withCredentials=this.withCredentials,t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized,t.requestTimeout=this.requestTimeout,t.extraHeaders=this.extraHeaders,new i(t)},o.prototype.doWrite=function(t,e){var r="string"!=typeof t&&void 0!==t,n=this.request({method:"POST",data:t,isBinary:r}),o=this;n.on("success",e),n.on("error",function(t){o.onError("xhr post error",t)}),this.sendXhr=n},o.prototype.doPoll=function(){var t=this.request(),e=this;t.on("data",function(t){e.onData(t)}),t.on("error",function(t){e.onError("xhr poll error",t)}),this.pollXhr=t},p(i.prototype),i.prototype.create=function(){var t={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized;var e=this.xhr=new a(t),r=this;try{e.open(this.method,this.uri,this.async);try{if(this.extraHeaders){e.setDisableHeaderCheck&&e.setDisableHeaderCheck(!0);for(var n in this.extraHeaders)this.extraHeaders.hasOwnProperty(n)&&e.setRequestHeader(n,this.extraHeaders[n])}}catch(t){}if("POST"===this.method)try{this.isBinary?e.setRequestHeader("Content-type","application/octet-stream"):e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{e.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in e&&(e.withCredentials=this.withCredentials),this.requestTimeout&&(e.timeout=this.requestTimeout),this.hasXDR()?(e.onload=function(){r.onLoad()},e.onerror=function(){r.onError(e.responseText)}):e.onreadystatechange=function(){if(2===e.readyState)try{var t=e.getResponseHeader("Content-Type");(r.supportsBinary&&"application/octet-stream"===t||"application/octet-stream; charset=UTF-8"===t)&&(e.responseType="arraybuffer")}catch(t){}4===e.readyState&&(200===e.status||1223===e.status?r.onLoad():setTimeout(function(){r.onError("number"==typeof e.status?e.status:0)},0))},e.send(this.data)}catch(t){return void setTimeout(function(){r.onError(t)},0)}"undefined"!=typeof document&&(this.index=i.requestsCount++,i.requests[this.index]=this)},i.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},i.prototype.onData=function(t){this.emit("data",t),this.onSuccess()},i.prototype.onError=function(t){this.emit("error",t),this.cleanup(!0)},i.prototype.cleanup=function(t){if("undefined"!=typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=n:this.xhr.onreadystatechange=n,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete i.requests[this.index],this.xhr=null}},i.prototype.onLoad=function(){var t;try{var e;try{e=this.xhr.getResponseHeader("Content-Type")}catch(t){}t="application/octet-stream"===e||"application/octet-stream; charset=UTF-8"===e?this.xhr.response||this.xhr.responseText:this.xhr.responseText}catch(t){this.onError(t)}null!=t&&this.onData(t)},i.prototype.hasXDR=function(){return"undefined"!=typeof XDomainRequest&&!this.xs&&this.enablesXDR},i.prototype.abort=function(){this.cleanup()},i.requestsCount=0,i.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",s);else if("function"==typeof addEventListener){var u="onpagehide"in self?"pagehide":"unload";addEventListener(u,s,!1)}},function(t,e,r){function n(t){var e=t&&t.forceBase64;p&&!e||(this.supportsBinary=!1),o.call(this,t)}var o=r(17),i=r(26),s=r(18),a=r(27),c=r(28);r(3)("engine.io-client:polling");t.exports=n;var p=function(){var t=r(13),e=new t({xdomain:!1});return null!=e.responseType}();a(n,o),n.prototype.name="polling",n.prototype.doOpen=function(){this.poll()},n.prototype.pause=function(t){function e(){r.readyState="paused",t()}var r=this;if(this.readyState="pausing",this.polling||!this.writable){var n=0;this.polling&&(n++,this.once("pollComplete",function(){--n||e()})),this.writable||(n++,this.once("drain",function(){--n||e()}))}else e()},n.prototype.poll=function(){this.polling=!0,this.doPoll(),this.emit("poll")},n.prototype.onData=function(t){var e=this,r=function(t,r,n){return"opening"===e.readyState&&e.onOpen(),"close"===t.type?(e.onClose(),!1):void e.onPacket(t)};s.decodePayload(t,this.socket.binaryType,r),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState&&this.poll())},n.prototype.doClose=function(){function t(){e.write([{type:"close"}])}var e=this;"open"===this.readyState?t():this.once("open",t)},n.prototype.write=function(t){var e=this;this.writable=!1;var r=function(){e.writable=!0,e.emit("drain")};s.encodePayload(t,this.supportsBinary,function(t){e.doWrite(t,r)})},n.prototype.uri=function(){var t=this.query||{},e=this.secure?"https":"http",r="";!1!==this.timestampRequests&&(t[this.timestampParam]=c()),this.supportsBinary||t.sid||(t.b64=1),t=i.encode(t),this.port&&("https"===e&&443!==Number(this.port)||"http"===e&&80!==Number(this.port))&&(r=":"+this.port),t.length&&(t="?"+t);var n=this.hostname.indexOf(":")!==-1;return e+"://"+(n?"["+this.hostname+"]":this.hostname)+r+this.path+t}},function(t,e,r){function n(t){this.path=t.path,this.hostname=t.hostname,this.port=t.port,this.secure=t.secure,this.query=t.query,this.timestampParam=t.timestampParam,this.timestampRequests=t.timestampRequests,this.readyState="",this.agent=t.agent||!1,this.socket=t.socket,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.forceNode=t.forceNode,this.isReactNative=t.isReactNative,this.extraHeaders=t.extraHeaders,this.localAddress=t.localAddress}var o=r(18),i=r(5);t.exports=n,i(n.prototype),n.prototype.onError=function(t,e){var r=new Error(t);return r.type="TransportError",r.description=e,this.emit("error",r),this},n.prototype.open=function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this},n.prototype.close=function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this},n.prototype.send=function(t){if("open"!==this.readyState)throw new Error("Transport not open");
-this.write(t)},n.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},n.prototype.onData=function(t){var e=o.decodePacket(t,this.socket.binaryType);this.onPacket(e)},n.prototype.onPacket=function(t){this.emit("packet",t)},n.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},function(t,e,r){function n(t,r){var n="b"+e.packets[t.type]+t.data.data;return r(n)}function o(t,r,n){if(!r)return e.encodeBase64Packet(t,n);var o=t.data,i=new Uint8Array(o),s=new Uint8Array(1+o.byteLength);s[0]=v[t.type];for(var a=0;a<i.length;a++)s[a+1]=i[a];return n(s.buffer)}function i(t,r,n){if(!r)return e.encodeBase64Packet(t,n);var o=new FileReader;return o.onload=function(){e.encodePacket({type:t.type,data:o.result},r,!0,n)},o.readAsArrayBuffer(t.data)}function s(t,r,n){if(!r)return e.encodeBase64Packet(t,n);if(g)return i(t,r,n);var o=new Uint8Array(1);o[0]=v[t.type];var s=new w([o.buffer,t.data]);return n(s)}function a(t){try{t=d.decode(t,{strict:!1})}catch(t){return!1}return t}function c(t,e,r){for(var n=new Array(t.length),o=l(t.length,r),i=function(t,r,o){e(r,function(e,r){n[t]=r,o(e,n)})},s=0;s<t.length;s++)i(s,t[s],o)}var p,h=r(19),u=r(20),f=r(21),l=r(22),d=r(23);"undefined"!=typeof ArrayBuffer&&(p=r(24));var y="undefined"!=typeof navigator&&/Android/i.test(navigator.userAgent),m="undefined"!=typeof navigator&&/PhantomJS/i.test(navigator.userAgent),g=y||m;e.protocol=3;var v=e.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},b=h(v),k={type:"error",data:"parser error"},w=r(25);e.encodePacket=function(t,e,r,i){"function"==typeof e&&(i=e,e=!1),"function"==typeof r&&(i=r,r=null);var a=void 0===t.data?void 0:t.data.buffer||t.data;if("undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer)return o(t,e,i);if("undefined"!=typeof w&&a instanceof w)return s(t,e,i);if(a&&a.base64)return n(t,i);var c=v[t.type];return void 0!==t.data&&(c+=r?d.encode(String(t.data),{strict:!1}):String(t.data)),i(""+c)},e.encodeBase64Packet=function(t,r){var n="b"+e.packets[t.type];if("undefined"!=typeof w&&t.data instanceof w){var o=new FileReader;return o.onload=function(){var t=o.result.split(",")[1];r(n+t)},o.readAsDataURL(t.data)}var i;try{i=String.fromCharCode.apply(null,new Uint8Array(t.data))}catch(e){for(var s=new Uint8Array(t.data),a=new Array(s.length),c=0;c<s.length;c++)a[c]=s[c];i=String.fromCharCode.apply(null,a)}return n+=btoa(i),r(n)},e.decodePacket=function(t,r,n){if(void 0===t)return k;if("string"==typeof t){if("b"===t.charAt(0))return e.decodeBase64Packet(t.substr(1),r);if(n&&(t=a(t),t===!1))return k;var o=t.charAt(0);return Number(o)==o&&b[o]?t.length>1?{type:b[o],data:t.substring(1)}:{type:b[o]}:k}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&"blob"===r&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var r=b[t.charAt(0)];if(!p)return{type:r,data:{base64:!0,data:t.substr(1)}};var n=p.decode(t.substr(1));return"blob"===e&&w&&(n=new w([n])),{type:r,data:n}},e.encodePayload=function(t,r,n){function o(t){return t.length+":"+t}function i(t,n){e.encodePacket(t,!!s&&r,!1,function(t){n(null,o(t))})}"function"==typeof r&&(n=r,r=null);var s=u(t);return r&&s?w&&!g?e.encodePayloadAsBlob(t,n):e.encodePayloadAsArrayBuffer(t,n):t.length?void c(t,i,function(t,e){return n(e.join(""))}):n("0:")},e.decodePayload=function(t,r,n){if("string"!=typeof t)return e.decodePayloadAsBinary(t,r,n);"function"==typeof r&&(n=r,r=null);var o;if(""===t)return n(k,0,1);for(var i,s,a="",c=0,p=t.length;c<p;c++){var h=t.charAt(c);if(":"===h){if(""===a||a!=(i=Number(a)))return n(k,0,1);if(s=t.substr(c+1,i),a!=s.length)return n(k,0,1);if(s.length){if(o=e.decodePacket(s,r,!1),k.type===o.type&&k.data===o.data)return n(k,0,1);var u=n(o,c+i,p);if(!1===u)return}c+=i,a=""}else a+=h}return""!==a?n(k,0,1):void 0},e.encodePayloadAsArrayBuffer=function(t,r){function n(t,r){e.encodePacket(t,!0,!0,function(t){return r(null,t)})}return t.length?void c(t,n,function(t,e){var n=e.reduce(function(t,e){var r;return r="string"==typeof e?e.length:e.byteLength,t+r.toString().length+r+2},0),o=new Uint8Array(n),i=0;return e.forEach(function(t){var e="string"==typeof t,r=t;if(e){for(var n=new Uint8Array(t.length),s=0;s<t.length;s++)n[s]=t.charCodeAt(s);r=n.buffer}e?o[i++]=0:o[i++]=1;for(var a=r.byteLength.toString(),s=0;s<a.length;s++)o[i++]=parseInt(a[s]);o[i++]=255;for(var n=new Uint8Array(r),s=0;s<n.length;s++)o[i++]=n[s]}),r(o.buffer)}):r(new ArrayBuffer(0))},e.encodePayloadAsBlob=function(t,r){function n(t,r){e.encodePacket(t,!0,!0,function(t){var e=new Uint8Array(1);if(e[0]=1,"string"==typeof t){for(var n=new Uint8Array(t.length),o=0;o<t.length;o++)n[o]=t.charCodeAt(o);t=n.buffer,e[0]=0}for(var i=t instanceof ArrayBuffer?t.byteLength:t.size,s=i.toString(),a=new Uint8Array(s.length+1),o=0;o<s.length;o++)a[o]=parseInt(s[o]);if(a[s.length]=255,w){var c=new w([e.buffer,a.buffer,t]);r(null,c)}})}c(t,n,function(t,e){return r(new w(e))})},e.decodePayloadAsBinary=function(t,r,n){"function"==typeof r&&(n=r,r=null);for(var o=t,i=[];o.byteLength>0;){for(var s=new Uint8Array(o),a=0===s[0],c="",p=1;255!==s[p];p++){if(c.length>310)return n(k,0,1);c+=s[p]}o=f(o,2+c.length),c=parseInt(c);var h=f(o,0,c);if(a)try{h=String.fromCharCode.apply(null,new Uint8Array(h))}catch(t){var u=new Uint8Array(h);h="";for(var p=0;p<u.length;p++)h+=String.fromCharCode(u[p])}i.push(h),o=f(o,c)}var l=i.length;i.forEach(function(t,o){n(e.decodePacket(t,r,!0),o,l)})}},function(t,e){t.exports=Object.keys||function(t){var e=[],r=Object.prototype.hasOwnProperty;for(var n in t)r.call(t,n)&&e.push(n);return e}},function(t,e,r){function n(t){if(!t||"object"!=typeof t)return!1;if(o(t)){for(var e=0,r=t.length;e<r;e++)if(n(t[e]))return!0;return!1}if("function"==typeof Buffer&&Buffer.isBuffer&&Buffer.isBuffer(t)||"function"==typeof ArrayBuffer&&t instanceof ArrayBuffer||s&&t instanceof Blob||a&&t instanceof File)return!0;if(t.toJSON&&"function"==typeof t.toJSON&&1===arguments.length)return n(t.toJSON(),!0);for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&n(t[i]))return!0;return!1}var o=r(7),i=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===i.call(Blob),a="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===i.call(File);t.exports=n},function(t,e){t.exports=function(t,e,r){var n=t.byteLength;if(e=e||0,r=r||n,t.slice)return t.slice(e,r);if(e<0&&(e+=n),r<0&&(r+=n),r>n&&(r=n),e>=n||e>=r||0===n)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(r-e),s=e,a=0;s<r;s++,a++)i[a]=o[s];return i.buffer}},function(t,e){function r(t,e,r){function o(t,n){if(o.count<=0)throw new Error("after called too many times");--o.count,t?(i=!0,e(t),e=r):0!==o.count||i||e(null,n)}var i=!1;return r=r||n,o.count=t,0===t?e():o}function n(){}t.exports=r},function(t,e){function r(t){for(var e,r,n=[],o=0,i=t.length;o<i;)e=t.charCodeAt(o++),e>=55296&&e<=56319&&o<i?(r=t.charCodeAt(o++),56320==(64512&r)?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),o--)):n.push(e);return n}function n(t){for(var e,r=t.length,n=-1,o="";++n<r;)e=t[n],e>65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var r="";return 0==(4294965248&t)?r=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),r=d(t>>12&15|224),r+=i(t,6)):0==(4292870144&t)&&(r=d(t>>18&7|240),r+=i(t,12),r+=i(t,6)),r+=d(63&t|128)}function a(t,e){e=e||{};for(var n,o=!1!==e.strict,i=r(t),a=i.length,c=-1,p="";++c<a;)n=i[c],p+=s(n,o);return p}function c(){if(l>=f)throw Error("Invalid byte index");var t=255&u[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(t){var e,r,n,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&u[l],l++,0==(128&e))return e;if(192==(224&e)){if(r=c(),s=(31&e)<<6|r,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(r=c(),n=c(),s=(15&e)<<12|r<<6|n,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(r=c(),n=c(),i=c(),s=(7&e)<<18|r<<12|n<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function h(t,e){e=e||{};var o=!1!==e.strict;u=r(t),f=u.length,l=0;for(var i,s=[];(i=p(o))!==!1;)s.push(i);return n(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */
-var u,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:h}},function(t,e){!function(){"use strict";for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=new Uint8Array(256),n=0;n<t.length;n++)r[t.charCodeAt(n)]=n;e.encode=function(e){var r,n=new Uint8Array(e),o=n.length,i="";for(r=0;r<o;r+=3)i+=t[n[r]>>2],i+=t[(3&n[r])<<4|n[r+1]>>4],i+=t[(15&n[r+1])<<2|n[r+2]>>6],i+=t[63&n[r+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(t){var e,n,o,i,s,a=.75*t.length,c=t.length,p=0;"="===t[t.length-1]&&(a--,"="===t[t.length-2]&&a--);var h=new ArrayBuffer(a),u=new Uint8Array(h);for(e=0;e<c;e+=4)n=r[t.charCodeAt(e)],o=r[t.charCodeAt(e+1)],i=r[t.charCodeAt(e+2)],s=r[t.charCodeAt(e+3)],u[p++]=n<<2|o>>4,u[p++]=(15&o)<<4|i>>2,u[p++]=(3&i)<<6|63&s;return h}}()},function(t,e){function r(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var r=new Uint8Array(t.byteLength);r.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=r.buffer}return e}return t})}function n(t,e){e=e||{};var n=new i;return r(t).forEach(function(t){n.append(t)}),e.type?n.getBlob(e.type):n.getBlob()}function o(t,e){return new Blob(r(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(t){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(t){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(n.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?n:void 0}()},function(t,e){e.encode=function(t){var e="";for(var r in t)t.hasOwnProperty(r)&&(e.length&&(e+="&"),e+=encodeURIComponent(r)+"="+encodeURIComponent(t[r]));return e},e.decode=function(t){for(var e={},r=t.split("&"),n=0,o=r.length;n<o;n++){var i=r[n].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},function(t,e){t.exports=function(t,e){var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e){"use strict";function r(t){var e="";do e=s[t%a]+e,t=Math.floor(t/a);while(t>0);return e}function n(t){var e=0;for(h=0;h<t.length;h++)e=e*a+c[t.charAt(h)];return e}function o(){var t=r(+new Date);return t!==i?(p=0,i=t):t+"."+r(p++)}for(var i,s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),a=64,c={},p=0,h=0;h<a;h++)c[s[h]]=h;o.encode=r,o.decode=n,t.exports=o},function(t,e,r){(function(e){function n(){}function o(){return"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof e?e:{}}function i(t){if(s.call(this,t),this.query=this.query||{},!c){var e=o();c=e.___eio=e.___eio||[]}this.index=c.length;var r=this;c.push(function(t){r.onData(t)}),this.query.j=this.index,"function"==typeof addEventListener&&addEventListener("beforeunload",function(){r.script&&(r.script.onerror=n)},!1)}var s=r(16),a=r(27);t.exports=i;var c,p=/\n/g,h=/\\n/g;a(i,s),i.prototype.supportsBinary=!1,i.prototype.doClose=function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),s.prototype.doClose.call(this)},i.prototype.doPoll=function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var r=document.getElementsByTagName("script")[0];r?r.parentNode.insertBefore(e,r):(document.head||document.body).appendChild(e),this.script=e;var n="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);n&&setTimeout(function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)},100)},i.prototype.doWrite=function(t,e){function r(){n(),e()}function n(){if(o.iframe)try{o.form.removeChild(o.iframe)}catch(t){o.onError("jsonp polling iframe removal error",t)}try{var t='<iframe src="javascript:0" name="'+o.iframeId+'">';i=document.createElement(t)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),n(),t=t.replace(h,"\\\n"),this.area.value=t.replace(p,"\\n");try{this.form.submit()}catch(t){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&r()}:this.iframe.onload=r}}).call(e,function(){return this}())},function(t,e,r){function n(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(u=i),s.call(this,t)}var o,i,s=r(17),a=r(18),c=r(26),p=r(27),h=r(28);r(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=r(31)}catch(t){}var u=o||i;t.exports=n,p(n,s),n.prototype.name="websocket",n.prototype.supportsBinary=!0,n.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,r={agent:this.agent,perMessageDeflate:this.perMessageDeflate};r.pfx=this.pfx,r.key=this.key,r.passphrase=this.passphrase,r.cert=this.cert,r.ca=this.ca,r.ciphers=this.ciphers,r.rejectUnauthorized=this.rejectUnauthorized,this.extraHeaders&&(r.headers=this.extraHeaders),this.localAddress&&(r.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new u(t,e):new u(t):new u(t,e,r)}catch(t){return this.emit("error",t)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},n.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},n.prototype.write=function(t){function e(){r.emit("flush"),setTimeout(function(){r.writable=!0,r.emit("drain")},0)}var r=this;this.writable=!1;for(var n=t.length,o=0,i=n;o<i;o++)!function(t){a.encodePacket(t,r.supportsBinary,function(o){if(!r.usingBrowserWebSocket){var i={};if(t.options&&(i.compress=t.options.compress),r.perMessageDeflate){var s="string"==typeof o?Buffer.byteLength(o):o.length;s<r.perMessageDeflate.threshold&&(i.compress=!1)}}try{r.usingBrowserWebSocket?r.ws.send(o):r.ws.send(o,i)}catch(t){}--n||e()})}(t[o])},n.prototype.onClose=function(){s.prototype.onClose.call(this)},n.prototype.doClose=function(){"undefined"!=typeof this.ws&&this.ws.close()},n.prototype.uri=function(){var t=this.query||{},e=this.secure?"wss":"ws",r="";this.port&&("wss"===e&&443!==Number(this.port)||"ws"===e&&80!==Number(this.port))&&(r=":"+this.port),this.timestampRequests&&(t[this.timestampParam]=h()),this.supportsBinary||(t.b64=1),t=c.encode(t),t.length&&(t="?"+t);var n=this.hostname.indexOf(":")!==-1;return e+"://"+(n?"["+this.hostname+"]":this.hostname)+r+this.path+t},n.prototype.check=function(){return!(!u||"__initialize"in u&&this.name===n.prototype.name)}},function(t,e){},function(t,e){var r=[].indexOf;t.exports=function(t,e){if(r)return t.indexOf(e);for(var n=0;n<t.length;++n)if(t[n]===e)return n;return-1}},function(t,e,r){"use strict";function n(t,e,r){this.io=t,this.nsp=e,this.json=this,this.ids=0,this.acks={},this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0,this.flags={},r&&r.query&&(this.query=r.query),this.io.autoConnect&&this.open()}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(4),s=r(5),a=r(34),c=r(35),p=r(36),h=(r(3)("socket.io-client:socket"),r(26)),u=r(20);t.exports=e=n;var f={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1},l=s.prototype.emit;s(n.prototype),n.prototype.subEvents=function(){if(!this.subs){var t=this.io;this.subs=[c(t,"open",p(this,"onopen")),c(t,"packet",p(this,"onpacket")),c(t,"close",p(this,"onclose"))]}},n.prototype.open=n.prototype.connect=function(){return this.connected?this:(this.subEvents(),this.io.open(),"open"===this.io.readyState&&this.onopen(),this.emit("connecting"),this)},n.prototype.send=function(){var t=a(arguments);return t.unshift("message"),this.emit.apply(this,t),this},n.prototype.emit=function(t){if(f.hasOwnProperty(t))return l.apply(this,arguments),this;var e=a(arguments),r={type:(void 0!==this.flags.binary?this.flags.binary:u(e))?i.BINARY_EVENT:i.EVENT,data:e};return r.options={},r.options.compress=!this.flags||!1!==this.flags.compress,"function"==typeof e[e.length-1]&&(this.acks[this.ids]=e.pop(),r.id=this.ids++),this.connected?this.packet(r):this.sendBuffer.push(r),this.flags={},this},n.prototype.packet=function(t){t.nsp=this.nsp,this.io.packet(t)},n.prototype.onopen=function(){if("/"!==this.nsp)if(this.query){var t="object"===o(this.query)?h.encode(this.query):this.query;this.packet({type:i.CONNECT,query:t})}else this.packet({type:i.CONNECT})},n.prototype.onclose=function(t){this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",t)},n.prototype.onpacket=function(t){var e=t.nsp===this.nsp,r=t.type===i.ERROR&&"/"===t.nsp;if(e||r)switch(t.type){case i.CONNECT:this.onconnect();break;case i.EVENT:this.onevent(t);break;case i.BINARY_EVENT:this.onevent(t);break;case i.ACK:this.onack(t);break;case i.BINARY_ACK:this.onack(t);break;case i.DISCONNECT:this.ondisconnect();break;case i.ERROR:this.emit("error",t.data)}},n.prototype.onevent=function(t){var e=t.data||[];null!=t.id&&e.push(this.ack(t.id)),this.connected?l.apply(this,e):this.receiveBuffer.push(e)},n.prototype.ack=function(t){var e=this,r=!1;return function(){if(!r){r=!0;var n=a(arguments);e.packet({type:u(n)?i.BINARY_ACK:i.ACK,id:t,data:n})}}},n.prototype.onack=function(t){var e=this.acks[t.id];"function"==typeof e&&(e.apply(this,t.data),delete this.acks[t.id])},n.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},n.prototype.emitBuffered=function(){var t;for(t=0;t<this.receiveBuffer.length;t++)l.apply(this,this.receiveBuffer[t]);for(this.receiveBuffer=[],t=0;t<this.sendBuffer.length;t++)this.packet(this.sendBuffer[t]);this.sendBuffer=[]},n.prototype.ondisconnect=function(){this.destroy(),this.onclose("io server disconnect")},n.prototype.destroy=function(){if(this.subs){for(var t=0;t<this.subs.length;t++)this.subs[t].destroy();this.subs=null}this.io.destroy(this)},n.prototype.close=n.prototype.disconnect=function(){return this.connected&&this.packet({type:i.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this},n.prototype.compress=function(t){return this.flags.compress=t,this},n.prototype.binary=function(t){return this.flags.binary=t,this}},function(t,e){function r(t,e){var r=[];e=e||0;for(var n=e||0;n<t.length;n++)r[n-e]=t[n];return r}t.exports=r},function(t,e){"use strict";function r(t,e,r){return t.on(e,r),{destroy:function(){t.removeListener(e,r)}}}t.exports=r},function(t,e){var r=[].slice;t.exports=function(t,e){if("string"==typeof e&&(e=t[e]),"function"!=typeof e)throw new Error("bind() requires a function");var n=r.call(arguments,2);return function(){return e.apply(t,n.concat(r.call(arguments)))}}},function(t,e){function r(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=r,r.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),r=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-r:t+r}return 0|Math.min(t,this.max)},r.prototype.reset=function(){this.attempts=0},r.prototype.setMin=function(t){this.ms=t},r.prototype.setMax=function(t){this.max=t},r.prototype.setJitter=function(t){this.jitter=t}}])});
-//# sourceMappingURL=socket.io.slim.js.map
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.js.map b/signaling_server/service/node_modules/socket.io-client/dist/socket.io.slim.js.map
deleted file mode 100644 (file)
index 40a6606..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///socket.io.slim.js","webpack:///webpack/bootstrap 31c6c79423e11e145ab4","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./support/noop.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","lookup","uri","opts","_typeof","undefined","io","parsed","url","source","path","sameNamespace","cache","nsps","newConnection","forceNew","multiplex","Manager","query","socket","Symbol","iterator","obj","constructor","prototype","parser","managers","protocol","connect","Socket","loc","location","host","charAt","test","parseuri","port","ipv6","indexOf","href","re","parts","str","src","b","e","substring","replace","length","exec","i","authority","ipv6uri","Encoder","encodeAsString","type","BINARY_EVENT","BINARY_ACK","attachments","nsp","data","payload","tryStringify","ERROR_PACKET","JSON","stringify","encodeAsBinary","callback","writeEncoding","bloblessData","deconstruction","binary","deconstructPacket","pack","packet","buffers","unshift","removeBlobs","Decoder","reconstructor","decodeString","Number","types","error","buf","Error","next","tryParse","substr","isPayloadValid","ERROR","isArray","parse","BinaryReconstructor","reconPack","msg","Emitter","isBuf","CONNECT","DISCONNECT","EVENT","ACK","encode","encoding","add","emit","base64","takeBinaryData","destroy","finishedReconstruction","binData","push","reconstructPacket","mixin","key","on","addEventListener","event","fn","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","splice","args","slice","len","listeners","hasListeners","_deconstructPacket","placeholder","_placeholder","num","newData","Array","Date","_reconstructPacket","toString","Object","withNativeBlob","Blob","withNativeFile","File","packetData","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","FileReader","onload","result","readAsArrayBuffer","arr","withNativeBuffer","Buffer","isBuffer","withNativeArrayBuffer","ArrayBuffer","isView","buffer","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","timeout","readyState","connecting","lastPing","packetBuffer","_parser","encoder","decoder","autoConnect","open","eio","bind","has","hasOwnProperty","emitAll","updateSocketIds","generateId","engine","v","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","self","skipReconnect","openSub","onopen","errorSub","cleanup","err","timer","setTimeout","close","clearTimeout","onping","onpong","ondata","ondecoded","onerror","onConnecting","index","encodedPackets","write","options","processPacketQueue","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","hostname","secure","agent","parseqs","decode","upgrade","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transports","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ca","ciphers","rejectUnauthorized","forceNode","isReactNative","navigator","product","toLowerCase","extraHeaders","keys","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","clone","o","priorWebsocketSuccess","Transport","createTransport","name","EIO","transport","sid","requestTimeout","protocols","setTransport","onDrain","onPacket","onError","onClose","probe","onTransportOpen","upgradeLosesBinary","supportsBinary","failed","send","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","to","onOpen","l","onHandshake","setPing","code","filterUpgrades","onHeartbeat","ping","sendPacket","writable","compress","cleanupAndClose","waitForUpgrade","desc","filteredUpgrades","j","polling","xhr","xd","xs","isSSL","xdomain","xscheme","XMLHttpRequest","XHR","JSONP","websocket","hasCORS","XDomainRequest","concat","join","empty","Polling","Request","method","async","isBinary","create","unloadHandler","requests","abort","inherit","request","doWrite","req","sendXhr","doPoll","onData","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","onLoad","responseText","onreadystatechange","contentType","getResponseHeader","responseType","status","document","requestsCount","onSuccess","fromError","response","attachEvent","terminationEvent","hasXHR2","yeast","doOpen","poll","onPause","total","decodePayload","doClose","packets","callbackfn","encodePayload","schema","b64","description","decodePacket","encodeBase64Object","message","encodeArrayBuffer","encodeBase64Packet","contentArray","Uint8Array","resultBuffer","byteLength","encodeBlobAsArrayBuffer","fr","encodePacket","encodeBlob","dontSendBlobs","blob","tryDecode","utf8","strict","map","ary","each","done","after","eachWithIndex","el","base64encoder","hasBinary","sliceBuffer","isAndroid","userAgent","isPhantomJS","pong","noop","packetslist","utf8encode","encoded","String","split","readAsDataURL","b64data","fromCharCode","typed","basic","btoa","utf8decode","decodeBase64Packet","asArray","rest","setLengthHeader","encodeOne","doneCallback","encodePayloadAsBlob","encodePayloadAsArrayBuffer","results","decodePayloadAsBinary","n","chr","ret","totalLength","reduce","acc","resultArray","bufferIndex","forEach","isString","ab","view","charCodeAt","lenStr","parseInt","binaryIdentifier","size","lengthAry","bufferTail","tailArray","msgLength","toJSON","arraybuffer","start","end","bytes","abv","ii","count","err_cb","proxy","bail","ucs2decode","string","value","extra","output","counter","ucs2encode","array","stringFromCharCode","checkScalarValue","codePoint","toUpperCase","createByte","encodeCodePoint","symbol","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","tmp","version","chars","encoded1","encoded2","encoded3","encoded4","bufferLength","mapArrayBufferViews","chunk","copy","set","byteOffset","BlobBuilderConstructor","bb","BlobBuilder","part","append","getBlob","BlobConstructor","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","a","blobSupportsArrayBufferView","blobBuilderSupported","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","alphabet","Math","floor","decoded","now","prev","seed","global","glob","window","JSONPPolling","___eio","script","rNewline","rEscapedNewline","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","isUAgecko","complete","initIframe","html","iframeId","area","className","style","position","top","left","target","setAttribute","action","submit","WS","usingBrowserWebSocket","BrowserWebSocket","WebSocketImpl","NodeWebSocket","WebSocket","MozWebSocket","check","headers","ws","supports","addEventListeners","onmessage","ev","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","toArray","hasBin","events","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","subEvents","pop","onpacket","rootNamespaceError","onconnect","onevent","onack","ondisconnect","ack","sent","emitBuffered","list","ms","factor","pow","rand","random","deviation"],"mappings":"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","file":"socket.io.slim.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar url = __webpack_require__(1);\n\tvar parser = __webpack_require__(4);\n\tvar Manager = __webpack_require__(9);\n\tvar debug = __webpack_require__(3)('socket.io-client');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = lookup;\n\t\n\t/**\n\t * Managers cache.\n\t */\n\t\n\tvar cache = exports.managers = {};\n\t\n\t/**\n\t * Looks up an existing `Manager` for multiplexing.\n\t * If the user summons:\n\t *\n\t *   `io('http://localhost/a');`\n\t *   `io('http://localhost/b');`\n\t *\n\t * We reuse the existing instance based on same scheme/port/host,\n\t * and we initialize sockets for each namespace.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction lookup(uri, opts) {\n\t  if ((typeof uri === 'undefined' ? 'undefined' : _typeof(uri)) === 'object') {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t\n\t  opts = opts || {};\n\t\n\t  var parsed = url(uri);\n\t  var source = parsed.source;\n\t  var id = parsed.id;\n\t  var path = parsed.path;\n\t  var sameNamespace = cache[id] && path in cache[id].nsps;\n\t  var newConnection = opts.forceNew || opts['force new connection'] || false === opts.multiplex || sameNamespace;\n\t\n\t  var io;\n\t\n\t  if (newConnection) {\n\t\n\t    io = Manager(source, opts);\n\t  } else {\n\t    if (!cache[id]) {\n\t\n\t      cache[id] = Manager(source, opts);\n\t    }\n\t    io = cache[id];\n\t  }\n\t  if (parsed.query && !opts.query) {\n\t    opts.query = parsed.query;\n\t  }\n\t  return io.socket(parsed.path, opts);\n\t}\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = parser.protocol;\n\t\n\t/**\n\t * `connect`.\n\t *\n\t * @param {String} uri\n\t * @api public\n\t */\n\t\n\texports.connect = lookup;\n\t\n\t/**\n\t * Expose constructors for standalone build.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Manager = __webpack_require__(9);\n\texports.Socket = __webpack_require__(33);\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parseuri = __webpack_require__(2);\n\tvar debug = __webpack_require__(3)('socket.io-client:url');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = url;\n\t\n\t/**\n\t * URL parser.\n\t *\n\t * @param {String} url\n\t * @param {Object} An object meant to mimic window.location.\n\t *                 Defaults to window.location.\n\t * @api public\n\t */\n\t\n\tfunction url(uri, loc) {\n\t  var obj = uri;\n\t\n\t  // default to window.location\n\t  loc = loc || typeof location !== 'undefined' && location;\n\t  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\t\n\t  // relative path support\n\t  if ('string' === typeof uri) {\n\t    if ('/' === uri.charAt(0)) {\n\t      if ('/' === uri.charAt(1)) {\n\t        uri = loc.protocol + uri;\n\t      } else {\n\t        uri = loc.host + uri;\n\t      }\n\t    }\n\t\n\t    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\t\n\t      if ('undefined' !== typeof loc) {\n\t        uri = loc.protocol + '//' + uri;\n\t      } else {\n\t        uri = 'https://' + uri;\n\t      }\n\t    }\n\t\n\t    // parse\n\t\n\t    obj = parseuri(uri);\n\t  }\n\t\n\t  // make sure we treat `localhost:80` and `localhost` equally\n\t  if (!obj.port) {\n\t    if (/^(http|ws)$/.test(obj.protocol)) {\n\t      obj.port = '80';\n\t    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n\t      obj.port = '443';\n\t    }\n\t  }\n\t\n\t  obj.path = obj.path || '/';\n\t\n\t  var ipv6 = obj.host.indexOf(':') !== -1;\n\t  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\t\n\t  // define unique id\n\t  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n\t  // define href\n\t  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : ':' + obj.port);\n\t\n\t  return obj;\n\t}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Parses an URI\r\n\t *\r\n\t * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n\t * @api private\r\n\t */\r\n\t\r\n\tvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\t\r\n\tvar parts = [\r\n\t    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n\t];\r\n\t\r\n\tmodule.exports = function parseuri(str) {\r\n\t    var src = str,\r\n\t        b = str.indexOf('['),\r\n\t        e = str.indexOf(']');\r\n\t\r\n\t    if (b != -1 && e != -1) {\r\n\t        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n\t    }\r\n\t\r\n\t    var m = re.exec(str || ''),\r\n\t        uri = {},\r\n\t        i = 14;\r\n\t\r\n\t    while (i--) {\r\n\t        uri[parts[i]] = m[i] || '';\r\n\t    }\r\n\t\r\n\t    if (b != -1 && e != -1) {\r\n\t        uri.source = src;\r\n\t        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n\t        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n\t        uri.ipv6uri = true;\r\n\t    }\r\n\t\r\n\t    return uri;\r\n\t};\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = function () {\n\t  return function () {};\n\t};\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar debug = __webpack_require__(3)('socket.io-parser');\n\tvar Emitter = __webpack_require__(5);\n\tvar binary = __webpack_require__(6);\n\tvar isArray = __webpack_require__(7);\n\tvar isBuf = __webpack_require__(8);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = 4;\n\t\n\t/**\n\t * Packet types.\n\t *\n\t * @api public\n\t */\n\t\n\texports.types = [\n\t  'CONNECT',\n\t  'DISCONNECT',\n\t  'EVENT',\n\t  'ACK',\n\t  'ERROR',\n\t  'BINARY_EVENT',\n\t  'BINARY_ACK'\n\t];\n\t\n\t/**\n\t * Packet type `connect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.CONNECT = 0;\n\t\n\t/**\n\t * Packet type `disconnect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.DISCONNECT = 1;\n\t\n\t/**\n\t * Packet type `event`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.EVENT = 2;\n\t\n\t/**\n\t * Packet type `ack`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ACK = 3;\n\t\n\t/**\n\t * Packet type `error`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ERROR = 4;\n\t\n\t/**\n\t * Packet type 'binary event'\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_EVENT = 5;\n\t\n\t/**\n\t * Packet type `binary ack`. For acks with binary arguments.\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_ACK = 6;\n\t\n\t/**\n\t * Encoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Encoder = Encoder;\n\t\n\t/**\n\t * Decoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Decoder = Decoder;\n\t\n\t/**\n\t * A socket.io Encoder instance\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Encoder() {}\n\t\n\tvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\t\n\t/**\n\t * Encode a packet as a single string if non-binary, or as a\n\t * buffer sequence, depending on packet type.\n\t *\n\t * @param {Object} obj - packet object\n\t * @param {Function} callback - function to handle encodings (likely engine.write)\n\t * @return Calls callback with Array of encodings\n\t * @api public\n\t */\n\t\n\tEncoder.prototype.encode = function(obj, callback){\n\t\n\t\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    encodeAsBinary(obj, callback);\n\t  } else {\n\t    var encoding = encodeAsString(obj);\n\t    callback([encoding]);\n\t  }\n\t};\n\t\n\t/**\n\t * Encode packet as string.\n\t *\n\t * @param {Object} packet\n\t * @return {String} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsString(obj) {\n\t\n\t  // first is type\n\t  var str = '' + obj.type;\n\t\n\t  // attachments if we have them\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    str += obj.attachments + '-';\n\t  }\n\t\n\t  // if we have a namespace other than `/`\n\t  // we append it followed by a comma `,`\n\t  if (obj.nsp && '/' !== obj.nsp) {\n\t    str += obj.nsp + ',';\n\t  }\n\t\n\t  // immediately followed by the id\n\t  if (null != obj.id) {\n\t    str += obj.id;\n\t  }\n\t\n\t  // json data\n\t  if (null != obj.data) {\n\t    var payload = tryStringify(obj.data);\n\t    if (payload !== false) {\n\t      str += payload;\n\t    } else {\n\t      return ERROR_PACKET;\n\t    }\n\t  }\n\t\n\t\n\t  return str;\n\t}\n\t\n\tfunction tryStringify(str) {\n\t  try {\n\t    return JSON.stringify(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Encode packet as 'buffer sequence' by removing blobs, and\n\t * deconstructing packet into object with placeholders and\n\t * a list of buffers.\n\t *\n\t * @param {Object} packet\n\t * @return {Buffer} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsBinary(obj, callback) {\n\t\n\t  function writeEncoding(bloblessData) {\n\t    var deconstruction = binary.deconstructPacket(bloblessData);\n\t    var pack = encodeAsString(deconstruction.packet);\n\t    var buffers = deconstruction.buffers;\n\t\n\t    buffers.unshift(pack); // add packet info to beginning of data list\n\t    callback(buffers); // write all the buffers\n\t  }\n\t\n\t  binary.removeBlobs(obj, writeEncoding);\n\t}\n\t\n\t/**\n\t * A socket.io Decoder instance\n\t *\n\t * @return {Object} decoder\n\t * @api public\n\t */\n\t\n\tfunction Decoder() {\n\t  this.reconstructor = null;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter` with Decoder.\n\t */\n\t\n\tEmitter(Decoder.prototype);\n\t\n\t/**\n\t * Decodes an encoded packet string into packet JSON.\n\t *\n\t * @param {String} obj - encoded packet\n\t * @return {Object} packet\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.add = function(obj) {\n\t  var packet;\n\t  if (typeof obj === 'string') {\n\t    packet = decodeString(obj);\n\t    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n\t      this.reconstructor = new BinaryReconstructor(packet);\n\t\n\t      // no attachments, labeled binary but no binary data to follow\n\t      if (this.reconstructor.reconPack.attachments === 0) {\n\t        this.emit('decoded', packet);\n\t      }\n\t    } else { // non-binary full packet\n\t      this.emit('decoded', packet);\n\t    }\n\t  } else if (isBuf(obj) || obj.base64) { // raw binary data\n\t    if (!this.reconstructor) {\n\t      throw new Error('got binary data when not reconstructing a packet');\n\t    } else {\n\t      packet = this.reconstructor.takeBinaryData(obj);\n\t      if (packet) { // received final buffer\n\t        this.reconstructor = null;\n\t        this.emit('decoded', packet);\n\t      }\n\t    }\n\t  } else {\n\t    throw new Error('Unknown type: ' + obj);\n\t  }\n\t};\n\t\n\t/**\n\t * Decode a packet String (JSON data)\n\t *\n\t * @param {String} str\n\t * @return {Object} packet\n\t * @api private\n\t */\n\t\n\tfunction decodeString(str) {\n\t  var i = 0;\n\t  // look up type\n\t  var p = {\n\t    type: Number(str.charAt(0))\n\t  };\n\t\n\t  if (null == exports.types[p.type]) {\n\t    return error('unknown packet type ' + p.type);\n\t  }\n\t\n\t  // look up attachments if type binary\n\t  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n\t    var buf = '';\n\t    while (str.charAt(++i) !== '-') {\n\t      buf += str.charAt(i);\n\t      if (i == str.length) break;\n\t    }\n\t    if (buf != Number(buf) || str.charAt(i) !== '-') {\n\t      throw new Error('Illegal attachments');\n\t    }\n\t    p.attachments = Number(buf);\n\t  }\n\t\n\t  // look up namespace (if any)\n\t  if ('/' === str.charAt(i + 1)) {\n\t    p.nsp = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (',' === c) break;\n\t      p.nsp += c;\n\t      if (i === str.length) break;\n\t    }\n\t  } else {\n\t    p.nsp = '/';\n\t  }\n\t\n\t  // look up id\n\t  var next = str.charAt(i + 1);\n\t  if ('' !== next && Number(next) == next) {\n\t    p.id = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (null == c || Number(c) != c) {\n\t        --i;\n\t        break;\n\t      }\n\t      p.id += str.charAt(i);\n\t      if (i === str.length) break;\n\t    }\n\t    p.id = Number(p.id);\n\t  }\n\t\n\t  // look up json data\n\t  if (str.charAt(++i)) {\n\t    var payload = tryParse(str.substr(i));\n\t    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n\t    if (isPayloadValid) {\n\t      p.data = payload;\n\t    } else {\n\t      return error('invalid payload');\n\t    }\n\t  }\n\t\n\t\n\t  return p;\n\t}\n\t\n\tfunction tryParse(str) {\n\t  try {\n\t    return JSON.parse(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Deallocates a parser's resources\n\t *\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.destroy = function() {\n\t  if (this.reconstructor) {\n\t    this.reconstructor.finishedReconstruction();\n\t  }\n\t};\n\t\n\t/**\n\t * A manager of a binary event's 'buffer sequence'. Should\n\t * be constructed whenever a packet of type BINARY_EVENT is\n\t * decoded.\n\t *\n\t * @param {Object} packet\n\t * @return {BinaryReconstructor} initialized reconstructor\n\t * @api private\n\t */\n\t\n\tfunction BinaryReconstructor(packet) {\n\t  this.reconPack = packet;\n\t  this.buffers = [];\n\t}\n\t\n\t/**\n\t * Method to be called when binary data received from connection\n\t * after a BINARY_EVENT packet.\n\t *\n\t * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n\t * @return {null | Object} returns null if more binary data is expected or\n\t *   a reconstructed packet object if all buffers have been received.\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n\t  this.buffers.push(binData);\n\t  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n\t    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n\t    this.finishedReconstruction();\n\t    return packet;\n\t  }\n\t  return null;\n\t};\n\t\n\t/**\n\t * Cleans up binary packet reconstruction variables.\n\t *\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.finishedReconstruction = function() {\n\t  this.reconPack = null;\n\t  this.buffers = [];\n\t};\n\t\n\tfunction error(msg) {\n\t  return {\n\t    type: exports.ERROR,\n\t    data: 'parser error: ' + msg\n\t  };\n\t}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\r\n\t/**\r\n\t * Expose `Emitter`.\r\n\t */\r\n\t\r\n\tif (true) {\r\n\t  module.exports = Emitter;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialize a new `Emitter`.\r\n\t *\r\n\t * @api public\r\n\t */\r\n\t\r\n\tfunction Emitter(obj) {\r\n\t  if (obj) return mixin(obj);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Mixin the emitter properties.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\tfunction mixin(obj) {\r\n\t  for (var key in Emitter.prototype) {\r\n\t    obj[key] = Emitter.prototype[key];\r\n\t  }\r\n\t  return obj;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Listen on the given `event` with `fn`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.on =\r\n\tEmitter.prototype.addEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n\t    .push(fn);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds an `event` listener that will be invoked a single\r\n\t * time then automatically removed.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.once = function(event, fn){\r\n\t  function on() {\r\n\t    this.off(event, on);\r\n\t    fn.apply(this, arguments);\r\n\t  }\r\n\t\r\n\t  on.fn = fn;\r\n\t  this.on(event, on);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Remove the given callback for `event` or all\r\n\t * registered callbacks.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.off =\r\n\tEmitter.prototype.removeListener =\r\n\tEmitter.prototype.removeAllListeners =\r\n\tEmitter.prototype.removeEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  // all\r\n\t  if (0 == arguments.length) {\r\n\t    this._callbacks = {};\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // specific event\r\n\t  var callbacks = this._callbacks['$' + event];\r\n\t  if (!callbacks) return this;\r\n\t\r\n\t  // remove all handlers\r\n\t  if (1 == arguments.length) {\r\n\t    delete this._callbacks['$' + event];\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // remove specific handler\r\n\t  var cb;\r\n\t  for (var i = 0; i < callbacks.length; i++) {\r\n\t    cb = callbacks[i];\r\n\t    if (cb === fn || cb.fn === fn) {\r\n\t      callbacks.splice(i, 1);\r\n\t      break;\r\n\t    }\r\n\t  }\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Emit `event` with the given args.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Mixed} ...\r\n\t * @return {Emitter}\r\n\t */\r\n\t\r\n\tEmitter.prototype.emit = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  var args = [].slice.call(arguments, 1)\r\n\t    , callbacks = this._callbacks['$' + event];\r\n\t\r\n\t  if (callbacks) {\r\n\t    callbacks = callbacks.slice(0);\r\n\t    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n\t      callbacks[i].apply(this, args);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Return array of callbacks for `event`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Array}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.listeners = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  return this._callbacks['$' + event] || [];\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if this emitter has `event` handlers.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Boolean}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.hasListeners = function(event){\r\n\t  return !! this.listeners(event).length;\r\n\t};\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*global Blob,File*/\n\t\n\t/**\n\t * Module requirements\n\t */\n\t\n\tvar isArray = __webpack_require__(7);\n\tvar isBuf = __webpack_require__(8);\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\n\tvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\t\n\t/**\n\t * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n\t * Anything with blobs or files should be fed through removeBlobs before coming\n\t * here.\n\t *\n\t * @param {Object} packet - socket.io event packet\n\t * @return {Object} with deconstructed packet and list of buffers\n\t * @api public\n\t */\n\t\n\texports.deconstructPacket = function(packet) {\n\t  var buffers = [];\n\t  var packetData = packet.data;\n\t  var pack = packet;\n\t  pack.data = _deconstructPacket(packetData, buffers);\n\t  pack.attachments = buffers.length; // number of binary 'attachments'\n\t  return {packet: pack, buffers: buffers};\n\t};\n\t\n\tfunction _deconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (isBuf(data)) {\n\t    var placeholder = { _placeholder: true, num: buffers.length };\n\t    buffers.push(data);\n\t    return placeholder;\n\t  } else if (isArray(data)) {\n\t    var newData = new Array(data.length);\n\t    for (var i = 0; i < data.length; i++) {\n\t      newData[i] = _deconstructPacket(data[i], buffers);\n\t    }\n\t    return newData;\n\t  } else if (typeof data === 'object' && !(data instanceof Date)) {\n\t    var newData = {};\n\t    for (var key in data) {\n\t      newData[key] = _deconstructPacket(data[key], buffers);\n\t    }\n\t    return newData;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Reconstructs a binary packet from its placeholder packet and buffers\n\t *\n\t * @param {Object} packet - event packet with placeholders\n\t * @param {Array} buffers - binary buffers to put in placeholder positions\n\t * @return {Object} reconstructed packet\n\t * @api public\n\t */\n\t\n\texports.reconstructPacket = function(packet, buffers) {\n\t  packet.data = _reconstructPacket(packet.data, buffers);\n\t  packet.attachments = undefined; // no longer useful\n\t  return packet;\n\t};\n\t\n\tfunction _reconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (data && data._placeholder) {\n\t    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n\t  } else if (isArray(data)) {\n\t    for (var i = 0; i < data.length; i++) {\n\t      data[i] = _reconstructPacket(data[i], buffers);\n\t    }\n\t  } else if (typeof data === 'object') {\n\t    for (var key in data) {\n\t      data[key] = _reconstructPacket(data[key], buffers);\n\t    }\n\t  }\n\t\n\t  return data;\n\t}\n\t\n\t/**\n\t * Asynchronously removes Blobs or Files from data via\n\t * FileReader's readAsArrayBuffer method. Used before encoding\n\t * data as msgpack. Calls callback with the blobless data.\n\t *\n\t * @param {Object} data\n\t * @param {Function} callback\n\t * @api private\n\t */\n\t\n\texports.removeBlobs = function(data, callback) {\n\t  function _removeBlobs(obj, curKey, containingObject) {\n\t    if (!obj) return obj;\n\t\n\t    // convert any blob\n\t    if ((withNativeBlob && obj instanceof Blob) ||\n\t        (withNativeFile && obj instanceof File)) {\n\t      pendingBlobs++;\n\t\n\t      // async filereader\n\t      var fileReader = new FileReader();\n\t      fileReader.onload = function() { // this.result == arraybuffer\n\t        if (containingObject) {\n\t          containingObject[curKey] = this.result;\n\t        }\n\t        else {\n\t          bloblessData = this.result;\n\t        }\n\t\n\t        // if nothing pending its callback time\n\t        if(! --pendingBlobs) {\n\t          callback(bloblessData);\n\t        }\n\t      };\n\t\n\t      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n\t    } else if (isArray(obj)) { // handle array\n\t      for (var i = 0; i < obj.length; i++) {\n\t        _removeBlobs(obj[i], i, obj);\n\t      }\n\t    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n\t      for (var key in obj) {\n\t        _removeBlobs(obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t\n\t  var pendingBlobs = 0;\n\t  var bloblessData = data;\n\t  _removeBlobs(bloblessData);\n\t  if (!pendingBlobs) {\n\t    callback(bloblessData);\n\t  }\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = Array.isArray || function (arr) {\n\t  return toString.call(arr) == '[object Array]';\n\t};\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = isBuf;\n\t\n\tvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\n\tvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\t\n\tvar isView = function (obj) {\n\t  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n\t};\n\t\n\t/**\n\t * Returns true if obj is a buffer or an arraybuffer.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction isBuf(obj) {\n\t  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n\t          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n\t}\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar eio = __webpack_require__(10);\n\tvar Socket = __webpack_require__(33);\n\tvar Emitter = __webpack_require__(5);\n\tvar parser = __webpack_require__(4);\n\tvar on = __webpack_require__(35);\n\tvar bind = __webpack_require__(36);\n\tvar debug = __webpack_require__(3)('socket.io-client:manager');\n\tvar indexOf = __webpack_require__(32);\n\tvar Backoff = __webpack_require__(37);\n\t\n\t/**\n\t * IE6+ hasOwnProperty\n\t */\n\t\n\tvar has = Object.prototype.hasOwnProperty;\n\t\n\t/**\n\t * Module exports\n\t */\n\t\n\tmodule.exports = Manager;\n\t\n\t/**\n\t * `Manager` constructor.\n\t *\n\t * @param {String} engine instance or engine uri/opts\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Manager(uri, opts) {\n\t  if (!(this instanceof Manager)) return new Manager(uri, opts);\n\t  if (uri && 'object' === (typeof uri === 'undefined' ? 'undefined' : _typeof(uri))) {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t  opts = opts || {};\n\t\n\t  opts.path = opts.path || '/socket.io';\n\t  this.nsps = {};\n\t  this.subs = [];\n\t  this.opts = opts;\n\t  this.reconnection(opts.reconnection !== false);\n\t  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n\t  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n\t  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n\t  this.randomizationFactor(opts.randomizationFactor || 0.5);\n\t  this.backoff = new Backoff({\n\t    min: this.reconnectionDelay(),\n\t    max: this.reconnectionDelayMax(),\n\t    jitter: this.randomizationFactor()\n\t  });\n\t  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n\t  this.readyState = 'closed';\n\t  this.uri = uri;\n\t  this.connecting = [];\n\t  this.lastPing = null;\n\t  this.encoding = false;\n\t  this.packetBuffer = [];\n\t  var _parser = opts.parser || parser;\n\t  this.encoder = new _parser.Encoder();\n\t  this.decoder = new _parser.Decoder();\n\t  this.autoConnect = opts.autoConnect !== false;\n\t  if (this.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Propagate given event to sockets and emit on `this`\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.emitAll = function () {\n\t  this.emit.apply(this, arguments);\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Update `socket.id` of all sockets\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.updateSocketIds = function () {\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].id = this.generateId(nsp);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * generate `socket.id` for the given `nsp`\n\t *\n\t * @param {String} nsp\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tManager.prototype.generateId = function (nsp) {\n\t  return (nsp === '/' ? '' : nsp + '#') + this.engine.id;\n\t};\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Manager.prototype);\n\t\n\t/**\n\t * Sets the `reconnection` config.\n\t *\n\t * @param {Boolean} true/false if it should automatically reconnect\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnection = function (v) {\n\t  if (!arguments.length) return this._reconnection;\n\t  this._reconnection = !!v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the reconnection attempts config.\n\t *\n\t * @param {Number} max reconnection attempts before giving up\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionAttempts = function (v) {\n\t  if (!arguments.length) return this._reconnectionAttempts;\n\t  this._reconnectionAttempts = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelay = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelay;\n\t  this._reconnectionDelay = v;\n\t  this.backoff && this.backoff.setMin(v);\n\t  return this;\n\t};\n\t\n\tManager.prototype.randomizationFactor = function (v) {\n\t  if (!arguments.length) return this._randomizationFactor;\n\t  this._randomizationFactor = v;\n\t  this.backoff && this.backoff.setJitter(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the maximum delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelayMax = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelayMax;\n\t  this._reconnectionDelayMax = v;\n\t  this.backoff && this.backoff.setMax(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the connection timeout. `false` to disable\n\t *\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.timeout = function (v) {\n\t  if (!arguments.length) return this._timeout;\n\t  this._timeout = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Starts trying to reconnect if reconnection is enabled and we have not\n\t * started reconnecting yet\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.maybeReconnectOnOpen = function () {\n\t  // Only try to reconnect if it's the first time we're connecting\n\t  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n\t    // keeps reconnection from firing twice for the same reconnection loop\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Sets the current transport `socket`.\n\t *\n\t * @param {Function} optional, callback\n\t * @return {Manager} self\n\t * @api public\n\t */\n\t\n\tManager.prototype.open = Manager.prototype.connect = function (fn, opts) {\n\t\n\t  if (~this.readyState.indexOf('open')) return this;\n\t\n\t  this.engine = eio(this.uri, this.opts);\n\t  var socket = this.engine;\n\t  var self = this;\n\t  this.readyState = 'opening';\n\t  this.skipReconnect = false;\n\t\n\t  // emit `open`\n\t  var openSub = on(socket, 'open', function () {\n\t    self.onopen();\n\t    fn && fn();\n\t  });\n\t\n\t  // emit `connect_error`\n\t  var errorSub = on(socket, 'error', function (data) {\n\t\n\t    self.cleanup();\n\t    self.readyState = 'closed';\n\t    self.emitAll('connect_error', data);\n\t    if (fn) {\n\t      var err = new Error('Connection error');\n\t      err.data = data;\n\t      fn(err);\n\t    } else {\n\t      // Only do this if there is no fn to handle the error\n\t      self.maybeReconnectOnOpen();\n\t    }\n\t  });\n\t\n\t  // emit `connect_timeout`\n\t  if (false !== this._timeout) {\n\t    var timeout = this._timeout;\n\t\n\t    // set timer\n\t    var timer = setTimeout(function () {\n\t\n\t      openSub.destroy();\n\t      socket.close();\n\t      socket.emit('error', 'timeout');\n\t      self.emitAll('connect_timeout', timeout);\n\t    }, timeout);\n\t\n\t    this.subs.push({\n\t      destroy: function destroy() {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t\n\t  this.subs.push(openSub);\n\t  this.subs.push(errorSub);\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport open.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onopen = function () {\n\t\n\t  // clear old subs\n\t  this.cleanup();\n\t\n\t  // mark as open\n\t  this.readyState = 'open';\n\t  this.emit('open');\n\t\n\t  // add new subs\n\t  var socket = this.engine;\n\t  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n\t  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n\t  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n\t  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n\t  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n\t  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n\t};\n\t\n\t/**\n\t * Called upon a ping.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onping = function () {\n\t  this.lastPing = new Date();\n\t  this.emitAll('ping');\n\t};\n\t\n\t/**\n\t * Called upon a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onpong = function () {\n\t  this.emitAll('pong', new Date() - this.lastPing);\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondata = function (data) {\n\t  this.decoder.add(data);\n\t};\n\t\n\t/**\n\t * Called when parser fully decodes a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondecoded = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon socket error.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onerror = function (err) {\n\t\n\t  this.emitAll('error', err);\n\t};\n\t\n\t/**\n\t * Creates a new socket for the given `nsp`.\n\t *\n\t * @return {Socket}\n\t * @api public\n\t */\n\t\n\tManager.prototype.socket = function (nsp, opts) {\n\t  var socket = this.nsps[nsp];\n\t  if (!socket) {\n\t    socket = new Socket(this, nsp, opts);\n\t    this.nsps[nsp] = socket;\n\t    var self = this;\n\t    socket.on('connecting', onConnecting);\n\t    socket.on('connect', function () {\n\t      socket.id = self.generateId(nsp);\n\t    });\n\t\n\t    if (this.autoConnect) {\n\t      // manually call here since connecting event is fired before listening\n\t      onConnecting();\n\t    }\n\t  }\n\t\n\t  function onConnecting() {\n\t    if (!~indexOf(self.connecting, socket)) {\n\t      self.connecting.push(socket);\n\t    }\n\t  }\n\t\n\t  return socket;\n\t};\n\t\n\t/**\n\t * Called upon a socket close.\n\t *\n\t * @param {Socket} socket\n\t */\n\t\n\tManager.prototype.destroy = function (socket) {\n\t  var index = indexOf(this.connecting, socket);\n\t  if (~index) this.connecting.splice(index, 1);\n\t  if (this.connecting.length) return;\n\t\n\t  this.close();\n\t};\n\t\n\t/**\n\t * Writes a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tManager.prototype.packet = function (packet) {\n\t\n\t  var self = this;\n\t  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\t\n\t  if (!self.encoding) {\n\t    // encode, then write to engine with result\n\t    self.encoding = true;\n\t    this.encoder.encode(packet, function (encodedPackets) {\n\t      for (var i = 0; i < encodedPackets.length; i++) {\n\t        self.engine.write(encodedPackets[i], packet.options);\n\t      }\n\t      self.encoding = false;\n\t      self.processPacketQueue();\n\t    });\n\t  } else {\n\t    // add packet to the queue\n\t    self.packetBuffer.push(packet);\n\t  }\n\t};\n\t\n\t/**\n\t * If packet buffer is non-empty, begins encoding the\n\t * next packet in line.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.processPacketQueue = function () {\n\t  if (this.packetBuffer.length > 0 && !this.encoding) {\n\t    var pack = this.packetBuffer.shift();\n\t    this.packet(pack);\n\t  }\n\t};\n\t\n\t/**\n\t * Clean up transport subscriptions and packet buffer.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.cleanup = function () {\n\t\n\t  var subsLength = this.subs.length;\n\t  for (var i = 0; i < subsLength; i++) {\n\t    var sub = this.subs.shift();\n\t    sub.destroy();\n\t  }\n\t\n\t  this.packetBuffer = [];\n\t  this.encoding = false;\n\t  this.lastPing = null;\n\t\n\t  this.decoder.destroy();\n\t};\n\t\n\t/**\n\t * Close the current socket.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.close = Manager.prototype.disconnect = function () {\n\t\n\t  this.skipReconnect = true;\n\t  this.reconnecting = false;\n\t  if ('opening' === this.readyState) {\n\t    // `onclose` will not fire because\n\t    // an open event never happened\n\t    this.cleanup();\n\t  }\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  if (this.engine) this.engine.close();\n\t};\n\t\n\t/**\n\t * Called upon engine close.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onclose = function (reason) {\n\t\n\t  this.cleanup();\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  this.emit('close', reason);\n\t\n\t  if (this._reconnection && !this.skipReconnect) {\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Attempt a reconnection.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.reconnect = function () {\n\t  if (this.reconnecting || this.skipReconnect) return this;\n\t\n\t  var self = this;\n\t\n\t  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\t\n\t    this.backoff.reset();\n\t    this.emitAll('reconnect_failed');\n\t    this.reconnecting = false;\n\t  } else {\n\t    var delay = this.backoff.duration();\n\t\n\t    this.reconnecting = true;\n\t    var timer = setTimeout(function () {\n\t      if (self.skipReconnect) return;\n\t\n\t      self.emitAll('reconnect_attempt', self.backoff.attempts);\n\t      self.emitAll('reconnecting', self.backoff.attempts);\n\t\n\t      // check again for the case socket closed in above events\n\t      if (self.skipReconnect) return;\n\t\n\t      self.open(function (err) {\n\t        if (err) {\n\t\n\t          self.reconnecting = false;\n\t          self.reconnect();\n\t          self.emitAll('reconnect_error', err.data);\n\t        } else {\n\t\n\t          self.onreconnect();\n\t        }\n\t      });\n\t    }, delay);\n\t\n\t    this.subs.push({\n\t      destroy: function destroy() {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful reconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onreconnect = function () {\n\t  var attempt = this.backoff.attempts;\n\t  this.reconnecting = false;\n\t  this.backoff.reset();\n\t  this.updateSocketIds();\n\t  this.emitAll('reconnect', attempt);\n\t};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\tmodule.exports = __webpack_require__(11);\n\t\n\t/**\n\t * Exports parser\n\t *\n\t * @api public\n\t *\n\t */\n\tmodule.exports.parser = __webpack_require__(18);\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar transports = __webpack_require__(12);\n\tvar Emitter = __webpack_require__(5);\n\tvar debug = __webpack_require__(3)('engine.io-client:socket');\n\tvar index = __webpack_require__(32);\n\tvar parser = __webpack_require__(18);\n\tvar parseuri = __webpack_require__(2);\n\tvar parseqs = __webpack_require__(26);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Socket;\n\t\n\t/**\n\t * Socket constructor.\n\t *\n\t * @param {String|Object} uri or options\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Socket (uri, opts) {\n\t  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\t\n\t  opts = opts || {};\n\t\n\t  if (uri && 'object' === typeof uri) {\n\t    opts = uri;\n\t    uri = null;\n\t  }\n\t\n\t  if (uri) {\n\t    uri = parseuri(uri);\n\t    opts.hostname = uri.host;\n\t    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n\t    opts.port = uri.port;\n\t    if (uri.query) opts.query = uri.query;\n\t  } else if (opts.host) {\n\t    opts.hostname = parseuri(opts.host).host;\n\t  }\n\t\n\t  this.secure = null != opts.secure ? opts.secure\n\t    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\t\n\t  if (opts.hostname && !opts.port) {\n\t    // if no port is specified manually, use the protocol default\n\t    opts.port = this.secure ? '443' : '80';\n\t  }\n\t\n\t  this.agent = opts.agent || false;\n\t  this.hostname = opts.hostname ||\n\t    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n\t  this.port = opts.port || (typeof location !== 'undefined' && location.port\n\t      ? location.port\n\t      : (this.secure ? 443 : 80));\n\t  this.query = opts.query || {};\n\t  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n\t  this.upgrade = false !== opts.upgrade;\n\t  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n\t  this.forceJSONP = !!opts.forceJSONP;\n\t  this.jsonp = false !== opts.jsonp;\n\t  this.forceBase64 = !!opts.forceBase64;\n\t  this.enablesXDR = !!opts.enablesXDR;\n\t  this.withCredentials = false !== opts.withCredentials;\n\t  this.timestampParam = opts.timestampParam || 't';\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.transports = opts.transports || ['polling', 'websocket'];\n\t  this.transportOptions = opts.transportOptions || {};\n\t  this.readyState = '';\n\t  this.writeBuffer = [];\n\t  this.prevBufferLen = 0;\n\t  this.policyPort = opts.policyPort || 843;\n\t  this.rememberUpgrade = opts.rememberUpgrade || false;\n\t  this.binaryType = null;\n\t  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n\t  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\t\n\t  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n\t  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n\t    this.perMessageDeflate.threshold = 1024;\n\t  }\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx || null;\n\t  this.key = opts.key || null;\n\t  this.passphrase = opts.passphrase || null;\n\t  this.cert = opts.cert || null;\n\t  this.ca = opts.ca || null;\n\t  this.ciphers = opts.ciphers || null;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n\t  this.forceNode = !!opts.forceNode;\n\t\n\t  // detect ReactNative environment\n\t  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\t\n\t  // other options for Node.js or ReactNative client\n\t  if (typeof self === 'undefined' || this.isReactNative) {\n\t    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n\t      this.extraHeaders = opts.extraHeaders;\n\t    }\n\t\n\t    if (opts.localAddress) {\n\t      this.localAddress = opts.localAddress;\n\t    }\n\t  }\n\t\n\t  // set on handshake\n\t  this.id = null;\n\t  this.upgrades = null;\n\t  this.pingInterval = null;\n\t  this.pingTimeout = null;\n\t\n\t  // set on heartbeat\n\t  this.pingIntervalTimer = null;\n\t  this.pingTimeoutTimer = null;\n\t\n\t  this.open();\n\t}\n\t\n\tSocket.priorWebsocketSuccess = false;\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.protocol = parser.protocol; // this is an int\n\t\n\t/**\n\t * Expose deps for legacy compatibility\n\t * and standalone browser access.\n\t */\n\t\n\tSocket.Socket = Socket;\n\tSocket.Transport = __webpack_require__(17);\n\tSocket.transports = __webpack_require__(12);\n\tSocket.parser = __webpack_require__(18);\n\t\n\t/**\n\t * Creates transport of the given type.\n\t *\n\t * @param {String} transport name\n\t * @return {Transport}\n\t * @api private\n\t */\n\t\n\tSocket.prototype.createTransport = function (name) {\n\t\n\t  var query = clone(this.query);\n\t\n\t  // append engine.io protocol identifier\n\t  query.EIO = parser.protocol;\n\t\n\t  // transport name\n\t  query.transport = name;\n\t\n\t  // per-transport options\n\t  var options = this.transportOptions[name] || {};\n\t\n\t  // session id if we already have one\n\t  if (this.id) query.sid = this.id;\n\t\n\t  var transport = new transports[name]({\n\t    query: query,\n\t    socket: this,\n\t    agent: options.agent || this.agent,\n\t    hostname: options.hostname || this.hostname,\n\t    port: options.port || this.port,\n\t    secure: options.secure || this.secure,\n\t    path: options.path || this.path,\n\t    forceJSONP: options.forceJSONP || this.forceJSONP,\n\t    jsonp: options.jsonp || this.jsonp,\n\t    forceBase64: options.forceBase64 || this.forceBase64,\n\t    enablesXDR: options.enablesXDR || this.enablesXDR,\n\t    withCredentials: options.withCredentials || this.withCredentials,\n\t    timestampRequests: options.timestampRequests || this.timestampRequests,\n\t    timestampParam: options.timestampParam || this.timestampParam,\n\t    policyPort: options.policyPort || this.policyPort,\n\t    pfx: options.pfx || this.pfx,\n\t    key: options.key || this.key,\n\t    passphrase: options.passphrase || this.passphrase,\n\t    cert: options.cert || this.cert,\n\t    ca: options.ca || this.ca,\n\t    ciphers: options.ciphers || this.ciphers,\n\t    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n\t    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n\t    extraHeaders: options.extraHeaders || this.extraHeaders,\n\t    forceNode: options.forceNode || this.forceNode,\n\t    localAddress: options.localAddress || this.localAddress,\n\t    requestTimeout: options.requestTimeout || this.requestTimeout,\n\t    protocols: options.protocols || void (0),\n\t    isReactNative: this.isReactNative\n\t  });\n\t\n\t  return transport;\n\t};\n\t\n\tfunction clone (obj) {\n\t  var o = {};\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      o[i] = obj[i];\n\t    }\n\t  }\n\t  return o;\n\t}\n\t\n\t/**\n\t * Initializes transport to use and starts probe.\n\t *\n\t * @api private\n\t */\n\tSocket.prototype.open = function () {\n\t  var transport;\n\t  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n\t    transport = 'websocket';\n\t  } else if (0 === this.transports.length) {\n\t    // Emit error on next tick so it can be listened to\n\t    var self = this;\n\t    setTimeout(function () {\n\t      self.emit('error', 'No transports available');\n\t    }, 0);\n\t    return;\n\t  } else {\n\t    transport = this.transports[0];\n\t  }\n\t  this.readyState = 'opening';\n\t\n\t  // Retry with the next transport if the transport is disabled (jsonp: false)\n\t  try {\n\t    transport = this.createTransport(transport);\n\t  } catch (e) {\n\t    this.transports.shift();\n\t    this.open();\n\t    return;\n\t  }\n\t\n\t  transport.open();\n\t  this.setTransport(transport);\n\t};\n\t\n\t/**\n\t * Sets the current transport. Disables the existing one (if any).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setTransport = function (transport) {\n\t\n\t  var self = this;\n\t\n\t  if (this.transport) {\n\t\n\t    this.transport.removeAllListeners();\n\t  }\n\t\n\t  // set up transport\n\t  this.transport = transport;\n\t\n\t  // set up transport listeners\n\t  transport\n\t  .on('drain', function () {\n\t    self.onDrain();\n\t  })\n\t  .on('packet', function (packet) {\n\t    self.onPacket(packet);\n\t  })\n\t  .on('error', function (e) {\n\t    self.onError(e);\n\t  })\n\t  .on('close', function () {\n\t    self.onClose('transport close');\n\t  });\n\t};\n\t\n\t/**\n\t * Probes a transport.\n\t *\n\t * @param {String} transport name\n\t * @api private\n\t */\n\t\n\tSocket.prototype.probe = function (name) {\n\t\n\t  var transport = this.createTransport(name, { probe: 1 });\n\t  var failed = false;\n\t  var self = this;\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t\n\t  function onTransportOpen () {\n\t    if (self.onlyBinaryUpgrades) {\n\t      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n\t      failed = failed || upgradeLosesBinary;\n\t    }\n\t    if (failed) return;\n\t\n\t\n\t    transport.send([{ type: 'ping', data: 'probe' }]);\n\t    transport.once('packet', function (msg) {\n\t      if (failed) return;\n\t      if ('pong' === msg.type && 'probe' === msg.data) {\n\t\n\t        self.upgrading = true;\n\t        self.emit('upgrading', transport);\n\t        if (!transport) return;\n\t        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\t\n\t\n\t        self.transport.pause(function () {\n\t          if (failed) return;\n\t          if ('closed' === self.readyState) return;\n\t\n\t\n\t          cleanup();\n\t\n\t          self.setTransport(transport);\n\t          transport.send([{ type: 'upgrade' }]);\n\t          self.emit('upgrade', transport);\n\t          transport = null;\n\t          self.upgrading = false;\n\t          self.flush();\n\t        });\n\t      } else {\n\t\n\t        var err = new Error('probe error');\n\t        err.transport = transport.name;\n\t        self.emit('upgradeError', err);\n\t      }\n\t    });\n\t  }\n\t\n\t  function freezeTransport () {\n\t    if (failed) return;\n\t\n\t    // Any callback called by transport should be ignored since now\n\t    failed = true;\n\t\n\t    cleanup();\n\t\n\t    transport.close();\n\t    transport = null;\n\t  }\n\t\n\t  // Handle any error that happens while probing\n\t  function onerror (err) {\n\t    var error = new Error('probe error: ' + err);\n\t    error.transport = transport.name;\n\t\n\t    freezeTransport();\n\t\n\t\n\t\n\t    self.emit('upgradeError', error);\n\t  }\n\t\n\t  function onTransportClose () {\n\t    onerror('transport closed');\n\t  }\n\t\n\t  // When the socket is closed while we're probing\n\t  function onclose () {\n\t    onerror('socket closed');\n\t  }\n\t\n\t  // When the socket is upgraded while we're probing\n\t  function onupgrade (to) {\n\t    if (transport && to.name !== transport.name) {\n\t\n\t      freezeTransport();\n\t    }\n\t  }\n\t\n\t  // Remove all listeners on the transport and on self\n\t  function cleanup () {\n\t    transport.removeListener('open', onTransportOpen);\n\t    transport.removeListener('error', onerror);\n\t    transport.removeListener('close', onTransportClose);\n\t    self.removeListener('close', onclose);\n\t    self.removeListener('upgrading', onupgrade);\n\t  }\n\t\n\t  transport.once('open', onTransportOpen);\n\t  transport.once('error', onerror);\n\t  transport.once('close', onTransportClose);\n\t\n\t  this.once('close', onclose);\n\t  this.once('upgrading', onupgrade);\n\t\n\t  transport.open();\n\t};\n\t\n\t/**\n\t * Called when connection is deemed open.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.onOpen = function () {\n\t\n\t  this.readyState = 'open';\n\t  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n\t  this.emit('open');\n\t  this.flush();\n\t\n\t  // we check for `readyState` in case an `open`\n\t  // listener already closed the socket\n\t  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\t\n\t    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n\t      this.probe(this.upgrades[i]);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Handles a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onPacket = function (packet) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState ||\n\t      'closing' === this.readyState) {\n\t\n\t\n\t    this.emit('packet', packet);\n\t\n\t    // Socket is live - any packet counts\n\t    this.emit('heartbeat');\n\t\n\t    switch (packet.type) {\n\t      case 'open':\n\t        this.onHandshake(JSON.parse(packet.data));\n\t        break;\n\t\n\t      case 'pong':\n\t        this.setPing();\n\t        this.emit('pong');\n\t        break;\n\t\n\t      case 'error':\n\t        var err = new Error('server error');\n\t        err.code = packet.data;\n\t        this.onError(err);\n\t        break;\n\t\n\t      case 'message':\n\t        this.emit('data', packet.data);\n\t        this.emit('message', packet.data);\n\t        break;\n\t    }\n\t  } else {\n\t\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon handshake completion.\n\t *\n\t * @param {Object} handshake obj\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHandshake = function (data) {\n\t  this.emit('handshake', data);\n\t  this.id = data.sid;\n\t  this.transport.query.sid = data.sid;\n\t  this.upgrades = this.filterUpgrades(data.upgrades);\n\t  this.pingInterval = data.pingInterval;\n\t  this.pingTimeout = data.pingTimeout;\n\t  this.onOpen();\n\t  // In case open handler closes socket\n\t  if ('closed' === this.readyState) return;\n\t  this.setPing();\n\t\n\t  // Prolong liveness of socket on heartbeat\n\t  this.removeListener('heartbeat', this.onHeartbeat);\n\t  this.on('heartbeat', this.onHeartbeat);\n\t};\n\t\n\t/**\n\t * Resets ping timeout.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHeartbeat = function (timeout) {\n\t  clearTimeout(this.pingTimeoutTimer);\n\t  var self = this;\n\t  self.pingTimeoutTimer = setTimeout(function () {\n\t    if ('closed' === self.readyState) return;\n\t    self.onClose('ping timeout');\n\t  }, timeout || (self.pingInterval + self.pingTimeout));\n\t};\n\t\n\t/**\n\t * Pings server every `this.pingInterval` and expects response\n\t * within `this.pingTimeout` or closes connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setPing = function () {\n\t  var self = this;\n\t  clearTimeout(self.pingIntervalTimer);\n\t  self.pingIntervalTimer = setTimeout(function () {\n\t\n\t    self.ping();\n\t    self.onHeartbeat(self.pingTimeout);\n\t  }, self.pingInterval);\n\t};\n\t\n\t/**\n\t* Sends a ping packet.\n\t*\n\t* @api private\n\t*/\n\t\n\tSocket.prototype.ping = function () {\n\t  var self = this;\n\t  this.sendPacket('ping', function () {\n\t    self.emit('ping');\n\t  });\n\t};\n\t\n\t/**\n\t * Called on `drain` event\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onDrain = function () {\n\t  this.writeBuffer.splice(0, this.prevBufferLen);\n\t\n\t  // setting prevBufferLen = 0 is very important\n\t  // for example, when upgrading, upgrade packet is sent over,\n\t  // and a nonzero prevBufferLen could cause problems on `drain`\n\t  this.prevBufferLen = 0;\n\t\n\t  if (0 === this.writeBuffer.length) {\n\t    this.emit('drain');\n\t  } else {\n\t    this.flush();\n\t  }\n\t};\n\t\n\t/**\n\t * Flush write buffers.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.flush = function () {\n\t  if ('closed' !== this.readyState && this.transport.writable &&\n\t    !this.upgrading && this.writeBuffer.length) {\n\t\n\t    this.transport.send(this.writeBuffer);\n\t    // keep track of current length of writeBuffer\n\t    // splice writeBuffer and callbackBuffer on `drain`\n\t    this.prevBufferLen = this.writeBuffer.length;\n\t    this.emit('flush');\n\t  }\n\t};\n\t\n\t/**\n\t * Sends a message.\n\t *\n\t * @param {String} message.\n\t * @param {Function} callback function.\n\t * @param {Object} options.\n\t * @return {Socket} for chaining.\n\t * @api public\n\t */\n\t\n\tSocket.prototype.write =\n\tSocket.prototype.send = function (msg, options, fn) {\n\t  this.sendPacket('message', msg, options, fn);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {String} packet type.\n\t * @param {String} data.\n\t * @param {Object} options.\n\t * @param {Function} callback function.\n\t * @api private\n\t */\n\t\n\tSocket.prototype.sendPacket = function (type, data, options, fn) {\n\t  if ('function' === typeof data) {\n\t    fn = data;\n\t    data = undefined;\n\t  }\n\t\n\t  if ('function' === typeof options) {\n\t    fn = options;\n\t    options = null;\n\t  }\n\t\n\t  if ('closing' === this.readyState || 'closed' === this.readyState) {\n\t    return;\n\t  }\n\t\n\t  options = options || {};\n\t  options.compress = false !== options.compress;\n\t\n\t  var packet = {\n\t    type: type,\n\t    data: data,\n\t    options: options\n\t  };\n\t  this.emit('packetCreate', packet);\n\t  this.writeBuffer.push(packet);\n\t  if (fn) this.once('flush', fn);\n\t  this.flush();\n\t};\n\t\n\t/**\n\t * Closes the connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.readyState = 'closing';\n\t\n\t    var self = this;\n\t\n\t    if (this.writeBuffer.length) {\n\t      this.once('drain', function () {\n\t        if (this.upgrading) {\n\t          waitForUpgrade();\n\t        } else {\n\t          close();\n\t        }\n\t      });\n\t    } else if (this.upgrading) {\n\t      waitForUpgrade();\n\t    } else {\n\t      close();\n\t    }\n\t  }\n\t\n\t  function close () {\n\t    self.onClose('forced close');\n\t\n\t    self.transport.close();\n\t  }\n\t\n\t  function cleanupAndClose () {\n\t    self.removeListener('upgrade', cleanupAndClose);\n\t    self.removeListener('upgradeError', cleanupAndClose);\n\t    close();\n\t  }\n\t\n\t  function waitForUpgrade () {\n\t    // wait for upgrade to finish since we can't send packets while pausing a transport\n\t    self.once('upgrade', cleanupAndClose);\n\t    self.once('upgradeError', cleanupAndClose);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport error\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onError = function (err) {\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t  this.emit('error', err);\n\t  this.onClose('transport error', err);\n\t};\n\t\n\t/**\n\t * Called upon transport close.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onClose = function (reason, desc) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\t\n\t    var self = this;\n\t\n\t    // clear timers\n\t    clearTimeout(this.pingIntervalTimer);\n\t    clearTimeout(this.pingTimeoutTimer);\n\t\n\t    // stop event from firing again for transport\n\t    this.transport.removeAllListeners('close');\n\t\n\t    // ensure transport won't stay open\n\t    this.transport.close();\n\t\n\t    // ignore further transport communication\n\t    this.transport.removeAllListeners();\n\t\n\t    // set ready state\n\t    this.readyState = 'closed';\n\t\n\t    // clear session id\n\t    this.id = null;\n\t\n\t    // emit close event\n\t    this.emit('close', reason, desc);\n\t\n\t    // clean buffers after, so users can still\n\t    // grab the buffers on `close` event\n\t    self.writeBuffer = [];\n\t    self.prevBufferLen = 0;\n\t  }\n\t};\n\t\n\t/**\n\t * Filters upgrades, returning only those matching client transports.\n\t *\n\t * @param {Array} server upgrades\n\t * @api private\n\t *\n\t */\n\t\n\tSocket.prototype.filterUpgrades = function (upgrades) {\n\t  var filteredUpgrades = [];\n\t  for (var i = 0, j = upgrades.length; i < j; i++) {\n\t    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n\t  }\n\t  return filteredUpgrades;\n\t};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(13);\n\tvar XHR = __webpack_require__(15);\n\tvar JSONP = __webpack_require__(29);\n\tvar websocket = __webpack_require__(30);\n\t\n\t/**\n\t * Export transports.\n\t */\n\t\n\texports.polling = polling;\n\texports.websocket = websocket;\n\t\n\t/**\n\t * Polling transport polymorphic constructor.\n\t * Decides on xhr vs jsonp based on feature detection.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction polling (opts) {\n\t  var xhr;\n\t  var xd = false;\n\t  var xs = false;\n\t  var jsonp = false !== opts.jsonp;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    xd = opts.hostname !== location.hostname || port !== opts.port;\n\t    xs = opts.secure !== isSSL;\n\t  }\n\t\n\t  opts.xdomain = xd;\n\t  opts.xscheme = xs;\n\t  xhr = new XMLHttpRequest(opts);\n\t\n\t  if ('open' in xhr && !opts.forceJSONP) {\n\t    return new XHR(opts);\n\t  } else {\n\t    if (!jsonp) throw new Error('JSONP disabled');\n\t    return new JSONP(opts);\n\t  }\n\t}\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// browser shim for xmlhttprequest module\n\t\n\tvar hasCORS = __webpack_require__(14);\n\t\n\tmodule.exports = function (opts) {\n\t  var xdomain = opts.xdomain;\n\t\n\t  // scheme must be same when usign XDomainRequest\n\t  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t  var xscheme = opts.xscheme;\n\t\n\t  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n\t  // https://github.com/Automattic/engine.io-client/pull/217\n\t  var enablesXDR = opts.enablesXDR;\n\t\n\t  // XMLHttpRequest can be disabled on IE\n\t  try {\n\t    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n\t      return new XMLHttpRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  // Use XDomainRequest for IE8 if enablesXDR is true\n\t  // because loading bar keeps flashing when using jsonp-polling\n\t  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n\t  try {\n\t    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n\t      return new XDomainRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  if (!xdomain) {\n\t    try {\n\t      return new self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n\t    } catch (e) { }\n\t  }\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t *\n\t * Logic borrowed from Modernizr:\n\t *\n\t *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n\t */\n\t\n\ttry {\n\t  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n\t    'withCredentials' in new XMLHttpRequest();\n\t} catch (err) {\n\t  // if XMLHttp support is disabled in IE then it will throw\n\t  // when trying to create\n\t  module.exports = false;\n\t}\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global attachEvent */\n\t\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(13);\n\tvar Polling = __webpack_require__(16);\n\tvar Emitter = __webpack_require__(5);\n\tvar inherit = __webpack_require__(27);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling-xhr');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = XHR;\n\tmodule.exports.Request = Request;\n\t\n\t/**\n\t * Empty function\n\t */\n\t\n\tfunction empty () {}\n\t\n\t/**\n\t * XHR Polling constructor.\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction XHR (opts) {\n\t  Polling.call(this, opts);\n\t  this.requestTimeout = opts.requestTimeout;\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n\t      port !== opts.port;\n\t    this.xs = opts.secure !== isSSL;\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(XHR, Polling);\n\t\n\t/**\n\t * XHR supports binary\n\t */\n\t\n\tXHR.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Creates a request.\n\t *\n\t * @param {String} method\n\t * @api private\n\t */\n\t\n\tXHR.prototype.request = function (opts) {\n\t  opts = opts || {};\n\t  opts.uri = this.uri();\n\t  opts.xd = this.xd;\n\t  opts.xs = this.xs;\n\t  opts.agent = this.agent || false;\n\t  opts.supportsBinary = this.supportsBinary;\n\t  opts.enablesXDR = this.enablesXDR;\n\t  opts.withCredentials = this.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  opts.requestTimeout = this.requestTimeout;\n\t\n\t  // other options for Node.js client\n\t  opts.extraHeaders = this.extraHeaders;\n\t\n\t  return new Request(opts);\n\t};\n\t\n\t/**\n\t * Sends data.\n\t *\n\t * @param {String} data to send.\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doWrite = function (data, fn) {\n\t  var isBinary = typeof data !== 'string' && data !== undefined;\n\t  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n\t  var self = this;\n\t  req.on('success', fn);\n\t  req.on('error', function (err) {\n\t    self.onError('xhr post error', err);\n\t  });\n\t  this.sendXhr = req;\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doPoll = function () {\n\t\n\t  var req = this.request();\n\t  var self = this;\n\t  req.on('data', function (data) {\n\t    self.onData(data);\n\t  });\n\t  req.on('error', function (err) {\n\t    self.onError('xhr poll error', err);\n\t  });\n\t  this.pollXhr = req;\n\t};\n\t\n\t/**\n\t * Request constructor\n\t *\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Request (opts) {\n\t  this.method = opts.method || 'GET';\n\t  this.uri = opts.uri;\n\t  this.xd = !!opts.xd;\n\t  this.xs = !!opts.xs;\n\t  this.async = false !== opts.async;\n\t  this.data = undefined !== opts.data ? opts.data : null;\n\t  this.agent = opts.agent;\n\t  this.isBinary = opts.isBinary;\n\t  this.supportsBinary = opts.supportsBinary;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t  this.requestTimeout = opts.requestTimeout;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  this.create();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Request.prototype);\n\t\n\t/**\n\t * Creates the XHR object and sends the request.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.create = function () {\n\t  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t\n\t  var xhr = this.xhr = new XMLHttpRequest(opts);\n\t  var self = this;\n\t\n\t  try {\n\t\n\t    xhr.open(this.method, this.uri, this.async);\n\t    try {\n\t      if (this.extraHeaders) {\n\t        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n\t        for (var i in this.extraHeaders) {\n\t          if (this.extraHeaders.hasOwnProperty(i)) {\n\t            xhr.setRequestHeader(i, this.extraHeaders[i]);\n\t          }\n\t        }\n\t      }\n\t    } catch (e) {}\n\t\n\t    if ('POST' === this.method) {\n\t      try {\n\t        if (this.isBinary) {\n\t          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n\t        } else {\n\t          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n\t        }\n\t      } catch (e) {}\n\t    }\n\t\n\t    try {\n\t      xhr.setRequestHeader('Accept', '*/*');\n\t    } catch (e) {}\n\t\n\t    // ie6 check\n\t    if ('withCredentials' in xhr) {\n\t      xhr.withCredentials = this.withCredentials;\n\t    }\n\t\n\t    if (this.requestTimeout) {\n\t      xhr.timeout = this.requestTimeout;\n\t    }\n\t\n\t    if (this.hasXDR()) {\n\t      xhr.onload = function () {\n\t        self.onLoad();\n\t      };\n\t      xhr.onerror = function () {\n\t        self.onError(xhr.responseText);\n\t      };\n\t    } else {\n\t      xhr.onreadystatechange = function () {\n\t        if (xhr.readyState === 2) {\n\t          try {\n\t            var contentType = xhr.getResponseHeader('Content-Type');\n\t            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t              xhr.responseType = 'arraybuffer';\n\t            }\n\t          } catch (e) {}\n\t        }\n\t        if (4 !== xhr.readyState) return;\n\t        if (200 === xhr.status || 1223 === xhr.status) {\n\t          self.onLoad();\n\t        } else {\n\t          // make sure the `error` event handler that's user-set\n\t          // does not throw in the same tick and gets caught here\n\t          setTimeout(function () {\n\t            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n\t          }, 0);\n\t        }\n\t      };\n\t    }\n\t\n\t\n\t    xhr.send(this.data);\n\t  } catch (e) {\n\t    // Need to defer since .create() is called directly fhrom the constructor\n\t    // and thus the 'error' event can only be only bound *after* this exception\n\t    // occurs.  Therefore, also, we cannot throw here at all.\n\t    setTimeout(function () {\n\t      self.onError(e);\n\t    }, 0);\n\t    return;\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    this.index = Request.requestsCount++;\n\t    Request.requests[this.index] = this;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful response.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onSuccess = function () {\n\t  this.emit('success');\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Called if we have data.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onData = function (data) {\n\t  this.emit('data', data);\n\t  this.onSuccess();\n\t};\n\t\n\t/**\n\t * Called upon error.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onError = function (err) {\n\t  this.emit('error', err);\n\t  this.cleanup(true);\n\t};\n\t\n\t/**\n\t * Cleans up house.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.cleanup = function (fromError) {\n\t  if ('undefined' === typeof this.xhr || null === this.xhr) {\n\t    return;\n\t  }\n\t  // xmlhttprequest\n\t  if (this.hasXDR()) {\n\t    this.xhr.onload = this.xhr.onerror = empty;\n\t  } else {\n\t    this.xhr.onreadystatechange = empty;\n\t  }\n\t\n\t  if (fromError) {\n\t    try {\n\t      this.xhr.abort();\n\t    } catch (e) {}\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    delete Request.requests[this.index];\n\t  }\n\t\n\t  this.xhr = null;\n\t};\n\t\n\t/**\n\t * Called upon load.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onLoad = function () {\n\t  var data;\n\t  try {\n\t    var contentType;\n\t    try {\n\t      contentType = this.xhr.getResponseHeader('Content-Type');\n\t    } catch (e) {}\n\t    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t      data = this.xhr.response || this.xhr.responseText;\n\t    } else {\n\t      data = this.xhr.responseText;\n\t    }\n\t  } catch (e) {\n\t    this.onError(e);\n\t  }\n\t  if (null != data) {\n\t    this.onData(data);\n\t  }\n\t};\n\t\n\t/**\n\t * Check if it has XDomainRequest.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.hasXDR = function () {\n\t  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n\t};\n\t\n\t/**\n\t * Aborts the request.\n\t *\n\t * @api public\n\t */\n\t\n\tRequest.prototype.abort = function () {\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Aborts pending requests when unloading the window. This is needed to prevent\n\t * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n\t * emitted.\n\t */\n\t\n\tRequest.requestsCount = 0;\n\tRequest.requests = {};\n\t\n\tif (typeof document !== 'undefined') {\n\t  if (typeof attachEvent === 'function') {\n\t    attachEvent('onunload', unloadHandler);\n\t  } else if (typeof addEventListener === 'function') {\n\t    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n\t    addEventListener(terminationEvent, unloadHandler, false);\n\t  }\n\t}\n\t\n\tfunction unloadHandler () {\n\t  for (var i in Request.requests) {\n\t    if (Request.requests.hasOwnProperty(i)) {\n\t      Request.requests[i].abort();\n\t    }\n\t  }\n\t}\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(17);\n\tvar parseqs = __webpack_require__(26);\n\tvar parser = __webpack_require__(18);\n\tvar inherit = __webpack_require__(27);\n\tvar yeast = __webpack_require__(28);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Polling;\n\t\n\t/**\n\t * Is XHR2 supported?\n\t */\n\t\n\tvar hasXHR2 = (function () {\n\t  var XMLHttpRequest = __webpack_require__(13);\n\t  var xhr = new XMLHttpRequest({ xdomain: false });\n\t  return null != xhr.responseType;\n\t})();\n\t\n\t/**\n\t * Polling interface.\n\t *\n\t * @param {Object} opts\n\t * @api private\n\t */\n\t\n\tfunction Polling (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (!hasXHR2 || forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(Polling, Transport);\n\t\n\t/**\n\t * Transport name.\n\t */\n\t\n\tPolling.prototype.name = 'polling';\n\t\n\t/**\n\t * Opens the socket (triggers polling). We write a PING message to determine\n\t * when the transport is open.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doOpen = function () {\n\t  this.poll();\n\t};\n\t\n\t/**\n\t * Pauses polling.\n\t *\n\t * @param {Function} callback upon buffers are flushed and transport is paused\n\t * @api private\n\t */\n\t\n\tPolling.prototype.pause = function (onPause) {\n\t  var self = this;\n\t\n\t  this.readyState = 'pausing';\n\t\n\t  function pause () {\n\t\n\t    self.readyState = 'paused';\n\t    onPause();\n\t  }\n\t\n\t  if (this.polling || !this.writable) {\n\t    var total = 0;\n\t\n\t    if (this.polling) {\n\t\n\t      total++;\n\t      this.once('pollComplete', function () {\n\t\n\t        --total || pause();\n\t      });\n\t    }\n\t\n\t    if (!this.writable) {\n\t\n\t      total++;\n\t      this.once('drain', function () {\n\t\n\t        --total || pause();\n\t      });\n\t    }\n\t  } else {\n\t    pause();\n\t  }\n\t};\n\t\n\t/**\n\t * Starts polling cycle.\n\t *\n\t * @api public\n\t */\n\t\n\tPolling.prototype.poll = function () {\n\t\n\t  this.polling = true;\n\t  this.doPoll();\n\t  this.emit('poll');\n\t};\n\t\n\t/**\n\t * Overloads onData to detect payloads.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.onData = function (data) {\n\t  var self = this;\n\t\n\t  var callback = function (packet, index, total) {\n\t    // if its the first message we consider the transport open\n\t    if ('opening' === self.readyState) {\n\t      self.onOpen();\n\t    }\n\t\n\t    // if its a close packet, we close the ongoing requests\n\t    if ('close' === packet.type) {\n\t      self.onClose();\n\t      return false;\n\t    }\n\t\n\t    // otherwise bypass onData and handle the message\n\t    self.onPacket(packet);\n\t  };\n\t\n\t  // decode payload\n\t  parser.decodePayload(data, this.socket.binaryType, callback);\n\t\n\t  // if an event did not trigger closing\n\t  if ('closed' !== this.readyState) {\n\t    // if we got data we're not polling\n\t    this.polling = false;\n\t    this.emit('pollComplete');\n\t\n\t    if ('open' === this.readyState) {\n\t      this.poll();\n\t    } else {\n\t\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * For polling, send a close packet.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doClose = function () {\n\t  var self = this;\n\t\n\t  function close () {\n\t\n\t    self.write([{ type: 'close' }]);\n\t  }\n\t\n\t  if ('open' === this.readyState) {\n\t\n\t    close();\n\t  } else {\n\t    // in case we're trying to close while\n\t    // handshaking is in progress (GH-164)\n\t\n\t    this.once('open', close);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes a packets payload.\n\t *\n\t * @param {Array} data packets\n\t * @param {Function} drain callback\n\t * @api private\n\t */\n\t\n\tPolling.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t  var callbackfn = function () {\n\t    self.writable = true;\n\t    self.emit('drain');\n\t  };\n\t\n\t  parser.encodePayload(packets, this.supportsBinary, function (data) {\n\t    self.doWrite(data, callbackfn);\n\t  });\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'https' : 'http';\n\t  var port = '';\n\t\n\t  // cache busting is forced\n\t  if (false !== this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  if (!this.supportsBinary && !query.sid) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n\t     ('http' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(18);\n\tvar Emitter = __webpack_require__(5);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Transport;\n\t\n\t/**\n\t * Transport abstract constructor.\n\t *\n\t * @param {Object} options.\n\t * @api private\n\t */\n\t\n\tfunction Transport (opts) {\n\t  this.path = opts.path;\n\t  this.hostname = opts.hostname;\n\t  this.port = opts.port;\n\t  this.secure = opts.secure;\n\t  this.query = opts.query;\n\t  this.timestampParam = opts.timestampParam;\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.readyState = '';\n\t  this.agent = opts.agent || false;\n\t  this.socket = opts.socket;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t  this.forceNode = opts.forceNode;\n\t\n\t  // results of ReactNative environment detection\n\t  this.isReactNative = opts.isReactNative;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t  this.localAddress = opts.localAddress;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Transport.prototype);\n\t\n\t/**\n\t * Emits an error.\n\t *\n\t * @param {String} str\n\t * @return {Transport} for chaining\n\t * @api public\n\t */\n\t\n\tTransport.prototype.onError = function (msg, desc) {\n\t  var err = new Error(msg);\n\t  err.type = 'TransportError';\n\t  err.description = desc;\n\t  this.emit('error', err);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Opens the transport.\n\t *\n\t * @api public\n\t */\n\t\n\tTransport.prototype.open = function () {\n\t  if ('closed' === this.readyState || '' === this.readyState) {\n\t    this.readyState = 'opening';\n\t    this.doOpen();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Closes the transport.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.doClose();\n\t    this.onClose();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends multiple packets.\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\tTransport.prototype.send = function (packets) {\n\t  if ('open' === this.readyState) {\n\t    this.write(packets);\n\t  } else {\n\t    throw new Error('Transport not open');\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon open\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onOpen = function () {\n\t  this.readyState = 'open';\n\t  this.writable = true;\n\t  this.emit('open');\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @param {String} data\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onData = function (data) {\n\t  var packet = parser.decodePacket(data, this.socket.binaryType);\n\t  this.onPacket(packet);\n\t};\n\t\n\t/**\n\t * Called with a decoded packet.\n\t */\n\t\n\tTransport.prototype.onPacket = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon close.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onClose = function () {\n\t  this.readyState = 'closed';\n\t  this.emit('close');\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar keys = __webpack_require__(19);\n\tvar hasBinary = __webpack_require__(20);\n\tvar sliceBuffer = __webpack_require__(21);\n\tvar after = __webpack_require__(22);\n\tvar utf8 = __webpack_require__(23);\n\t\n\tvar base64encoder;\n\tif (typeof ArrayBuffer !== 'undefined') {\n\t  base64encoder = __webpack_require__(24);\n\t}\n\t\n\t/**\n\t * Check if we are running an android browser. That requires us to use\n\t * ArrayBuffer with polling transports...\n\t *\n\t * http://ghinda.net/jpeg-blob-ajax-android/\n\t */\n\t\n\tvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Check if we are running in PhantomJS.\n\t * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n\t * https://github.com/ariya/phantomjs/issues/11395\n\t * @type boolean\n\t */\n\tvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\t\n\t/**\n\t * When true, avoids using Blobs to encode payloads.\n\t * @type boolean\n\t */\n\tvar dontSendBlobs = isAndroid || isPhantomJS;\n\t\n\t/**\n\t * Current protocol version.\n\t */\n\t\n\texports.protocol = 3;\n\t\n\t/**\n\t * Packet types.\n\t */\n\t\n\tvar packets = exports.packets = {\n\t    open:     0    // non-ws\n\t  , close:    1    // non-ws\n\t  , ping:     2\n\t  , pong:     3\n\t  , message:  4\n\t  , upgrade:  5\n\t  , noop:     6\n\t};\n\t\n\tvar packetslist = keys(packets);\n\t\n\t/**\n\t * Premade error packet.\n\t */\n\t\n\tvar err = { type: 'error', data: 'parser error' };\n\t\n\t/**\n\t * Create a blob api even for blob builder when vendor prefixes exist\n\t */\n\t\n\tvar Blob = __webpack_require__(25);\n\t\n\t/**\n\t * Encodes a packet.\n\t *\n\t *     <packet type id> [ <data> ]\n\t *\n\t * Example:\n\t *\n\t *     5hello world\n\t *     3\n\t *     4\n\t *\n\t * Binary is encoded in an identical principle\n\t *\n\t * @api private\n\t */\n\t\n\texports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = false;\n\t  }\n\t\n\t  if (typeof utf8encode === 'function') {\n\t    callback = utf8encode;\n\t    utf8encode = null;\n\t  }\n\t\n\t  var data = (packet.data === undefined)\n\t    ? undefined\n\t    : packet.data.buffer || packet.data;\n\t\n\t  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n\t    return encodeArrayBuffer(packet, supportsBinary, callback);\n\t  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n\t    return encodeBlob(packet, supportsBinary, callback);\n\t  }\n\t\n\t  // might be an object with { base64: true, data: dataAsBase64String }\n\t  if (data && data.base64) {\n\t    return encodeBase64Object(packet, callback);\n\t  }\n\t\n\t  // Sending data as a utf-8 string\n\t  var encoded = packets[packet.type];\n\t\n\t  // data fragment is optional\n\t  if (undefined !== packet.data) {\n\t    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n\t  }\n\t\n\t  return callback('' + encoded);\n\t\n\t};\n\t\n\tfunction encodeBase64Object(packet, callback) {\n\t  // packet data is an object { base64: true, data: dataAsBase64String }\n\t  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n\t  return callback(message);\n\t}\n\t\n\t/**\n\t * Encode packet helpers for binary types\n\t */\n\t\n\tfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var data = packet.data;\n\t  var contentArray = new Uint8Array(data);\n\t  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\t\n\t  resultBuffer[0] = packets[packet.type];\n\t  for (var i = 0; i < contentArray.length; i++) {\n\t    resultBuffer[i+1] = contentArray[i];\n\t  }\n\t\n\t  return callback(resultBuffer.buffer);\n\t}\n\t\n\tfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var fr = new FileReader();\n\t  fr.onload = function() {\n\t    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n\t  };\n\t  return fr.readAsArrayBuffer(packet.data);\n\t}\n\t\n\tfunction encodeBlob(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  if (dontSendBlobs) {\n\t    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n\t  }\n\t\n\t  var length = new Uint8Array(1);\n\t  length[0] = packets[packet.type];\n\t  var blob = new Blob([length.buffer, packet.data]);\n\t\n\t  return callback(blob);\n\t}\n\t\n\t/**\n\t * Encodes a packet with binary data in a base64 string\n\t *\n\t * @param {Object} packet, has `type` and `data`\n\t * @return {String} base64 encoded message\n\t */\n\t\n\texports.encodeBase64Packet = function(packet, callback) {\n\t  var message = 'b' + exports.packets[packet.type];\n\t  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n\t    var fr = new FileReader();\n\t    fr.onload = function() {\n\t      var b64 = fr.result.split(',')[1];\n\t      callback(message + b64);\n\t    };\n\t    return fr.readAsDataURL(packet.data);\n\t  }\n\t\n\t  var b64data;\n\t  try {\n\t    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n\t  } catch (e) {\n\t    // iPhone Safari doesn't let you apply with typed arrays\n\t    var typed = new Uint8Array(packet.data);\n\t    var basic = new Array(typed.length);\n\t    for (var i = 0; i < typed.length; i++) {\n\t      basic[i] = typed[i];\n\t    }\n\t    b64data = String.fromCharCode.apply(null, basic);\n\t  }\n\t  message += btoa(b64data);\n\t  return callback(message);\n\t};\n\t\n\t/**\n\t * Decodes a packet. Changes format to Blob if requested.\n\t *\n\t * @return {Object} with `type` and `data` (if any)\n\t * @api private\n\t */\n\t\n\texports.decodePacket = function (data, binaryType, utf8decode) {\n\t  if (data === undefined) {\n\t    return err;\n\t  }\n\t  // String data\n\t  if (typeof data === 'string') {\n\t    if (data.charAt(0) === 'b') {\n\t      return exports.decodeBase64Packet(data.substr(1), binaryType);\n\t    }\n\t\n\t    if (utf8decode) {\n\t      data = tryDecode(data);\n\t      if (data === false) {\n\t        return err;\n\t      }\n\t    }\n\t    var type = data.charAt(0);\n\t\n\t    if (Number(type) != type || !packetslist[type]) {\n\t      return err;\n\t    }\n\t\n\t    if (data.length > 1) {\n\t      return { type: packetslist[type], data: data.substring(1) };\n\t    } else {\n\t      return { type: packetslist[type] };\n\t    }\n\t  }\n\t\n\t  var asArray = new Uint8Array(data);\n\t  var type = asArray[0];\n\t  var rest = sliceBuffer(data, 1);\n\t  if (Blob && binaryType === 'blob') {\n\t    rest = new Blob([rest]);\n\t  }\n\t  return { type: packetslist[type], data: rest };\n\t};\n\t\n\tfunction tryDecode(data) {\n\t  try {\n\t    data = utf8.decode(data, { strict: false });\n\t  } catch (e) {\n\t    return false;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Decodes a packet encoded in a base64 string\n\t *\n\t * @param {String} base64 encoded message\n\t * @return {Object} with `type` and `data` (if any)\n\t */\n\t\n\texports.decodeBase64Packet = function(msg, binaryType) {\n\t  var type = packetslist[msg.charAt(0)];\n\t  if (!base64encoder) {\n\t    return { type: type, data: { base64: true, data: msg.substr(1) } };\n\t  }\n\t\n\t  var data = base64encoder.decode(msg.substr(1));\n\t\n\t  if (binaryType === 'blob' && Blob) {\n\t    data = new Blob([data]);\n\t  }\n\t\n\t  return { type: type, data: data };\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload).\n\t *\n\t *     <length>:data\n\t *\n\t * Example:\n\t *\n\t *     11:hello world2:hi\n\t *\n\t * If any contents are binary, they will be encoded as base64 strings. Base64\n\t * encoded strings are marked with a b before the length specifier\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\texports.encodePayload = function (packets, supportsBinary, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = null;\n\t  }\n\t\n\t  var isBinary = hasBinary(packets);\n\t\n\t  if (supportsBinary && isBinary) {\n\t    if (Blob && !dontSendBlobs) {\n\t      return exports.encodePayloadAsBlob(packets, callback);\n\t    }\n\t\n\t    return exports.encodePayloadAsArrayBuffer(packets, callback);\n\t  }\n\t\n\t  if (!packets.length) {\n\t    return callback('0:');\n\t  }\n\t\n\t  function setLengthHeader(message) {\n\t    return message.length + ':' + message;\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n\t      doneCallback(null, setLengthHeader(message));\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(results.join(''));\n\t  });\n\t};\n\t\n\t/**\n\t * Async array map using after\n\t */\n\t\n\tfunction map(ary, each, done) {\n\t  var result = new Array(ary.length);\n\t  var next = after(ary.length, done);\n\t\n\t  var eachWithIndex = function(i, el, cb) {\n\t    each(el, function(error, msg) {\n\t      result[i] = msg;\n\t      cb(error, result);\n\t    });\n\t  };\n\t\n\t  for (var i = 0; i < ary.length; i++) {\n\t    eachWithIndex(i, ary[i], next);\n\t  }\n\t}\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Possible binary contents are\n\t * decoded from their base64 representation\n\t *\n\t * @param {String} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayload = function (data, binaryType, callback) {\n\t  if (typeof data !== 'string') {\n\t    return exports.decodePayloadAsBinary(data, binaryType, callback);\n\t  }\n\t\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var packet;\n\t  if (data === '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t  var length = '', n, msg;\n\t\n\t  for (var i = 0, l = data.length; i < l; i++) {\n\t    var chr = data.charAt(i);\n\t\n\t    if (chr !== ':') {\n\t      length += chr;\n\t      continue;\n\t    }\n\t\n\t    if (length === '' || (length != (n = Number(length)))) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    msg = data.substr(i + 1, n);\n\t\n\t    if (length != msg.length) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    if (msg.length) {\n\t      packet = exports.decodePacket(msg, binaryType, false);\n\t\n\t      if (err.type === packet.type && err.data === packet.data) {\n\t        // parser error in individual packet - ignoring payload\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      var ret = callback(packet, i + n, l);\n\t      if (false === ret) return;\n\t    }\n\t\n\t    // advance cursor\n\t    i += n;\n\t    length = '';\n\t  }\n\t\n\t  if (length !== '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload) as binary.\n\t *\n\t * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n\t * 255><data>\n\t *\n\t * Example:\n\t * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n\t *\n\t * @param {Array} packets\n\t * @return {ArrayBuffer} encoded payload\n\t * @api private\n\t */\n\t\n\texports.encodePayloadAsArrayBuffer = function(packets, callback) {\n\t  if (!packets.length) {\n\t    return callback(new ArrayBuffer(0));\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(data) {\n\t      return doneCallback(null, data);\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, encodedPackets) {\n\t    var totalLength = encodedPackets.reduce(function(acc, p) {\n\t      var len;\n\t      if (typeof p === 'string'){\n\t        len = p.length;\n\t      } else {\n\t        len = p.byteLength;\n\t      }\n\t      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n\t    }, 0);\n\t\n\t    var resultArray = new Uint8Array(totalLength);\n\t\n\t    var bufferIndex = 0;\n\t    encodedPackets.forEach(function(p) {\n\t      var isString = typeof p === 'string';\n\t      var ab = p;\n\t      if (isString) {\n\t        var view = new Uint8Array(p.length);\n\t        for (var i = 0; i < p.length; i++) {\n\t          view[i] = p.charCodeAt(i);\n\t        }\n\t        ab = view.buffer;\n\t      }\n\t\n\t      if (isString) { // not true binary\n\t        resultArray[bufferIndex++] = 0;\n\t      } else { // true binary\n\t        resultArray[bufferIndex++] = 1;\n\t      }\n\t\n\t      var lenStr = ab.byteLength.toString();\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n\t      }\n\t      resultArray[bufferIndex++] = 255;\n\t\n\t      var view = new Uint8Array(ab);\n\t      for (var i = 0; i < view.length; i++) {\n\t        resultArray[bufferIndex++] = view[i];\n\t      }\n\t    });\n\t\n\t    return callback(resultArray.buffer);\n\t  });\n\t};\n\t\n\t/**\n\t * Encode as Blob\n\t */\n\t\n\texports.encodePayloadAsBlob = function(packets, callback) {\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(encoded) {\n\t      var binaryIdentifier = new Uint8Array(1);\n\t      binaryIdentifier[0] = 1;\n\t      if (typeof encoded === 'string') {\n\t        var view = new Uint8Array(encoded.length);\n\t        for (var i = 0; i < encoded.length; i++) {\n\t          view[i] = encoded.charCodeAt(i);\n\t        }\n\t        encoded = view.buffer;\n\t        binaryIdentifier[0] = 0;\n\t      }\n\t\n\t      var len = (encoded instanceof ArrayBuffer)\n\t        ? encoded.byteLength\n\t        : encoded.size;\n\t\n\t      var lenStr = len.toString();\n\t      var lengthAry = new Uint8Array(lenStr.length + 1);\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        lengthAry[i] = parseInt(lenStr[i]);\n\t      }\n\t      lengthAry[lenStr.length] = 255;\n\t\n\t      if (Blob) {\n\t        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n\t        doneCallback(null, blob);\n\t      }\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(new Blob(results));\n\t  });\n\t};\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Strings are decoded by\n\t * interpreting each byte as a key code for entries marked to start with 0. See\n\t * description of encodePayloadAsBinary\n\t *\n\t * @param {ArrayBuffer} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayloadAsBinary = function (data, binaryType, callback) {\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var bufferTail = data;\n\t  var buffers = [];\n\t\n\t  while (bufferTail.byteLength > 0) {\n\t    var tailArray = new Uint8Array(bufferTail);\n\t    var isString = tailArray[0] === 0;\n\t    var msgLength = '';\n\t\n\t    for (var i = 1; ; i++) {\n\t      if (tailArray[i] === 255) break;\n\t\n\t      // 310 = char length of Number.MAX_VALUE\n\t      if (msgLength.length > 310) {\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      msgLength += tailArray[i];\n\t    }\n\t\n\t    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n\t    msgLength = parseInt(msgLength);\n\t\n\t    var msg = sliceBuffer(bufferTail, 0, msgLength);\n\t    if (isString) {\n\t      try {\n\t        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n\t      } catch (e) {\n\t        // iPhone Safari doesn't let you apply to typed arrays\n\t        var typed = new Uint8Array(msg);\n\t        msg = '';\n\t        for (var i = 0; i < typed.length; i++) {\n\t          msg += String.fromCharCode(typed[i]);\n\t        }\n\t      }\n\t    }\n\t\n\t    buffers.push(msg);\n\t    bufferTail = sliceBuffer(bufferTail, msgLength);\n\t  }\n\t\n\t  var total = buffers.length;\n\t  buffers.forEach(function(buffer, i) {\n\t    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n\t  });\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Gets the keys for an object.\n\t *\n\t * @return {Array} keys\n\t * @api private\n\t */\n\t\n\tmodule.exports = Object.keys || function keys (obj){\n\t  var arr = [];\n\t  var has = Object.prototype.hasOwnProperty;\n\t\n\t  for (var i in obj) {\n\t    if (has.call(obj, i)) {\n\t      arr.push(i);\n\t    }\n\t  }\n\t  return arr;\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global Blob File */\n\t\n\t/*\n\t * Module requirements.\n\t */\n\t\n\tvar isArray = __webpack_require__(7);\n\t\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' ||\n\t                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\n\tvar withNativeFile = typeof File === 'function' ||\n\t                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = hasBinary;\n\t\n\t/**\n\t * Checks for binary data.\n\t *\n\t * Supports Buffer, ArrayBuffer, Blob and File.\n\t *\n\t * @param {Object} anything\n\t * @api public\n\t */\n\t\n\tfunction hasBinary (obj) {\n\t  if (!obj || typeof obj !== 'object') {\n\t    return false;\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      if (hasBinary(obj[i])) {\n\t        return true;\n\t      }\n\t    }\n\t    return false;\n\t  }\n\t\n\t  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n\t    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n\t    (withNativeBlob && obj instanceof Blob) ||\n\t    (withNativeFile && obj instanceof File)\n\t  ) {\n\t    return true;\n\t  }\n\t\n\t  // see: https://github.com/Automattic/has-binary/pull/4\n\t  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n\t    return hasBinary(obj.toJSON(), true);\n\t  }\n\t\n\t  for (var key in obj) {\n\t    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * An abstraction for slicing an arraybuffer even when\n\t * ArrayBuffer.prototype.slice is not supported\n\t *\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(arraybuffer, start, end) {\n\t  var bytes = arraybuffer.byteLength;\n\t  start = start || 0;\n\t  end = end || bytes;\n\t\n\t  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\t\n\t  if (start < 0) { start += bytes; }\n\t  if (end < 0) { end += bytes; }\n\t  if (end > bytes) { end = bytes; }\n\t\n\t  if (start >= bytes || start >= end || bytes === 0) {\n\t    return new ArrayBuffer(0);\n\t  }\n\t\n\t  var abv = new Uint8Array(arraybuffer);\n\t  var result = new Uint8Array(end - start);\n\t  for (var i = start, ii = 0; i < end; i++, ii++) {\n\t    result[ii] = abv[i];\n\t  }\n\t  return result.buffer;\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = after\n\t\n\tfunction after(count, callback, err_cb) {\n\t    var bail = false\n\t    err_cb = err_cb || noop\n\t    proxy.count = count\n\t\n\t    return (count === 0) ? callback() : proxy\n\t\n\t    function proxy(err, result) {\n\t        if (proxy.count <= 0) {\n\t            throw new Error('after called too many times')\n\t        }\n\t        --proxy.count\n\t\n\t        // after first error, rest are passed to err_cb\n\t        if (err) {\n\t            bail = true\n\t            callback(err)\n\t            // future error callbacks will go to error handler\n\t            callback = err_cb\n\t        } else if (proxy.count === 0 && !bail) {\n\t            callback(null, result)\n\t        }\n\t    }\n\t}\n\t\n\tfunction noop() {}\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\n\t/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\t\n\tvar stringFromCharCode = String.fromCharCode;\n\t\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\t\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\t\n\tfunction checkScalarValue(codePoint, strict) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tif (strict) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t\t' is not a scalar value'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\t\n\tfunction encodeCodePoint(codePoint, strict) {\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\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t}\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\t\n\tfunction utf8encode(string, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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, strict);\n\t\t}\n\t\treturn byteString;\n\t}\n\t\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\t\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\t\n\tfunction decodeSymbol(strict) {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\t\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\t\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = 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\t\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 checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\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 & 0x07) << 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\t\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\t\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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(strict)) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\t\n\tmodule.exports = {\n\t\tversion: '2.1.2',\n\t\tencode: utf8encode,\n\t\tdecode: utf8decode\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\n\t/*\n\t * base64-arraybuffer\n\t * https://github.com/niklasvh/base64-arraybuffer\n\t *\n\t * Copyright (c) 2012 Niklas von Hertzen\n\t * Licensed under the MIT license.\n\t */\n\t(function(){\n\t  \"use strict\";\n\t\n\t  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\t\n\t  // Use a lookup table to find the index.\n\t  var lookup = new Uint8Array(256);\n\t  for (var i = 0; i < chars.length; i++) {\n\t    lookup[chars.charCodeAt(i)] = i;\n\t  }\n\t\n\t  exports.encode = function(arraybuffer) {\n\t    var bytes = new Uint8Array(arraybuffer),\n\t    i, len = bytes.length, base64 = \"\";\n\t\n\t    for (i = 0; i < len; i+=3) {\n\t      base64 += chars[bytes[i] >> 2];\n\t      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n\t      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n\t      base64 += chars[bytes[i + 2] & 63];\n\t    }\n\t\n\t    if ((len % 3) === 2) {\n\t      base64 = base64.substring(0, base64.length - 1) + \"=\";\n\t    } else if (len % 3 === 1) {\n\t      base64 = base64.substring(0, base64.length - 2) + \"==\";\n\t    }\n\t\n\t    return base64;\n\t  };\n\t\n\t  exports.decode =  function(base64) {\n\t    var bufferLength = base64.length * 0.75,\n\t    len = base64.length, i, p = 0,\n\t    encoded1, encoded2, encoded3, encoded4;\n\t\n\t    if (base64[base64.length - 1] === \"=\") {\n\t      bufferLength--;\n\t      if (base64[base64.length - 2] === \"=\") {\n\t        bufferLength--;\n\t      }\n\t    }\n\t\n\t    var arraybuffer = new ArrayBuffer(bufferLength),\n\t    bytes = new Uint8Array(arraybuffer);\n\t\n\t    for (i = 0; i < len; i+=4) {\n\t      encoded1 = lookup[base64.charCodeAt(i)];\n\t      encoded2 = lookup[base64.charCodeAt(i+1)];\n\t      encoded3 = lookup[base64.charCodeAt(i+2)];\n\t      encoded4 = lookup[base64.charCodeAt(i+3)];\n\t\n\t      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n\t      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n\t      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n\t    }\n\t\n\t    return arraybuffer;\n\t  };\n\t})();\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Create a blob builder even when vendor prefixes exist\r\n\t */\r\n\t\r\n\tvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n\t  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n\t  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n\t  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n\t  false;\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor is supported\r\n\t */\r\n\t\r\n\tvar blobSupported = (function() {\r\n\t  try {\r\n\t    var a = new Blob(['hi']);\r\n\t    return a.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor supports ArrayBufferViews\r\n\t * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n\t */\r\n\t\r\n\tvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n\t  try {\r\n\t    var b = new Blob([new Uint8Array([1,2])]);\r\n\t    return b.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if BlobBuilder is supported\r\n\t */\r\n\t\r\n\tvar blobBuilderSupported = BlobBuilder\r\n\t  && BlobBuilder.prototype.append\r\n\t  && BlobBuilder.prototype.getBlob;\r\n\t\r\n\t/**\r\n\t * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n\t * Used by BlobBuilder constructor and old browsers that didn't\r\n\t * support it in the Blob constructor.\r\n\t */\r\n\t\r\n\tfunction mapArrayBufferViews(ary) {\r\n\t  return ary.map(function(chunk) {\r\n\t    if (chunk.buffer instanceof ArrayBuffer) {\r\n\t      var buf = chunk.buffer;\r\n\t\r\n\t      // if this is a subarray, make a copy so we only\r\n\t      // include the subarray region from the underlying buffer\r\n\t      if (chunk.byteLength !== buf.byteLength) {\r\n\t        var copy = new Uint8Array(chunk.byteLength);\r\n\t        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n\t        buf = copy.buffer;\r\n\t      }\r\n\t\r\n\t      return buf;\r\n\t    }\r\n\t\r\n\t    return chunk;\r\n\t  });\r\n\t}\r\n\t\r\n\tfunction BlobBuilderConstructor(ary, options) {\r\n\t  options = options || {};\r\n\t\r\n\t  var bb = new BlobBuilder();\r\n\t  mapArrayBufferViews(ary).forEach(function(part) {\r\n\t    bb.append(part);\r\n\t  });\r\n\t\r\n\t  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n\t};\r\n\t\r\n\tfunction BlobConstructor(ary, options) {\r\n\t  return new Blob(mapArrayBufferViews(ary), options || {});\r\n\t};\r\n\t\r\n\tif (typeof Blob !== 'undefined') {\r\n\t  BlobBuilderConstructor.prototype = Blob.prototype;\r\n\t  BlobConstructor.prototype = Blob.prototype;\r\n\t}\r\n\t\r\n\tmodule.exports = (function() {\r\n\t  if (blobSupported) {\r\n\t    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n\t  } else if (blobBuilderSupported) {\r\n\t    return BlobBuilderConstructor;\r\n\t  } else {\r\n\t    return undefined;\r\n\t  }\r\n\t})();\r\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Compiles a querystring\r\n\t * Returns string representation of the object\r\n\t *\r\n\t * @param {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\texports.encode = function (obj) {\r\n\t  var str = '';\r\n\t\r\n\t  for (var i in obj) {\r\n\t    if (obj.hasOwnProperty(i)) {\r\n\t      if (str.length) str += '&';\r\n\t      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return str;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Parses a simple querystring into an object\r\n\t *\r\n\t * @param {String} qs\r\n\t * @api private\r\n\t */\r\n\t\r\n\texports.decode = function(qs){\r\n\t  var qry = {};\r\n\t  var pairs = qs.split('&');\r\n\t  for (var i = 0, l = pairs.length; i < l; i++) {\r\n\t    var pair = pairs[i].split('=');\r\n\t    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n\t  }\r\n\t  return qry;\r\n\t};\r\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = function(a, b){\n\t  var fn = function(){};\n\t  fn.prototype = b.prototype;\n\t  a.prototype = new fn;\n\t  a.prototype.constructor = a;\n\t};\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n\t  , length = 64\n\t  , map = {}\n\t  , seed = 0\n\t  , i = 0\n\t  , prev;\n\t\n\t/**\n\t * Return a string representing the specified number.\n\t *\n\t * @param {Number} num The number to convert.\n\t * @returns {String} The string representation of the number.\n\t * @api public\n\t */\n\tfunction encode(num) {\n\t  var encoded = '';\n\t\n\t  do {\n\t    encoded = alphabet[num % length] + encoded;\n\t    num = Math.floor(num / length);\n\t  } while (num > 0);\n\t\n\t  return encoded;\n\t}\n\t\n\t/**\n\t * Return the integer value specified by the given string.\n\t *\n\t * @param {String} str The string to convert.\n\t * @returns {Number} The integer value represented by the string.\n\t * @api public\n\t */\n\tfunction decode(str) {\n\t  var decoded = 0;\n\t\n\t  for (i = 0; i < str.length; i++) {\n\t    decoded = decoded * length + map[str.charAt(i)];\n\t  }\n\t\n\t  return decoded;\n\t}\n\t\n\t/**\n\t * Yeast: A tiny growing id generator.\n\t *\n\t * @returns {String} A unique id.\n\t * @api public\n\t */\n\tfunction yeast() {\n\t  var now = encode(+new Date());\n\t\n\t  if (now !== prev) return seed = 0, prev = now;\n\t  return now +'.'+ encode(seed++);\n\t}\n\t\n\t//\n\t// Map each character to its index.\n\t//\n\tfor (; i < length; i++) map[alphabet[i]] = i;\n\t\n\t//\n\t// Expose the `yeast`, `encode` and `decode` functions.\n\t//\n\tyeast.encode = encode;\n\tyeast.decode = decode;\n\tmodule.exports = yeast;\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Module requirements.\n\t */\n\t\n\tvar Polling = __webpack_require__(16);\n\tvar inherit = __webpack_require__(27);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = JSONPPolling;\n\t\n\t/**\n\t * Cached regular expressions.\n\t */\n\t\n\tvar rNewline = /\\n/g;\n\tvar rEscapedNewline = /\\\\n/g;\n\t\n\t/**\n\t * Global JSONP callbacks.\n\t */\n\t\n\tvar callbacks;\n\t\n\t/**\n\t * Noop.\n\t */\n\t\n\tfunction empty () { }\n\t\n\t/**\n\t * Until https://github.com/tc39/proposal-global is shipped.\n\t */\n\tfunction glob () {\n\t  return typeof self !== 'undefined' ? self\n\t      : typeof window !== 'undefined' ? window\n\t      : typeof global !== 'undefined' ? global : {};\n\t}\n\t\n\t/**\n\t * JSONP Polling constructor.\n\t *\n\t * @param {Object} opts.\n\t * @api public\n\t */\n\t\n\tfunction JSONPPolling (opts) {\n\t  Polling.call(this, opts);\n\t\n\t  this.query = this.query || {};\n\t\n\t  // define global callbacks array if not present\n\t  // we do this here (lazily) to avoid unneeded global pollution\n\t  if (!callbacks) {\n\t    // we need to consider multiple engines in the same page\n\t    var global = glob();\n\t    callbacks = global.___eio = (global.___eio || []);\n\t  }\n\t\n\t  // callback identifier\n\t  this.index = callbacks.length;\n\t\n\t  // add callback to jsonp global\n\t  var self = this;\n\t  callbacks.push(function (msg) {\n\t    self.onData(msg);\n\t  });\n\t\n\t  // append to query string\n\t  this.query.j = this.index;\n\t\n\t  // prevent spurious errors from being emitted when the window is unloaded\n\t  if (typeof addEventListener === 'function') {\n\t    addEventListener('beforeunload', function () {\n\t      if (self.script) self.script.onerror = empty;\n\t    }, false);\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(JSONPPolling, Polling);\n\t\n\t/*\n\t * JSONP only supports binary as base64 encoded strings\n\t */\n\t\n\tJSONPPolling.prototype.supportsBinary = false;\n\t\n\t/**\n\t * Closes the socket.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doClose = function () {\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  if (this.form) {\n\t    this.form.parentNode.removeChild(this.form);\n\t    this.form = null;\n\t    this.iframe = null;\n\t  }\n\t\n\t  Polling.prototype.doClose.call(this);\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doPoll = function () {\n\t  var self = this;\n\t  var script = document.createElement('script');\n\t\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  script.async = true;\n\t  script.src = this.uri();\n\t  script.onerror = function (e) {\n\t    self.onError('jsonp poll error', e);\n\t  };\n\t\n\t  var insertAt = document.getElementsByTagName('script')[0];\n\t  if (insertAt) {\n\t    insertAt.parentNode.insertBefore(script, insertAt);\n\t  } else {\n\t    (document.head || document.body).appendChild(script);\n\t  }\n\t  this.script = script;\n\t\n\t  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\t\n\t  if (isUAgecko) {\n\t    setTimeout(function () {\n\t      var iframe = document.createElement('iframe');\n\t      document.body.appendChild(iframe);\n\t      document.body.removeChild(iframe);\n\t    }, 100);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes with a hidden iframe.\n\t *\n\t * @param {String} data to send\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doWrite = function (data, fn) {\n\t  var self = this;\n\t\n\t  if (!this.form) {\n\t    var form = document.createElement('form');\n\t    var area = document.createElement('textarea');\n\t    var id = this.iframeId = 'eio_iframe_' + this.index;\n\t    var iframe;\n\t\n\t    form.className = 'socketio';\n\t    form.style.position = 'absolute';\n\t    form.style.top = '-1000px';\n\t    form.style.left = '-1000px';\n\t    form.target = id;\n\t    form.method = 'POST';\n\t    form.setAttribute('accept-charset', 'utf-8');\n\t    area.name = 'd';\n\t    form.appendChild(area);\n\t    document.body.appendChild(form);\n\t\n\t    this.form = form;\n\t    this.area = area;\n\t  }\n\t\n\t  this.form.action = this.uri();\n\t\n\t  function complete () {\n\t    initIframe();\n\t    fn();\n\t  }\n\t\n\t  function initIframe () {\n\t    if (self.iframe) {\n\t      try {\n\t        self.form.removeChild(self.iframe);\n\t      } catch (e) {\n\t        self.onError('jsonp polling iframe removal error', e);\n\t      }\n\t    }\n\t\n\t    try {\n\t      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n\t      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n\t      iframe = document.createElement(html);\n\t    } catch (e) {\n\t      iframe = document.createElement('iframe');\n\t      iframe.name = self.iframeId;\n\t      iframe.src = 'javascript:0';\n\t    }\n\t\n\t    iframe.id = self.iframeId;\n\t\n\t    self.form.appendChild(iframe);\n\t    self.iframe = iframe;\n\t  }\n\t\n\t  initIframe();\n\t\n\t  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n\t  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n\t  data = data.replace(rEscapedNewline, '\\\\\\n');\n\t  this.area.value = data.replace(rNewline, '\\\\n');\n\t\n\t  try {\n\t    this.form.submit();\n\t  } catch (e) {}\n\t\n\t  if (this.iframe.attachEvent) {\n\t    this.iframe.onreadystatechange = function () {\n\t      if (self.iframe.readyState === 'complete') {\n\t        complete();\n\t      }\n\t    };\n\t  } else {\n\t    this.iframe.onload = complete;\n\t  }\n\t};\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(17);\n\tvar parser = __webpack_require__(18);\n\tvar parseqs = __webpack_require__(26);\n\tvar inherit = __webpack_require__(27);\n\tvar yeast = __webpack_require__(28);\n\tvar debug = __webpack_require__(3)('engine.io-client:websocket');\n\t\n\tvar BrowserWebSocket, NodeWebSocket;\n\t\n\tif (typeof WebSocket !== 'undefined') {\n\t  BrowserWebSocket = WebSocket;\n\t} else if (typeof self !== 'undefined') {\n\t  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n\t}\n\t\n\tif (typeof window === 'undefined') {\n\t  try {\n\t    NodeWebSocket = __webpack_require__(31);\n\t  } catch (e) { }\n\t}\n\t\n\t/**\n\t * Get either the `WebSocket` or `MozWebSocket` globals\n\t * in the browser or try to resolve WebSocket-compatible\n\t * interface exposed by `ws` for Node-like environment.\n\t */\n\t\n\tvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = WS;\n\t\n\t/**\n\t * WebSocket transport constructor.\n\t *\n\t * @api {Object} connection options\n\t * @api public\n\t */\n\t\n\tfunction WS (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  this.perMessageDeflate = opts.perMessageDeflate;\n\t  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n\t  this.protocols = opts.protocols;\n\t  if (!this.usingBrowserWebSocket) {\n\t    WebSocketImpl = NodeWebSocket;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(WS, Transport);\n\t\n\t/**\n\t * Transport name.\n\t *\n\t * @api public\n\t */\n\t\n\tWS.prototype.name = 'websocket';\n\t\n\t/*\n\t * WebSockets support binary\n\t */\n\t\n\tWS.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Opens socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doOpen = function () {\n\t  if (!this.check()) {\n\t    // let probe timeout\n\t    return;\n\t  }\n\t\n\t  var uri = this.uri();\n\t  var protocols = this.protocols;\n\t  var opts = {\n\t    agent: this.agent,\n\t    perMessageDeflate: this.perMessageDeflate\n\t  };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  if (this.extraHeaders) {\n\t    opts.headers = this.extraHeaders;\n\t  }\n\t  if (this.localAddress) {\n\t    opts.localAddress = this.localAddress;\n\t  }\n\t\n\t  try {\n\t    this.ws =\n\t      this.usingBrowserWebSocket && !this.isReactNative\n\t        ? protocols\n\t          ? new WebSocketImpl(uri, protocols)\n\t          : new WebSocketImpl(uri)\n\t        : new WebSocketImpl(uri, protocols, opts);\n\t  } catch (err) {\n\t    return this.emit('error', err);\n\t  }\n\t\n\t  if (this.ws.binaryType === undefined) {\n\t    this.supportsBinary = false;\n\t  }\n\t\n\t  if (this.ws.supports && this.ws.supports.binary) {\n\t    this.supportsBinary = true;\n\t    this.ws.binaryType = 'nodebuffer';\n\t  } else {\n\t    this.ws.binaryType = 'arraybuffer';\n\t  }\n\t\n\t  this.addEventListeners();\n\t};\n\t\n\t/**\n\t * Adds event listeners to the socket\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.addEventListeners = function () {\n\t  var self = this;\n\t\n\t  this.ws.onopen = function () {\n\t    self.onOpen();\n\t  };\n\t  this.ws.onclose = function () {\n\t    self.onClose();\n\t  };\n\t  this.ws.onmessage = function (ev) {\n\t    self.onData(ev.data);\n\t  };\n\t  this.ws.onerror = function (e) {\n\t    self.onError('websocket error', e);\n\t  };\n\t};\n\t\n\t/**\n\t * Writes data to socket.\n\t *\n\t * @param {Array} array of packets.\n\t * @api private\n\t */\n\t\n\tWS.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t\n\t  // encodePacket efficient as it uses WS framing\n\t  // no need for encodePayload\n\t  var total = packets.length;\n\t  for (var i = 0, l = total; i < l; i++) {\n\t    (function (packet) {\n\t      parser.encodePacket(packet, self.supportsBinary, function (data) {\n\t        if (!self.usingBrowserWebSocket) {\n\t          // always create a new object (GH-437)\n\t          var opts = {};\n\t          if (packet.options) {\n\t            opts.compress = packet.options.compress;\n\t          }\n\t\n\t          if (self.perMessageDeflate) {\n\t            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n\t            if (len < self.perMessageDeflate.threshold) {\n\t              opts.compress = false;\n\t            }\n\t          }\n\t        }\n\t\n\t        // Sometimes the websocket has already been closed but the browser didn't\n\t        // have a chance of informing us about it yet, in that case send will\n\t        // throw an error\n\t        try {\n\t          if (self.usingBrowserWebSocket) {\n\t            // TypeError is thrown when passing the second argument on Safari\n\t            self.ws.send(data);\n\t          } else {\n\t            self.ws.send(data, opts);\n\t          }\n\t        } catch (e) {\n\t\n\t        }\n\t\n\t        --total || done();\n\t      });\n\t    })(packets[i]);\n\t  }\n\t\n\t  function done () {\n\t    self.emit('flush');\n\t\n\t    // fake drain\n\t    // defer to next tick to allow Socket to clear writeBuffer\n\t    setTimeout(function () {\n\t      self.writable = true;\n\t      self.emit('drain');\n\t    }, 0);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon close\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.onClose = function () {\n\t  Transport.prototype.onClose.call(this);\n\t};\n\t\n\t/**\n\t * Closes socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doClose = function () {\n\t  if (typeof this.ws !== 'undefined') {\n\t    this.ws.close();\n\t  }\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'wss' : 'ws';\n\t  var port = '';\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n\t    ('ws' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // append timestamp to URI\n\t  if (this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  // communicate binary support capabilities\n\t  if (!this.supportsBinary) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\t\n\t/**\n\t * Feature detection for WebSocket.\n\t *\n\t * @return {Boolean} whether this transport is available.\n\t * @api public\n\t */\n\t\n\tWS.prototype.check = function () {\n\t  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n\t};\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\n\t/* (ignored) */\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\n\t\n\tvar indexOf = [].indexOf;\n\t\n\tmodule.exports = function(arr, obj){\n\t  if (indexOf) return arr.indexOf(obj);\n\t  for (var i = 0; i < arr.length; ++i) {\n\t    if (arr[i] === obj) return i;\n\t  }\n\t  return -1;\n\t};\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(4);\n\tvar Emitter = __webpack_require__(5);\n\tvar toArray = __webpack_require__(34);\n\tvar on = __webpack_require__(35);\n\tvar bind = __webpack_require__(36);\n\tvar debug = __webpack_require__(3)('socket.io-client:socket');\n\tvar parseqs = __webpack_require__(26);\n\tvar hasBin = __webpack_require__(20);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = Socket;\n\t\n\t/**\n\t * Internal events (blacklisted).\n\t * These events can't be emitted by the user.\n\t *\n\t * @api private\n\t */\n\t\n\tvar events = {\n\t  connect: 1,\n\t  connect_error: 1,\n\t  connect_timeout: 1,\n\t  connecting: 1,\n\t  disconnect: 1,\n\t  error: 1,\n\t  reconnect: 1,\n\t  reconnect_attempt: 1,\n\t  reconnect_failed: 1,\n\t  reconnect_error: 1,\n\t  reconnecting: 1,\n\t  ping: 1,\n\t  pong: 1\n\t};\n\t\n\t/**\n\t * Shortcut to `Emitter#emit`.\n\t */\n\t\n\tvar emit = Emitter.prototype.emit;\n\t\n\t/**\n\t * `Socket` constructor.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Socket(io, nsp, opts) {\n\t  this.io = io;\n\t  this.nsp = nsp;\n\t  this.json = this; // compat\n\t  this.ids = 0;\n\t  this.acks = {};\n\t  this.receiveBuffer = [];\n\t  this.sendBuffer = [];\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  this.flags = {};\n\t  if (opts && opts.query) {\n\t    this.query = opts.query;\n\t  }\n\t  if (this.io.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Subscribe to open, close and packet events\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.subEvents = function () {\n\t  if (this.subs) return;\n\t\n\t  var io = this.io;\n\t  this.subs = [on(io, 'open', bind(this, 'onopen')), on(io, 'packet', bind(this, 'onpacket')), on(io, 'close', bind(this, 'onclose'))];\n\t};\n\t\n\t/**\n\t * \"Opens\" the socket.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.open = Socket.prototype.connect = function () {\n\t  if (this.connected) return this;\n\t\n\t  this.subEvents();\n\t  this.io.open(); // ensure open\n\t  if ('open' === this.io.readyState) this.onopen();\n\t  this.emit('connecting');\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a `message` event.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.send = function () {\n\t  var args = toArray(arguments);\n\t  args.unshift('message');\n\t  this.emit.apply(this, args);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Override `emit`.\n\t * If the event is in `events`, it's emitted normally.\n\t *\n\t * @param {String} event name\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.emit = function (ev) {\n\t  if (events.hasOwnProperty(ev)) {\n\t    emit.apply(this, arguments);\n\t    return this;\n\t  }\n\t\n\t  var args = toArray(arguments);\n\t  var packet = {\n\t    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n\t    data: args\n\t  };\n\t\n\t  packet.options = {};\n\t  packet.options.compress = !this.flags || false !== this.flags.compress;\n\t\n\t  // event ack callback\n\t  if ('function' === typeof args[args.length - 1]) {\n\t\n\t    this.acks[this.ids] = args.pop();\n\t    packet.id = this.ids++;\n\t  }\n\t\n\t  if (this.connected) {\n\t    this.packet(packet);\n\t  } else {\n\t    this.sendBuffer.push(packet);\n\t  }\n\t\n\t  this.flags = {};\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.packet = function (packet) {\n\t  packet.nsp = this.nsp;\n\t  this.io.packet(packet);\n\t};\n\t\n\t/**\n\t * Called upon engine `open`.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onopen = function () {\n\t\n\t  // write connect packet if necessary\n\t  if ('/' !== this.nsp) {\n\t    if (this.query) {\n\t      var query = _typeof(this.query) === 'object' ? parseqs.encode(this.query) : this.query;\n\t\n\t      this.packet({ type: parser.CONNECT, query: query });\n\t    } else {\n\t      this.packet({ type: parser.CONNECT });\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon engine `close`.\n\t *\n\t * @param {String} reason\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onclose = function (reason) {\n\t\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  delete this.id;\n\t  this.emit('disconnect', reason);\n\t};\n\t\n\t/**\n\t * Called with socket packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onpacket = function (packet) {\n\t  var sameNamespace = packet.nsp === this.nsp;\n\t  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\t\n\t  if (!sameNamespace && !rootNamespaceError) return;\n\t\n\t  switch (packet.type) {\n\t    case parser.CONNECT:\n\t      this.onconnect();\n\t      break;\n\t\n\t    case parser.EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.BINARY_EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.BINARY_ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.DISCONNECT:\n\t      this.ondisconnect();\n\t      break;\n\t\n\t    case parser.ERROR:\n\t      this.emit('error', packet.data);\n\t      break;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon a server event.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onevent = function (packet) {\n\t  var args = packet.data || [];\n\t\n\t  if (null != packet.id) {\n\t\n\t    args.push(this.ack(packet.id));\n\t  }\n\t\n\t  if (this.connected) {\n\t    emit.apply(this, args);\n\t  } else {\n\t    this.receiveBuffer.push(args);\n\t  }\n\t};\n\t\n\t/**\n\t * Produces an ack callback to emit with an event.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ack = function (id) {\n\t  var self = this;\n\t  var sent = false;\n\t  return function () {\n\t    // prevent double callbacks\n\t    if (sent) return;\n\t    sent = true;\n\t    var args = toArray(arguments);\n\t\n\t    self.packet({\n\t      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n\t      id: id,\n\t      data: args\n\t    });\n\t  };\n\t};\n\t\n\t/**\n\t * Called upon a server acknowlegement.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onack = function (packet) {\n\t  var ack = this.acks[packet.id];\n\t  if ('function' === typeof ack) {\n\t\n\t    ack.apply(this, packet.data);\n\t    delete this.acks[packet.id];\n\t  } else {}\n\t};\n\t\n\t/**\n\t * Called upon server connect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onconnect = function () {\n\t  this.connected = true;\n\t  this.disconnected = false;\n\t  this.emit('connect');\n\t  this.emitBuffered();\n\t};\n\t\n\t/**\n\t * Emit buffered events (received and emitted).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.emitBuffered = function () {\n\t  var i;\n\t  for (i = 0; i < this.receiveBuffer.length; i++) {\n\t    emit.apply(this, this.receiveBuffer[i]);\n\t  }\n\t  this.receiveBuffer = [];\n\t\n\t  for (i = 0; i < this.sendBuffer.length; i++) {\n\t    this.packet(this.sendBuffer[i]);\n\t  }\n\t  this.sendBuffer = [];\n\t};\n\t\n\t/**\n\t * Called upon server disconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ondisconnect = function () {\n\t\n\t  this.destroy();\n\t  this.onclose('io server disconnect');\n\t};\n\t\n\t/**\n\t * Called upon forced client/server side disconnections,\n\t * this method ensures the manager stops tracking us and\n\t * that reconnections don't get triggered for this.\n\t *\n\t * @api private.\n\t */\n\t\n\tSocket.prototype.destroy = function () {\n\t  if (this.subs) {\n\t    // clean subscriptions to avoid reconnections\n\t    for (var i = 0; i < this.subs.length; i++) {\n\t      this.subs[i].destroy();\n\t    }\n\t    this.subs = null;\n\t  }\n\t\n\t  this.io.destroy(this);\n\t};\n\t\n\t/**\n\t * Disconnects the socket manually.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.close = Socket.prototype.disconnect = function () {\n\t  if (this.connected) {\n\t\n\t    this.packet({ type: parser.DISCONNECT });\n\t  }\n\t\n\t  // remove socket from pool\n\t  this.destroy();\n\t\n\t  if (this.connected) {\n\t    // fire events\n\t    this.onclose('io client disconnect');\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the compress flag.\n\t *\n\t * @param {Boolean} if `true`, compresses the sending data\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.compress = function (compress) {\n\t  this.flags.compress = compress;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the binary flag\n\t *\n\t * @param {Boolean} whether the emitted data contains binary\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.binary = function (binary) {\n\t  this.flags.binary = binary;\n\t  return this;\n\t};\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = toArray\n\t\n\tfunction toArray(list, index) {\n\t    var array = []\n\t\n\t    index = index || 0\n\t\n\t    for (var i = index || 0; i < list.length; i++) {\n\t        array[i - index] = list[i]\n\t    }\n\t\n\t    return array\n\t}\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = on;\n\t\n\t/**\n\t * Helper for subscriptions.\n\t *\n\t * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n\t * @param {String} event name\n\t * @param {Function} callback\n\t * @api public\n\t */\n\t\n\tfunction on(obj, ev, fn) {\n\t  obj.on(ev, fn);\n\t  return {\n\t    destroy: function destroy() {\n\t      obj.removeListener(ev, fn);\n\t    }\n\t  };\n\t}\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Slice reference.\n\t */\n\t\n\tvar slice = [].slice;\n\t\n\t/**\n\t * Bind `obj` to `fn`.\n\t *\n\t * @param {Object} obj\n\t * @param {Function|String} fn or string\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(obj, fn){\n\t  if ('string' == typeof fn) fn = obj[fn];\n\t  if ('function' != typeof fn) throw new Error('bind() requires a function');\n\t  var args = slice.call(arguments, 2);\n\t  return function(){\n\t    return fn.apply(obj, args.concat(slice.call(arguments)));\n\t  }\n\t};\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Expose `Backoff`.\n\t */\n\t\n\tmodule.exports = Backoff;\n\t\n\t/**\n\t * Initialize backoff timer with `opts`.\n\t *\n\t * - `min` initial timeout in milliseconds [100]\n\t * - `max` max timeout [10000]\n\t * - `jitter` [0]\n\t * - `factor` [2]\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction Backoff(opts) {\n\t  opts = opts || {};\n\t  this.ms = opts.min || 100;\n\t  this.max = opts.max || 10000;\n\t  this.factor = opts.factor || 2;\n\t  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n\t  this.attempts = 0;\n\t}\n\t\n\t/**\n\t * Return the backoff duration.\n\t *\n\t * @return {Number}\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.duration = function(){\n\t  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n\t  if (this.jitter) {\n\t    var rand =  Math.random();\n\t    var deviation = Math.floor(rand * this.jitter * ms);\n\t    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n\t  }\n\t  return Math.min(ms, this.max) | 0;\n\t};\n\t\n\t/**\n\t * Reset the number of attempts.\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.reset = function(){\n\t  this.attempts = 0;\n\t};\n\t\n\t/**\n\t * Set the minimum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMin = function(min){\n\t  this.ms = min;\n\t};\n\t\n\t/**\n\t * Set the maximum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMax = function(max){\n\t  this.max = max;\n\t};\n\t\n\t/**\n\t * Set the jitter\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setJitter = function(jitter){\n\t  this.jitter = jitter;\n\t};\n\t\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// socket.io.slim.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 31c6c79423e11e145ab4","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/index.js","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/url.js","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","\nmodule.exports = function () { return function () {}; };\n\n\n\n// WEBPACK FOOTER //\n// ./support/noop.js","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 4\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 5\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 6\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 7\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 8\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n\n  if (~this.readyState.indexOf('open')) return this;\n\n\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n\n\n    // set timer\n    var timer = setTimeout(function () {\n\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/manager.js","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 10\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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\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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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\n  var self = this;\n\n  if (this.transport) {\n\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\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\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\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n\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\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\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\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\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\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\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(JSON.parse(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\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\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\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\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\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\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 11\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 12\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('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 self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 13\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 14\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 15\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n\n      total++;\n      this.once('pollComplete', function () {\n\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n\n      total++;\n      this.once('drain', function () {\n\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\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\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\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\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n\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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 18\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 19\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 20\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 21\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 22\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 23\n// module chunks = 0","/*\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 24\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 25\n// module chunks = 0","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 26\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 27\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 28\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('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 * Until https://github.com/tc39/proposal-global is shipped.\n */\nfunction glob () {\n  return typeof self !== 'undefined' ? self\n      : typeof window !== 'undefined' ? window\n      : typeof global !== 'undefined' ? global : {};\n}\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    var global = glob();\n    callbacks = global.___eio = (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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 29\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\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  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 30\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 32\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n\n\n  if (null != packet.id) {\n\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/socket.js","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 34\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/on.js","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 36\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 37\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io-parser/CHANGELOG.md b/signaling_server/service/node_modules/socket.io-parser/CHANGELOG.md
new file mode 100644 (file)
index 0000000..4fe8f3a
--- /dev/null
@@ -0,0 +1,6 @@
+## [3.4.1](https://github.com/socketio/socket.io-parser/compare/3.4.0...3.4.1) (2020-05-13)
+
+
+### Bug Fixes
+
+* prevent DoS (OOM) via massive packets ([#95](https://github.com/socketio/socket.io-parser/issues/95)) ([dcb942d](https://github.com/socketio/socket.io-parser/commit/dcb942d24db97162ad16a67c2a0cf30875342d55))
diff --git a/signaling_server/service/node_modules/socket.io-parser/index.js b/signaling_server/service/node_modules/socket.io-parser/index.js
new file mode 100644 (file)
index 0000000..ff613cc
--- /dev/null
@@ -0,0 +1,412 @@
+
+/**
+ * Module dependencies.
+ */
+
+var debug = require('debug')('socket.io-parser');
+var Emitter = require('component-emitter');
+var binary = require('./binary');
+var isArray = require('isarray');
+var isBuf = require('./is-buffer');
+
+/**
+ * Protocol version.
+ *
+ * @api public
+ */
+
+exports.protocol = 4;
+
+/**
+ * Packet types.
+ *
+ * @api public
+ */
+
+exports.types = [
+  'CONNECT',
+  'DISCONNECT',
+  'EVENT',
+  'ACK',
+  'ERROR',
+  'BINARY_EVENT',
+  'BINARY_ACK'
+];
+
+/**
+ * Packet type `connect`.
+ *
+ * @api public
+ */
+
+exports.CONNECT = 0;
+
+/**
+ * Packet type `disconnect`.
+ *
+ * @api public
+ */
+
+exports.DISCONNECT = 1;
+
+/**
+ * Packet type `event`.
+ *
+ * @api public
+ */
+
+exports.EVENT = 2;
+
+/**
+ * Packet type `ack`.
+ *
+ * @api public
+ */
+
+exports.ACK = 3;
+
+/**
+ * Packet type `error`.
+ *
+ * @api public
+ */
+
+exports.ERROR = 4;
+
+/**
+ * Packet type 'binary event'
+ *
+ * @api public
+ */
+
+exports.BINARY_EVENT = 5;
+
+/**
+ * Packet type `binary ack`. For acks with binary arguments.
+ *
+ * @api public
+ */
+
+exports.BINARY_ACK = 6;
+
+/**
+ * Encoder constructor.
+ *
+ * @api public
+ */
+
+exports.Encoder = Encoder;
+
+/**
+ * Decoder constructor.
+ *
+ * @api public
+ */
+
+exports.Decoder = Decoder;
+
+/**
+ * A socket.io Encoder instance
+ *
+ * @api public
+ */
+
+function Encoder() {}
+
+var ERROR_PACKET = exports.ERROR + '"encode error"';
+
+/**
+ * Encode a packet as a single string if non-binary, or as a
+ * buffer sequence, depending on packet type.
+ *
+ * @param {Object} obj - packet object
+ * @param {Function} callback - function to handle encodings (likely engine.write)
+ * @return Calls callback with Array of encodings
+ * @api public
+ */
+
+Encoder.prototype.encode = function(obj, callback){
+  debug('encoding packet %j', obj);
+
+  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
+    encodeAsBinary(obj, callback);
+  } else {
+    var encoding = encodeAsString(obj);
+    callback([encoding]);
+  }
+};
+
+/**
+ * Encode packet as string.
+ *
+ * @param {Object} packet
+ * @return {String} encoded
+ * @api private
+ */
+
+function encodeAsString(obj) {
+
+  // first is type
+  var str = '' + obj.type;
+
+  // attachments if we have them
+  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
+    str += obj.attachments + '-';
+  }
+
+  // if we have a namespace other than `/`
+  // we append it followed by a comma `,`
+  if (obj.nsp && '/' !== obj.nsp) {
+    str += obj.nsp + ',';
+  }
+
+  // immediately followed by the id
+  if (null != obj.id) {
+    str += obj.id;
+  }
+
+  // json data
+  if (null != obj.data) {
+    var payload = tryStringify(obj.data);
+    if (payload !== false) {
+      str += payload;
+    } else {
+      return ERROR_PACKET;
+    }
+  }
+
+  debug('encoded %j as %s', obj, str);
+  return str;
+}
+
+function tryStringify(str) {
+  try {
+    return JSON.stringify(str);
+  } catch(e){
+    return false;
+  }
+}
+
+/**
+ * Encode packet as 'buffer sequence' by removing blobs, and
+ * deconstructing packet into object with placeholders and
+ * a list of buffers.
+ *
+ * @param {Object} packet
+ * @return {Buffer} encoded
+ * @api private
+ */
+
+function encodeAsBinary(obj, callback) {
+
+  function writeEncoding(bloblessData) {
+    var deconstruction = binary.deconstructPacket(bloblessData);
+    var pack = encodeAsString(deconstruction.packet);
+    var buffers = deconstruction.buffers;
+
+    buffers.unshift(pack); // add packet info to beginning of data list
+    callback(buffers); // write all the buffers
+  }
+
+  binary.removeBlobs(obj, writeEncoding);
+}
+
+/**
+ * A socket.io Decoder instance
+ *
+ * @return {Object} decoder
+ * @api public
+ */
+
+function Decoder() {
+  this.reconstructor = null;
+}
+
+/**
+ * Mix in `Emitter` with Decoder.
+ */
+
+Emitter(Decoder.prototype);
+
+/**
+ * Decodes an encoded packet string into packet JSON.
+ *
+ * @param {String} obj - encoded packet
+ * @return {Object} packet
+ * @api public
+ */
+
+Decoder.prototype.add = function(obj) {
+  var packet;
+  if (typeof obj === 'string') {
+    packet = decodeString(obj);
+    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json
+      this.reconstructor = new BinaryReconstructor(packet);
+
+      // no attachments, labeled binary but no binary data to follow
+      if (this.reconstructor.reconPack.attachments === 0) {
+        this.emit('decoded', packet);
+      }
+    } else { // non-binary full packet
+      this.emit('decoded', packet);
+    }
+  } else if (isBuf(obj) || obj.base64) { // raw binary data
+    if (!this.reconstructor) {
+      throw new Error('got binary data when not reconstructing a packet');
+    } else {
+      packet = this.reconstructor.takeBinaryData(obj);
+      if (packet) { // received final buffer
+        this.reconstructor = null;
+        this.emit('decoded', packet);
+      }
+    }
+  } else {
+    throw new Error('Unknown type: ' + obj);
+  }
+};
+
+/**
+ * Decode a packet String (JSON data)
+ *
+ * @param {String} str
+ * @return {Object} packet
+ * @api private
+ */
+
+function decodeString(str) {
+  var i = 0;
+  // look up type
+  var p = {
+    type: Number(str.charAt(0))
+  };
+
+  if (null == exports.types[p.type]) {
+    return error('unknown packet type ' + p.type);
+  }
+
+  // look up attachments if type binary
+  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {
+    var start = i + 1;
+    while (str.charAt(++i) !== '-' && i != str.length) {}
+    var buf = str.substring(start, i);
+    if (buf != Number(buf) || str.charAt(i) !== '-') {
+      throw new Error('Illegal attachments');
+    }
+    p.attachments = Number(buf);
+  }
+
+  // look up namespace (if any)
+  if ('/' === str.charAt(i + 1)) {
+    var start = i + 1;
+    while (++i) {
+      var c = str.charAt(i);
+      if (',' === c) break;
+      if (i === str.length) break;
+    }
+    p.nsp = str.substring(start, i);
+  } else {
+    p.nsp = '/';
+  }
+
+  // look up id
+  var next = str.charAt(i + 1);
+  if ('' !== next && Number(next) == next) {
+    var start = i + 1;
+    while (++i) {
+      var c = str.charAt(i);
+      if (null == c || Number(c) != c) {
+        --i;
+        break;
+      }
+      if (i === str.length) break;
+    }
+    p.id = Number(str.substring(start, i + 1));
+  }
+
+  // look up json data
+  if (str.charAt(++i)) {
+    var payload = tryParse(str.substr(i));
+    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));
+    if (isPayloadValid) {
+      p.data = payload;
+    } else {
+      return error('invalid payload');
+    }
+  }
+
+  debug('decoded %s as %j', str, p);
+  return p;
+}
+
+function tryParse(str) {
+  try {
+    return JSON.parse(str);
+  } catch(e){
+    return false;
+  }
+}
+
+/**
+ * Deallocates a parser's resources
+ *
+ * @api public
+ */
+
+Decoder.prototype.destroy = function() {
+  if (this.reconstructor) {
+    this.reconstructor.finishedReconstruction();
+  }
+};
+
+/**
+ * A manager of a binary event's 'buffer sequence'. Should
+ * be constructed whenever a packet of type BINARY_EVENT is
+ * decoded.
+ *
+ * @param {Object} packet
+ * @return {BinaryReconstructor} initialized reconstructor
+ * @api private
+ */
+
+function BinaryReconstructor(packet) {
+  this.reconPack = packet;
+  this.buffers = [];
+}
+
+/**
+ * Method to be called when binary data received from connection
+ * after a BINARY_EVENT packet.
+ *
+ * @param {Buffer | ArrayBuffer} binData - the raw binary data received
+ * @return {null | Object} returns null if more binary data is expected or
+ *   a reconstructed packet object if all buffers have been received.
+ * @api private
+ */
+
+BinaryReconstructor.prototype.takeBinaryData = function(binData) {
+  this.buffers.push(binData);
+  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list
+    var packet = binary.reconstructPacket(this.reconPack, this.buffers);
+    this.finishedReconstruction();
+    return packet;
+  }
+  return null;
+};
+
+/**
+ * Cleans up binary packet reconstruction variables.
+ *
+ * @api private
+ */
+
+BinaryReconstructor.prototype.finishedReconstruction = function() {
+  this.reconPack = null;
+  this.buffers = [];
+};
+
+function error(msg) {
+  return {
+    type: exports.ERROR,
+    data: 'parser error: ' + msg
+  };
+}
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/LICENSE b/signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/LICENSE
new file mode 100644 (file)
index 0000000..d6e43f2
--- /dev/null
@@ -0,0 +1,24 @@
+(The MIT License)\r
+\r
+Copyright (c) 2014 Component contributors <dev@component.io>\r
+\r
+Permission is hereby granted, free of charge, to any person\r
+obtaining a copy of this software and associated documentation\r
+files (the "Software"), to deal in the Software without\r
+restriction, including without limitation the rights to use,\r
+copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+copies of the Software, and to permit persons to whom the\r
+Software is furnished to do so, subject to the following\r
+conditions:\r
+\r
+The above copyright notice and this permission notice shall be\r
+included in all copies or substantial portions of the Software.\r
+\r
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\r
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r
+OTHER DEALINGS IN THE SOFTWARE.\r
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/Readme.md b/signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/Readme.md
new file mode 100644 (file)
index 0000000..0466411
--- /dev/null
@@ -0,0 +1,74 @@
+# Emitter [![Build Status](https://travis-ci.org/component/emitter.png)](https://travis-ci.org/component/emitter)\r
+\r
+  Event emitter component.\r
+\r
+## Installation\r
+\r
+```\r
+$ component install component/emitter\r
+```\r
+\r
+## API\r
+\r
+### Emitter(obj)\r
+\r
+  The `Emitter` may also be used as a mixin. For example\r
+  a "plain" object may become an emitter, or you may\r
+  extend an existing prototype.\r
+\r
+  As an `Emitter` instance:\r
+\r
+```js\r
+var Emitter = require('emitter');\r
+var emitter = new Emitter;\r
+emitter.emit('something');\r
+```\r
+\r
+  As a mixin:\r
+\r
+```js\r
+var Emitter = require('emitter');\r
+var user = { name: 'tobi' };\r
+Emitter(user);\r
+\r
+user.emit('im a user');\r
+```\r
+\r
+  As a prototype mixin:\r
+\r
+```js\r
+var Emitter = require('emitter');\r
+Emitter(User.prototype);\r
+```\r
+\r
+### Emitter#on(event, fn)\r
+\r
+  Register an `event` handler `fn`.\r
+\r
+### Emitter#once(event, fn)\r
+\r
+  Register a single-shot `event` handler `fn`,\r
+  removed immediately after it is invoked the\r
+  first time.\r
+\r
+### Emitter#off(event, fn)\r
+\r
+  * Pass `event` and `fn` to remove a listener.\r
+  * Pass `event` to remove all listeners on that event.\r
+  * Pass nothing to remove all listeners on all events.\r
+\r
+### Emitter#emit(event, ...)\r
+\r
+  Emit an `event` with variable option args.\r
+\r
+### Emitter#listeners(event)\r
+\r
+  Return an array of callbacks, or an empty array.\r
+\r
+### Emitter#hasListeners(event)\r
+\r
+  Check if this emitter has `event` handlers.\r
+\r
+## License\r
+\r
+MIT\r
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/package.json b/signaling_server/service/node_modules/socket.io-parser/node_modules/component-emitter/package.json
new file mode 100644 (file)
index 0000000..95d4b42
--- /dev/null
@@ -0,0 +1,59 @@
+{
+  "_args": [
+    [
+      "component-emitter@1.2.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "component-emitter@1.2.1",
+  "_id": "component-emitter@1.2.1",
+  "_inBundle": false,
+  "_integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+  "_location": "/socket.io-parser/component-emitter",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "component-emitter@1.2.1",
+    "name": "component-emitter",
+    "escapedName": "component-emitter",
+    "rawSpec": "1.2.1",
+    "saveSpec": null,
+    "fetchSpec": "1.2.1"
+  },
+  "_requiredBy": [
+    "/socket.io-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+  "_spec": "1.2.1",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/component/emitter/issues"
+  },
+  "component": {
+    "scripts": {
+      "emitter/index.js": "index.js"
+    }
+  },
+  "description": "Event emitter",
+  "devDependencies": {
+    "mocha": "*",
+    "should": "*"
+  },
+  "files": [
+    "index.js",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/component/emitter#readme",
+  "license": "MIT",
+  "main": "index.js",
+  "name": "component-emitter",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/component/emitter.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "version": "1.2.1"
+}
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/CHANGELOG.md b/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/CHANGELOG.md
new file mode 100644 (file)
index 0000000..820d21e
--- /dev/null
@@ -0,0 +1,395 @@
+
+3.1.0 / 2017-09-26
+==================
+
+  * Add `DEBUG_HIDE_DATE` env var (#486)
+  * Remove ReDoS regexp in %o formatter (#504)
+  * Remove "component" from package.json
+  * Remove `component.json`
+  * Ignore package-lock.json
+  * Examples: fix colors printout
+  * Fix: browser detection
+  * Fix: spelling mistake (#496, @EdwardBetts)
+
+3.0.1 / 2017-08-24
+==================
+
+  * Fix: Disable colors in Edge and Internet Explorer (#489)
+
+3.0.0 / 2017-08-08
+==================
+
+  * Breaking: Remove DEBUG_FD (#406)
+  * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418)
+  * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408)
+  * Addition: document `enabled` flag (#465)
+  * Addition: add 256 colors mode (#481)
+  * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440)
+  * Update: component: update "ms" to v2.0.0
+  * Update: separate the Node and Browser tests in Travis-CI
+  * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots
+  * Update: separate Node.js and web browser examples for organization
+  * Update: update "browserify" to v14.4.0
+  * Fix: fix Readme typo (#473)
+
+2.6.9 / 2017-09-22
+==================
+
+  * remove ReDoS regexp in %o formatter (#504)
+
+2.6.8 / 2017-05-18
+==================
+
+  * Fix: Check for undefined on browser globals (#462, @marbemac)
+
+2.6.7 / 2017-05-16
+==================
+
+  * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom)
+  * Fix: Inline extend function in node implementation (#452, @dougwilson)
+  * Docs: Fix typo (#455, @msasad)
+
+2.6.5 / 2017-04-27
+==================
+  
+  * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek)
+  * Misc: clean up browser reference checks (#447, @thebigredgeek)
+  * Misc: add npm-debug.log to .gitignore (@thebigredgeek)
+
+
+2.6.4 / 2017-04-20
+==================
+
+  * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo)
+  * Chore: ignore bower.json in npm installations. (#437, @joaovieira)
+  * Misc: update "ms" to v0.7.3 (@tootallnate)
+
+2.6.3 / 2017-03-13
+==================
+
+  * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts)
+  * Docs: Changelog fix (@thebigredgeek)
+
+2.6.2 / 2017-03-10
+==================
+
+  * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin)
+  * Docs: Add backers and sponsors from Open Collective (#422, @piamancini)
+  * Docs: Add Slackin invite badge (@tootallnate)
+
+2.6.1 / 2017-02-10
+==================
+
+  * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
+  * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
+  * Fix: IE8 "Expected identifier" error (#414, @vgoma)
+  * Fix: Namespaces would not disable once enabled (#409, @musikov)
+
+2.6.0 / 2016-12-28
+==================
+
+  * Fix: added better null pointer checks for browser useColors (@thebigredgeek)
+  * Improvement: removed explicit `window.debug` export (#404, @tootallnate)
+  * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
+
+2.5.2 / 2016-12-25
+==================
+
+  * Fix: reference error on window within webworkers (#393, @KlausTrainer)
+  * Docs: fixed README typo (#391, @lurch)
+  * Docs: added notice about v3 api discussion (@thebigredgeek)
+
+2.5.1 / 2016-12-20
+==================
+
+  * Fix: babel-core compatibility
+
+2.5.0 / 2016-12-20
+==================
+
+  * Fix: wrong reference in bower file (@thebigredgeek)
+  * Fix: webworker compatibility (@thebigredgeek)
+  * Fix: output formatting issue (#388, @kribblo)
+  * Fix: babel-loader compatibility (#383, @escwald)
+  * Misc: removed built asset from repo and publications (@thebigredgeek)
+  * Misc: moved source files to /src (#378, @yamikuronue)
+  * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
+  * Test: coveralls integration (#378, @yamikuronue)
+  * Docs: simplified language in the opening paragraph (#373, @yamikuronue)
+
+2.4.5 / 2016-12-17
+==================
+
+  * Fix: `navigator` undefined in Rhino (#376, @jochenberger)
+  * Fix: custom log function (#379, @hsiliev)
+  * Improvement: bit of cleanup + linting fixes (@thebigredgeek)
+  * Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
+  * Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
+
+2.4.4 / 2016-12-14
+==================
+
+  * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
+
+2.4.3 / 2016-12-14
+==================
+
+  * Fix: navigation.userAgent error for react native (#364, @escwald)
+
+2.4.2 / 2016-12-14
+==================
+
+  * Fix: browser colors (#367, @tootallnate)
+  * Misc: travis ci integration (@thebigredgeek)
+  * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
+
+2.4.1 / 2016-12-13
+==================
+
+  * Fix: typo that broke the package (#356)
+
+2.4.0 / 2016-12-13
+==================
+
+  * Fix: bower.json references unbuilt src entry point (#342, @justmatt)
+  * Fix: revert "handle regex special characters" (@tootallnate)
+  * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
+  * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
+  * Improvement: allow colors in workers (#335, @botverse)
+  * Improvement: use same color for same namespace. (#338, @lchenay)
+
+2.3.3 / 2016-11-09
+==================
+
+  * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
+  * Fix: Returning `localStorage` saved values (#331, Levi Thomason)
+  * Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
+
+2.3.2 / 2016-11-09
+==================
+
+  * Fix: be super-safe in index.js as well (@TooTallNate)
+  * Fix: should check whether process exists (Tom Newby)
+
+2.3.1 / 2016-11-09
+==================
+
+  * Fix: Added electron compatibility (#324, @paulcbetts)
+  * Improvement: Added performance optimizations (@tootallnate)
+  * Readme: Corrected PowerShell environment variable example (#252, @gimre)
+  * Misc: Removed yarn lock file from source control (#321, @fengmk2)
+
+2.3.0 / 2016-11-07
+==================
+
+  * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
+  * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
+  * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
+  * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
+  * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
+  * Package: Update "ms" to 0.7.2 (#315, @DevSide)
+  * Package: removed superfluous version property from bower.json (#207 @kkirsche)
+  * Readme: fix USE_COLORS to DEBUG_COLORS
+  * Readme: Doc fixes for format string sugar (#269, @mlucool)
+  * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
+  * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
+  * Readme: better docs for browser support (#224, @matthewmueller)
+  * Tooling: Added yarn integration for development (#317, @thebigredgeek)
+  * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
+  * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
+  * Misc: Updated contributors (@thebigredgeek)
+
+2.2.0 / 2015-05-09
+==================
+
+  * package: update "ms" to v0.7.1 (#202, @dougwilson)
+  * README: add logging to file example (#193, @DanielOchoa)
+  * README: fixed a typo (#191, @amir-s)
+  * browser: expose `storage` (#190, @stephenmathieson)
+  * Makefile: add a `distclean` target (#189, @stephenmathieson)
+
+2.1.3 / 2015-03-13
+==================
+
+  * Updated stdout/stderr example (#186)
+  * Updated example/stdout.js to match debug current behaviour
+  * Renamed example/stderr.js to stdout.js
+  * Update Readme.md (#184)
+  * replace high intensity foreground color for bold (#182, #183)
+
+2.1.2 / 2015-03-01
+==================
+
+  * dist: recompile
+  * update "ms" to v0.7.0
+  * package: update "browserify" to v9.0.3
+  * component: fix "ms.js" repo location
+  * changed bower package name
+  * updated documentation about using debug in a browser
+  * fix: security error on safari (#167, #168, @yields)
+
+2.1.1 / 2014-12-29
+==================
+
+  * browser: use `typeof` to check for `console` existence
+  * browser: check for `console.log` truthiness (fix IE 8/9)
+  * browser: add support for Chrome apps
+  * Readme: added Windows usage remarks
+  * Add `bower.json` to properly support bower install
+
+2.1.0 / 2014-10-15
+==================
+
+  * node: implement `DEBUG_FD` env variable support
+  * package: update "browserify" to v6.1.0
+  * package: add "license" field to package.json (#135, @panuhorsmalahti)
+
+2.0.0 / 2014-09-01
+==================
+
+  * package: update "browserify" to v5.11.0
+  * node: use stderr rather than stdout for logging (#29, @stephenmathieson)
+
+1.0.4 / 2014-07-15
+==================
+
+  * dist: recompile
+  * example: remove `console.info()` log usage
+  * example: add "Content-Type" UTF-8 header to browser example
+  * browser: place %c marker after the space character
+  * browser: reset the "content" color via `color: inherit`
+  * browser: add colors support for Firefox >= v31
+  * debug: prefer an instance `log()` function over the global one (#119)
+  * Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
+
+1.0.3 / 2014-07-09
+==================
+
+  * Add support for multiple wildcards in namespaces (#122, @seegno)
+  * browser: fix lint
+
+1.0.2 / 2014-06-10
+==================
+
+  * browser: update color palette (#113, @gscottolson)
+  * common: make console logging function configurable (#108, @timoxley)
+  * node: fix %o colors on old node <= 0.8.x
+  * Makefile: find node path using shell/which (#109, @timoxley)
+
+1.0.1 / 2014-06-06
+==================
+
+  * browser: use `removeItem()` to clear localStorage
+  * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
+  * package: add "contributors" section
+  * node: fix comment typo
+  * README: list authors
+
+1.0.0 / 2014-06-04
+==================
+
+  * make ms diff be global, not be scope
+  * debug: ignore empty strings in enable()
+  * node: make DEBUG_COLORS able to disable coloring
+  * *: export the `colors` array
+  * npmignore: don't publish the `dist` dir
+  * Makefile: refactor to use browserify
+  * package: add "browserify" as a dev dependency
+  * Readme: add Web Inspector Colors section
+  * node: reset terminal color for the debug content
+  * node: map "%o" to `util.inspect()`
+  * browser: map "%j" to `JSON.stringify()`
+  * debug: add custom "formatters"
+  * debug: use "ms" module for humanizing the diff
+  * Readme: add "bash" syntax highlighting
+  * browser: add Firebug color support
+  * browser: add colors for WebKit browsers
+  * node: apply log to `console`
+  * rewrite: abstract common logic for Node & browsers
+  * add .jshintrc file
+
+0.8.1 / 2014-04-14
+==================
+
+  * package: re-add the "component" section
+
+0.8.0 / 2014-03-30
+==================
+
+  * add `enable()` method for nodejs. Closes #27
+  * change from stderr to stdout
+  * remove unnecessary index.js file
+
+0.7.4 / 2013-11-13
+==================
+
+  * remove "browserify" key from package.json (fixes something in browserify)
+
+0.7.3 / 2013-10-30
+==================
+
+  * fix: catch localStorage security error when cookies are blocked (Chrome)
+  * add debug(err) support. Closes #46
+  * add .browser prop to package.json. Closes #42
+
+0.7.2 / 2013-02-06
+==================
+
+  * fix package.json
+  * fix: Mobile Safari (private mode) is broken with debug
+  * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
+
+0.7.1 / 2013-02-05
+==================
+
+  * add repository URL to package.json
+  * add DEBUG_COLORED to force colored output
+  * add browserify support
+  * fix component. Closes #24
+
+0.7.0 / 2012-05-04
+==================
+
+  * Added .component to package.json
+  * Added debug.component.js build
+
+0.6.0 / 2012-03-16
+==================
+
+  * Added support for "-" prefix in DEBUG [Vinay Pulim]
+  * Added `.enabled` flag to the node version [TooTallNate]
+
+0.5.0 / 2012-02-02
+==================
+
+  * Added: humanize diffs. Closes #8
+  * Added `debug.disable()` to the CS variant
+  * Removed padding. Closes #10
+  * Fixed: persist client-side variant again. Closes #9
+
+0.4.0 / 2012-02-01
+==================
+
+  * Added browser variant support for older browsers [TooTallNate]
+  * Added `debug.enable('project:*')` to browser variant [TooTallNate]
+  * Added padding to diff (moved it to the right)
+
+0.3.0 / 2012-01-26
+==================
+
+  * Added millisecond diff when isatty, otherwise UTC string
+
+0.2.0 / 2012-01-22
+==================
+
+  * Added wildcard support
+
+0.1.0 / 2011-12-02
+==================
+
+  * Added: remove colors unless stderr isatty [TooTallNate]
+
+0.0.1 / 2010-01-03
+==================
+
+  * Initial release
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/LICENSE b/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/LICENSE
new file mode 100644 (file)
index 0000000..658c933
--- /dev/null
@@ -0,0 +1,19 @@
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
+and associated documentation files (the 'Software'), to deal in the Software without restriction, 
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial 
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/README.md b/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/README.md
new file mode 100644 (file)
index 0000000..88dae35
--- /dev/null
@@ -0,0 +1,455 @@
+# debug
+[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug)  [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master)  [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers)
+[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors)
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.png">
+
+A tiny JavaScript debugging utility modelled after Node.js core's debugging
+technique. Works in Node.js and web browsers.
+
+## Installation
+
+```bash
+$ npm install debug
+```
+
+## Usage
+
+`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.
+
+Example [_app.js_](./examples/node/app.js):
+
+```js
+var debug = require('debug')('http')
+  , http = require('http')
+  , name = 'My App';
+
+// fake app
+
+debug('booting %o', name);
+
+http.createServer(function(req, res){
+  debug(req.method + ' ' + req.url);
+  res.end('hello\n');
+}).listen(3000, function(){
+  debug('listening');
+});
+
+// fake worker of some kind
+
+require('./worker');
+```
+
+Example [_worker.js_](./examples/node/worker.js):
+
+```js
+var a = require('debug')('worker:a')
+  , b = require('debug')('worker:b');
+
+function work() {
+  a('doing lots of uninteresting work');
+  setTimeout(work, Math.random() * 1000);
+}
+
+work();
+
+function workb() {
+  b('doing some work');
+  setTimeout(workb, Math.random() * 2000);
+}
+
+workb();
+```
+
+The `DEBUG` environment variable is then used to enable these based on space or
+comma-delimited names.
+
+Here are some examples:
+
+<img width="647" alt="screen shot 2017-08-08 at 12 53 04 pm" src="https://user-images.githubusercontent.com/71256/29091703-a6302cdc-7c38-11e7-8304-7c0b3bc600cd.png">
+<img width="647" alt="screen shot 2017-08-08 at 12 53 38 pm" src="https://user-images.githubusercontent.com/71256/29091700-a62a6888-7c38-11e7-800b-db911291ca2b.png">
+<img width="647" alt="screen shot 2017-08-08 at 12 53 25 pm" src="https://user-images.githubusercontent.com/71256/29091701-a62ea114-7c38-11e7-826a-2692bedca740.png">
+
+#### Windows command prompt notes
+
+##### CMD
+
+On Windows the environment variable is set using the `set` command.
+
+```cmd
+set DEBUG=*,-not_this
+```
+
+Example:
+
+```cmd
+set DEBUG=* & node app.js
+```
+
+##### PowerShell (VS Code default)
+
+PowerShell uses different syntax to set environment variables.
+
+```cmd
+$env:DEBUG = "*,-not_this"
+```
+
+Example:
+
+```cmd
+$env:DEBUG='app';node app.js
+```
+
+Then, run the program to be debugged as usual.
+
+npm script example:
+```js
+  "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js",
+```
+
+## Namespace Colors
+
+Every debug instance has a color generated for it based on its namespace name.
+This helps when visually parsing the debug output to identify which debug instance
+a debug line belongs to.
+
+#### Node.js
+
+In Node.js, colors are enabled when stderr is a TTY. You also _should_ install
+the [`supports-color`](https://npmjs.org/supports-color) module alongside debug,
+otherwise debug will only use a small handful of basic colors.
+
+<img width="521" src="https://user-images.githubusercontent.com/71256/29092181-47f6a9e6-7c3a-11e7-9a14-1928d8a711cd.png">
+
+#### Web Browser
+
+Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
+option. These are WebKit web inspectors, Firefox ([since version
+31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
+and the Firebug plugin for Firefox (any version).
+
+<img width="524" src="https://user-images.githubusercontent.com/71256/29092033-b65f9f2e-7c39-11e7-8e32-f6f0d8e865c1.png">
+
+
+## Millisecond diff
+
+When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.png">
+
+When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below:
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091956-6bd78372-7c39-11e7-8c55-c948396d6edd.png">
+
+
+## Conventions
+
+If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".  If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable.  You can then use it for normal output as well as debug output.
+
+## Wildcards
+
+The `*` character may be used as a wildcard. Suppose for example your library has
+debuggers named "connect:bodyParser", "connect:compress", "connect:session",
+instead of listing all three with
+`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do
+`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
+
+You can also exclude specific debuggers by prefixing them with a "-" character.
+For example, `DEBUG=*,-connect:*` would include all debuggers except those
+starting with "connect:".
+
+## Environment Variables
+
+When running through Node.js, you can set a few environment variables that will
+change the behavior of the debug logging:
+
+| Name      | Purpose                                         |
+|-----------|-------------------------------------------------|
+| `DEBUG`   | Enables/disables specific debugging namespaces. |
+| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY).  |
+| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |
+| `DEBUG_DEPTH` | Object inspection depth.                    |
+| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |
+
+
+__Note:__ The environment variables beginning with `DEBUG_` end up being
+converted into an Options object that gets used with `%o`/`%O` formatters.
+See the Node.js documentation for
+[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)
+for the complete list.
+
+## Formatters
+
+Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting.
+Below are the officially supported formatters:
+
+| Formatter | Representation |
+|-----------|----------------|
+| `%O`      | Pretty-print an Object on multiple lines. |
+| `%o`      | Pretty-print an Object all on a single line. |
+| `%s`      | String. |
+| `%d`      | Number (both integer and float). |
+| `%j`      | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |
+| `%%`      | Single percent sign ('%'). This does not consume an argument. |
+
+
+### Custom formatters
+
+You can add custom formatters by extending the `debug.formatters` object.
+For example, if you wanted to add support for rendering a Buffer as hex with
+`%h`, you could do something like:
+
+```js
+const createDebug = require('debug')
+createDebug.formatters.h = (v) => {
+  return v.toString('hex')
+}
+
+// …elsewhere
+const debug = createDebug('foo')
+debug('this is hex: %h', new Buffer('hello world'))
+//   foo this is hex: 68656c6c6f20776f726c6421 +0ms
+```
+
+
+## Browser Support
+
+You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),
+or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),
+if you don't want to build it yourself.
+
+Debug's enable state is currently persisted by `localStorage`.
+Consider the situation shown below where you have `worker:a` and `worker:b`,
+and wish to debug both. You can enable this using `localStorage.debug`:
+
+```js
+localStorage.debug = 'worker:*'
+```
+
+And then refresh the page.
+
+```js
+a = debug('worker:a');
+b = debug('worker:b');
+
+setInterval(function(){
+  a('doing some work');
+}, 1000);
+
+setInterval(function(){
+  b('doing some work');
+}, 1200);
+```
+
+
+## Output streams
+
+  By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:
+
+Example [_stdout.js_](./examples/node/stdout.js):
+
+```js
+var debug = require('debug');
+var error = debug('app:error');
+
+// by default stderr is used
+error('goes to stderr!');
+
+var log = debug('app:log');
+// set this namespace to log via console.log
+log.log = console.log.bind(console); // don't forget to bind to console!
+log('goes to stdout');
+error('still goes to stderr!');
+
+// set all output to go via console.info
+// overrides all per-namespace log settings
+debug.log = console.info.bind(console);
+error('now goes to stdout via console.info');
+log('still goes to stdout, but via console.info now');
+```
+
+## Extend
+You can simply extend debugger 
+```js
+const log = require('debug')('auth');
+
+//creates new debug instance with extended namespace
+const logSign = log.extend('sign');
+const logLogin = log.extend('login');
+
+log('hello'); // auth hello
+logSign('hello'); //auth:sign hello
+logLogin('hello'); //auth:login hello
+```
+
+## Set dynamically
+
+You can also enable debug dynamically by calling the `enable()` method :
+
+```js
+let debug = require('debug');
+
+console.log(1, debug.enabled('test'));
+
+debug.enable('test');
+console.log(2, debug.enabled('test'));
+
+debug.disable();
+console.log(3, debug.enabled('test'));
+
+```
+
+print :   
+```
+1 false
+2 true
+3 false
+```
+
+Usage :  
+`enable(namespaces)`  
+`namespaces` can include modes separated by a colon and wildcards.
+   
+Note that calling `enable()` completely overrides previously set DEBUG variable : 
+
+```
+$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))'
+=> false
+```
+
+`disable()`
+
+Will disable all namespaces. The functions returns the namespaces currently
+enabled (and skipped). This can be useful if you want to disable debugging
+temporarily without knowing what was enabled to begin with.
+
+For example:
+
+```js
+let debug = require('debug');
+debug.enable('foo:*,-foo:bar');
+let namespaces = debug.disable();
+debug.enable(namespaces);
+```
+
+Note: There is no guarantee that the string will be identical to the initial
+enable string, but semantically they will be identical.
+
+## Checking whether a debug target is enabled
+
+After you've created a debug instance, you can determine whether or not it is
+enabled by checking the `enabled` property:
+
+```javascript
+const debug = require('debug')('http');
+
+if (debug.enabled) {
+  // do stuff...
+}
+```
+
+You can also manually toggle this property to force the debug instance to be
+enabled or disabled.
+
+
+## Authors
+
+ - TJ Holowaychuk
+ - Nathan Rajlich
+ - Andrew Rhyne
+
+## Backers
+
+Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)]
+
+<a href="https://opencollective.com/debug/backer/0/website" target="_blank"><img src="https://opencollective.com/debug/backer/0/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/1/website" target="_blank"><img src="https://opencollective.com/debug/backer/1/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/2/website" target="_blank"><img src="https://opencollective.com/debug/backer/2/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/3/website" target="_blank"><img src="https://opencollective.com/debug/backer/3/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/4/website" target="_blank"><img src="https://opencollective.com/debug/backer/4/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/5/website" target="_blank"><img src="https://opencollective.com/debug/backer/5/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/6/website" target="_blank"><img src="https://opencollective.com/debug/backer/6/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/7/website" target="_blank"><img src="https://opencollective.com/debug/backer/7/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/8/website" target="_blank"><img src="https://opencollective.com/debug/backer/8/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/9/website" target="_blank"><img src="https://opencollective.com/debug/backer/9/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/10/website" target="_blank"><img src="https://opencollective.com/debug/backer/10/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/11/website" target="_blank"><img src="https://opencollective.com/debug/backer/11/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/12/website" target="_blank"><img src="https://opencollective.com/debug/backer/12/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/13/website" target="_blank"><img src="https://opencollective.com/debug/backer/13/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/14/website" target="_blank"><img src="https://opencollective.com/debug/backer/14/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/15/website" target="_blank"><img src="https://opencollective.com/debug/backer/15/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/16/website" target="_blank"><img src="https://opencollective.com/debug/backer/16/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/17/website" target="_blank"><img src="https://opencollective.com/debug/backer/17/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/18/website" target="_blank"><img src="https://opencollective.com/debug/backer/18/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/19/website" target="_blank"><img src="https://opencollective.com/debug/backer/19/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/20/website" target="_blank"><img src="https://opencollective.com/debug/backer/20/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/21/website" target="_blank"><img src="https://opencollective.com/debug/backer/21/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/22/website" target="_blank"><img src="https://opencollective.com/debug/backer/22/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/23/website" target="_blank"><img src="https://opencollective.com/debug/backer/23/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/24/website" target="_blank"><img src="https://opencollective.com/debug/backer/24/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/25/website" target="_blank"><img src="https://opencollective.com/debug/backer/25/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/26/website" target="_blank"><img src="https://opencollective.com/debug/backer/26/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/27/website" target="_blank"><img src="https://opencollective.com/debug/backer/27/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/28/website" target="_blank"><img src="https://opencollective.com/debug/backer/28/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/29/website" target="_blank"><img src="https://opencollective.com/debug/backer/29/avatar.svg"></a>
+
+
+## Sponsors
+
+Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)]
+
+<a href="https://opencollective.com/debug/sponsor/0/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/0/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/1/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/1/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/2/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/2/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/3/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/3/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/4/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/4/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/5/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/5/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/6/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/6/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/7/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/7/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/8/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/8/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/9/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/9/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/10/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/10/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/11/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/11/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/12/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/12/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/13/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/13/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/14/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/14/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/15/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/15/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/16/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/16/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/17/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/17/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/18/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/18/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/19/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/19/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/20/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/20/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/21/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/21/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/22/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/22/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/23/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/23/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/24/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/24/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/25/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/25/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/26/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/26/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/27/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/27/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/28/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/28/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/29/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/29/avatar.svg"></a>
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2014-2017 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/dist/debug.js b/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/dist/debug.js
new file mode 100644 (file)
index 0000000..89ad0c2
--- /dev/null
@@ -0,0 +1,912 @@
+"use strict";
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
+
+function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
+
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+(function (f) {
+  if ((typeof exports === "undefined" ? "undefined" : _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.debug = f();
+  }
+})(function () {
+  var define, module, exports;
+  return function () {
+    function r(e, n, t) {
+      function o(i, f) {
+        if (!n[i]) {
+          if (!e[i]) {
+            var c = "function" == typeof require && require;
+            if (!f && c) return c(i, !0);
+            if (u) return u(i, !0);
+            var a = new Error("Cannot find module '" + i + "'");
+            throw a.code = "MODULE_NOT_FOUND", a;
+          }
+
+          var p = n[i] = {
+            exports: {}
+          };
+          e[i][0].call(p.exports, function (r) {
+            var n = e[i][1][r];
+            return o(n || r);
+          }, p, p.exports, r, e, n, t);
+        }
+
+        return n[i].exports;
+      }
+
+      for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) {
+        o(t[i]);
+      }
+
+      return o;
+    }
+
+    return r;
+  }()({
+    1: [function (require, module, exports) {
+      /**
+       * Helpers.
+       */
+      var s = 1000;
+      var m = s * 60;
+      var h = m * 60;
+      var d = h * 24;
+      var w = d * 7;
+      var y = d * 365.25;
+      /**
+       * Parse or format the given `val`.
+       *
+       * Options:
+       *
+       *  - `long` verbose formatting [false]
+       *
+       * @param {String|Number} val
+       * @param {Object} [options]
+       * @throws {Error} throw an error if val is not a non-empty string or a number
+       * @return {String|Number}
+       * @api public
+       */
+
+      module.exports = function (val, options) {
+        options = options || {};
+
+        var type = _typeof(val);
+
+        if (type === 'string' && val.length > 0) {
+          return parse(val);
+        } else if (type === 'number' && isNaN(val) === false) {
+          return options.long ? fmtLong(val) : fmtShort(val);
+        }
+
+        throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));
+      };
+      /**
+       * Parse the given `str` and return milliseconds.
+       *
+       * @param {String} str
+       * @return {Number}
+       * @api private
+       */
+
+
+      function parse(str) {
+        str = String(str);
+
+        if (str.length > 100) {
+          return;
+        }
+
+        var match = /^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);
+
+        if (!match) {
+          return;
+        }
+
+        var n = parseFloat(match[1]);
+        var type = (match[2] || 'ms').toLowerCase();
+
+        switch (type) {
+          case 'years':
+          case 'year':
+          case 'yrs':
+          case 'yr':
+          case 'y':
+            return n * y;
+
+          case 'weeks':
+          case 'week':
+          case 'w':
+            return n * w;
+
+          case 'days':
+          case 'day':
+          case 'd':
+            return n * d;
+
+          case 'hours':
+          case 'hour':
+          case 'hrs':
+          case 'hr':
+          case 'h':
+            return n * h;
+
+          case 'minutes':
+          case 'minute':
+          case 'mins':
+          case 'min':
+          case 'm':
+            return n * m;
+
+          case 'seconds':
+          case 'second':
+          case 'secs':
+          case 'sec':
+          case 's':
+            return n * s;
+
+          case 'milliseconds':
+          case 'millisecond':
+          case 'msecs':
+          case 'msec':
+          case 'ms':
+            return n;
+
+          default:
+            return undefined;
+        }
+      }
+      /**
+       * Short format for `ms`.
+       *
+       * @param {Number} ms
+       * @return {String}
+       * @api private
+       */
+
+
+      function fmtShort(ms) {
+        var msAbs = Math.abs(ms);
+
+        if (msAbs >= d) {
+          return Math.round(ms / d) + 'd';
+        }
+
+        if (msAbs >= h) {
+          return Math.round(ms / h) + 'h';
+        }
+
+        if (msAbs >= m) {
+          return Math.round(ms / m) + 'm';
+        }
+
+        if (msAbs >= s) {
+          return Math.round(ms / s) + 's';
+        }
+
+        return ms + 'ms';
+      }
+      /**
+       * Long format for `ms`.
+       *
+       * @param {Number} ms
+       * @return {String}
+       * @api private
+       */
+
+
+      function fmtLong(ms) {
+        var msAbs = Math.abs(ms);
+
+        if (msAbs >= d) {
+          return plural(ms, msAbs, d, 'day');
+        }
+
+        if (msAbs >= h) {
+          return plural(ms, msAbs, h, 'hour');
+        }
+
+        if (msAbs >= m) {
+          return plural(ms, msAbs, m, 'minute');
+        }
+
+        if (msAbs >= s) {
+          return plural(ms, msAbs, s, 'second');
+        }
+
+        return ms + ' ms';
+      }
+      /**
+       * Pluralization helper.
+       */
+
+
+      function plural(ms, msAbs, n, name) {
+        var isPlural = msAbs >= n * 1.5;
+        return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
+      }
+    }, {}],
+    2: [function (require, module, exports) {
+      // shim for using process in browser
+      var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it
+      // don't break things.  But we need to wrap it in a try catch in case it is
+      // wrapped in strict mode code which doesn't define any globals.  It's inside a
+      // function because try/catches deoptimize in certain engines.
+
+      var cachedSetTimeout;
+      var cachedClearTimeout;
+
+      function defaultSetTimout() {
+        throw new Error('setTimeout has not been defined');
+      }
+
+      function defaultClearTimeout() {
+        throw new Error('clearTimeout has not been defined');
+      }
+
+      (function () {
+        try {
+          if (typeof setTimeout === 'function') {
+            cachedSetTimeout = setTimeout;
+          } else {
+            cachedSetTimeout = defaultSetTimout;
+          }
+        } catch (e) {
+          cachedSetTimeout = defaultSetTimout;
+        }
+
+        try {
+          if (typeof clearTimeout === 'function') {
+            cachedClearTimeout = clearTimeout;
+          } else {
+            cachedClearTimeout = defaultClearTimeout;
+          }
+        } catch (e) {
+          cachedClearTimeout = defaultClearTimeout;
+        }
+      })();
+
+      function runTimeout(fun) {
+        if (cachedSetTimeout === setTimeout) {
+          //normal enviroments in sane situations
+          return setTimeout(fun, 0);
+        } // if setTimeout wasn't available but was latter defined
+
+
+        if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
+          cachedSetTimeout = setTimeout;
+          return setTimeout(fun, 0);
+        }
+
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedSetTimeout(fun, 0);
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+            return cachedSetTimeout.call(null, fun, 0);
+          } catch (e) {
+            // 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
+            return cachedSetTimeout.call(this, fun, 0);
+          }
+        }
+      }
+
+      function runClearTimeout(marker) {
+        if (cachedClearTimeout === clearTimeout) {
+          //normal enviroments in sane situations
+          return clearTimeout(marker);
+        } // if clearTimeout wasn't available but was latter defined
+
+
+        if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
+          cachedClearTimeout = clearTimeout;
+          return clearTimeout(marker);
+        }
+
+        try {
+          // when when somebody has screwed with setTimeout but no I.E. maddness
+          return cachedClearTimeout(marker);
+        } catch (e) {
+          try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+            return cachedClearTimeout.call(null, marker);
+          } catch (e) {
+            // 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.
+            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+            return cachedClearTimeout.call(this, marker);
+          }
+        }
+      }
+
+      var queue = [];
+      var draining = false;
+      var currentQueue;
+      var queueIndex = -1;
+
+      function cleanUpNextTick() {
+        if (!draining || !currentQueue) {
+          return;
+        }
+
+        draining = false;
+
+        if (currentQueue.length) {
+          queue = currentQueue.concat(queue);
+        } else {
+          queueIndex = -1;
+        }
+
+        if (queue.length) {
+          drainQueue();
+        }
+      }
+
+      function drainQueue() {
+        if (draining) {
+          return;
+        }
+
+        var timeout = runTimeout(cleanUpNextTick);
+        draining = true;
+        var len = queue.length;
+
+        while (len) {
+          currentQueue = queue;
+          queue = [];
+
+          while (++queueIndex < len) {
+            if (currentQueue) {
+              currentQueue[queueIndex].run();
+            }
+          }
+
+          queueIndex = -1;
+          len = queue.length;
+        }
+
+        currentQueue = null;
+        draining = false;
+        runClearTimeout(timeout);
+      }
+
+      process.nextTick = function (fun) {
+        var args = new Array(arguments.length - 1);
+
+        if (arguments.length > 1) {
+          for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+          }
+        }
+
+        queue.push(new Item(fun, args));
+
+        if (queue.length === 1 && !draining) {
+          runTimeout(drainQueue);
+        }
+      }; // v8 likes predictible objects
+
+
+      function Item(fun, array) {
+        this.fun = fun;
+        this.array = array;
+      }
+
+      Item.prototype.run = function () {
+        this.fun.apply(null, this.array);
+      };
+
+      process.title = 'browser';
+      process.browser = true;
+      process.env = {};
+      process.argv = [];
+      process.version = ''; // empty string to avoid regexp issues
+
+      process.versions = {};
+
+      function noop() {}
+
+      process.on = noop;
+      process.addListener = noop;
+      process.once = noop;
+      process.off = noop;
+      process.removeListener = noop;
+      process.removeAllListeners = noop;
+      process.emit = noop;
+      process.prependListener = noop;
+      process.prependOnceListener = noop;
+
+      process.listeners = function (name) {
+        return [];
+      };
+
+      process.binding = function (name) {
+        throw new Error('process.binding is not supported');
+      };
+
+      process.cwd = function () {
+        return '/';
+      };
+
+      process.chdir = function (dir) {
+        throw new Error('process.chdir is not supported');
+      };
+
+      process.umask = function () {
+        return 0;
+      };
+    }, {}],
+    3: [function (require, module, exports) {
+      /**
+       * This is the common logic for both the Node.js and web browser
+       * implementations of `debug()`.
+       */
+      function setup(env) {
+        createDebug.debug = createDebug;
+        createDebug.default = createDebug;
+        createDebug.coerce = coerce;
+        createDebug.disable = disable;
+        createDebug.enable = enable;
+        createDebug.enabled = enabled;
+        createDebug.humanize = require('ms');
+        Object.keys(env).forEach(function (key) {
+          createDebug[key] = env[key];
+        });
+        /**
+        * Active `debug` instances.
+        */
+
+        createDebug.instances = [];
+        /**
+        * The currently active debug mode names, and names to skip.
+        */
+
+        createDebug.names = [];
+        createDebug.skips = [];
+        /**
+        * Map of special "%n" handling functions, for the debug "format" argument.
+        *
+        * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+        */
+
+        createDebug.formatters = {};
+        /**
+        * Selects a color for a debug namespace
+        * @param {String} namespace The namespace string for the for the debug instance to be colored
+        * @return {Number|String} An ANSI color code for the given namespace
+        * @api private
+        */
+
+        function selectColor(namespace) {
+          var hash = 0;
+
+          for (var i = 0; i < namespace.length; i++) {
+            hash = (hash << 5) - hash + namespace.charCodeAt(i);
+            hash |= 0; // Convert to 32bit integer
+          }
+
+          return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+        }
+
+        createDebug.selectColor = selectColor;
+        /**
+        * Create a debugger with the given `namespace`.
+        *
+        * @param {String} namespace
+        * @return {Function}
+        * @api public
+        */
+
+        function createDebug(namespace) {
+          var prevTime;
+
+          function debug() {
+            for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+              args[_key] = arguments[_key];
+            }
+
+            // Disabled?
+            if (!debug.enabled) {
+              return;
+            }
+
+            var self = debug; // Set `diff` timestamp
+
+            var curr = Number(new Date());
+            var ms = curr - (prevTime || curr);
+            self.diff = ms;
+            self.prev = prevTime;
+            self.curr = curr;
+            prevTime = curr;
+            args[0] = createDebug.coerce(args[0]);
+
+            if (typeof args[0] !== 'string') {
+              // Anything else let's inspect with %O
+              args.unshift('%O');
+            } // Apply any `formatters` transformations
+
+
+            var index = 0;
+            args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
+              // If we encounter an escaped % then don't increase the array index
+              if (match === '%%') {
+                return match;
+              }
+
+              index++;
+              var formatter = createDebug.formatters[format];
+
+              if (typeof formatter === 'function') {
+                var val = args[index];
+                match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`
+
+                args.splice(index, 1);
+                index--;
+              }
+
+              return match;
+            }); // Apply env-specific formatting (colors, etc.)
+
+            createDebug.formatArgs.call(self, args);
+            var logFn = self.log || createDebug.log;
+            logFn.apply(self, args);
+          }
+
+          debug.namespace = namespace;
+          debug.enabled = createDebug.enabled(namespace);
+          debug.useColors = createDebug.useColors();
+          debug.color = selectColor(namespace);
+          debug.destroy = destroy;
+          debug.extend = extend; // Debug.formatArgs = formatArgs;
+          // debug.rawLog = rawLog;
+          // env-specific initialization logic for debug instances
+
+          if (typeof createDebug.init === 'function') {
+            createDebug.init(debug);
+          }
+
+          createDebug.instances.push(debug);
+          return debug;
+        }
+
+        function destroy() {
+          var index = createDebug.instances.indexOf(this);
+
+          if (index !== -1) {
+            createDebug.instances.splice(index, 1);
+            return true;
+          }
+
+          return false;
+        }
+
+        function extend(namespace, delimiter) {
+          var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
+          newDebug.log = this.log;
+          return newDebug;
+        }
+        /**
+        * Enables a debug mode by namespaces. This can include modes
+        * separated by a colon and wildcards.
+        *
+        * @param {String} namespaces
+        * @api public
+        */
+
+
+        function enable(namespaces) {
+          createDebug.save(namespaces);
+          createDebug.names = [];
+          createDebug.skips = [];
+          var i;
+          var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+          var len = split.length;
+
+          for (i = 0; i < len; i++) {
+            if (!split[i]) {
+              // ignore empty strings
+              continue;
+            }
+
+            namespaces = split[i].replace(/\*/g, '.*?');
+
+            if (namespaces[0] === '-') {
+              createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+            } else {
+              createDebug.names.push(new RegExp('^' + namespaces + '$'));
+            }
+          }
+
+          for (i = 0; i < createDebug.instances.length; i++) {
+            var instance = createDebug.instances[i];
+            instance.enabled = createDebug.enabled(instance.namespace);
+          }
+        }
+        /**
+        * Disable debug output.
+        *
+        * @return {String} namespaces
+        * @api public
+        */
+
+
+        function disable() {
+          var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) {
+            return '-' + namespace;
+          }))).join(',');
+          createDebug.enable('');
+          return namespaces;
+        }
+        /**
+        * Returns true if the given mode name is enabled, false otherwise.
+        *
+        * @param {String} name
+        * @return {Boolean}
+        * @api public
+        */
+
+
+        function enabled(name) {
+          if (name[name.length - 1] === '*') {
+            return true;
+          }
+
+          var i;
+          var len;
+
+          for (i = 0, len = createDebug.skips.length; i < len; i++) {
+            if (createDebug.skips[i].test(name)) {
+              return false;
+            }
+          }
+
+          for (i = 0, len = createDebug.names.length; i < len; i++) {
+            if (createDebug.names[i].test(name)) {
+              return true;
+            }
+          }
+
+          return false;
+        }
+        /**
+        * Convert regexp to namespace
+        *
+        * @param {RegExp} regxep
+        * @return {String} namespace
+        * @api private
+        */
+
+
+        function toNamespace(regexp) {
+          return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*');
+        }
+        /**
+        * Coerce `val`.
+        *
+        * @param {Mixed} val
+        * @return {Mixed}
+        * @api private
+        */
+
+
+        function coerce(val) {
+          if (val instanceof Error) {
+            return val.stack || val.message;
+          }
+
+          return val;
+        }
+
+        createDebug.enable(createDebug.load());
+        return createDebug;
+      }
+
+      module.exports = setup;
+    }, {
+      "ms": 1
+    }],
+    4: [function (require, module, exports) {
+      (function (process) {
+        /* eslint-env browser */
+
+        /**
+         * This is the web browser implementation of `debug()`.
+         */
+        exports.log = log;
+        exports.formatArgs = formatArgs;
+        exports.save = save;
+        exports.load = load;
+        exports.useColors = useColors;
+        exports.storage = localstorage();
+        /**
+         * Colors.
+         */
+
+        exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];
+        /**
+         * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+         * and the Firebug extension (any Firefox version) are known
+         * to support "%c" CSS customizations.
+         *
+         * TODO: add a `localStorage` variable to explicitly enable/disable colors
+         */
+        // eslint-disable-next-line complexity
+
+        function useColors() {
+          // NB: In an Electron preload script, document will be defined but not fully
+          // initialized. Since we know we're in Chrome, we'll just detect this case
+          // explicitly
+          if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
+            return true;
+          } // Internet Explorer and Edge do not support colors.
+
+
+          if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+            return false;
+          } // Is webkit? http://stackoverflow.com/a/16459606/376773
+          // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+
+
+          return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
+          typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
+          // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+          typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
+          typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
+        }
+        /**
+         * Colorize log arguments if enabled.
+         *
+         * @api public
+         */
+
+
+        function formatArgs(args) {
+          args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);
+
+          if (!this.useColors) {
+            return;
+          }
+
+          var c = 'color: ' + this.color;
+          args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other
+          // arguments passed either before or after the %c, so we need to
+          // figure out the correct index to insert the CSS into
+
+          var index = 0;
+          var lastC = 0;
+          args[0].replace(/%[a-zA-Z%]/g, function (match) {
+            if (match === '%%') {
+              return;
+            }
+
+            index++;
+
+            if (match === '%c') {
+              // We only are interested in the *last* %c
+              // (the user may have provided their own)
+              lastC = index;
+            }
+          });
+          args.splice(lastC, 0, c);
+        }
+        /**
+         * Invokes `console.log()` when available.
+         * No-op when `console.log` is not a "function".
+         *
+         * @api public
+         */
+
+
+        function log() {
+          var _console;
+
+          // This hackery is required for IE8/9, where
+          // the `console.log` function doesn't have 'apply'
+          return (typeof console === "undefined" ? "undefined" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);
+        }
+        /**
+         * Save `namespaces`.
+         *
+         * @param {String} namespaces
+         * @api private
+         */
+
+
+        function save(namespaces) {
+          try {
+            if (namespaces) {
+              exports.storage.setItem('debug', namespaces);
+            } else {
+              exports.storage.removeItem('debug');
+            }
+          } catch (error) {// Swallow
+            // XXX (@Qix-) should we be logging these?
+          }
+        }
+        /**
+         * Load `namespaces`.
+         *
+         * @return {String} returns the previously persisted debug modes
+         * @api private
+         */
+
+
+        function load() {
+          var r;
+
+          try {
+            r = exports.storage.getItem('debug');
+          } catch (error) {} // Swallow
+          // XXX (@Qix-) should we be logging these?
+          // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+
+
+          if (!r && typeof process !== 'undefined' && 'env' in process) {
+            r = process.env.DEBUG;
+          }
+
+          return r;
+        }
+        /**
+         * Localstorage attempts to return the localstorage.
+         *
+         * This is necessary because safari throws
+         * when a user disables cookies/localstorage
+         * and you attempt to access it.
+         *
+         * @return {LocalStorage}
+         * @api private
+         */
+
+
+        function localstorage() {
+          try {
+            // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
+            // The Browser also has localStorage in the global context.
+            return localStorage;
+          } catch (error) {// Swallow
+            // XXX (@Qix-) should we be logging these?
+          }
+        }
+
+        module.exports = require('./common')(exports);
+        var formatters = module.exports.formatters;
+        /**
+         * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+         */
+
+        formatters.j = function (v) {
+          try {
+            return JSON.stringify(v);
+          } catch (error) {
+            return '[UnexpectedJSONParseError]: ' + error.message;
+          }
+        };
+      }).call(this, require('_process'));
+    }, {
+      "./common": 3,
+      "_process": 2
+    }]
+  }, {}, [4])(4);
+});
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/package.json b/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/package.json
new file mode 100644 (file)
index 0000000..b9dfb52
--- /dev/null
@@ -0,0 +1,105 @@
+{
+  "_args": [
+    [
+      "debug@4.1.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "debug@4.1.1",
+  "_id": "debug@4.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+  "_location": "/socket.io-parser/debug",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "debug@4.1.1",
+    "name": "debug",
+    "escapedName": "debug",
+    "rawSpec": "4.1.1",
+    "saveSpec": null,
+    "fetchSpec": "4.1.1"
+  },
+  "_requiredBy": [
+    "/socket.io-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+  "_spec": "4.1.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca"
+  },
+  "browser": "./src/browser.js",
+  "bugs": {
+    "url": "https://github.com/visionmedia/debug/issues"
+  },
+  "contributors": [
+    {
+      "name": "Nathan Rajlich",
+      "email": "nathan@tootallnate.net",
+      "url": "http://n8.io"
+    },
+    {
+      "name": "Andrew Rhyne",
+      "email": "rhyneandrew@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "ms": "^2.1.1"
+  },
+  "description": "small debugging utility",
+  "devDependencies": {
+    "@babel/cli": "^7.0.0",
+    "@babel/core": "^7.0.0",
+    "@babel/preset-env": "^7.0.0",
+    "browserify": "14.4.0",
+    "chai": "^3.5.0",
+    "concurrently": "^3.1.0",
+    "coveralls": "^3.0.2",
+    "istanbul": "^0.4.5",
+    "karma": "^3.0.0",
+    "karma-chai": "^0.1.0",
+    "karma-mocha": "^1.3.0",
+    "karma-phantomjs-launcher": "^1.0.2",
+    "mocha": "^5.2.0",
+    "mocha-lcov-reporter": "^1.2.0",
+    "rimraf": "^2.5.4",
+    "xo": "^0.23.0"
+  },
+  "files": [
+    "src",
+    "dist/debug.js",
+    "LICENSE",
+    "README.md"
+  ],
+  "homepage": "https://github.com/visionmedia/debug#readme",
+  "keywords": [
+    "debug",
+    "log",
+    "debugger"
+  ],
+  "license": "MIT",
+  "main": "./src/index.js",
+  "name": "debug",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/visionmedia/debug.git"
+  },
+  "scripts": {
+    "build": "npm run build:debug && npm run build:test",
+    "build:debug": "babel -o dist/debug.js dist/debug.es6.js > dist/debug.js",
+    "build:test": "babel -d dist test.js",
+    "clean": "rimraf dist coverage",
+    "lint": "xo",
+    "prebuild:debug": "mkdir -p dist && browserify --standalone debug -o dist/debug.es6.js .",
+    "pretest:browser": "npm run build",
+    "test": "npm run test:node && npm run test:browser",
+    "test:browser": "karma start --single-run",
+    "test:coverage": "cat ./coverage/lcov.info | coveralls",
+    "test:node": "istanbul cover _mocha -- test.js"
+  },
+  "unpkg": "./dist/debug.js",
+  "version": "4.1.1"
+}
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/browser.js b/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/browser.js
new file mode 100644 (file)
index 0000000..5f34c0d
--- /dev/null
@@ -0,0 +1,264 @@
+/* eslint-env browser */
+
+/**
+ * This is the web browser implementation of `debug()`.
+ */
+
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = localstorage();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+       '#0000CC',
+       '#0000FF',
+       '#0033CC',
+       '#0033FF',
+       '#0066CC',
+       '#0066FF',
+       '#0099CC',
+       '#0099FF',
+       '#00CC00',
+       '#00CC33',
+       '#00CC66',
+       '#00CC99',
+       '#00CCCC',
+       '#00CCFF',
+       '#3300CC',
+       '#3300FF',
+       '#3333CC',
+       '#3333FF',
+       '#3366CC',
+       '#3366FF',
+       '#3399CC',
+       '#3399FF',
+       '#33CC00',
+       '#33CC33',
+       '#33CC66',
+       '#33CC99',
+       '#33CCCC',
+       '#33CCFF',
+       '#6600CC',
+       '#6600FF',
+       '#6633CC',
+       '#6633FF',
+       '#66CC00',
+       '#66CC33',
+       '#9900CC',
+       '#9900FF',
+       '#9933CC',
+       '#9933FF',
+       '#99CC00',
+       '#99CC33',
+       '#CC0000',
+       '#CC0033',
+       '#CC0066',
+       '#CC0099',
+       '#CC00CC',
+       '#CC00FF',
+       '#CC3300',
+       '#CC3333',
+       '#CC3366',
+       '#CC3399',
+       '#CC33CC',
+       '#CC33FF',
+       '#CC6600',
+       '#CC6633',
+       '#CC9900',
+       '#CC9933',
+       '#CCCC00',
+       '#CCCC33',
+       '#FF0000',
+       '#FF0033',
+       '#FF0066',
+       '#FF0099',
+       '#FF00CC',
+       '#FF00FF',
+       '#FF3300',
+       '#FF3333',
+       '#FF3366',
+       '#FF3399',
+       '#FF33CC',
+       '#FF33FF',
+       '#FF6600',
+       '#FF6633',
+       '#FF9900',
+       '#FF9933',
+       '#FFCC00',
+       '#FFCC33'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+// eslint-disable-next-line complexity
+function useColors() {
+       // NB: In an Electron preload script, document will be defined but not fully
+       // initialized. Since we know we're in Chrome, we'll just detect this case
+       // explicitly
+       if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
+               return true;
+       }
+
+       // Internet Explorer and Edge do not support colors.
+       if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+               return false;
+       }
+
+       // Is webkit? http://stackoverflow.com/a/16459606/376773
+       // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+       return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+               // Is firebug? http://stackoverflow.com/a/398120/376773
+               (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+               // Is firefox >= v31?
+               // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+               (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+               // Double check webkit in userAgent just in case we are in a worker
+               (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+       args[0] = (this.useColors ? '%c' : '') +
+               this.namespace +
+               (this.useColors ? ' %c' : ' ') +
+               args[0] +
+               (this.useColors ? '%c ' : ' ') +
+               '+' + module.exports.humanize(this.diff);
+
+       if (!this.useColors) {
+               return;
+       }
+
+       const c = 'color: ' + this.color;
+       args.splice(1, 0, c, 'color: inherit');
+
+       // The final "%c" is somewhat tricky, because there could be other
+       // arguments passed either before or after the %c, so we need to
+       // figure out the correct index to insert the CSS into
+       let index = 0;
+       let lastC = 0;
+       args[0].replace(/%[a-zA-Z%]/g, match => {
+               if (match === '%%') {
+                       return;
+               }
+               index++;
+               if (match === '%c') {
+                       // We only are interested in the *last* %c
+                       // (the user may have provided their own)
+                       lastC = index;
+               }
+       });
+
+       args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.log()` when available.
+ * No-op when `console.log` is not a "function".
+ *
+ * @api public
+ */
+function log(...args) {
+       // This hackery is required for IE8/9, where
+       // the `console.log` function doesn't have 'apply'
+       return typeof console === 'object' &&
+               console.log &&
+               console.log(...args);
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+function save(namespaces) {
+       try {
+               if (namespaces) {
+                       exports.storage.setItem('debug', namespaces);
+               } else {
+                       exports.storage.removeItem('debug');
+               }
+       } catch (error) {
+               // Swallow
+               // XXX (@Qix-) should we be logging these?
+       }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+function load() {
+       let r;
+       try {
+               r = exports.storage.getItem('debug');
+       } catch (error) {
+               // Swallow
+               // XXX (@Qix-) should we be logging these?
+       }
+
+       // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+       if (!r && typeof process !== 'undefined' && 'env' in process) {
+               r = process.env.DEBUG;
+       }
+
+       return r;
+}
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+       try {
+               // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
+               // The Browser also has localStorage in the global context.
+               return localStorage;
+       } catch (error) {
+               // Swallow
+               // XXX (@Qix-) should we be logging these?
+       }
+}
+
+module.exports = require('./common')(exports);
+
+const {formatters} = module.exports;
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+formatters.j = function (v) {
+       try {
+               return JSON.stringify(v);
+       } catch (error) {
+               return '[UnexpectedJSONParseError]: ' + error.message;
+       }
+};
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/common.js b/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/common.js
new file mode 100644 (file)
index 0000000..2f82b8d
--- /dev/null
@@ -0,0 +1,266 @@
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ */
+
+function setup(env) {
+       createDebug.debug = createDebug;
+       createDebug.default = createDebug;
+       createDebug.coerce = coerce;
+       createDebug.disable = disable;
+       createDebug.enable = enable;
+       createDebug.enabled = enabled;
+       createDebug.humanize = require('ms');
+
+       Object.keys(env).forEach(key => {
+               createDebug[key] = env[key];
+       });
+
+       /**
+       * Active `debug` instances.
+       */
+       createDebug.instances = [];
+
+       /**
+       * The currently active debug mode names, and names to skip.
+       */
+
+       createDebug.names = [];
+       createDebug.skips = [];
+
+       /**
+       * Map of special "%n" handling functions, for the debug "format" argument.
+       *
+       * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+       */
+       createDebug.formatters = {};
+
+       /**
+       * Selects a color for a debug namespace
+       * @param {String} namespace The namespace string for the for the debug instance to be colored
+       * @return {Number|String} An ANSI color code for the given namespace
+       * @api private
+       */
+       function selectColor(namespace) {
+               let hash = 0;
+
+               for (let i = 0; i < namespace.length; i++) {
+                       hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
+                       hash |= 0; // Convert to 32bit integer
+               }
+
+               return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+       }
+       createDebug.selectColor = selectColor;
+
+       /**
+       * Create a debugger with the given `namespace`.
+       *
+       * @param {String} namespace
+       * @return {Function}
+       * @api public
+       */
+       function createDebug(namespace) {
+               let prevTime;
+
+               function debug(...args) {
+                       // Disabled?
+                       if (!debug.enabled) {
+                               return;
+                       }
+
+                       const self = debug;
+
+                       // Set `diff` timestamp
+                       const curr = Number(new Date());
+                       const ms = curr - (prevTime || curr);
+                       self.diff = ms;
+                       self.prev = prevTime;
+                       self.curr = curr;
+                       prevTime = curr;
+
+                       args[0] = createDebug.coerce(args[0]);
+
+                       if (typeof args[0] !== 'string') {
+                               // Anything else let's inspect with %O
+                               args.unshift('%O');
+                       }
+
+                       // Apply any `formatters` transformations
+                       let index = 0;
+                       args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
+                               // If we encounter an escaped % then don't increase the array index
+                               if (match === '%%') {
+                                       return match;
+                               }
+                               index++;
+                               const formatter = createDebug.formatters[format];
+                               if (typeof formatter === 'function') {
+                                       const val = args[index];
+                                       match = formatter.call(self, val);
+
+                                       // Now we need to remove `args[index]` since it's inlined in the `format`
+                                       args.splice(index, 1);
+                                       index--;
+                               }
+                               return match;
+                       });
+
+                       // Apply env-specific formatting (colors, etc.)
+                       createDebug.formatArgs.call(self, args);
+
+                       const logFn = self.log || createDebug.log;
+                       logFn.apply(self, args);
+               }
+
+               debug.namespace = namespace;
+               debug.enabled = createDebug.enabled(namespace);
+               debug.useColors = createDebug.useColors();
+               debug.color = selectColor(namespace);
+               debug.destroy = destroy;
+               debug.extend = extend;
+               // Debug.formatArgs = formatArgs;
+               // debug.rawLog = rawLog;
+
+               // env-specific initialization logic for debug instances
+               if (typeof createDebug.init === 'function') {
+                       createDebug.init(debug);
+               }
+
+               createDebug.instances.push(debug);
+
+               return debug;
+       }
+
+       function destroy() {
+               const index = createDebug.instances.indexOf(this);
+               if (index !== -1) {
+                       createDebug.instances.splice(index, 1);
+                       return true;
+               }
+               return false;
+       }
+
+       function extend(namespace, delimiter) {
+               const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
+               newDebug.log = this.log;
+               return newDebug;
+       }
+
+       /**
+       * Enables a debug mode by namespaces. This can include modes
+       * separated by a colon and wildcards.
+       *
+       * @param {String} namespaces
+       * @api public
+       */
+       function enable(namespaces) {
+               createDebug.save(namespaces);
+
+               createDebug.names = [];
+               createDebug.skips = [];
+
+               let i;
+               const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+               const len = split.length;
+
+               for (i = 0; i < len; i++) {
+                       if (!split[i]) {
+                               // ignore empty strings
+                               continue;
+                       }
+
+                       namespaces = split[i].replace(/\*/g, '.*?');
+
+                       if (namespaces[0] === '-') {
+                               createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+                       } else {
+                               createDebug.names.push(new RegExp('^' + namespaces + '$'));
+                       }
+               }
+
+               for (i = 0; i < createDebug.instances.length; i++) {
+                       const instance = createDebug.instances[i];
+                       instance.enabled = createDebug.enabled(instance.namespace);
+               }
+       }
+
+       /**
+       * Disable debug output.
+       *
+       * @return {String} namespaces
+       * @api public
+       */
+       function disable() {
+               const namespaces = [
+                       ...createDebug.names.map(toNamespace),
+                       ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)
+               ].join(',');
+               createDebug.enable('');
+               return namespaces;
+       }
+
+       /**
+       * Returns true if the given mode name is enabled, false otherwise.
+       *
+       * @param {String} name
+       * @return {Boolean}
+       * @api public
+       */
+       function enabled(name) {
+               if (name[name.length - 1] === '*') {
+                       return true;
+               }
+
+               let i;
+               let len;
+
+               for (i = 0, len = createDebug.skips.length; i < len; i++) {
+                       if (createDebug.skips[i].test(name)) {
+                               return false;
+                       }
+               }
+
+               for (i = 0, len = createDebug.names.length; i < len; i++) {
+                       if (createDebug.names[i].test(name)) {
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+
+       /**
+       * Convert regexp to namespace
+       *
+       * @param {RegExp} regxep
+       * @return {String} namespace
+       * @api private
+       */
+       function toNamespace(regexp) {
+               return regexp.toString()
+                       .substring(2, regexp.toString().length - 2)
+                       .replace(/\.\*\?$/, '*');
+       }
+
+       /**
+       * Coerce `val`.
+       *
+       * @param {Mixed} val
+       * @return {Mixed}
+       * @api private
+       */
+       function coerce(val) {
+               if (val instanceof Error) {
+                       return val.stack || val.message;
+               }
+               return val;
+       }
+
+       createDebug.enable(createDebug.load());
+
+       return createDebug;
+}
+
+module.exports = setup;
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/index.js b/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/index.js
new file mode 100644 (file)
index 0000000..bf4c57f
--- /dev/null
@@ -0,0 +1,10 @@
+/**
+ * Detect Electron renderer / nwjs process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {
+       module.exports = require('./browser.js');
+} else {
+       module.exports = require('./node.js');
+}
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/node.js b/signaling_server/service/node_modules/socket.io-parser/node_modules/debug/src/node.js
new file mode 100644 (file)
index 0000000..5e1f154
--- /dev/null
@@ -0,0 +1,257 @@
+/**
+ * Module dependencies.
+ */
+
+const tty = require('tty');
+const util = require('util');
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ */
+
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+
+/**
+ * Colors.
+ */
+
+exports.colors = [6, 2, 3, 4, 5, 1];
+
+try {
+       // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)
+       // eslint-disable-next-line import/no-extraneous-dependencies
+       const supportsColor = require('supports-color');
+
+       if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
+               exports.colors = [
+                       20,
+                       21,
+                       26,
+                       27,
+                       32,
+                       33,
+                       38,
+                       39,
+                       40,
+                       41,
+                       42,
+                       43,
+                       44,
+                       45,
+                       56,
+                       57,
+                       62,
+                       63,
+                       68,
+                       69,
+                       74,
+                       75,
+                       76,
+                       77,
+                       78,
+                       79,
+                       80,
+                       81,
+                       92,
+                       93,
+                       98,
+                       99,
+                       112,
+                       113,
+                       128,
+                       129,
+                       134,
+                       135,
+                       148,
+                       149,
+                       160,
+                       161,
+                       162,
+                       163,
+                       164,
+                       165,
+                       166,
+                       167,
+                       168,
+                       169,
+                       170,
+                       171,
+                       172,
+                       173,
+                       178,
+                       179,
+                       184,
+                       185,
+                       196,
+                       197,
+                       198,
+                       199,
+                       200,
+                       201,
+                       202,
+                       203,
+                       204,
+                       205,
+                       206,
+                       207,
+                       208,
+                       209,
+                       214,
+                       215,
+                       220,
+                       221
+               ];
+       }
+} catch (error) {
+       // Swallow - we only care if `supports-color` is available; it doesn't have to be.
+}
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(key => {
+       return /^debug_/i.test(key);
+}).reduce((obj, key) => {
+       // Camel-case
+       const prop = key
+               .substring(6)
+               .toLowerCase()
+               .replace(/_([a-z])/g, (_, k) => {
+                       return k.toUpperCase();
+               });
+
+       // Coerce string value into JS value
+       let val = process.env[key];
+       if (/^(yes|on|true|enabled)$/i.test(val)) {
+               val = true;
+       } else if (/^(no|off|false|disabled)$/i.test(val)) {
+               val = false;
+       } else if (val === 'null') {
+               val = null;
+       } else {
+               val = Number(val);
+       }
+
+       obj[prop] = val;
+       return obj;
+}, {});
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+       return 'colors' in exports.inspectOpts ?
+               Boolean(exports.inspectOpts.colors) :
+               tty.isatty(process.stderr.fd);
+}
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+       const {namespace: name, useColors} = this;
+
+       if (useColors) {
+               const c = this.color;
+               const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c);
+               const prefix = `  ${colorCode};1m${name} \u001B[0m`;
+
+               args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+               args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m');
+       } else {
+               args[0] = getDate() + name + ' ' + args[0];
+       }
+}
+
+function getDate() {
+       if (exports.inspectOpts.hideDate) {
+               return '';
+       }
+       return new Date().toISOString() + ' ';
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to stderr.
+ */
+
+function log(...args) {
+       return process.stderr.write(util.format(...args) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+function save(namespaces) {
+       if (namespaces) {
+               process.env.DEBUG = namespaces;
+       } else {
+               // If you set a process.env field to null or undefined, it gets cast to the
+               // string 'null' or 'undefined'. Just delete instead.
+               delete process.env.DEBUG;
+       }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+       return process.env.DEBUG;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init(debug) {
+       debug.inspectOpts = {};
+
+       const keys = Object.keys(exports.inspectOpts);
+       for (let i = 0; i < keys.length; i++) {
+               debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+       }
+}
+
+module.exports = require('./common')(exports);
+
+const {formatters} = module.exports;
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+formatters.o = function (v) {
+       this.inspectOpts.colors = this.useColors;
+       return util.inspect(v, this.inspectOpts)
+               .replace(/\s*\n\s*/g, ' ');
+};
+
+/**
+ * Map %O to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+formatters.O = function (v) {
+       this.inspectOpts.colors = this.useColors;
+       return util.inspect(v, this.inspectOpts);
+};
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/isarray/README.md b/signaling_server/service/node_modules/socket.io-parser/node_modules/isarray/README.md
new file mode 100644 (file)
index 0000000..38a91f6
--- /dev/null
@@ -0,0 +1,54 @@
+
+# isarray
+
+`Array#isArray` for older browsers.
+
+[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray)
+[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray)
+
+[![browser support](https://ci.testling.com/juliangruber/isarray.png)
+](https://ci.testling.com/juliangruber/isarray)
+
+## Usage
+
+```js
+var isArray = require('isarray');
+
+console.log(isArray([])); // => true
+console.log(isArray({})); // => false
+```
+
+## Installation
+
+With [npm](https://npmjs.org) do
+
+```bash
+$ npm install isarray
+```
+
+Then bundle for the browser with
+[browserify](https://github.com/substack/node-browserify).
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/isarray/index.js b/signaling_server/service/node_modules/socket.io-parser/node_modules/isarray/index.js
new file mode 100644 (file)
index 0000000..a57f634
--- /dev/null
@@ -0,0 +1,5 @@
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+  return toString.call(arr) == '[object Array]';
+};
diff --git a/signaling_server/service/node_modules/socket.io-parser/node_modules/isarray/package.json b/signaling_server/service/node_modules/socket.io-parser/node_modules/isarray/package.json
new file mode 100644 (file)
index 0000000..9881c86
--- /dev/null
@@ -0,0 +1,79 @@
+{
+  "_args": [
+    [
+      "isarray@2.0.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "isarray@2.0.1",
+  "_id": "isarray@2.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+  "_location": "/socket.io-parser/isarray",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "isarray@2.0.1",
+    "name": "isarray",
+    "escapedName": "isarray",
+    "rawSpec": "2.0.1",
+    "saveSpec": null,
+    "fetchSpec": "2.0.1"
+  },
+  "_requiredBy": [
+    "/socket.io-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+  "_spec": "2.0.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Julian Gruber",
+    "email": "mail@juliangruber.com",
+    "url": "http://juliangruber.com"
+  },
+  "bugs": {
+    "url": "https://github.com/juliangruber/isarray/issues"
+  },
+  "dependencies": {},
+  "description": "Array#isArray for older browsers",
+  "devDependencies": {
+    "tape": "~2.13.4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/juliangruber/isarray",
+  "keywords": [
+    "browser",
+    "isarray",
+    "array"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "isarray",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/juliangruber/isarray.git"
+  },
+  "scripts": {
+    "test": "tape test.js"
+  },
+  "testling": {
+    "files": "test.js",
+    "browsers": [
+      "ie/8..latest",
+      "firefox/17..latest",
+      "firefox/nightly",
+      "chrome/22..latest",
+      "chrome/canary",
+      "opera/12..latest",
+      "opera/next",
+      "safari/5.1..latest",
+      "ipad/6.0..latest",
+      "iphone/6.0..latest",
+      "android-browser/4.2..latest"
+    ]
+  },
+  "version": "2.0.1"
+}
diff --git a/signaling_server/service/node_modules/socket.io-parser/package.json b/signaling_server/service/node_modules/socket.io-parser/package.json
new file mode 100644 (file)
index 0000000..69072b7
--- /dev/null
@@ -0,0 +1,68 @@
+{
+  "_args": [
+    [
+      "socket.io-parser@3.4.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "socket.io-parser@3.4.1",
+  "_id": "socket.io-parser@3.4.1",
+  "_inBundle": false,
+  "_integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
+  "_location": "/socket.io-parser",
+  "_phantomChildren": {
+    "ms": "2.1.2"
+  },
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "socket.io-parser@3.4.1",
+    "name": "socket.io-parser",
+    "escapedName": "socket.io-parser",
+    "rawSpec": "3.4.1",
+    "saveSpec": null,
+    "fetchSpec": "3.4.1"
+  },
+  "_requiredBy": [
+    "/socket.io"
+  ],
+  "_resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz",
+  "_spec": "3.4.1",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/socketio/socket.io-parser/issues"
+  },
+  "dependencies": {
+    "component-emitter": "1.2.1",
+    "debug": "~4.1.0",
+    "isarray": "2.0.1"
+  },
+  "description": "socket.io protocol parser",
+  "devDependencies": {
+    "@babel/core": "~7.9.6",
+    "@babel/preset-env": "~7.9.6",
+    "babelify": "~10.0.0",
+    "benchmark": "2.1.2",
+    "expect.js": "0.3.1",
+    "mocha": "3.2.0",
+    "socket.io-browsers": "^1.0.0",
+    "zuul": "3.11.1",
+    "zuul-ngrok": "4.0.0"
+  },
+  "files": [
+    "binary.js",
+    "index.js",
+    "is-buffer.js"
+  ],
+  "homepage": "https://github.com/socketio/socket.io-parser#readme",
+  "license": "MIT",
+  "name": "socket.io-parser",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/socketio/socket.io-parser.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "version": "3.4.1"
+}
diff --git a/signaling_server/service/node_modules/socket.io/CHANGELOG.md b/signaling_server/service/node_modules/socket.io/CHANGELOG.md
new file mode 100644 (file)
index 0000000..e8552f7
--- /dev/null
@@ -0,0 +1,15 @@
+## [2.4.1](https://github.com/socketio/socket.io/compare/2.4.0...2.4.1) (2021-01-07)
+
+
+### Reverts
+
+* fix(security): do not allow all origins by default ([a169050](https://github.com/socketio/socket.io/commit/a1690509470e9dd5559cec4e60908ca6c23e9ba0))
+
+
+# [2.4.0](https://github.com/socketio/socket.io/compare/2.3.0...2.4.0) (2021-01-04)
+
+
+### Bug Fixes
+
+* **security:** do not allow all origins by default ([f78a575](https://github.com/socketio/socket.io/commit/f78a575f66ab693c3ea96ea88429ddb1a44c86c7))
+* properly overwrite the query sent in the handshake ([d33a619](https://github.com/socketio/socket.io/commit/d33a619905a4905c153d4fec337c74da5b533a9e))
index 88e8b3a..92fc1c5 100644 (file)
@@ -2,7 +2,7 @@
 # socket.io
 
 [![Backers on Open Collective](https://opencollective.com/socketio/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/socketio/sponsors/badge.svg)](#sponsors)
-[![Build Status](https://secure.travis-ci.org/socketio/socket.io.svg?branch=master)](https://travis-ci.org/socketio/socket.io)
+[![Build Status](https://github.com/socketio/socket.io/workflows/CI/badge.svg)](https://github.com/socketio/socket.io/actions)
 [![Dependency Status](https://david-dm.org/socketio/socket.io.svg)](https://david-dm.org/socketio/socket.io)
 [![devDependency Status](https://david-dm.org/socketio/socket.io/dev-status.svg)](https://david-dm.org/socketio/socket.io#info=devDependencies)
 [![NPM version](https://badge.fury.io/js/socket.io.svg)](https://www.npmjs.com/package/socket.io)
index 9a96929..4e97eb5 100644 (file)
@@ -116,7 +116,7 @@ Socket.prototype.buildHandshake = function(query){
   function buildQuery(){
     var requestQuery = url.parse(self.request.url, true).query;
     //if socket-specific query exist, replace query strings in requestQuery
-    return Object.assign({}, query, requestQuery);
+    return Object.assign({}, requestQuery, query);
   }
   return {
     headers: this.request.headers,
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/accepts/package.json b/signaling_server/service/node_modules/socket.io/node_modules/accepts/package.json
deleted file mode 100644 (file)
index bfeaab7..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "_from": "accepts@~1.3.4",
-  "_id": "accepts@1.3.7",
-  "_inBundle": false,
-  "_integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
-  "_location": "/accepts",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "accepts@~1.3.4",
-    "name": "accepts",
-    "escapedName": "accepts",
-    "rawSpec": "~1.3.4",
-    "saveSpec": null,
-    "fetchSpec": "~1.3.4"
-  },
-  "_requiredBy": [
-    "/engine.io"
-  ],
-  "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
-  "_shasum": "531bc726517a3b2b41f850021c6cc15eaab507cd",
-  "_spec": "accepts@~1.3.4",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io",
-  "bugs": {
-    "url": "https://github.com/jshttp/accepts/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "dependencies": {
-    "mime-types": "~2.1.24",
-    "negotiator": "0.6.2"
-  },
-  "deprecated": false,
-  "description": "Higher-level content negotiation",
-  "devDependencies": {
-    "deep-equal": "1.0.1",
-    "eslint": "5.16.0",
-    "eslint-config-standard": "12.0.0",
-    "eslint-plugin-import": "2.17.2",
-    "eslint-plugin-markdown": "1.0.0",
-    "eslint-plugin-node": "8.0.1",
-    "eslint-plugin-promise": "4.1.1",
-    "eslint-plugin-standard": "4.0.0",
-    "mocha": "6.1.4",
-    "nyc": "14.0.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "LICENSE",
-    "HISTORY.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/accepts#readme",
-  "keywords": [
-    "content",
-    "negotiation",
-    "accept",
-    "accepts"
-  ],
-  "license": "MIT",
-  "name": "accepts",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/accepts.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --check-leaks --bail test/",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test"
-  },
-  "version": "1.3.7"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/after/package.json b/signaling_server/service/node_modules/socket.io/node_modules/after/package.json
deleted file mode 100644 (file)
index 5f7780b..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "_from": "after@0.8.2",
-  "_id": "after@0.8.2",
-  "_inBundle": false,
-  "_integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
-  "_location": "/after",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "after@0.8.2",
-    "name": "after",
-    "escapedName": "after",
-    "rawSpec": "0.8.2",
-    "saveSpec": null,
-    "fetchSpec": "0.8.2"
-  },
-  "_requiredBy": [
-    "/engine.io-parser"
-  ],
-  "_resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
-  "_shasum": "fedb394f9f0e02aa9768e702bda23b505fae7e1f",
-  "_spec": "after@0.8.2",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io-parser",
-  "author": {
-    "name": "Raynos",
-    "email": "raynos2@gmail.com"
-  },
-  "bugs": {
-    "url": "https://github.com/Raynos/after/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Raynos",
-      "email": "raynos2@gmail.com",
-      "url": "http://raynos.org"
-    }
-  ],
-  "deprecated": false,
-  "description": "after - tiny flow control",
-  "devDependencies": {
-    "mocha": "~1.8.1"
-  },
-  "homepage": "https://github.com/Raynos/after#readme",
-  "keywords": [
-    "flowcontrol",
-    "after",
-    "flow",
-    "control",
-    "arch"
-  ],
-  "license": "MIT",
-  "name": "after",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/Raynos/after.git"
-  },
-  "scripts": {
-    "test": "mocha --ui tdd --reporter spec test/*.js"
-  },
-  "version": "0.8.2"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/arraybuffer.slice/package.json b/signaling_server/service/node_modules/socket.io/node_modules/arraybuffer.slice/package.json
deleted file mode 100644 (file)
index a2b8a29..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "_from": "arraybuffer.slice@~0.0.7",
-  "_id": "arraybuffer.slice@0.0.7",
-  "_inBundle": false,
-  "_integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
-  "_location": "/arraybuffer.slice",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "arraybuffer.slice@~0.0.7",
-    "name": "arraybuffer.slice",
-    "escapedName": "arraybuffer.slice",
-    "rawSpec": "~0.0.7",
-    "saveSpec": null,
-    "fetchSpec": "~0.0.7"
-  },
-  "_requiredBy": [
-    "/engine.io-parser"
-  ],
-  "_resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
-  "_shasum": "3bbc4275dd584cc1b10809b89d4e8b63a69e7675",
-  "_spec": "arraybuffer.slice@~0.0.7",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io-parser",
-  "bugs": {
-    "url": "https://github.com/rase-/arraybuffer.slice/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "Exports a function for slicing ArrayBuffers (no polyfilling)",
-  "devDependencies": {
-    "expect.js": "0.2.0",
-    "mocha": "1.17.1"
-  },
-  "homepage": "https://github.com/rase-/arraybuffer.slice",
-  "license": "MIT",
-  "name": "arraybuffer.slice",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/rase-/arraybuffer.slice.git"
-  },
-  "version": "0.0.7"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/.eslintignore b/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/.eslintignore
deleted file mode 100644 (file)
index e1661e5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-coverage
-.nyc_output
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/.nycrc b/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/.nycrc
deleted file mode 100644 (file)
index 874c1de..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "check-coverage": false,
-  "lines": 99,
-  "statements": 99,
-  "functions": 99,
-  "branches": 99,
-  "include": [
-     "index.js"
-  ]
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/.travis.yml b/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/.travis.yml
deleted file mode 100644 (file)
index 37026e2..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-language: node_js
-node_js:
-  - "6"
-  - "8"
-  - "10"
-  - "node"
-script: npm run travis
-cache:
-  yarn: true
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/LICENSE b/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/LICENSE
deleted file mode 100644 (file)
index 9c91fb2..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-The MIT License (MIT)
-Copyright (c) 2017 Samuel Reed <samuel.trace.reed@gmail.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/index.js b/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/index.js
deleted file mode 100644 (file)
index c9bd2f9..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-'use strict';
-
-function Queue(options) {
-  if (!(this instanceof Queue)) {
-    return new Queue(options);
-  }
-
-  options = options || {};
-  this.concurrency = options.concurrency || Infinity;
-  this.pending = 0;
-  this.jobs = [];
-  this.cbs = [];
-  this._done = done.bind(this);
-}
-
-var arrayAddMethods = [
-  'push',
-  'unshift',
-  'splice'
-];
-
-arrayAddMethods.forEach(function(method) {
-  Queue.prototype[method] = function() {
-    var methodResult = Array.prototype[method].apply(this.jobs, arguments);
-    this._run();
-    return methodResult;
-  };
-});
-
-Object.defineProperty(Queue.prototype, 'length', {
-  get: function() {
-    return this.pending + this.jobs.length;
-  }
-});
-
-Queue.prototype._run = function() {
-  if (this.pending === this.concurrency) {
-    return;
-  }
-  if (this.jobs.length) {
-    var job = this.jobs.shift();
-    this.pending++;
-    job(this._done);
-    this._run();
-  }
-
-  if (this.pending === 0) {
-    while (this.cbs.length !== 0) {
-      var cb = this.cbs.pop();
-      process.nextTick(cb);
-    }
-  }
-};
-
-Queue.prototype.onDone = function(cb) {
-  if (typeof cb === 'function') {
-    this.cbs.push(cb);
-    this._run();
-  }
-};
-
-function done() {
-  this.pending--;
-  this._run();
-}
-
-module.exports = Queue;
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/package.json b/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/package.json
deleted file mode 100644 (file)
index 70a6837..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "_from": "async-limiter@~1.0.0",
-  "_id": "async-limiter@1.0.1",
-  "_inBundle": false,
-  "_integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
-  "_location": "/async-limiter",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "async-limiter@~1.0.0",
-    "name": "async-limiter",
-    "escapedName": "async-limiter",
-    "rawSpec": "~1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "~1.0.0"
-  },
-  "_requiredBy": [
-    "/engine.io-client/ws"
-  ],
-  "_resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
-  "_shasum": "dd379e94f0db8310b08291f9d64c3209766617fd",
-  "_spec": "async-limiter@~1.0.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io-client/node_modules/ws",
-  "author": {
-    "name": "Samuel Reed"
-  },
-  "bugs": {
-    "url": "https://github.com/strml/async-limiter/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "asynchronous function queue with adjustable concurrency",
-  "devDependencies": {
-    "coveralls": "^3.0.3",
-    "eslint": "^5.16.0",
-    "eslint-plugin-mocha": "^5.3.0",
-    "intelli-espower-loader": "^1.0.1",
-    "mocha": "^6.1.4",
-    "nyc": "^14.1.1",
-    "power-assert": "^1.6.1"
-  },
-  "homepage": "https://github.com/strml/async-limiter#readme",
-  "keywords": [
-    "throttle",
-    "async",
-    "limiter",
-    "asynchronous",
-    "job",
-    "task",
-    "concurrency",
-    "concurrent"
-  ],
-  "license": "MIT",
-  "name": "async-limiter",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/strml/async-limiter.git"
-  },
-  "scripts": {
-    "coverage": "nyc npm test && nyc report --reporter=text-lcov | coveralls",
-    "example": "node example",
-    "lint": "eslint .",
-    "test": "mocha --require intelli-espower-loader test/",
-    "travis": "npm run lint && npm run test"
-  },
-  "version": "1.0.1"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/readme.md b/signaling_server/service/node_modules/socket.io/node_modules/async-limiter/readme.md
deleted file mode 100644 (file)
index fcaa22f..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-# Async-Limiter
-
-A module for limiting concurrent asynchronous actions in flight. Forked from [queue](https://github.com/jessetane/queue).
-
-[![npm](http://img.shields.io/npm/v/async-limiter.svg?style=flat-square)](http://www.npmjs.org/async-limiter)
-[![tests](https://img.shields.io/travis/STRML/async-limiter.svg?style=flat-square&branch=master)](https://travis-ci.org/STRML/async-limiter)
-[![coverage](https://img.shields.io/coveralls/STRML/async-limiter.svg?style=flat-square&branch=master)](https://coveralls.io/r/STRML/async-limiter)
-
-This module exports a class `Limiter` that implements some of the `Array` API.
-Pass async functions (ones that accept a callback or return a promise) to an instance's additive array methods.
-
-## Motivation
-
-Certain functions, like `zlib`, have [undesirable behavior](https://github.com/nodejs/node/issues/8871#issuecomment-250915913) when
-run at infinite concurrency.
-
-In this case, it is actually faster, and takes far less memory, to limit concurrency.
-
-This module should do the absolute minimum work necessary to queue up functions. PRs are welcome that would
-make this module faster or lighter, but new functionality is not desired.
-
-Style should confirm to nodejs/node style.
-
-## Example
-
-``` javascript
-var Limiter = require('async-limiter')
-
-var t = new Limiter({concurrency: 2});
-var results = []
-
-// add jobs using the familiar Array API
-t.push(function (cb) {
-  results.push('two')
-  cb()
-})
-
-t.push(
-  function (cb) {
-    results.push('four')
-    cb()
-  },
-  function (cb) {
-    results.push('five')
-    cb()
-  }
-)
-
-t.unshift(function (cb) {
-  results.push('one')
-  cb()
-})
-
-t.splice(2, 0, function (cb) {
-  results.push('three')
-  cb()
-})
-
-// Jobs run automatically. If you want a callback when all are done,
-// call 'onDone()'.
-t.onDone(function () {
-  console.log('all done:', results)
-})
-```
-
-## Zlib Example
-
-```js
-const zlib = require('zlib');
-const Limiter = require('async-limiter');
-
-const message = {some: "data"};
-const payload = new Buffer(JSON.stringify(message));
-
-// Try with different concurrency values to see how this actually
-// slows significantly with higher concurrency!
-//
-// 5:        1398.607ms
-// 10:       1375.668ms
-// Infinity: 4423.300ms
-//
-const t = new Limiter({concurrency: 5});
-function deflate(payload, cb) {
-  t.push(function(done) {
-    zlib.deflate(payload, function(err, buffer) {
-      done();
-      cb(err, buffer);
-    });
-  });
-}
-
-console.time('deflate');
-for(let i = 0; i < 30000; ++i) {
-  deflate(payload, function (err, buffer) {});
-}
-t.onDone(function() {
-  console.timeEnd('deflate');
-});
-```
-
-## Install
-
-`npm install async-limiter`
-
-## Test
-
-`npm test`
-
-## API
-
-### `var t = new Limiter([opts])`
-Constructor. `opts` may contain inital values for:
-* `t.concurrency`
-
-## Instance methods
-
-### `t.onDone(fn)`
-`fn` will be called once and only once, when the queue is empty.
-
-## Instance methods mixed in from `Array`
-Mozilla has docs on how these methods work [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).
-### `t.push(element1, ..., elementN)`
-### `t.unshift(element1, ..., elementN)`
-### `t.splice(index , howMany[, element1[, ...[, elementN]]])`
-
-## Properties
-### `t.concurrency`
-Max number of jobs the queue should process concurrently, defaults to `Infinity`.
-
-### `t.length`
-Jobs pending + jobs to process (readonly).
-
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/backo2/package.json b/signaling_server/service/node_modules/socket.io/node_modules/backo2/package.json
deleted file mode 100644 (file)
index 9d4f572..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "_from": "backo2@1.0.2",
-  "_id": "backo2@1.0.2",
-  "_inBundle": false,
-  "_integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
-  "_location": "/backo2",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "backo2@1.0.2",
-    "name": "backo2",
-    "escapedName": "backo2",
-    "rawSpec": "1.0.2",
-    "saveSpec": null,
-    "fetchSpec": "1.0.2"
-  },
-  "_requiredBy": [
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
-  "_shasum": "31ab1ac8b129363463e35b3ebb69f4dfcfba7947",
-  "_spec": "backo2@1.0.2",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "bugs": {
-    "url": "https://github.com/mokesmokes/backo/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "simple backoff based on segmentio/backo",
-  "devDependencies": {
-    "mocha": "*",
-    "should": "*"
-  },
-  "homepage": "https://github.com/mokesmokes/backo#readme",
-  "keywords": [
-    "backoff"
-  ],
-  "license": "MIT",
-  "name": "backo2",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/mokesmokes/backo.git"
-  },
-  "version": "1.0.2"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js b/signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js
deleted file mode 100644 (file)
index e6b6306..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * base64-arraybuffer
- * https://github.com/niklasvh/base64-arraybuffer
- *
- * Copyright (c) 2012 Niklas von Hertzen
- * Licensed under the MIT license.
- */
-(function(){
-  "use strict";
-
-  var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-  // Use a lookup table to find the index.
-  var lookup = new Uint8Array(256);
-  for (var i = 0; i < chars.length; i++) {
-    lookup[chars.charCodeAt(i)] = i;
-  }
-
-  exports.encode = function(arraybuffer) {
-    var bytes = new Uint8Array(arraybuffer),
-    i, len = bytes.length, base64 = "";
-
-    for (i = 0; i < len; i+=3) {
-      base64 += chars[bytes[i] >> 2];
-      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
-      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
-      base64 += chars[bytes[i + 2] & 63];
-    }
-
-    if ((len % 3) === 2) {
-      base64 = base64.substring(0, base64.length - 1) + "=";
-    } else if (len % 3 === 1) {
-      base64 = base64.substring(0, base64.length - 2) + "==";
-    }
-
-    return base64;
-  };
-
-  exports.decode =  function(base64) {
-    var bufferLength = base64.length * 0.75,
-    len = base64.length, i, p = 0,
-    encoded1, encoded2, encoded3, encoded4;
-
-    if (base64[base64.length - 1] === "=") {
-      bufferLength--;
-      if (base64[base64.length - 2] === "=") {
-        bufferLength--;
-      }
-    }
-
-    var arraybuffer = new ArrayBuffer(bufferLength),
-    bytes = new Uint8Array(arraybuffer);
-
-    for (i = 0; i < len; i+=4) {
-      encoded1 = lookup[base64.charCodeAt(i)];
-      encoded2 = lookup[base64.charCodeAt(i+1)];
-      encoded3 = lookup[base64.charCodeAt(i+2)];
-      encoded4 = lookup[base64.charCodeAt(i+3)];
-
-      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
-      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
-      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
-    }
-
-    return arraybuffer;
-  };
-})();
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/package.json b/signaling_server/service/node_modules/socket.io/node_modules/base64-arraybuffer/package.json
deleted file mode 100644 (file)
index e8dba50..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-{
-  "_from": "base64-arraybuffer@0.1.5",
-  "_id": "base64-arraybuffer@0.1.5",
-  "_inBundle": false,
-  "_integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
-  "_location": "/base64-arraybuffer",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "base64-arraybuffer@0.1.5",
-    "name": "base64-arraybuffer",
-    "escapedName": "base64-arraybuffer",
-    "rawSpec": "0.1.5",
-    "saveSpec": null,
-    "fetchSpec": "0.1.5"
-  },
-  "_requiredBy": [
-    "/engine.io-parser",
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
-  "_shasum": "73926771923b5a19747ad666aa5cd4bf9c6e9ce8",
-  "_spec": "base64-arraybuffer@0.1.5",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io-parser",
-  "author": {
-    "name": "Niklas von Hertzen",
-    "email": "niklasvh@gmail.com",
-    "url": "http://hertzen.com"
-  },
-  "bugs": {
-    "url": "https://github.com/niklasvh/base64-arraybuffer/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Encode/decode base64 data into ArrayBuffers",
-  "devDependencies": {
-    "grunt": "^0.4.5",
-    "grunt-cli": "^0.1.13",
-    "grunt-contrib-jshint": "^0.11.2",
-    "grunt-contrib-nodeunit": "^0.4.1",
-    "grunt-contrib-watch": "^0.6.1"
-  },
-  "engines": {
-    "node": ">= 0.6.0"
-  },
-  "homepage": "https://github.com/niklasvh/base64-arraybuffer",
-  "keywords": [],
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "https://github.com/niklasvh/base64-arraybuffer/blob/master/LICENSE-MIT"
-    }
-  ],
-  "main": "lib/base64-arraybuffer",
-  "name": "base64-arraybuffer",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/niklasvh/base64-arraybuffer.git"
-  },
-  "scripts": {
-    "test": "grunt nodeunit"
-  },
-  "version": "0.1.5"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/base64id/package.json b/signaling_server/service/node_modules/socket.io/node_modules/base64id/package.json
deleted file mode 100644 (file)
index 1517947..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "_from": "base64id@2.0.0",
-  "_id": "base64id@2.0.0",
-  "_inBundle": false,
-  "_integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
-  "_location": "/base64id",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "base64id@2.0.0",
-    "name": "base64id",
-    "escapedName": "base64id",
-    "rawSpec": "2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "2.0.0"
-  },
-  "_requiredBy": [
-    "/engine.io"
-  ],
-  "_resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
-  "_shasum": "2770ac6bc47d312af97a8bf9a634342e0cd25cb6",
-  "_spec": "base64id@2.0.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io",
-  "author": {
-    "name": "Kristian Faeldt",
-    "email": "faeldt_kristian@cyberagent.co.jp"
-  },
-  "bugs": {
-    "url": "https://github.com/faeldt/base64id/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Generates a base64 id",
-  "engines": {
-    "node": "^4.5.0 || >= 5.9"
-  },
-  "homepage": "https://github.com/faeldt/base64id#readme",
-  "license": "MIT",
-  "main": "./lib/base64id.js",
-  "name": "base64id",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/faeldt/base64id.git"
-  },
-  "version": "2.0.0"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/better-assert/.npmignore b/signaling_server/service/node_modules/socket.io/node_modules/better-assert/.npmignore
deleted file mode 100644 (file)
index f1250e5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-support
-test
-examples
-*.sock
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/better-assert/History.md b/signaling_server/service/node_modules/socket.io/node_modules/better-assert/History.md
deleted file mode 100644 (file)
index cbb579b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-
-1.0.0 / 2013-02-03 
-==================
-
-  * Stop using the removed magic __stack global getter
-
-0.1.0 / 2012-10-04 
-==================
-
-  * add throwing of AssertionError for test frameworks etc
-
-0.0.1 / 2010-01-03
-==================
-
-  * Initial release
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/better-assert/Makefile b/signaling_server/service/node_modules/socket.io/node_modules/better-assert/Makefile
deleted file mode 100644 (file)
index 36a3ed7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-test:
-       @echo "populate me"
-
-.PHONY: test
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/better-assert/Readme.md b/signaling_server/service/node_modules/socket.io/node_modules/better-assert/Readme.md
deleted file mode 100644 (file)
index d8d3a63..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-# better-assert
-
-  Better c-style assertions using [callsite](https://github.com/visionmedia/callsite) for
-  self-documenting failure messages.
-
-## Installation
-
-    $ npm install better-assert
-
-## Example
-
- By default assertions are enabled, however the __NO_ASSERT__ environment variable 
- will deactivate them when truthy.
-
-```js
-var assert = require('better-assert');
-
-test();
-
-function test() {
-  var user = { name: 'tobi' };
-  assert('tobi' == user.name);
-  assert('number' == typeof user.age);
-}
-
-AssertionError: 'number' == typeof user.age
-    at test (/Users/tj/projects/better-assert/example.js:9:3)
-    at Object.<anonymous> (/Users/tj/projects/better-assert/example.js:4:1)
-    at Module._compile (module.js:449:26)
-    at Object.Module._extensions..js (module.js:467:10)
-    at Module.load (module.js:356:32)
-    at Function.Module._load (module.js:312:12)
-    at Module.runMain (module.js:492:10)
-    at process.startup.processNextTick.process._tickCallback (node.js:244:9)
-```
-
-## License 
-
-(The MIT License)
-
-Copyright (c) 2012 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/better-assert/example.js b/signaling_server/service/node_modules/socket.io/node_modules/better-assert/example.js
deleted file mode 100644 (file)
index 688c29e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-var assert = require('./');
-
-test();
-
-function test() {
-  var user = { name: 'tobi' };
-  assert('tobi' == user.name);
-  assert('number' == typeof user.age);
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/better-assert/index.js b/signaling_server/service/node_modules/socket.io/node_modules/better-assert/index.js
deleted file mode 100644 (file)
index fd1c9b7..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Module dependencies.
- */
-
-var AssertionError = require('assert').AssertionError
-  , callsite = require('callsite')
-  , fs = require('fs')
-
-/**
- * Expose `assert`.
- */
-
-module.exports = process.env.NO_ASSERT
-  ? function(){}
-  : assert;
-
-/**
- * Assert the given `expr`.
- */
-
-function assert(expr) {
-  if (expr) return;
-
-  var stack = callsite();
-  var call = stack[1];
-  var file = call.getFileName();
-  var lineno = call.getLineNumber();
-  var src = fs.readFileSync(file, 'utf8');
-  var line = src.split('\n')[lineno-1];
-  var src = line.match(/assert\((.*)\)/)[1];
-
-  var err = new AssertionError({
-    message: src,
-    stackStartFunction: stack[0].getFunction()
-  });
-
-  throw err;
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/better-assert/package.json b/signaling_server/service/node_modules/socket.io/node_modules/better-assert/package.json
deleted file mode 100644 (file)
index b8a1942..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-{
-  "_from": "better-assert@~1.0.0",
-  "_id": "better-assert@1.0.2",
-  "_inBundle": false,
-  "_integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
-  "_location": "/better-assert",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "better-assert@~1.0.0",
-    "name": "better-assert",
-    "escapedName": "better-assert",
-    "rawSpec": "~1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "~1.0.0"
-  },
-  "_requiredBy": [
-    "/parseqs",
-    "/parseuri"
-  ],
-  "_resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
-  "_shasum": "40866b9e1b9e0b55b481894311e68faffaebc522",
-  "_spec": "better-assert@~1.0.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/parseqs",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca"
-  },
-  "bugs": {
-    "url": "https://github.com/visionmedia/better-assert/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "TonyHe",
-      "email": "coolhzb@163.com"
-    },
-    {
-      "name": "ForbesLindesay"
-    }
-  ],
-  "dependencies": {
-    "callsite": "1.0.0"
-  },
-  "deprecated": false,
-  "description": "Better assertions for node, reporting the expr, filename, lineno etc",
-  "engines": {
-    "node": "*"
-  },
-  "homepage": "https://github.com/visionmedia/better-assert#readme",
-  "keywords": [
-    "assert",
-    "stack",
-    "trace",
-    "debug"
-  ],
-  "main": "index",
-  "name": "better-assert",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/visionmedia/better-assert.git"
-  },
-  "version": "1.0.2"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/blob/package.json b/signaling_server/service/node_modules/socket.io/node_modules/blob/package.json
deleted file mode 100644 (file)
index 65af8c2..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "_from": "blob@0.0.5",
-  "_id": "blob@0.0.5",
-  "_inBundle": false,
-  "_integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
-  "_location": "/blob",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "blob@0.0.5",
-    "name": "blob",
-    "escapedName": "blob",
-    "rawSpec": "0.0.5",
-    "saveSpec": null,
-    "fetchSpec": "0.0.5"
-  },
-  "_requiredBy": [
-    "/engine.io-parser"
-  ],
-  "_resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
-  "_shasum": "d680eeef25f8cd91ad533f5b01eed48e64caf683",
-  "_spec": "blob@0.0.5",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io-parser",
-  "bugs": {
-    "url": "https://github.com/webmodules/blob/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "Abstracts out Blob and uses BlobBulder in cases where it is supported with any vendor prefix.",
-  "devDependencies": {
-    "browserify": "4.2.3",
-    "expect.js": "0.2.0",
-    "mocha": "1.17.1",
-    "zuul": "1.10.2"
-  },
-  "homepage": "https://github.com/webmodules/blob",
-  "license": "MIT",
-  "name": "blob",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/webmodules/blob.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "0.0.5"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/callsite/History.md b/signaling_server/service/node_modules/socket.io/node_modules/callsite/History.md
deleted file mode 100644 (file)
index 4994198..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-1.0.0 / 2013-01-24 
-==================
-
-  * remove lame magical getters
-
-0.0.1 / 2010-01-03
-==================
-
-  * Initial release
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/callsite/Makefile b/signaling_server/service/node_modules/socket.io/node_modules/callsite/Makefile
deleted file mode 100644 (file)
index 634e372..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-test:
-       @./node_modules/.bin/mocha \
-               --require should
-
-.PHONY: test
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/callsite/Readme.md b/signaling_server/service/node_modules/socket.io/node_modules/callsite/Readme.md
deleted file mode 100644 (file)
index 0dbd16a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# callstack
-
-  Access to v8's "raw" `CallSite`s.
-
-## Installation
-
-    $ npm install callsite
-
-## Example
-
-```js
-var stack = require('callsite');
-
-foo();
-
-function foo() {
-  bar();
-}
-
-function bar() {
-  baz();
-}
-
-function baz() {
-  console.log();
-  stack().forEach(function(site){
-    console.log('  \033[36m%s\033[90m in %s:%d\033[0m'
-      , site.getFunctionName() || 'anonymous'
-      , site.getFileName()
-      , site.getLineNumber());
-  });
-  console.log();
-}
-```
-
-## Why?
-
-  Because you can do weird, stupid, clever, wacky things such as:
-
-  - [better-assert](https://github.com/visionmedia/better-assert)
-
-## License
-
-  MIT
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/callsite/index.js b/signaling_server/service/node_modules/socket.io/node_modules/callsite/index.js
deleted file mode 100644 (file)
index d3ee6f8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-module.exports = function(){
-  var orig = Error.prepareStackTrace;
-  Error.prepareStackTrace = function(_, stack){ return stack; };
-  var err = new Error;
-  Error.captureStackTrace(err, arguments.callee);
-  var stack = err.stack;
-  Error.prepareStackTrace = orig;
-  return stack;
-};
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/callsite/package.json b/signaling_server/service/node_modules/socket.io/node_modules/callsite/package.json
deleted file mode 100644 (file)
index b254196..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "_from": "callsite@1.0.0",
-  "_id": "callsite@1.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
-  "_location": "/callsite",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "callsite@1.0.0",
-    "name": "callsite",
-    "escapedName": "callsite",
-    "rawSpec": "1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "1.0.0"
-  },
-  "_requiredBy": [
-    "/better-assert"
-  ],
-  "_resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
-  "_shasum": "280398e5d664bd74038b6f0905153e6e8af1bc20",
-  "_spec": "callsite@1.0.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/better-assert",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "access to v8's CallSites",
-  "devDependencies": {
-    "mocha": "*",
-    "should": "*"
-  },
-  "engines": {
-    "node": "*"
-  },
-  "keywords": [
-    "stack",
-    "trace",
-    "line"
-  ],
-  "main": "index",
-  "name": "callsite",
-  "version": "1.0.0"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/component-bind/package.json b/signaling_server/service/node_modules/socket.io/node_modules/component-bind/package.json
deleted file mode 100644 (file)
index 78fdd8f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "_from": "component-bind@1.0.0",
-  "_id": "component-bind@1.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
-  "_location": "/component-bind",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "component-bind@1.0.0",
-    "name": "component-bind",
-    "escapedName": "component-bind",
-    "rawSpec": "1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "1.0.0"
-  },
-  "_requiredBy": [
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
-  "_shasum": "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1",
-  "_spec": "component-bind@1.0.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "bugs": {
-    "url": "https://github.com/component/bind/issues"
-  },
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "bind/index.js": "index.js"
-    }
-  },
-  "deprecated": false,
-  "description": "function binding utility",
-  "devDependencies": {
-    "mocha": "*",
-    "should": "*"
-  },
-  "homepage": "https://github.com/component/bind#readme",
-  "keywords": [
-    "bind",
-    "utility"
-  ],
-  "name": "component-bind",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/component/bind.git"
-  },
-  "version": "1.0.0"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/component-emitter/package.json b/signaling_server/service/node_modules/socket.io/node_modules/component-emitter/package.json
deleted file mode 100644 (file)
index df71244..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "_from": "component-emitter@1.2.1",
-  "_id": "component-emitter@1.2.1",
-  "_inBundle": false,
-  "_integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
-  "_location": "/component-emitter",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "component-emitter@1.2.1",
-    "name": "component-emitter",
-    "escapedName": "component-emitter",
-    "rawSpec": "1.2.1",
-    "saveSpec": null,
-    "fetchSpec": "1.2.1"
-  },
-  "_requiredBy": [
-    "/engine.io-client",
-    "/socket.io-client",
-    "/socket.io-client/socket.io-parser",
-    "/socket.io-parser"
-  ],
-  "_resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-  "_shasum": "137918d6d78283f7df7a6b7c5a63e140e69425e6",
-  "_spec": "component-emitter@1.2.1",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "bugs": {
-    "url": "https://github.com/component/emitter/issues"
-  },
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "emitter/index.js": "index.js"
-    }
-  },
-  "deprecated": false,
-  "description": "Event emitter",
-  "devDependencies": {
-    "mocha": "*",
-    "should": "*"
-  },
-  "files": [
-    "index.js",
-    "LICENSE"
-  ],
-  "homepage": "https://github.com/component/emitter#readme",
-  "license": "MIT",
-  "main": "index.js",
-  "name": "component-emitter",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/component/emitter.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "1.2.1"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/component-inherit/.npmignore b/signaling_server/service/node_modules/socket.io/node_modules/component-inherit/.npmignore
deleted file mode 100644 (file)
index 665aa21..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-components
-build
-node_modules
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/component-inherit/package.json b/signaling_server/service/node_modules/socket.io/node_modules/component-inherit/package.json
deleted file mode 100644 (file)
index c7f8ba9..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "_from": "component-inherit@0.0.3",
-  "_id": "component-inherit@0.0.3",
-  "_inBundle": false,
-  "_integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
-  "_location": "/component-inherit",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "component-inherit@0.0.3",
-    "name": "component-inherit",
-    "escapedName": "component-inherit",
-    "rawSpec": "0.0.3",
-    "saveSpec": null,
-    "fetchSpec": "0.0.3"
-  },
-  "_requiredBy": [
-    "/engine.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
-  "_shasum": "645fc4adf58b72b649d5cae65135619db26ff143",
-  "_spec": "component-inherit@0.0.3",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io-client",
-  "bugs": {
-    "url": "https://github.com/component/inherit/issues"
-  },
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "inherit/index.js": "index.js"
-    }
-  },
-  "dependencies": {},
-  "deprecated": false,
-  "description": "Prototype inheritance utility",
-  "homepage": "https://github.com/component/inherit#readme",
-  "keywords": [
-    "inherit",
-    "utility"
-  ],
-  "name": "component-inherit",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/component/inherit.git"
-  },
-  "version": "0.0.3"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/cookie/HISTORY.md b/signaling_server/service/node_modules/socket.io/node_modules/cookie/HISTORY.md
deleted file mode 100644 (file)
index 5bd6485..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-0.3.1 / 2016-05-26
-==================
-
-  * Fix `sameSite: true` to work with draft-7 clients
-    - `true` now sends `SameSite=Strict` instead of `SameSite`
-
-0.3.0 / 2016-05-26
-==================
-
-  * Add `sameSite` option
-    - Replaces `firstPartyOnly` option, never implemented by browsers
-  * Improve error message when `encode` is not a function
-  * Improve error message when `expires` is not a `Date`
-
-0.2.4 / 2016-05-20
-==================
-
-  * perf: enable strict mode
-  * perf: use for loop in parse
-  * perf: use string concatination for serialization
-
-0.2.3 / 2015-10-25
-==================
-
-  * Fix cookie `Max-Age` to never be a floating point number
-
-0.2.2 / 2015-09-17
-==================
-
-  * Fix regression when setting empty cookie value
-    - Ease the new restriction, which is just basic header-level validation
-  * Fix typo in invalid value errors
-
-0.2.1 / 2015-09-17
-==================
-
-  * Throw on invalid values provided to `serialize`
-    - Ensures the resulting string is a valid HTTP header value
-
-0.2.0 / 2015-08-13
-==================
-
-  * Add `firstPartyOnly` option
-  * Throw better error for invalid argument to parse
-  * perf: hoist regular expression
-
-0.1.5 / 2015-09-17
-==================
-
-  * Fix regression when setting empty cookie value
-    - Ease the new restriction, which is just basic header-level validation
-  * Fix typo in invalid value errors
-
-0.1.4 / 2015-09-17
-==================
-
-  * Throw better error for invalid argument to parse
-  * Throw on invalid values provided to `serialize`
-    - Ensures the resulting string is a valid HTTP header value
-
-0.1.3 / 2015-05-19
-==================
-
-  * Reduce the scope of try-catch deopt
-  * Remove argument reassignments
-
-0.1.2 / 2014-04-16
-==================
-
-  * Remove unnecessary files from npm package
-
-0.1.1 / 2014-02-23
-==================
-
-  * Fix bad parse when cookie value contained a comma
-  * Fix support for `maxAge` of `0`
-
-0.1.0 / 2013-05-01
-==================
-
-  * Add `decode` option
-  * Add `encode` option
-
-0.0.6 / 2013-04-08
-==================
-
-  * Ignore cookie parts missing `=`
-
-0.0.5 / 2012-10-29
-==================
-
-  * Return raw cookie value if value unescape errors
-
-0.0.4 / 2012-06-21
-==================
-
-  * Use encode/decodeURIComponent for cookie encoding/decoding
-    - Improve server/client interoperability
-
-0.0.3 / 2012-06-06
-==================
-
-  * Only escape special characters per the cookie RFC
-
-0.0.2 / 2012-06-01
-==================
-
-  * Fix `maxAge` option to not throw error
-
-0.0.1 / 2012-05-28
-==================
-
-  * Add more tests
-
-0.0.0 / 2012-05-28
-==================
-
-  * Initial release
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/cookie/README.md b/signaling_server/service/node_modules/socket.io/node_modules/cookie/README.md
deleted file mode 100644 (file)
index db0d078..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-# cookie
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Basic HTTP cookie parser and serializer for HTTP servers.
-
-## Installation
-
-```sh
-$ npm install cookie
-```
-
-## API
-
-```js
-var cookie = require('cookie');
-```
-
-### cookie.parse(str, options)
-
-Parse an HTTP `Cookie` header string and returning an object of all cookie name-value pairs.
-The `str` argument is the string representing a `Cookie` header value and `options` is an
-optional object containing additional parsing options.
-
-```js
-var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');
-// { foo: 'bar', equation: 'E=mc^2' }
-```
-
-#### Options
-
-`cookie.parse` accepts these properties in the options object.
-
-##### decode
-
-Specifies a function that will be used to decode a cookie's value. Since the value of a cookie
-has a limited character set (and must be a simple string), this function can be used to decode
-a previously-encoded cookie value into a JavaScript string or other object.
-
-The default function is the global `decodeURIComponent`, which will decode any URL-encoded
-sequences into their byte representations.
-
-**note** if an error is thrown from this function, the original, non-decoded cookie value will
-be returned as the cookie's value.
-
-### cookie.serialize(name, value, options)
-
-Serialize a cookie name-value pair into a `Set-Cookie` header string. The `name` argument is the
-name for the cookie, the `value` argument is the value to set the cookie to, and the `options`
-argument is an optional object containing additional serialization options.
-
-```js
-var setCookie = cookie.serialize('foo', 'bar');
-// foo=bar
-```
-
-#### Options
-
-`cookie.serialize` accepts these properties in the options object.
-
-##### domain
-
-Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6266-5.2.3]. By default, no
-domain is set, and most clients will consider the cookie to apply to only the current domain.
-
-##### encode
-
-Specifies a function that will be used to encode a cookie's value. Since value of a cookie
-has a limited character set (and must be a simple string), this function can be used to encode
-a value into a string suited for a cookie's value.
-
-The default function is the global `ecodeURIComponent`, which will encode a JavaScript string
-into UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range.
-
-##### expires
-
-Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6266-5.2.1].
-By default, no expiration is set, and most clients will consider this a "non-persistent cookie" and
-will delete it on a condition like exiting a web browser application.
-
-**note** the [cookie storage model specification][rfc-6266-5.3] states that if both `expires` and
-`magAge` are set, then `maxAge` takes precedence, but it is possiblke not all clients by obey this,
-so if both are set, they should point to the same date and time.
-
-##### httpOnly
-
-Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6266-5.2.6]. When truthy,
-the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set.
-
-**note** be careful when setting this to `true`, as compliant clients will not allow client-side
-JavaScript to see the cookie in `document.cookie`.
-
-##### maxAge
-
-Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6266-5.2.2].
-The given number will be converted to an integer by rounding down. By default, no maximum age is set.
-
-**note** the [cookie storage model specification][rfc-6266-5.3] states that if both `expires` and
-`magAge` are set, then `maxAge` takes precedence, but it is possiblke not all clients by obey this,
-so if both are set, they should point to the same date and time.
-
-##### path
-
-Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6266-5.2.4]. By default, the path
-is considered the ["default path"][rfc-6266-5.1.4]. By default, no maximum age is set, and most
-clients will consider this a "non-persistent cookie" and will delete it on a condition like exiting
-a web browser application.
-
-##### sameSite
-
-Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][draft-west-first-party-cookies-07].
-
-  - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
-  - `false` will not set the `SameSite` attribute.
-  - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement.
-  - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
-
-More information about the different enforcement levels can be found in the specification
-https://tools.ietf.org/html/draft-west-first-party-cookies-07#section-4.1.1
-
-**note** This is an attribute that has not yet been fully standardized, and may change in the future.
-This also means many clients may ignore this attribute until they understand it.
-
-##### secure
-
-Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6266-5.2.5]. When truthy,
-the `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set.
-
-**note** be careful when setting this to `true`, as compliant clients will not send the cookie back to
-the server in the future if the browser does not have an HTTPS connection.
-
-## Example
-
-The following example uses this module in conjunction with the Node.js core HTTP server
-to prompt a user for their name and display it back on future visits.
-
-```js
-var cookie = require('cookie');
-var escapeHtml = require('escape-html');
-var http = require('http');
-var url = require('url');
-
-function onRequest(req, res) {
-  // Parse the query string
-  var query = url.parse(req.url, true, true).query;
-
-  if (query && query.name) {
-    // Set a new cookie with the name
-    res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {
-      httpOnly: true,
-      maxAge: 60 * 60 * 24 * 7 // 1 week
-    }));
-
-    // Redirect back after setting cookie
-    res.statusCode = 302;
-    res.setHeader('Location', req.headers.referer || '/');
-    res.end();
-    return;
-  }
-
-  // Parse the cookies on the request
-  var cookies = cookie.parse(req.headers.cookie || '');
-
-  // Get the visitor name set in the cookie
-  var name = cookies.name;
-
-  res.setHeader('Content-Type', 'text/html; charset=UTF-8');
-
-  if (name) {
-    res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');
-  } else {
-    res.write('<p>Hello, new visitor!</p>');
-  }
-
-  res.write('<form method="GET">');
-  res.write('<input placeholder="enter your name" name="name"> <input type="submit" value="Set Name">');
-  res.end('</form');
-}
-
-http.createServer(onRequest).listen(3000);
-```
-
-## Testing
-
-```sh
-$ npm test
-```
-
-## References
-
-- [RFC 6266: HTTP State Management Mechanism][rfc-6266]
-- [Same-site Cookies][draft-west-first-party-cookies-07]
-
-[draft-west-first-party-cookies-07]: https://tools.ietf.org/html/draft-west-first-party-cookies-07
-[rfc-6266]: https://tools.ietf.org/html/rfc6266
-[rfc-6266-5.1.4]: https://tools.ietf.org/html/rfc6266#section-5.1.4
-[rfc-6266-5.2.1]: https://tools.ietf.org/html/rfc6266#section-5.2.1
-[rfc-6266-5.2.2]: https://tools.ietf.org/html/rfc6266#section-5.2.2
-[rfc-6266-5.2.3]: https://tools.ietf.org/html/rfc6266#section-5.2.3
-[rfc-6266-5.2.4]: https://tools.ietf.org/html/rfc6266#section-5.2.4
-[rfc-6266-5.3]: https://tools.ietf.org/html/rfc6266#section-5.3
-
-## License
-
-[MIT](LICENSE)
-
-[npm-image]: https://img.shields.io/npm/v/cookie.svg
-[npm-url]: https://npmjs.org/package/cookie
-[node-version-image]: https://img.shields.io/node/v/cookie.svg
-[node-version-url]: https://nodejs.org/en/download
-[travis-image]: https://img.shields.io/travis/jshttp/cookie/master.svg
-[travis-url]: https://travis-ci.org/jshttp/cookie
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/cookie/master.svg
-[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master
-[downloads-image]: https://img.shields.io/npm/dm/cookie.svg
-[downloads-url]: https://npmjs.org/package/cookie
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/cookie/index.js b/signaling_server/service/node_modules/socket.io/node_modules/cookie/index.js
deleted file mode 100644 (file)
index ab2e467..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*!
- * cookie
- * Copyright(c) 2012-2014 Roman Shtylman
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict';
-
-/**
- * Module exports.
- * @public
- */
-
-exports.parse = parse;
-exports.serialize = serialize;
-
-/**
- * Module variables.
- * @private
- */
-
-var decode = decodeURIComponent;
-var encode = encodeURIComponent;
-var pairSplitRegExp = /; */;
-
-/**
- * RegExp to match field-content in RFC 7230 sec 3.2
- *
- * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
- * field-vchar   = VCHAR / obs-text
- * obs-text      = %x80-FF
- */
-
-var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
-
-/**
- * Parse a cookie header.
- *
- * Parse the given cookie header string into an object
- * The object has the various cookies as keys(names) => values
- *
- * @param {string} str
- * @param {object} [options]
- * @return {object}
- * @public
- */
-
-function parse(str, options) {
-  if (typeof str !== 'string') {
-    throw new TypeError('argument str must be a string');
-  }
-
-  var obj = {}
-  var opt = options || {};
-  var pairs = str.split(pairSplitRegExp);
-  var dec = opt.decode || decode;
-
-  for (var i = 0; i < pairs.length; i++) {
-    var pair = pairs[i];
-    var eq_idx = pair.indexOf('=');
-
-    // skip things that don't look like key=value
-    if (eq_idx < 0) {
-      continue;
-    }
-
-    var key = pair.substr(0, eq_idx).trim()
-    var val = pair.substr(++eq_idx, pair.length).trim();
-
-    // quoted values
-    if ('"' == val[0]) {
-      val = val.slice(1, -1);
-    }
-
-    // only assign once
-    if (undefined == obj[key]) {
-      obj[key] = tryDecode(val, dec);
-    }
-  }
-
-  return obj;
-}
-
-/**
- * Serialize data into a cookie header.
- *
- * Serialize the a name value pair into a cookie string suitable for
- * http headers. An optional options object specified cookie parameters.
- *
- * serialize('foo', 'bar', { httpOnly: true })
- *   => "foo=bar; httpOnly"
- *
- * @param {string} name
- * @param {string} val
- * @param {object} [options]
- * @return {string}
- * @public
- */
-
-function serialize(name, val, options) {
-  var opt = options || {};
-  var enc = opt.encode || encode;
-
-  if (typeof enc !== 'function') {
-    throw new TypeError('option encode is invalid');
-  }
-
-  if (!fieldContentRegExp.test(name)) {
-    throw new TypeError('argument name is invalid');
-  }
-
-  var value = enc(val);
-
-  if (value && !fieldContentRegExp.test(value)) {
-    throw new TypeError('argument val is invalid');
-  }
-
-  var str = name + '=' + value;
-
-  if (null != opt.maxAge) {
-    var maxAge = opt.maxAge - 0;
-    if (isNaN(maxAge)) throw new Error('maxAge should be a Number');
-    str += '; Max-Age=' + Math.floor(maxAge);
-  }
-
-  if (opt.domain) {
-    if (!fieldContentRegExp.test(opt.domain)) {
-      throw new TypeError('option domain is invalid');
-    }
-
-    str += '; Domain=' + opt.domain;
-  }
-
-  if (opt.path) {
-    if (!fieldContentRegExp.test(opt.path)) {
-      throw new TypeError('option path is invalid');
-    }
-
-    str += '; Path=' + opt.path;
-  }
-
-  if (opt.expires) {
-    if (typeof opt.expires.toUTCString !== 'function') {
-      throw new TypeError('option expires is invalid');
-    }
-
-    str += '; Expires=' + opt.expires.toUTCString();
-  }
-
-  if (opt.httpOnly) {
-    str += '; HttpOnly';
-  }
-
-  if (opt.secure) {
-    str += '; Secure';
-  }
-
-  if (opt.sameSite) {
-    var sameSite = typeof opt.sameSite === 'string'
-      ? opt.sameSite.toLowerCase() : opt.sameSite;
-
-    switch (sameSite) {
-      case true:
-        str += '; SameSite=Strict';
-        break;
-      case 'lax':
-        str += '; SameSite=Lax';
-        break;
-      case 'strict':
-        str += '; SameSite=Strict';
-        break;
-      default:
-        throw new TypeError('option sameSite is invalid');
-    }
-  }
-
-  return str;
-}
-
-/**
- * Try decoding a string using a decoding function.
- *
- * @param {string} str
- * @param {function} decode
- * @private
- */
-
-function tryDecode(str, decode) {
-  try {
-    return decode(str);
-  } catch (e) {
-    return str;
-  }
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/cookie/package.json b/signaling_server/service/node_modules/socket.io/node_modules/cookie/package.json
deleted file mode 100644 (file)
index c9fda75..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-{
-  "_from": "cookie@0.3.1",
-  "_id": "cookie@0.3.1",
-  "_inBundle": false,
-  "_integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
-  "_location": "/cookie",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "cookie@0.3.1",
-    "name": "cookie",
-    "escapedName": "cookie",
-    "rawSpec": "0.3.1",
-    "saveSpec": null,
-    "fetchSpec": "0.3.1"
-  },
-  "_requiredBy": [
-    "/engine.io"
-  ],
-  "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
-  "_shasum": "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb",
-  "_spec": "cookie@0.3.1",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io",
-  "author": {
-    "name": "Roman Shtylman",
-    "email": "shtylman@gmail.com"
-  },
-  "bugs": {
-    "url": "https://github.com/jshttp/cookie/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    }
-  ],
-  "deprecated": false,
-  "description": "HTTP server cookie parsing and serialization",
-  "devDependencies": {
-    "istanbul": "0.4.3",
-    "mocha": "1.21.5"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/cookie#readme",
-  "keywords": [
-    "cookie",
-    "cookies"
-  ],
-  "license": "MIT",
-  "name": "cookie",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/cookie.git"
-  },
-  "scripts": {
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
-  },
-  "version": "0.3.1"
-}
index 01e8286..eae67c4 100644 (file)
@@ -1,31 +1,32 @@
 {
-  "_from": "debug@~4.1.0",
+  "_args": [
+    [
+      "debug@4.1.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "debug@4.1.1",
   "_id": "debug@4.1.1",
   "_inBundle": false,
   "_integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-  "_location": "/debug",
+  "_location": "/socket.io/debug",
   "_phantomChildren": {},
   "_requested": {
-    "type": "range",
+    "type": "version",
     "registry": true,
-    "raw": "debug@~4.1.0",
+    "raw": "debug@4.1.1",
     "name": "debug",
     "escapedName": "debug",
-    "rawSpec": "~4.1.0",
+    "rawSpec": "4.1.1",
     "saveSpec": null,
-    "fetchSpec": "~4.1.0"
+    "fetchSpec": "4.1.1"
   },
   "_requiredBy": [
-    "/engine.io",
-    "/engine.io-client",
-    "/socket.io",
-    "/socket.io-client",
-    "/socket.io-parser"
+    "/socket.io"
   ],
   "_resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-  "_shasum": "3b72260255109c6b589cee050f1d516139664791",
-  "_spec": "debug@~4.1.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io",
+  "_spec": "4.1.1",
+  "_where": "/opt/source/offload.js",
   "author": {
     "name": "TJ Holowaychuk",
     "email": "tj@vision-media.ca"
@@ -34,7 +35,6 @@
   "bugs": {
     "url": "https://github.com/visionmedia/debug/issues"
   },
-  "bundleDependencies": false,
   "contributors": [
     {
       "name": "Nathan Rajlich",
@@ -49,7 +49,6 @@
   "dependencies": {
     "ms": "^2.1.1"
   },
-  "deprecated": false,
   "description": "small debugging utility",
   "devDependencies": {
     "@babel/cli": "^7.0.0",
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/CHANGELOG.md b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/CHANGELOG.md
deleted file mode 100644 (file)
index a5932c1..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-## [3.4.1](https://github.com/socketio/engine.io-client/compare/3.4.0...3.4.1) (2020-04-17)
-
-
-### Bug Fixes
-
-* use globalThis polyfill instead of self/global ([357f01d](https://github.com/socketio/engine.io-client/commit/357f01d90448d8565b650377bc7cabb351d991bd))
-
-
-
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/README.md b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/README.md
deleted file mode 100644 (file)
index ab559f8..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-
-# Engine.IO client
-
-[![Build Status](https://travis-ci.org/socketio/engine.io-client.svg?branch=master)](http://travis-ci.org/socketio/engine.io-client)
-[![NPM version](https://badge.fury.io/js/engine.io-client.svg)](http://badge.fury.io/js/engine.io-client)
-
-This is the client for [Engine.IO](http://github.com/socketio/engine.io),
-the implementation of transport-based cross-browser/cross-device
-bi-directional communication layer for [Socket.IO](http://github.com/socketio/socket.io).
-
-## How to use
-
-### Standalone
-
-You can find an `engine.io.js` file in this repository, which is a
-standalone build you can use as follows:
-
-```html
-<script src="/path/to/engine.io.js"></script>
-<script>
-  // eio = Socket
-  var socket = eio('ws://localhost');
-  socket.on('open', function(){
-    socket.on('message', function(data){});
-    socket.on('close', function(){});
-  });
-</script>
-```
-
-### With browserify
-
-Engine.IO is a commonjs module, which means you can include it by using
-`require` on the browser and package using [browserify](http://browserify.org/):
-
-1. install the client package
-
-    ```bash
-    $ npm install engine.io-client
-    ```
-
-1. write your app code
-
-    ```js
-    var socket = require('engine.io-client')('ws://localhost');
-    socket.on('open', function(){
-      socket.on('message', function(data){});
-      socket.on('close', function(){});
-    });
-    ```
-
-1. build your app bundle
-
-    ```bash
-    $ browserify app.js > bundle.js
-    ```
-
-1. include on your page
-
-    ```html
-    <script src="/path/to/bundle.js"></script>
-    ```
-
-### Sending and receiving binary
-
-```html
-<script src="/path/to/engine.io.js"></script>
-<script>
-  var socket = new eio.Socket('ws://localhost/');
-  socket.binaryType = 'blob';
-  socket.on('open', function () {
-    socket.send(new Int8Array(5));
-    socket.on('message', function(blob){});
-    socket.on('close', function(){ });
-  });
-</script>
-```
-
-### Node.JS
-
-Add `engine.io-client` to your `package.json` and then:
-
-```js
-var socket = require('engine.io-client')('ws://localhost');
-socket.on('open', function(){
-  socket.on('message', function(data){});
-  socket.on('close', function(){});
-});
-```
-
-### Node.js with certificates
-```js
-var opts = {
-  key: fs.readFileSync('test/fixtures/client.key'),
-  cert: fs.readFileSync('test/fixtures/client.crt'),
-  ca: fs.readFileSync('test/fixtures/ca.crt')
-};
-
-var socket = require('engine.io-client')('ws://localhost', opts);
-socket.on('open', function(){
-  socket.on('message', function(data){});
-  socket.on('close', function(){});
-});
-```
-
-### Node.js with extraHeaders
-```js
-var opts = {
-  extraHeaders: {
-    'X-Custom-Header-For-My-Project': 'my-secret-access-token',
-    'Cookie': 'user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly'
-  }
-};
-
-var socket = require('engine.io-client')('ws://localhost', opts);
-socket.on('open', function(){
-  socket.on('message', function(data){});
-  socket.on('close', function(){});
-});
-```
-
-## Features
-
-- Lightweight
-- Runs on browser and node.js seamlessly
-- Transports are independent of `Engine`
-  - Easy to debug
-  - Easy to unit test
-- Runs inside HTML5 WebWorker
-- Can send and receive binary data
-  - Receives as ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer
-    in Node
-  - When XHR2 or WebSockets are used, binary is emitted directly. Otherwise
-    binary is encoded into base64 strings, and decoded when binary types are
-    supported.
-  - With browsers that don't support ArrayBuffer, an object { base64: true,
-    data: dataAsBase64String } is emitted on the `message` event.
-
-## API
-
-### Socket
-
-The client class. Mixes in [Emitter](http://github.com/component/emitter).
-Exposed as `eio` in the browser standalone build.
-
-#### Properties
-
-- `protocol` _(Number)_: protocol revision number
-- `binaryType` _(String)_ : can be set to 'arraybuffer' or 'blob' in browsers,
-  and `buffer` or `arraybuffer` in Node. Blob is only used in browser if it's
-  supported.
-
-#### Events
-
-- `open`
-  - Fired upon successful connection.
-- `message`
-  - Fired when data is received from the server.
-  - **Arguments**
-    - `String` | `ArrayBuffer`: utf-8 encoded data or ArrayBuffer containing
-      binary data
-- `close`
-  - Fired upon disconnection. In compliance with the WebSocket API spec, this event may be
-    fired even if the `open` event does not occur (i.e. due to connection error or `close()`).
-- `error`
-  - Fired when an error occurs.
-- `flush`
-  - Fired upon completing a buffer flush
-- `drain`
-  - Fired after `drain` event of transport if writeBuffer is empty
-- `upgradeError`
-  - Fired if an error occurs with a transport we're trying to upgrade to.
-- `upgrade`
-  - Fired upon upgrade success, after the new transport is set
-- `ping`
-  - Fired upon _flushing_ a ping packet (ie: actual packet write out)
-- `pong`
-  - Fired upon receiving a pong packet.
-
-#### Methods
-
-- **constructor**
-    - Initializes the client
-    - **Parameters**
-      - `String` uri
-      - `Object`: optional, options object
-    - **Options**
-      - `agent` (`http.Agent`): `http.Agent` to use, defaults to `false` (NodeJS only)
-      - `upgrade` (`Boolean`): defaults to true, whether the client should try
-      to upgrade the transport from long-polling to something better.
-      - `forceJSONP` (`Boolean`): forces JSONP for polling transport.
-      - `jsonp` (`Boolean`): determines whether to use JSONP when
-        necessary for polling. If disabled (by settings to false) an error will
-        be emitted (saying "No transports available") if no other transports
-        are available. If another transport is available for opening a
-        connection (e.g. WebSocket) that transport
-        will be used instead.
-      - `forceBase64` (`Boolean`): forces base 64 encoding for polling transport even when XHR2 responseType is available and WebSocket even if the used standard supports binary.
-      - `enablesXDR` (`Boolean`): enables XDomainRequest for IE8 to avoid loading bar flashing with click sound. default to `false` because XDomainRequest has a flaw of not sending cookie.
-      - `withCredentials` (`Boolean`): defaults to `true`, whether to include credentials (cookies, authorization headers, TLS client certificates, etc.) with cross-origin XHR polling requests.
-      - `timestampRequests` (`Boolean`): whether to add the timestamp with each
-        transport request. Note: polling requests are always stamped unless this
-        option is explicitly set to `false` (`false`)
-      - `timestampParam` (`String`): timestamp parameter (`t`)
-      - `policyPort` (`Number`): port the policy server listens on (`843`)
-      - `path` (`String`): path to connect to, default is `/engine.io`
-      - `transports` (`Array`): a list of transports to try (in order).
-      Defaults to `['polling', 'websocket']`. `Engine`
-      always attempts to connect directly with the first one, provided the
-      feature detection test for it passes.
-      - `transportOptions` (`Object`): hash of options, indexed by transport name, overriding the common options for the given transport
-      - `rememberUpgrade` (`Boolean`): defaults to false.
-        If true and if the previous websocket connection to the server succeeded,
-        the connection attempt will bypass the normal upgrade process and will initially
-        try websocket. A connection attempt following a transport error will use the
-        normal upgrade process. It is recommended you turn this on only when using
-        SSL/TLS connections, or if you know that your network does not block websockets.
-      - `pfx` (`String`|`Buffer`): Certificate, Private key and CA certificates to use for SSL. Can be used in Node.js client environment to manually specify certificate information.
-      - `key` (`String`): Private key to use for SSL. Can be used in Node.js client environment to manually specify certificate information.
-      - `passphrase` (`String`): A string of passphrase for the private key or pfx. Can be used in Node.js client environment to manually specify certificate information.
-      - `cert` (`String`): Public x509 certificate to use. Can be used in Node.js client environment to manually specify certificate information.
-      - `ca` (`String`|`Array`): An authority certificate or array of authority certificates to check the remote host against.. Can be used in Node.js client environment to manually specify certificate information.
-      - `ciphers` (`String`): A string describing the ciphers to use or exclude. Consult the [cipher format list](http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT) for details on the format. Can be used in Node.js client environment to manually specify certificate information.
-      - `rejectUnauthorized` (`Boolean`): If true, the server certificate is verified against the list of supplied CAs. An 'error' event is emitted if verification fails. Verification happens at the connection level, before the HTTP request is sent. Can be used in Node.js client environment to manually specify certificate information.
-      - `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension
-        (see [ws module](https://github.com/einaros/ws) api docs). Set to `false` to disable. (`true`)
-        - `threshold` (`Number`): data is compressed only if the byte size is above this value. This option is ignored on the browser. (`1024`)
-      - `extraHeaders` (`Object`): Headers that will be passed for each request to the server (via xhr-polling and via websockets). These values then can be used during handshake or for special proxies. Can only be used in Node.js client environment.
-      - `onlyBinaryUpgrades` (`Boolean`): whether transport upgrades should be restricted to transports supporting binary data (`false`)
-      - `forceNode` (`Boolean`): Uses NodeJS implementation for websockets - even if there is a native Browser-Websocket available, which is preferred by default over the NodeJS implementation. (This is useful when using hybrid platforms like nw.js or electron) (`false`, NodeJS only)
-      - `localAddress` (`String`): the local IP address to connect to
-    - **Polling-only options**
-      - `requestTimeout` (`Number`): Timeout for xhr-polling requests in milliseconds (`0`)
-    - **Websocket-only options**
-      - `protocols` (`Array`): a list of subprotocols (see [MDN reference](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#Subprotocols))
-- `send`
-    - Sends a message to the server
-    - **Parameters**
-      - `String` | `ArrayBuffer` | `ArrayBufferView` | `Blob`: data to send
-      - `Object`: optional, options object
-      - `Function`: optional, callback upon `drain`
-    - **Options**
-      - `compress` (`Boolean`): whether to compress sending data. This option is ignored and forced to be `true` on the browser. (`true`)
-- `close`
-    - Disconnects the client.
-
-### Transport
-
-The transport class. Private. _Inherits from EventEmitter_.
-
-#### Events
-
-- `poll`: emitted by polling transports upon starting a new request
-- `pollComplete`: emitted by polling transports upon completing a request
-- `drain`: emitted by polling transports upon a buffer drain
-
-## Tests
-
-`engine.io-client` is used to test
-[engine](http://github.com/socketio/engine.io). Running the `engine.io`
-test suite ensures the client works and vice-versa.
-
-Browser tests are run using [zuul](https://github.com/defunctzombie/zuul). You can
-run the tests locally using the following command.
-
-```
-./node_modules/.bin/zuul --local 8080 -- test/index.js
-```
-
-Additionally, `engine.io-client` has a standalone test suite you can run
-with `make test` which will run node.js and browser tests. You must have zuul setup with
-a saucelabs account.
-
-## Support
-
-The support channels for `engine.io-client` are the same as `socket.io`:
-  - irc.freenode.net **#socket.io**
-  - [Google Groups](http://groups.google.com/group/socket_io)
-  - [Website](http://socket.io)
-
-## Development
-
-To contribute patches, run tests or benchmarks, make sure to clone the
-repository:
-
-```bash
-git clone git://github.com/socketio/engine.io-client.git
-```
-
-Then:
-
-```bash
-cd engine.io-client
-npm install
-```
-
-See the `Tests` section above for how to run tests before submitting any patches.
-
-## License
-
-MIT - Copyright (c) 2014 Automattic, Inc.
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/engine.io.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/engine.io.js
deleted file mode 100644 (file)
index 8c6acfe..0000000
+++ /dev/null
@@ -1,4716 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-       if(typeof exports === 'object' && typeof module === 'object')
-               module.exports = factory();
-       else if(typeof define === 'function' && define.amd)
-               define([], factory);
-       else if(typeof exports === 'object')
-               exports["eio"] = factory();
-       else
-               root["eio"] = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/       // The module cache
-/******/       var installedModules = {};
-
-/******/       // The require function
-/******/       function __webpack_require__(moduleId) {
-
-/******/               // Check if module is in cache
-/******/               if(installedModules[moduleId])
-/******/                       return installedModules[moduleId].exports;
-
-/******/               // Create a new module (and put it into the cache)
-/******/               var module = installedModules[moduleId] = {
-/******/                       exports: {},
-/******/                       id: moduleId,
-/******/                       loaded: false
-/******/               };
-
-/******/               // Execute the module function
-/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/               // Flag the module as loaded
-/******/               module.loaded = true;
-
-/******/               // Return the exports of the module
-/******/               return module.exports;
-/******/       }
-
-
-/******/       // expose the modules object (__webpack_modules__)
-/******/       __webpack_require__.m = modules;
-
-/******/       // expose the module cache
-/******/       __webpack_require__.c = installedModules;
-
-/******/       // __webpack_public_path__
-/******/       __webpack_require__.p = "";
-
-/******/       // Load entry module and return exports
-/******/       return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ function(module, exports, __webpack_require__) {
-
-       
-       module.exports = __webpack_require__(1);
-
-       /**
-        * Exports parser
-        *
-        * @api public
-        *
-        */
-       module.exports.parser = __webpack_require__(9);
-
-
-/***/ },
-/* 1 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-
-       var transports = __webpack_require__(2);
-       var Emitter = __webpack_require__(18);
-       var debug = __webpack_require__(22)('engine.io-client:socket');
-       var index = __webpack_require__(29);
-       var parser = __webpack_require__(9);
-       var parseuri = __webpack_require__(30);
-       var parseqs = __webpack_require__(19);
-
-       /**
-        * Module exports.
-        */
-
-       module.exports = Socket;
-
-       /**
-        * Socket constructor.
-        *
-        * @param {String|Object} uri or options
-        * @param {Object} options
-        * @api public
-        */
-
-       function Socket (uri, opts) {
-         if (!(this instanceof Socket)) return new Socket(uri, opts);
-
-         opts = opts || {};
-
-         if (uri && 'object' === typeof uri) {
-           opts = uri;
-           uri = null;
-         }
-
-         if (uri) {
-           uri = parseuri(uri);
-           opts.hostname = uri.host;
-           opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';
-           opts.port = uri.port;
-           if (uri.query) opts.query = uri.query;
-         } else if (opts.host) {
-           opts.hostname = parseuri(opts.host).host;
-         }
-
-         this.secure = null != opts.secure ? opts.secure
-           : (typeof location !== 'undefined' && 'https:' === location.protocol);
-
-         if (opts.hostname && !opts.port) {
-           // if no port is specified manually, use the protocol default
-           opts.port = this.secure ? '443' : '80';
-         }
-
-         this.agent = opts.agent || false;
-         this.hostname = opts.hostname ||
-           (typeof location !== 'undefined' ? location.hostname : 'localhost');
-         this.port = opts.port || (typeof location !== 'undefined' && location.port
-             ? location.port
-             : (this.secure ? 443 : 80));
-         this.query = opts.query || {};
-         if ('string' === typeof this.query) this.query = parseqs.decode(this.query);
-         this.upgrade = false !== opts.upgrade;
-         this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
-         this.forceJSONP = !!opts.forceJSONP;
-         this.jsonp = false !== opts.jsonp;
-         this.forceBase64 = !!opts.forceBase64;
-         this.enablesXDR = !!opts.enablesXDR;
-         this.withCredentials = false !== opts.withCredentials;
-         this.timestampParam = opts.timestampParam || 't';
-         this.timestampRequests = opts.timestampRequests;
-         this.transports = opts.transports || ['polling', 'websocket'];
-         this.transportOptions = opts.transportOptions || {};
-         this.readyState = '';
-         this.writeBuffer = [];
-         this.prevBufferLen = 0;
-         this.policyPort = opts.policyPort || 843;
-         this.rememberUpgrade = opts.rememberUpgrade || false;
-         this.binaryType = null;
-         this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
-         this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;
-
-         if (true === this.perMessageDeflate) this.perMessageDeflate = {};
-         if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {
-           this.perMessageDeflate.threshold = 1024;
-         }
-
-         // SSL options for Node.js client
-         this.pfx = opts.pfx || null;
-         this.key = opts.key || null;
-         this.passphrase = opts.passphrase || null;
-         this.cert = opts.cert || null;
-         this.ca = opts.ca || null;
-         this.ciphers = opts.ciphers || null;
-         this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;
-         this.forceNode = !!opts.forceNode;
-
-         // detect ReactNative environment
-         this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');
-
-         // other options for Node.js or ReactNative client
-         if (typeof self === 'undefined' || this.isReactNative) {
-           if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {
-             this.extraHeaders = opts.extraHeaders;
-           }
-
-           if (opts.localAddress) {
-             this.localAddress = opts.localAddress;
-           }
-         }
-
-         // set on handshake
-         this.id = null;
-         this.upgrades = null;
-         this.pingInterval = null;
-         this.pingTimeout = null;
-
-         // set on heartbeat
-         this.pingIntervalTimer = null;
-         this.pingTimeoutTimer = null;
-
-         this.open();
-       }
-
-       Socket.priorWebsocketSuccess = false;
-
-       /**
-        * Mix in `Emitter`.
-        */
-
-       Emitter(Socket.prototype);
-
-       /**
-        * Protocol version.
-        *
-        * @api public
-        */
-
-       Socket.protocol = parser.protocol; // this is an int
-
-       /**
-        * Expose deps for legacy compatibility
-        * and standalone browser access.
-        */
-
-       Socket.Socket = Socket;
-       Socket.Transport = __webpack_require__(8);
-       Socket.transports = __webpack_require__(2);
-       Socket.parser = __webpack_require__(9);
-
-       /**
-        * Creates transport of the given type.
-        *
-        * @param {String} transport name
-        * @return {Transport}
-        * @api private
-        */
-
-       Socket.prototype.createTransport = function (name) {
-         debug('creating transport "%s"', name);
-         var query = clone(this.query);
-
-         // append engine.io protocol identifier
-         query.EIO = parser.protocol;
-
-         // transport name
-         query.transport = name;
-
-         // per-transport options
-         var options = this.transportOptions[name] || {};
-
-         // session id if we already have one
-         if (this.id) query.sid = this.id;
-
-         var transport = new transports[name]({
-           query: query,
-           socket: this,
-           agent: options.agent || this.agent,
-           hostname: options.hostname || this.hostname,
-           port: options.port || this.port,
-           secure: options.secure || this.secure,
-           path: options.path || this.path,
-           forceJSONP: options.forceJSONP || this.forceJSONP,
-           jsonp: options.jsonp || this.jsonp,
-           forceBase64: options.forceBase64 || this.forceBase64,
-           enablesXDR: options.enablesXDR || this.enablesXDR,
-           withCredentials: options.withCredentials || this.withCredentials,
-           timestampRequests: options.timestampRequests || this.timestampRequests,
-           timestampParam: options.timestampParam || this.timestampParam,
-           policyPort: options.policyPort || this.policyPort,
-           pfx: options.pfx || this.pfx,
-           key: options.key || this.key,
-           passphrase: options.passphrase || this.passphrase,
-           cert: options.cert || this.cert,
-           ca: options.ca || this.ca,
-           ciphers: options.ciphers || this.ciphers,
-           rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,
-           perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,
-           extraHeaders: options.extraHeaders || this.extraHeaders,
-           forceNode: options.forceNode || this.forceNode,
-           localAddress: options.localAddress || this.localAddress,
-           requestTimeout: options.requestTimeout || this.requestTimeout,
-           protocols: options.protocols || void (0),
-           isReactNative: this.isReactNative
-         });
-
-         return transport;
-       };
-
-       function clone (obj) {
-         var o = {};
-         for (var i in obj) {
-           if (obj.hasOwnProperty(i)) {
-             o[i] = obj[i];
-           }
-         }
-         return o;
-       }
-
-       /**
-        * Initializes transport to use and starts probe.
-        *
-        * @api private
-        */
-       Socket.prototype.open = function () {
-         var transport;
-         if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {
-           transport = 'websocket';
-         } else if (0 === this.transports.length) {
-           // Emit error on next tick so it can be listened to
-           var self = this;
-           setTimeout(function () {
-             self.emit('error', 'No transports available');
-           }, 0);
-           return;
-         } else {
-           transport = this.transports[0];
-         }
-         this.readyState = 'opening';
-
-         // Retry with the next transport if the transport is disabled (jsonp: false)
-         try {
-           transport = this.createTransport(transport);
-         } catch (e) {
-           this.transports.shift();
-           this.open();
-           return;
-         }
-
-         transport.open();
-         this.setTransport(transport);
-       };
-
-       /**
-        * Sets the current transport. Disables the existing one (if any).
-        *
-        * @api private
-        */
-
-       Socket.prototype.setTransport = function (transport) {
-         debug('setting transport %s', transport.name);
-         var self = this;
-
-         if (this.transport) {
-           debug('clearing existing transport %s', this.transport.name);
-           this.transport.removeAllListeners();
-         }
-
-         // set up transport
-         this.transport = transport;
-
-         // set up transport listeners
-         transport
-         .on('drain', function () {
-           self.onDrain();
-         })
-         .on('packet', function (packet) {
-           self.onPacket(packet);
-         })
-         .on('error', function (e) {
-           self.onError(e);
-         })
-         .on('close', function () {
-           self.onClose('transport close');
-         });
-       };
-
-       /**
-        * Probes a transport.
-        *
-        * @param {String} transport name
-        * @api private
-        */
-
-       Socket.prototype.probe = function (name) {
-         debug('probing transport "%s"', name);
-         var transport = this.createTransport(name, { probe: 1 });
-         var failed = false;
-         var self = this;
-
-         Socket.priorWebsocketSuccess = false;
-
-         function onTransportOpen () {
-           if (self.onlyBinaryUpgrades) {
-             var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
-             failed = failed || upgradeLosesBinary;
-           }
-           if (failed) return;
-
-           debug('probe transport "%s" opened', name);
-           transport.send([{ type: 'ping', data: 'probe' }]);
-           transport.once('packet', function (msg) {
-             if (failed) return;
-             if ('pong' === msg.type && 'probe' === msg.data) {
-               debug('probe transport "%s" pong', name);
-               self.upgrading = true;
-               self.emit('upgrading', transport);
-               if (!transport) return;
-               Socket.priorWebsocketSuccess = 'websocket' === transport.name;
-
-               debug('pausing current transport "%s"', self.transport.name);
-               self.transport.pause(function () {
-                 if (failed) return;
-                 if ('closed' === self.readyState) return;
-                 debug('changing transport and sending upgrade packet');
-
-                 cleanup();
-
-                 self.setTransport(transport);
-                 transport.send([{ type: 'upgrade' }]);
-                 self.emit('upgrade', transport);
-                 transport = null;
-                 self.upgrading = false;
-                 self.flush();
-               });
-             } else {
-               debug('probe transport "%s" failed', name);
-               var err = new Error('probe error');
-               err.transport = transport.name;
-               self.emit('upgradeError', err);
-             }
-           });
-         }
-
-         function freezeTransport () {
-           if (failed) return;
-
-           // Any callback called by transport should be ignored since now
-           failed = true;
-
-           cleanup();
-
-           transport.close();
-           transport = null;
-         }
-
-         // Handle any error that happens while probing
-         function onerror (err) {
-           var error = new Error('probe error: ' + err);
-           error.transport = transport.name;
-
-           freezeTransport();
-
-           debug('probe transport "%s" failed because of error: %s', name, err);
-
-           self.emit('upgradeError', error);
-         }
-
-         function onTransportClose () {
-           onerror('transport closed');
-         }
-
-         // When the socket is closed while we're probing
-         function onclose () {
-           onerror('socket closed');
-         }
-
-         // When the socket is upgraded while we're probing
-         function onupgrade (to) {
-           if (transport && to.name !== transport.name) {
-             debug('"%s" works - aborting "%s"', to.name, transport.name);
-             freezeTransport();
-           }
-         }
-
-         // Remove all listeners on the transport and on self
-         function cleanup () {
-           transport.removeListener('open', onTransportOpen);
-           transport.removeListener('error', onerror);
-           transport.removeListener('close', onTransportClose);
-           self.removeListener('close', onclose);
-           self.removeListener('upgrading', onupgrade);
-         }
-
-         transport.once('open', onTransportOpen);
-         transport.once('error', onerror);
-         transport.once('close', onTransportClose);
-
-         this.once('close', onclose);
-         this.once('upgrading', onupgrade);
-
-         transport.open();
-       };
-
-       /**
-        * Called when connection is deemed open.
-        *
-        * @api public
-        */
-
-       Socket.prototype.onOpen = function () {
-         debug('socket open');
-         this.readyState = 'open';
-         Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;
-         this.emit('open');
-         this.flush();
-
-         // we check for `readyState` in case an `open`
-         // listener already closed the socket
-         if ('open' === this.readyState && this.upgrade && this.transport.pause) {
-           debug('starting upgrade probes');
-           for (var i = 0, l = this.upgrades.length; i < l; i++) {
-             this.probe(this.upgrades[i]);
-           }
-         }
-       };
-
-       /**
-        * Handles a packet.
-        *
-        * @api private
-        */
-
-       Socket.prototype.onPacket = function (packet) {
-         if ('opening' === this.readyState || 'open' === this.readyState ||
-             'closing' === this.readyState) {
-           debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
-
-           this.emit('packet', packet);
-
-           // Socket is live - any packet counts
-           this.emit('heartbeat');
-
-           switch (packet.type) {
-             case 'open':
-               this.onHandshake(JSON.parse(packet.data));
-               break;
-
-             case 'pong':
-               this.setPing();
-               this.emit('pong');
-               break;
-
-             case 'error':
-               var err = new Error('server error');
-               err.code = packet.data;
-               this.onError(err);
-               break;
-
-             case 'message':
-               this.emit('data', packet.data);
-               this.emit('message', packet.data);
-               break;
-           }
-         } else {
-           debug('packet received with socket readyState "%s"', this.readyState);
-         }
-       };
-
-       /**
-        * Called upon handshake completion.
-        *
-        * @param {Object} handshake obj
-        * @api private
-        */
-
-       Socket.prototype.onHandshake = function (data) {
-         this.emit('handshake', data);
-         this.id = data.sid;
-         this.transport.query.sid = data.sid;
-         this.upgrades = this.filterUpgrades(data.upgrades);
-         this.pingInterval = data.pingInterval;
-         this.pingTimeout = data.pingTimeout;
-         this.onOpen();
-         // In case open handler closes socket
-         if ('closed' === this.readyState) return;
-         this.setPing();
-
-         // Prolong liveness of socket on heartbeat
-         this.removeListener('heartbeat', this.onHeartbeat);
-         this.on('heartbeat', this.onHeartbeat);
-       };
-
-       /**
-        * Resets ping timeout.
-        *
-        * @api private
-        */
-
-       Socket.prototype.onHeartbeat = function (timeout) {
-         clearTimeout(this.pingTimeoutTimer);
-         var self = this;
-         self.pingTimeoutTimer = setTimeout(function () {
-           if ('closed' === self.readyState) return;
-           self.onClose('ping timeout');
-         }, timeout || (self.pingInterval + self.pingTimeout));
-       };
-
-       /**
-        * Pings server every `this.pingInterval` and expects response
-        * within `this.pingTimeout` or closes connection.
-        *
-        * @api private
-        */
-
-       Socket.prototype.setPing = function () {
-         var self = this;
-         clearTimeout(self.pingIntervalTimer);
-         self.pingIntervalTimer = setTimeout(function () {
-           debug('writing ping packet - expecting pong within %sms', self.pingTimeout);
-           self.ping();
-           self.onHeartbeat(self.pingTimeout);
-         }, self.pingInterval);
-       };
-
-       /**
-       * Sends a ping packet.
-       *
-       * @api private
-       */
-
-       Socket.prototype.ping = function () {
-         var self = this;
-         this.sendPacket('ping', function () {
-           self.emit('ping');
-         });
-       };
-
-       /**
-        * Called on `drain` event
-        *
-        * @api private
-        */
-
-       Socket.prototype.onDrain = function () {
-         this.writeBuffer.splice(0, this.prevBufferLen);
-
-         // setting prevBufferLen = 0 is very important
-         // for example, when upgrading, upgrade packet is sent over,
-         // and a nonzero prevBufferLen could cause problems on `drain`
-         this.prevBufferLen = 0;
-
-         if (0 === this.writeBuffer.length) {
-           this.emit('drain');
-         } else {
-           this.flush();
-         }
-       };
-
-       /**
-        * Flush write buffers.
-        *
-        * @api private
-        */
-
-       Socket.prototype.flush = function () {
-         if ('closed' !== this.readyState && this.transport.writable &&
-           !this.upgrading && this.writeBuffer.length) {
-           debug('flushing %d packets in socket', this.writeBuffer.length);
-           this.transport.send(this.writeBuffer);
-           // keep track of current length of writeBuffer
-           // splice writeBuffer and callbackBuffer on `drain`
-           this.prevBufferLen = this.writeBuffer.length;
-           this.emit('flush');
-         }
-       };
-
-       /**
-        * Sends a message.
-        *
-        * @param {String} message.
-        * @param {Function} callback function.
-        * @param {Object} options.
-        * @return {Socket} for chaining.
-        * @api public
-        */
-
-       Socket.prototype.write =
-       Socket.prototype.send = function (msg, options, fn) {
-         this.sendPacket('message', msg, options, fn);
-         return this;
-       };
-
-       /**
-        * Sends a packet.
-        *
-        * @param {String} packet type.
-        * @param {String} data.
-        * @param {Object} options.
-        * @param {Function} callback function.
-        * @api private
-        */
-
-       Socket.prototype.sendPacket = function (type, data, options, fn) {
-         if ('function' === typeof data) {
-           fn = data;
-           data = undefined;
-         }
-
-         if ('function' === typeof options) {
-           fn = options;
-           options = null;
-         }
-
-         if ('closing' === this.readyState || 'closed' === this.readyState) {
-           return;
-         }
-
-         options = options || {};
-         options.compress = false !== options.compress;
-
-         var packet = {
-           type: type,
-           data: data,
-           options: options
-         };
-         this.emit('packetCreate', packet);
-         this.writeBuffer.push(packet);
-         if (fn) this.once('flush', fn);
-         this.flush();
-       };
-
-       /**
-        * Closes the connection.
-        *
-        * @api private
-        */
-
-       Socket.prototype.close = function () {
-         if ('opening' === this.readyState || 'open' === this.readyState) {
-           this.readyState = 'closing';
-
-           var self = this;
-
-           if (this.writeBuffer.length) {
-             this.once('drain', function () {
-               if (this.upgrading) {
-                 waitForUpgrade();
-               } else {
-                 close();
-               }
-             });
-           } else if (this.upgrading) {
-             waitForUpgrade();
-           } else {
-             close();
-           }
-         }
-
-         function close () {
-           self.onClose('forced close');
-           debug('socket closing - telling transport to close');
-           self.transport.close();
-         }
-
-         function cleanupAndClose () {
-           self.removeListener('upgrade', cleanupAndClose);
-           self.removeListener('upgradeError', cleanupAndClose);
-           close();
-         }
-
-         function waitForUpgrade () {
-           // wait for upgrade to finish since we can't send packets while pausing a transport
-           self.once('upgrade', cleanupAndClose);
-           self.once('upgradeError', cleanupAndClose);
-         }
-
-         return this;
-       };
-
-       /**
-        * Called upon transport error
-        *
-        * @api private
-        */
-
-       Socket.prototype.onError = function (err) {
-         debug('socket error %j', err);
-         Socket.priorWebsocketSuccess = false;
-         this.emit('error', err);
-         this.onClose('transport error', err);
-       };
-
-       /**
-        * Called upon transport close.
-        *
-        * @api private
-        */
-
-       Socket.prototype.onClose = function (reason, desc) {
-         if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {
-           debug('socket close with reason: "%s"', reason);
-           var self = this;
-
-           // clear timers
-           clearTimeout(this.pingIntervalTimer);
-           clearTimeout(this.pingTimeoutTimer);
-
-           // stop event from firing again for transport
-           this.transport.removeAllListeners('close');
-
-           // ensure transport won't stay open
-           this.transport.close();
-
-           // ignore further transport communication
-           this.transport.removeAllListeners();
-
-           // set ready state
-           this.readyState = 'closed';
-
-           // clear session id
-           this.id = null;
-
-           // emit close event
-           this.emit('close', reason, desc);
-
-           // clean buffers after, so users can still
-           // grab the buffers on `close` event
-           self.writeBuffer = [];
-           self.prevBufferLen = 0;
-         }
-       };
-
-       /**
-        * Filters upgrades, returning only those matching client transports.
-        *
-        * @param {Array} server upgrades
-        * @api private
-        *
-        */
-
-       Socket.prototype.filterUpgrades = function (upgrades) {
-         var filteredUpgrades = [];
-         for (var i = 0, j = upgrades.length; i < j; i++) {
-           if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
-         }
-         return filteredUpgrades;
-       };
-
-
-/***/ },
-/* 2 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies
-        */
-
-       var XMLHttpRequest = __webpack_require__(3);
-       var XHR = __webpack_require__(6);
-       var JSONP = __webpack_require__(26);
-       var websocket = __webpack_require__(27);
-
-       /**
-        * Export transports.
-        */
-
-       exports.polling = polling;
-       exports.websocket = websocket;
-
-       /**
-        * Polling transport polymorphic constructor.
-        * Decides on xhr vs jsonp based on feature detection.
-        *
-        * @api private
-        */
-
-       function polling (opts) {
-         var xhr;
-         var xd = false;
-         var xs = false;
-         var jsonp = false !== opts.jsonp;
-
-         if (typeof location !== 'undefined') {
-           var isSSL = 'https:' === location.protocol;
-           var port = location.port;
-
-           // some user agents have empty `location.port`
-           if (!port) {
-             port = isSSL ? 443 : 80;
-           }
-
-           xd = opts.hostname !== location.hostname || port !== opts.port;
-           xs = opts.secure !== isSSL;
-         }
-
-         opts.xdomain = xd;
-         opts.xscheme = xs;
-         xhr = new XMLHttpRequest(opts);
-
-         if ('open' in xhr && !opts.forceJSONP) {
-           return new XHR(opts);
-         } else {
-           if (!jsonp) throw new Error('JSONP disabled');
-           return new JSONP(opts);
-         }
-       }
-
-
-/***/ },
-/* 3 */
-/***/ function(module, exports, __webpack_require__) {
-
-       // browser shim for xmlhttprequest module
-
-       var hasCORS = __webpack_require__(4);
-       var globalThis = __webpack_require__(5);
-
-       module.exports = function (opts) {
-         var xdomain = opts.xdomain;
-
-         // scheme must be same when usign XDomainRequest
-         // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
-         var xscheme = opts.xscheme;
-
-         // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.
-         // https://github.com/Automattic/engine.io-client/pull/217
-         var enablesXDR = opts.enablesXDR;
-
-         // XMLHttpRequest can be disabled on IE
-         try {
-           if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {
-             return new XMLHttpRequest();
-           }
-         } catch (e) { }
-
-         // Use XDomainRequest for IE8 if enablesXDR is true
-         // because loading bar keeps flashing when using jsonp-polling
-         // https://github.com/yujiosaka/socke.io-ie8-loading-example
-         try {
-           if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {
-             return new XDomainRequest();
-           }
-         } catch (e) { }
-
-         if (!xdomain) {
-           try {
-             return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
-           } catch (e) { }
-         }
-       };
-
-
-/***/ },
-/* 4 */
-/***/ function(module, exports) {
-
-       
-       /**
-        * Module exports.
-        *
-        * Logic borrowed from Modernizr:
-        *
-        *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js
-        */
-
-       try {
-         module.exports = typeof XMLHttpRequest !== 'undefined' &&
-           'withCredentials' in new XMLHttpRequest();
-       } catch (err) {
-         // if XMLHttp support is disabled in IE then it will throw
-         // when trying to create
-         module.exports = false;
-       }
-
-
-/***/ },
-/* 5 */
-/***/ function(module, exports) {
-
-       module.exports = (function () {
-         if (typeof self !== 'undefined') {
-           return self;
-         } else if (typeof window !== 'undefined') {
-           return window;
-         } else {
-           return Function('return this')(); // eslint-disable-line no-new-func
-         }
-       })();
-
-
-/***/ },
-/* 6 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* global attachEvent */
-
-       /**
-        * Module requirements.
-        */
-
-       var XMLHttpRequest = __webpack_require__(3);
-       var Polling = __webpack_require__(7);
-       var Emitter = __webpack_require__(18);
-       var inherit = __webpack_require__(20);
-       var debug = __webpack_require__(22)('engine.io-client:polling-xhr');
-       var globalThis = __webpack_require__(5);
-
-       /**
-        * Module exports.
-        */
-
-       module.exports = XHR;
-       module.exports.Request = Request;
-
-       /**
-        * Empty function
-        */
-
-       function empty () {}
-
-       /**
-        * XHR Polling constructor.
-        *
-        * @param {Object} opts
-        * @api public
-        */
-
-       function XHR (opts) {
-         Polling.call(this, opts);
-         this.requestTimeout = opts.requestTimeout;
-         this.extraHeaders = opts.extraHeaders;
-
-         if (typeof location !== 'undefined') {
-           var isSSL = 'https:' === location.protocol;
-           var port = location.port;
-
-           // some user agents have empty `location.port`
-           if (!port) {
-             port = isSSL ? 443 : 80;
-           }
-
-           this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||
-             port !== opts.port;
-           this.xs = opts.secure !== isSSL;
-         }
-       }
-
-       /**
-        * Inherits from Polling.
-        */
-
-       inherit(XHR, Polling);
-
-       /**
-        * XHR supports binary
-        */
-
-       XHR.prototype.supportsBinary = true;
-
-       /**
-        * Creates a request.
-        *
-        * @param {String} method
-        * @api private
-        */
-
-       XHR.prototype.request = function (opts) {
-         opts = opts || {};
-         opts.uri = this.uri();
-         opts.xd = this.xd;
-         opts.xs = this.xs;
-         opts.agent = this.agent || false;
-         opts.supportsBinary = this.supportsBinary;
-         opts.enablesXDR = this.enablesXDR;
-         opts.withCredentials = this.withCredentials;
-
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
-         opts.requestTimeout = this.requestTimeout;
-
-         // other options for Node.js client
-         opts.extraHeaders = this.extraHeaders;
-
-         return new Request(opts);
-       };
-
-       /**
-        * Sends data.
-        *
-        * @param {String} data to send.
-        * @param {Function} called upon flush.
-        * @api private
-        */
-
-       XHR.prototype.doWrite = function (data, fn) {
-         var isBinary = typeof data !== 'string' && data !== undefined;
-         var req = this.request({ method: 'POST', data: data, isBinary: isBinary });
-         var self = this;
-         req.on('success', fn);
-         req.on('error', function (err) {
-           self.onError('xhr post error', err);
-         });
-         this.sendXhr = req;
-       };
-
-       /**
-        * Starts a poll cycle.
-        *
-        * @api private
-        */
-
-       XHR.prototype.doPoll = function () {
-         debug('xhr poll');
-         var req = this.request();
-         var self = this;
-         req.on('data', function (data) {
-           self.onData(data);
-         });
-         req.on('error', function (err) {
-           self.onError('xhr poll error', err);
-         });
-         this.pollXhr = req;
-       };
-
-       /**
-        * Request constructor
-        *
-        * @param {Object} options
-        * @api public
-        */
-
-       function Request (opts) {
-         this.method = opts.method || 'GET';
-         this.uri = opts.uri;
-         this.xd = !!opts.xd;
-         this.xs = !!opts.xs;
-         this.async = false !== opts.async;
-         this.data = undefined !== opts.data ? opts.data : null;
-         this.agent = opts.agent;
-         this.isBinary = opts.isBinary;
-         this.supportsBinary = opts.supportsBinary;
-         this.enablesXDR = opts.enablesXDR;
-         this.withCredentials = opts.withCredentials;
-         this.requestTimeout = opts.requestTimeout;
-
-         // SSL options for Node.js client
-         this.pfx = opts.pfx;
-         this.key = opts.key;
-         this.passphrase = opts.passphrase;
-         this.cert = opts.cert;
-         this.ca = opts.ca;
-         this.ciphers = opts.ciphers;
-         this.rejectUnauthorized = opts.rejectUnauthorized;
-
-         // other options for Node.js client
-         this.extraHeaders = opts.extraHeaders;
-
-         this.create();
-       }
-
-       /**
-        * Mix in `Emitter`.
-        */
-
-       Emitter(Request.prototype);
-
-       /**
-        * Creates the XHR object and sends the request.
-        *
-        * @api private
-        */
-
-       Request.prototype.create = function () {
-         var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };
-
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
-
-         var xhr = this.xhr = new XMLHttpRequest(opts);
-         var self = this;
-
-         try {
-           debug('xhr open %s: %s', this.method, this.uri);
-           xhr.open(this.method, this.uri, this.async);
-           try {
-             if (this.extraHeaders) {
-               xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);
-               for (var i in this.extraHeaders) {
-                 if (this.extraHeaders.hasOwnProperty(i)) {
-                   xhr.setRequestHeader(i, this.extraHeaders[i]);
-                 }
-               }
-             }
-           } catch (e) {}
-
-           if ('POST' === this.method) {
-             try {
-               if (this.isBinary) {
-                 xhr.setRequestHeader('Content-type', 'application/octet-stream');
-               } else {
-                 xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
-               }
-             } catch (e) {}
-           }
-
-           try {
-             xhr.setRequestHeader('Accept', '*/*');
-           } catch (e) {}
-
-           // ie6 check
-           if ('withCredentials' in xhr) {
-             xhr.withCredentials = this.withCredentials;
-           }
-
-           if (this.requestTimeout) {
-             xhr.timeout = this.requestTimeout;
-           }
-
-           if (this.hasXDR()) {
-             xhr.onload = function () {
-               self.onLoad();
-             };
-             xhr.onerror = function () {
-               self.onError(xhr.responseText);
-             };
-           } else {
-             xhr.onreadystatechange = function () {
-               if (xhr.readyState === 2) {
-                 try {
-                   var contentType = xhr.getResponseHeader('Content-Type');
-                   if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {
-                     xhr.responseType = 'arraybuffer';
-                   }
-                 } catch (e) {}
-               }
-               if (4 !== xhr.readyState) return;
-               if (200 === xhr.status || 1223 === xhr.status) {
-                 self.onLoad();
-               } else {
-                 // make sure the `error` event handler that's user-set
-                 // does not throw in the same tick and gets caught here
-                 setTimeout(function () {
-                   self.onError(typeof xhr.status === 'number' ? xhr.status : 0);
-                 }, 0);
-               }
-             };
-           }
-
-           debug('xhr data %s', this.data);
-           xhr.send(this.data);
-         } catch (e) {
-           // Need to defer since .create() is called directly fhrom the constructor
-           // and thus the 'error' event can only be only bound *after* this exception
-           // occurs.  Therefore, also, we cannot throw here at all.
-           setTimeout(function () {
-             self.onError(e);
-           }, 0);
-           return;
-         }
-
-         if (typeof document !== 'undefined') {
-           this.index = Request.requestsCount++;
-           Request.requests[this.index] = this;
-         }
-       };
-
-       /**
-        * Called upon successful response.
-        *
-        * @api private
-        */
-
-       Request.prototype.onSuccess = function () {
-         this.emit('success');
-         this.cleanup();
-       };
-
-       /**
-        * Called if we have data.
-        *
-        * @api private
-        */
-
-       Request.prototype.onData = function (data) {
-         this.emit('data', data);
-         this.onSuccess();
-       };
-
-       /**
-        * Called upon error.
-        *
-        * @api private
-        */
-
-       Request.prototype.onError = function (err) {
-         this.emit('error', err);
-         this.cleanup(true);
-       };
-
-       /**
-        * Cleans up house.
-        *
-        * @api private
-        */
-
-       Request.prototype.cleanup = function (fromError) {
-         if ('undefined' === typeof this.xhr || null === this.xhr) {
-           return;
-         }
-         // xmlhttprequest
-         if (this.hasXDR()) {
-           this.xhr.onload = this.xhr.onerror = empty;
-         } else {
-           this.xhr.onreadystatechange = empty;
-         }
-
-         if (fromError) {
-           try {
-             this.xhr.abort();
-           } catch (e) {}
-         }
-
-         if (typeof document !== 'undefined') {
-           delete Request.requests[this.index];
-         }
-
-         this.xhr = null;
-       };
-
-       /**
-        * Called upon load.
-        *
-        * @api private
-        */
-
-       Request.prototype.onLoad = function () {
-         var data;
-         try {
-           var contentType;
-           try {
-             contentType = this.xhr.getResponseHeader('Content-Type');
-           } catch (e) {}
-           if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {
-             data = this.xhr.response || this.xhr.responseText;
-           } else {
-             data = this.xhr.responseText;
-           }
-         } catch (e) {
-           this.onError(e);
-         }
-         if (null != data) {
-           this.onData(data);
-         }
-       };
-
-       /**
-        * Check if it has XDomainRequest.
-        *
-        * @api private
-        */
-
-       Request.prototype.hasXDR = function () {
-         return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;
-       };
-
-       /**
-        * Aborts the request.
-        *
-        * @api public
-        */
-
-       Request.prototype.abort = function () {
-         this.cleanup();
-       };
-
-       /**
-        * Aborts pending requests when unloading the window. This is needed to prevent
-        * memory leaks (e.g. when using IE) and to ensure that no spurious error is
-        * emitted.
-        */
-
-       Request.requestsCount = 0;
-       Request.requests = {};
-
-       if (typeof document !== 'undefined') {
-         if (typeof attachEvent === 'function') {
-           attachEvent('onunload', unloadHandler);
-         } else if (typeof addEventListener === 'function') {
-           var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';
-           addEventListener(terminationEvent, unloadHandler, false);
-         }
-       }
-
-       function unloadHandler () {
-         for (var i in Request.requests) {
-           if (Request.requests.hasOwnProperty(i)) {
-             Request.requests[i].abort();
-           }
-         }
-       }
-
-
-/***/ },
-/* 7 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-
-       var Transport = __webpack_require__(8);
-       var parseqs = __webpack_require__(19);
-       var parser = __webpack_require__(9);
-       var inherit = __webpack_require__(20);
-       var yeast = __webpack_require__(21);
-       var debug = __webpack_require__(22)('engine.io-client:polling');
-
-       /**
-        * Module exports.
-        */
-
-       module.exports = Polling;
-
-       /**
-        * Is XHR2 supported?
-        */
-
-       var hasXHR2 = (function () {
-         var XMLHttpRequest = __webpack_require__(3);
-         var xhr = new XMLHttpRequest({ xdomain: false });
-         return null != xhr.responseType;
-       })();
-
-       /**
-        * Polling interface.
-        *
-        * @param {Object} opts
-        * @api private
-        */
-
-       function Polling (opts) {
-         var forceBase64 = (opts && opts.forceBase64);
-         if (!hasXHR2 || forceBase64) {
-           this.supportsBinary = false;
-         }
-         Transport.call(this, opts);
-       }
-
-       /**
-        * Inherits from Transport.
-        */
-
-       inherit(Polling, Transport);
-
-       /**
-        * Transport name.
-        */
-
-       Polling.prototype.name = 'polling';
-
-       /**
-        * Opens the socket (triggers polling). We write a PING message to determine
-        * when the transport is open.
-        *
-        * @api private
-        */
-
-       Polling.prototype.doOpen = function () {
-         this.poll();
-       };
-
-       /**
-        * Pauses polling.
-        *
-        * @param {Function} callback upon buffers are flushed and transport is paused
-        * @api private
-        */
-
-       Polling.prototype.pause = function (onPause) {
-         var self = this;
-
-         this.readyState = 'pausing';
-
-         function pause () {
-           debug('paused');
-           self.readyState = 'paused';
-           onPause();
-         }
-
-         if (this.polling || !this.writable) {
-           var total = 0;
-
-           if (this.polling) {
-             debug('we are currently polling - waiting to pause');
-             total++;
-             this.once('pollComplete', function () {
-               debug('pre-pause polling complete');
-               --total || pause();
-             });
-           }
-
-           if (!this.writable) {
-             debug('we are currently writing - waiting to pause');
-             total++;
-             this.once('drain', function () {
-               debug('pre-pause writing complete');
-               --total || pause();
-             });
-           }
-         } else {
-           pause();
-         }
-       };
-
-       /**
-        * Starts polling cycle.
-        *
-        * @api public
-        */
-
-       Polling.prototype.poll = function () {
-         debug('polling');
-         this.polling = true;
-         this.doPoll();
-         this.emit('poll');
-       };
-
-       /**
-        * Overloads onData to detect payloads.
-        *
-        * @api private
-        */
-
-       Polling.prototype.onData = function (data) {
-         var self = this;
-         debug('polling got data %s', data);
-         var callback = function (packet, index, total) {
-           // if its the first message we consider the transport open
-           if ('opening' === self.readyState) {
-             self.onOpen();
-           }
-
-           // if its a close packet, we close the ongoing requests
-           if ('close' === packet.type) {
-             self.onClose();
-             return false;
-           }
-
-           // otherwise bypass onData and handle the message
-           self.onPacket(packet);
-         };
-
-         // decode payload
-         parser.decodePayload(data, this.socket.binaryType, callback);
-
-         // if an event did not trigger closing
-         if ('closed' !== this.readyState) {
-           // if we got data we're not polling
-           this.polling = false;
-           this.emit('pollComplete');
-
-           if ('open' === this.readyState) {
-             this.poll();
-           } else {
-             debug('ignoring poll - transport state "%s"', this.readyState);
-           }
-         }
-       };
-
-       /**
-        * For polling, send a close packet.
-        *
-        * @api private
-        */
-
-       Polling.prototype.doClose = function () {
-         var self = this;
-
-         function close () {
-           debug('writing close packet');
-           self.write([{ type: 'close' }]);
-         }
-
-         if ('open' === this.readyState) {
-           debug('transport open - closing');
-           close();
-         } else {
-           // in case we're trying to close while
-           // handshaking is in progress (GH-164)
-           debug('transport not open - deferring close');
-           this.once('open', close);
-         }
-       };
-
-       /**
-        * Writes a packets payload.
-        *
-        * @param {Array} data packets
-        * @param {Function} drain callback
-        * @api private
-        */
-
-       Polling.prototype.write = function (packets) {
-         var self = this;
-         this.writable = false;
-         var callbackfn = function () {
-           self.writable = true;
-           self.emit('drain');
-         };
-
-         parser.encodePayload(packets, this.supportsBinary, function (data) {
-           self.doWrite(data, callbackfn);
-         });
-       };
-
-       /**
-        * Generates uri for connection.
-        *
-        * @api private
-        */
-
-       Polling.prototype.uri = function () {
-         var query = this.query || {};
-         var schema = this.secure ? 'https' : 'http';
-         var port = '';
-
-         // cache busting is forced
-         if (false !== this.timestampRequests) {
-           query[this.timestampParam] = yeast();
-         }
-
-         if (!this.supportsBinary && !query.sid) {
-           query.b64 = 1;
-         }
-
-         query = parseqs.encode(query);
-
-         // avoid port if default for schema
-         if (this.port && (('https' === schema && Number(this.port) !== 443) ||
-            ('http' === schema && Number(this.port) !== 80))) {
-           port = ':' + this.port;
-         }
-
-         // prepend ? to query
-         if (query.length) {
-           query = '?' + query;
-         }
-
-         var ipv6 = this.hostname.indexOf(':') !== -1;
-         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
-       };
-
-
-/***/ },
-/* 8 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-
-       var parser = __webpack_require__(9);
-       var Emitter = __webpack_require__(18);
-
-       /**
-        * Module exports.
-        */
-
-       module.exports = Transport;
-
-       /**
-        * Transport abstract constructor.
-        *
-        * @param {Object} options.
-        * @api private
-        */
-
-       function Transport (opts) {
-         this.path = opts.path;
-         this.hostname = opts.hostname;
-         this.port = opts.port;
-         this.secure = opts.secure;
-         this.query = opts.query;
-         this.timestampParam = opts.timestampParam;
-         this.timestampRequests = opts.timestampRequests;
-         this.readyState = '';
-         this.agent = opts.agent || false;
-         this.socket = opts.socket;
-         this.enablesXDR = opts.enablesXDR;
-         this.withCredentials = opts.withCredentials;
-
-         // SSL options for Node.js client
-         this.pfx = opts.pfx;
-         this.key = opts.key;
-         this.passphrase = opts.passphrase;
-         this.cert = opts.cert;
-         this.ca = opts.ca;
-         this.ciphers = opts.ciphers;
-         this.rejectUnauthorized = opts.rejectUnauthorized;
-         this.forceNode = opts.forceNode;
-
-         // results of ReactNative environment detection
-         this.isReactNative = opts.isReactNative;
-
-         // other options for Node.js client
-         this.extraHeaders = opts.extraHeaders;
-         this.localAddress = opts.localAddress;
-       }
-
-       /**
-        * Mix in `Emitter`.
-        */
-
-       Emitter(Transport.prototype);
-
-       /**
-        * Emits an error.
-        *
-        * @param {String} str
-        * @return {Transport} for chaining
-        * @api public
-        */
-
-       Transport.prototype.onError = function (msg, desc) {
-         var err = new Error(msg);
-         err.type = 'TransportError';
-         err.description = desc;
-         this.emit('error', err);
-         return this;
-       };
-
-       /**
-        * Opens the transport.
-        *
-        * @api public
-        */
-
-       Transport.prototype.open = function () {
-         if ('closed' === this.readyState || '' === this.readyState) {
-           this.readyState = 'opening';
-           this.doOpen();
-         }
-
-         return this;
-       };
-
-       /**
-        * Closes the transport.
-        *
-        * @api private
-        */
-
-       Transport.prototype.close = function () {
-         if ('opening' === this.readyState || 'open' === this.readyState) {
-           this.doClose();
-           this.onClose();
-         }
-
-         return this;
-       };
-
-       /**
-        * Sends multiple packets.
-        *
-        * @param {Array} packets
-        * @api private
-        */
-
-       Transport.prototype.send = function (packets) {
-         if ('open' === this.readyState) {
-           this.write(packets);
-         } else {
-           throw new Error('Transport not open');
-         }
-       };
-
-       /**
-        * Called upon open
-        *
-        * @api private
-        */
-
-       Transport.prototype.onOpen = function () {
-         this.readyState = 'open';
-         this.writable = true;
-         this.emit('open');
-       };
-
-       /**
-        * Called with data.
-        *
-        * @param {String} data
-        * @api private
-        */
-
-       Transport.prototype.onData = function (data) {
-         var packet = parser.decodePacket(data, this.socket.binaryType);
-         this.onPacket(packet);
-       };
-
-       /**
-        * Called with a decoded packet.
-        */
-
-       Transport.prototype.onPacket = function (packet) {
-         this.emit('packet', packet);
-       };
-
-       /**
-        * Called upon close.
-        *
-        * @api private
-        */
-
-       Transport.prototype.onClose = function () {
-         this.readyState = 'closed';
-         this.emit('close');
-       };
-
-
-/***/ },
-/* 9 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-
-       var keys = __webpack_require__(10);
-       var hasBinary = __webpack_require__(11);
-       var sliceBuffer = __webpack_require__(13);
-       var after = __webpack_require__(14);
-       var utf8 = __webpack_require__(15);
-
-       var base64encoder;
-       if (typeof ArrayBuffer !== 'undefined') {
-         base64encoder = __webpack_require__(16);
-       }
-
-       /**
-        * Check if we are running an android browser. That requires us to use
-        * ArrayBuffer with polling transports...
-        *
-        * http://ghinda.net/jpeg-blob-ajax-android/
-        */
-
-       var isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);
-
-       /**
-        * Check if we are running in PhantomJS.
-        * Uploading a Blob with PhantomJS does not work correctly, as reported here:
-        * https://github.com/ariya/phantomjs/issues/11395
-        * @type boolean
-        */
-       var isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);
-
-       /**
-        * When true, avoids using Blobs to encode payloads.
-        * @type boolean
-        */
-       var dontSendBlobs = isAndroid || isPhantomJS;
-
-       /**
-        * Current protocol version.
-        */
-
-       exports.protocol = 3;
-
-       /**
-        * Packet types.
-        */
-
-       var packets = exports.packets = {
-           open:     0    // non-ws
-         , close:    1    // non-ws
-         , ping:     2
-         , pong:     3
-         , message:  4
-         , upgrade:  5
-         , noop:     6
-       };
-
-       var packetslist = keys(packets);
-
-       /**
-        * Premade error packet.
-        */
-
-       var err = { type: 'error', data: 'parser error' };
-
-       /**
-        * Create a blob api even for blob builder when vendor prefixes exist
-        */
-
-       var Blob = __webpack_require__(17);
-
-       /**
-        * Encodes a packet.
-        *
-        *     <packet type id> [ <data> ]
-        *
-        * Example:
-        *
-        *     5hello world
-        *     3
-        *     4
-        *
-        * Binary is encoded in an identical principle
-        *
-        * @api private
-        */
-
-       exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
-         if (typeof supportsBinary === 'function') {
-           callback = supportsBinary;
-           supportsBinary = false;
-         }
-
-         if (typeof utf8encode === 'function') {
-           callback = utf8encode;
-           utf8encode = null;
-         }
-
-         var data = (packet.data === undefined)
-           ? undefined
-           : packet.data.buffer || packet.data;
-
-         if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {
-           return encodeArrayBuffer(packet, supportsBinary, callback);
-         } else if (typeof Blob !== 'undefined' && data instanceof Blob) {
-           return encodeBlob(packet, supportsBinary, callback);
-         }
-
-         // might be an object with { base64: true, data: dataAsBase64String }
-         if (data && data.base64) {
-           return encodeBase64Object(packet, callback);
-         }
-
-         // Sending data as a utf-8 string
-         var encoded = packets[packet.type];
-
-         // data fragment is optional
-         if (undefined !== packet.data) {
-           encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);
-         }
-
-         return callback('' + encoded);
-
-       };
-
-       function encodeBase64Object(packet, callback) {
-         // packet data is an object { base64: true, data: dataAsBase64String }
-         var message = 'b' + exports.packets[packet.type] + packet.data.data;
-         return callback(message);
-       }
-
-       /**
-        * Encode packet helpers for binary types
-        */
-
-       function encodeArrayBuffer(packet, supportsBinary, callback) {
-         if (!supportsBinary) {
-           return exports.encodeBase64Packet(packet, callback);
-         }
-
-         var data = packet.data;
-         var contentArray = new Uint8Array(data);
-         var resultBuffer = new Uint8Array(1 + data.byteLength);
-
-         resultBuffer[0] = packets[packet.type];
-         for (var i = 0; i < contentArray.length; i++) {
-           resultBuffer[i+1] = contentArray[i];
-         }
-
-         return callback(resultBuffer.buffer);
-       }
-
-       function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {
-         if (!supportsBinary) {
-           return exports.encodeBase64Packet(packet, callback);
-         }
-
-         var fr = new FileReader();
-         fr.onload = function() {
-           exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);
-         };
-         return fr.readAsArrayBuffer(packet.data);
-       }
-
-       function encodeBlob(packet, supportsBinary, callback) {
-         if (!supportsBinary) {
-           return exports.encodeBase64Packet(packet, callback);
-         }
-
-         if (dontSendBlobs) {
-           return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);
-         }
-
-         var length = new Uint8Array(1);
-         length[0] = packets[packet.type];
-         var blob = new Blob([length.buffer, packet.data]);
-
-         return callback(blob);
-       }
-
-       /**
-        * Encodes a packet with binary data in a base64 string
-        *
-        * @param {Object} packet, has `type` and `data`
-        * @return {String} base64 encoded message
-        */
-
-       exports.encodeBase64Packet = function(packet, callback) {
-         var message = 'b' + exports.packets[packet.type];
-         if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {
-           var fr = new FileReader();
-           fr.onload = function() {
-             var b64 = fr.result.split(',')[1];
-             callback(message + b64);
-           };
-           return fr.readAsDataURL(packet.data);
-         }
-
-         var b64data;
-         try {
-           b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));
-         } catch (e) {
-           // iPhone Safari doesn't let you apply with typed arrays
-           var typed = new Uint8Array(packet.data);
-           var basic = new Array(typed.length);
-           for (var i = 0; i < typed.length; i++) {
-             basic[i] = typed[i];
-           }
-           b64data = String.fromCharCode.apply(null, basic);
-         }
-         message += btoa(b64data);
-         return callback(message);
-       };
-
-       /**
-        * Decodes a packet. Changes format to Blob if requested.
-        *
-        * @return {Object} with `type` and `data` (if any)
-        * @api private
-        */
-
-       exports.decodePacket = function (data, binaryType, utf8decode) {
-         if (data === undefined) {
-           return err;
-         }
-         // String data
-         if (typeof data === 'string') {
-           if (data.charAt(0) === 'b') {
-             return exports.decodeBase64Packet(data.substr(1), binaryType);
-           }
-
-           if (utf8decode) {
-             data = tryDecode(data);
-             if (data === false) {
-               return err;
-             }
-           }
-           var type = data.charAt(0);
-
-           if (Number(type) != type || !packetslist[type]) {
-             return err;
-           }
-
-           if (data.length > 1) {
-             return { type: packetslist[type], data: data.substring(1) };
-           } else {
-             return { type: packetslist[type] };
-           }
-         }
-
-         var asArray = new Uint8Array(data);
-         var type = asArray[0];
-         var rest = sliceBuffer(data, 1);
-         if (Blob && binaryType === 'blob') {
-           rest = new Blob([rest]);
-         }
-         return { type: packetslist[type], data: rest };
-       };
-
-       function tryDecode(data) {
-         try {
-           data = utf8.decode(data, { strict: false });
-         } catch (e) {
-           return false;
-         }
-         return data;
-       }
-
-       /**
-        * Decodes a packet encoded in a base64 string
-        *
-        * @param {String} base64 encoded message
-        * @return {Object} with `type` and `data` (if any)
-        */
-
-       exports.decodeBase64Packet = function(msg, binaryType) {
-         var type = packetslist[msg.charAt(0)];
-         if (!base64encoder) {
-           return { type: type, data: { base64: true, data: msg.substr(1) } };
-         }
-
-         var data = base64encoder.decode(msg.substr(1));
-
-         if (binaryType === 'blob' && Blob) {
-           data = new Blob([data]);
-         }
-
-         return { type: type, data: data };
-       };
-
-       /**
-        * Encodes multiple messages (payload).
-        *
-        *     <length>:data
-        *
-        * Example:
-        *
-        *     11:hello world2:hi
-        *
-        * If any contents are binary, they will be encoded as base64 strings. Base64
-        * encoded strings are marked with a b before the length specifier
-        *
-        * @param {Array} packets
-        * @api private
-        */
-
-       exports.encodePayload = function (packets, supportsBinary, callback) {
-         if (typeof supportsBinary === 'function') {
-           callback = supportsBinary;
-           supportsBinary = null;
-         }
-
-         var isBinary = hasBinary(packets);
-
-         if (supportsBinary && isBinary) {
-           if (Blob && !dontSendBlobs) {
-             return exports.encodePayloadAsBlob(packets, callback);
-           }
-
-           return exports.encodePayloadAsArrayBuffer(packets, callback);
-         }
-
-         if (!packets.length) {
-           return callback('0:');
-         }
-
-         function setLengthHeader(message) {
-           return message.length + ':' + message;
-         }
-
-         function encodeOne(packet, doneCallback) {
-           exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {
-             doneCallback(null, setLengthHeader(message));
-           });
-         }
-
-         map(packets, encodeOne, function(err, results) {
-           return callback(results.join(''));
-         });
-       };
-
-       /**
-        * Async array map using after
-        */
-
-       function map(ary, each, done) {
-         var result = new Array(ary.length);
-         var next = after(ary.length, done);
-
-         var eachWithIndex = function(i, el, cb) {
-           each(el, function(error, msg) {
-             result[i] = msg;
-             cb(error, result);
-           });
-         };
-
-         for (var i = 0; i < ary.length; i++) {
-           eachWithIndex(i, ary[i], next);
-         }
-       }
-
-       /*
-        * Decodes data when a payload is maybe expected. Possible binary contents are
-        * decoded from their base64 representation
-        *
-        * @param {String} data, callback method
-        * @api public
-        */
-
-       exports.decodePayload = function (data, binaryType, callback) {
-         if (typeof data !== 'string') {
-           return exports.decodePayloadAsBinary(data, binaryType, callback);
-         }
-
-         if (typeof binaryType === 'function') {
-           callback = binaryType;
-           binaryType = null;
-         }
-
-         var packet;
-         if (data === '') {
-           // parser error - ignoring payload
-           return callback(err, 0, 1);
-         }
-
-         var length = '', n, msg;
-
-         for (var i = 0, l = data.length; i < l; i++) {
-           var chr = data.charAt(i);
-
-           if (chr !== ':') {
-             length += chr;
-             continue;
-           }
-
-           if (length === '' || (length != (n = Number(length)))) {
-             // parser error - ignoring payload
-             return callback(err, 0, 1);
-           }
-
-           msg = data.substr(i + 1, n);
-
-           if (length != msg.length) {
-             // parser error - ignoring payload
-             return callback(err, 0, 1);
-           }
-
-           if (msg.length) {
-             packet = exports.decodePacket(msg, binaryType, false);
-
-             if (err.type === packet.type && err.data === packet.data) {
-               // parser error in individual packet - ignoring payload
-               return callback(err, 0, 1);
-             }
-
-             var ret = callback(packet, i + n, l);
-             if (false === ret) return;
-           }
-
-           // advance cursor
-           i += n;
-           length = '';
-         }
-
-         if (length !== '') {
-           // parser error - ignoring payload
-           return callback(err, 0, 1);
-         }
-
-       };
-
-       /**
-        * Encodes multiple messages (payload) as binary.
-        *
-        * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number
-        * 255><data>
-        *
-        * Example:
-        * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers
-        *
-        * @param {Array} packets
-        * @return {ArrayBuffer} encoded payload
-        * @api private
-        */
-
-       exports.encodePayloadAsArrayBuffer = function(packets, callback) {
-         if (!packets.length) {
-           return callback(new ArrayBuffer(0));
-         }
-
-         function encodeOne(packet, doneCallback) {
-           exports.encodePacket(packet, true, true, function(data) {
-             return doneCallback(null, data);
-           });
-         }
-
-         map(packets, encodeOne, function(err, encodedPackets) {
-           var totalLength = encodedPackets.reduce(function(acc, p) {
-             var len;
-             if (typeof p === 'string'){
-               len = p.length;
-             } else {
-               len = p.byteLength;
-             }
-             return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2
-           }, 0);
-
-           var resultArray = new Uint8Array(totalLength);
-
-           var bufferIndex = 0;
-           encodedPackets.forEach(function(p) {
-             var isString = typeof p === 'string';
-             var ab = p;
-             if (isString) {
-               var view = new Uint8Array(p.length);
-               for (var i = 0; i < p.length; i++) {
-                 view[i] = p.charCodeAt(i);
-               }
-               ab = view.buffer;
-             }
-
-             if (isString) { // not true binary
-               resultArray[bufferIndex++] = 0;
-             } else { // true binary
-               resultArray[bufferIndex++] = 1;
-             }
-
-             var lenStr = ab.byteLength.toString();
-             for (var i = 0; i < lenStr.length; i++) {
-               resultArray[bufferIndex++] = parseInt(lenStr[i]);
-             }
-             resultArray[bufferIndex++] = 255;
-
-             var view = new Uint8Array(ab);
-             for (var i = 0; i < view.length; i++) {
-               resultArray[bufferIndex++] = view[i];
-             }
-           });
-
-           return callback(resultArray.buffer);
-         });
-       };
-
-       /**
-        * Encode as Blob
-        */
-
-       exports.encodePayloadAsBlob = function(packets, callback) {
-         function encodeOne(packet, doneCallback) {
-           exports.encodePacket(packet, true, true, function(encoded) {
-             var binaryIdentifier = new Uint8Array(1);
-             binaryIdentifier[0] = 1;
-             if (typeof encoded === 'string') {
-               var view = new Uint8Array(encoded.length);
-               for (var i = 0; i < encoded.length; i++) {
-                 view[i] = encoded.charCodeAt(i);
-               }
-               encoded = view.buffer;
-               binaryIdentifier[0] = 0;
-             }
-
-             var len = (encoded instanceof ArrayBuffer)
-               ? encoded.byteLength
-               : encoded.size;
-
-             var lenStr = len.toString();
-             var lengthAry = new Uint8Array(lenStr.length + 1);
-             for (var i = 0; i < lenStr.length; i++) {
-               lengthAry[i] = parseInt(lenStr[i]);
-             }
-             lengthAry[lenStr.length] = 255;
-
-             if (Blob) {
-               var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);
-               doneCallback(null, blob);
-             }
-           });
-         }
-
-         map(packets, encodeOne, function(err, results) {
-           return callback(new Blob(results));
-         });
-       };
-
-       /*
-        * Decodes data when a payload is maybe expected. Strings are decoded by
-        * interpreting each byte as a key code for entries marked to start with 0. See
-        * description of encodePayloadAsBinary
-        *
-        * @param {ArrayBuffer} data, callback method
-        * @api public
-        */
-
-       exports.decodePayloadAsBinary = function (data, binaryType, callback) {
-         if (typeof binaryType === 'function') {
-           callback = binaryType;
-           binaryType = null;
-         }
-
-         var bufferTail = data;
-         var buffers = [];
-
-         while (bufferTail.byteLength > 0) {
-           var tailArray = new Uint8Array(bufferTail);
-           var isString = tailArray[0] === 0;
-           var msgLength = '';
-
-           for (var i = 1; ; i++) {
-             if (tailArray[i] === 255) break;
-
-             // 310 = char length of Number.MAX_VALUE
-             if (msgLength.length > 310) {
-               return callback(err, 0, 1);
-             }
-
-             msgLength += tailArray[i];
-           }
-
-           bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);
-           msgLength = parseInt(msgLength);
-
-           var msg = sliceBuffer(bufferTail, 0, msgLength);
-           if (isString) {
-             try {
-               msg = String.fromCharCode.apply(null, new Uint8Array(msg));
-             } catch (e) {
-               // iPhone Safari doesn't let you apply to typed arrays
-               var typed = new Uint8Array(msg);
-               msg = '';
-               for (var i = 0; i < typed.length; i++) {
-                 msg += String.fromCharCode(typed[i]);
-               }
-             }
-           }
-
-           buffers.push(msg);
-           bufferTail = sliceBuffer(bufferTail, msgLength);
-         }
-
-         var total = buffers.length;
-         buffers.forEach(function(buffer, i) {
-           callback(exports.decodePacket(buffer, binaryType, true), i, total);
-         });
-       };
-
-
-/***/ },
-/* 10 */
-/***/ function(module, exports) {
-
-       
-       /**
-        * Gets the keys for an object.
-        *
-        * @return {Array} keys
-        * @api private
-        */
-
-       module.exports = Object.keys || function keys (obj){
-         var arr = [];
-         var has = Object.prototype.hasOwnProperty;
-
-         for (var i in obj) {
-           if (has.call(obj, i)) {
-             arr.push(i);
-           }
-         }
-         return arr;
-       };
-
-
-/***/ },
-/* 11 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* global Blob File */
-
-       /*
-        * Module requirements.
-        */
-
-       var isArray = __webpack_require__(12);
-
-       var toString = Object.prototype.toString;
-       var withNativeBlob = typeof Blob === 'function' ||
-                               typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';
-       var withNativeFile = typeof File === 'function' ||
-                               typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';
-
-       /**
-        * Module exports.
-        */
-
-       module.exports = hasBinary;
-
-       /**
-        * Checks for binary data.
-        *
-        * Supports Buffer, ArrayBuffer, Blob and File.
-        *
-        * @param {Object} anything
-        * @api public
-        */
-
-       function hasBinary (obj) {
-         if (!obj || typeof obj !== 'object') {
-           return false;
-         }
-
-         if (isArray(obj)) {
-           for (var i = 0, l = obj.length; i < l; i++) {
-             if (hasBinary(obj[i])) {
-               return true;
-             }
-           }
-           return false;
-         }
-
-         if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||
-           (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||
-           (withNativeBlob && obj instanceof Blob) ||
-           (withNativeFile && obj instanceof File)
-         ) {
-           return true;
-         }
-
-         // see: https://github.com/Automattic/has-binary/pull/4
-         if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {
-           return hasBinary(obj.toJSON(), true);
-         }
-
-         for (var key in obj) {
-           if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {
-             return true;
-           }
-         }
-
-         return false;
-       }
-
-
-/***/ },
-/* 12 */
-/***/ function(module, exports) {
-
-       var toString = {}.toString;
-
-       module.exports = Array.isArray || function (arr) {
-         return toString.call(arr) == '[object Array]';
-       };
-
-
-/***/ },
-/* 13 */
-/***/ function(module, exports) {
-
-       /**
-        * An abstraction for slicing an arraybuffer even when
-        * ArrayBuffer.prototype.slice is not supported
-        *
-        * @api public
-        */
-
-       module.exports = function(arraybuffer, start, end) {
-         var bytes = arraybuffer.byteLength;
-         start = start || 0;
-         end = end || bytes;
-
-         if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
-
-         if (start < 0) { start += bytes; }
-         if (end < 0) { end += bytes; }
-         if (end > bytes) { end = bytes; }
-
-         if (start >= bytes || start >= end || bytes === 0) {
-           return new ArrayBuffer(0);
-         }
-
-         var abv = new Uint8Array(arraybuffer);
-         var result = new Uint8Array(end - start);
-         for (var i = start, ii = 0; i < end; i++, ii++) {
-           result[ii] = abv[i];
-         }
-         return result.buffer;
-       };
-
-
-/***/ },
-/* 14 */
-/***/ function(module, exports) {
-
-       module.exports = after
-
-       function after(count, callback, err_cb) {
-           var bail = false
-           err_cb = err_cb || noop
-           proxy.count = count
-
-           return (count === 0) ? callback() : proxy
-
-           function proxy(err, result) {
-               if (proxy.count <= 0) {
-                   throw new Error('after called too many times')
-               }
-               --proxy.count
-
-               // after first error, rest are passed to err_cb
-               if (err) {
-                   bail = true
-                   callback(err)
-                   // future error callbacks will go to error handler
-                   callback = err_cb
-               } else if (proxy.count === 0 && !bail) {
-                   callback(null, result)
-               }
-           }
-       }
-
-       function noop() {}
-
-
-/***/ },
-/* 15 */
-/***/ function(module, exports) {
-
-       /*! https://mths.be/utf8js v2.1.2 by @mathias */
-
-       var stringFromCharCode = String.fromCharCode;
-
-       // Taken from https://mths.be/punycode
-       function ucs2decode(string) {
-               var output = [];
-               var counter = 0;
-               var length = string.length;
-               var value;
-               var extra;
-               while (counter < length) {
-                       value = string.charCodeAt(counter++);
-                       if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
-                               // high surrogate, and there is a next character
-                               extra = string.charCodeAt(counter++);
-                               if ((extra & 0xFC00) == 0xDC00) { // low surrogate
-                                       output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
-                               } else {
-                                       // unmatched surrogate; only append this code unit, in case the next
-                                       // code unit is the high surrogate of a surrogate pair
-                                       output.push(value);
-                                       counter--;
-                               }
-                       } else {
-                               output.push(value);
-                       }
-               }
-               return output;
-       }
-
-       // Taken from https://mths.be/punycode
-       function ucs2encode(array) {
-               var length = array.length;
-               var index = -1;
-               var value;
-               var output = '';
-               while (++index < length) {
-                       value = array[index];
-                       if (value > 0xFFFF) {
-                               value -= 0x10000;
-                               output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
-                               value = 0xDC00 | value & 0x3FF;
-                       }
-                       output += stringFromCharCode(value);
-               }
-               return output;
-       }
-
-       function checkScalarValue(codePoint, strict) {
-               if (codePoint >= 0xD800 && codePoint <= 0xDFFF) {
-                       if (strict) {
-                               throw Error(
-                                       'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +
-                                       ' is not a scalar value'
-                               );
-                       }
-                       return false;
-               }
-               return true;
-       }
-       /*--------------------------------------------------------------------------*/
-
-       function createByte(codePoint, shift) {
-               return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
-       }
-
-       function encodeCodePoint(codePoint, strict) {
-               if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
-                       return stringFromCharCode(codePoint);
-               }
-               var symbol = '';
-               if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
-                       symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
-               }
-               else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
-                       if (!checkScalarValue(codePoint, strict)) {
-                               codePoint = 0xFFFD;
-                       }
-                       symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
-                       symbol += createByte(codePoint, 6);
-               }
-               else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
-                       symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
-                       symbol += createByte(codePoint, 12);
-                       symbol += createByte(codePoint, 6);
-               }
-               symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
-               return symbol;
-       }
-
-       function utf8encode(string, opts) {
-               opts = opts || {};
-               var strict = false !== opts.strict;
-
-               var codePoints = ucs2decode(string);
-               var length = codePoints.length;
-               var index = -1;
-               var codePoint;
-               var byteString = '';
-               while (++index < length) {
-                       codePoint = codePoints[index];
-                       byteString += encodeCodePoint(codePoint, strict);
-               }
-               return byteString;
-       }
-
-       /*--------------------------------------------------------------------------*/
-
-       function readContinuationByte() {
-               if (byteIndex >= byteCount) {
-                       throw Error('Invalid byte index');
-               }
-
-               var continuationByte = byteArray[byteIndex] & 0xFF;
-               byteIndex++;
-
-               if ((continuationByte & 0xC0) == 0x80) {
-                       return continuationByte & 0x3F;
-               }
-
-               // If we end up here, it’s not a continuation byte
-               throw Error('Invalid continuation byte');
-       }
-
-       function decodeSymbol(strict) {
-               var byte1;
-               var byte2;
-               var byte3;
-               var byte4;
-               var codePoint;
-
-               if (byteIndex > byteCount) {
-                       throw Error('Invalid byte index');
-               }
-
-               if (byteIndex == byteCount) {
-                       return false;
-               }
-
-               // Read first byte
-               byte1 = byteArray[byteIndex] & 0xFF;
-               byteIndex++;
-
-               // 1-byte sequence (no continuation bytes)
-               if ((byte1 & 0x80) == 0) {
-                       return byte1;
-               }
-
-               // 2-byte sequence
-               if ((byte1 & 0xE0) == 0xC0) {
-                       byte2 = readContinuationByte();
-                       codePoint = ((byte1 & 0x1F) << 6) | byte2;
-                       if (codePoint >= 0x80) {
-                               return codePoint;
-                       } else {
-                               throw Error('Invalid continuation byte');
-                       }
-               }
-
-               // 3-byte sequence (may include unpaired surrogates)
-               if ((byte1 & 0xF0) == 0xE0) {
-                       byte2 = readContinuationByte();
-                       byte3 = readContinuationByte();
-                       codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
-                       if (codePoint >= 0x0800) {
-                               return checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;
-                       } else {
-                               throw Error('Invalid continuation byte');
-                       }
-               }
-
-               // 4-byte sequence
-               if ((byte1 & 0xF8) == 0xF0) {
-                       byte2 = readContinuationByte();
-                       byte3 = readContinuationByte();
-                       byte4 = readContinuationByte();
-                       codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |
-                               (byte3 << 0x06) | byte4;
-                       if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
-                               return codePoint;
-                       }
-               }
-
-               throw Error('Invalid UTF-8 detected');
-       }
-
-       var byteArray;
-       var byteCount;
-       var byteIndex;
-       function utf8decode(byteString, opts) {
-               opts = opts || {};
-               var strict = false !== opts.strict;
-
-               byteArray = ucs2decode(byteString);
-               byteCount = byteArray.length;
-               byteIndex = 0;
-               var codePoints = [];
-               var tmp;
-               while ((tmp = decodeSymbol(strict)) !== false) {
-                       codePoints.push(tmp);
-               }
-               return ucs2encode(codePoints);
-       }
-
-       module.exports = {
-               version: '2.1.2',
-               encode: utf8encode,
-               decode: utf8decode
-       };
-
-
-/***/ },
-/* 16 */
-/***/ function(module, exports) {
-
-       /*
-        * base64-arraybuffer
-        * https://github.com/niklasvh/base64-arraybuffer
-        *
-        * Copyright (c) 2012 Niklas von Hertzen
-        * Licensed under the MIT license.
-        */
-       (function(){
-         "use strict";
-
-         var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-         // Use a lookup table to find the index.
-         var lookup = new Uint8Array(256);
-         for (var i = 0; i < chars.length; i++) {
-           lookup[chars.charCodeAt(i)] = i;
-         }
-
-         exports.encode = function(arraybuffer) {
-           var bytes = new Uint8Array(arraybuffer),
-           i, len = bytes.length, base64 = "";
-
-           for (i = 0; i < len; i+=3) {
-             base64 += chars[bytes[i] >> 2];
-             base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
-             base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
-             base64 += chars[bytes[i + 2] & 63];
-           }
-
-           if ((len % 3) === 2) {
-             base64 = base64.substring(0, base64.length - 1) + "=";
-           } else if (len % 3 === 1) {
-             base64 = base64.substring(0, base64.length - 2) + "==";
-           }
-
-           return base64;
-         };
-
-         exports.decode =  function(base64) {
-           var bufferLength = base64.length * 0.75,
-           len = base64.length, i, p = 0,
-           encoded1, encoded2, encoded3, encoded4;
-
-           if (base64[base64.length - 1] === "=") {
-             bufferLength--;
-             if (base64[base64.length - 2] === "=") {
-               bufferLength--;
-             }
-           }
-
-           var arraybuffer = new ArrayBuffer(bufferLength),
-           bytes = new Uint8Array(arraybuffer);
-
-           for (i = 0; i < len; i+=4) {
-             encoded1 = lookup[base64.charCodeAt(i)];
-             encoded2 = lookup[base64.charCodeAt(i+1)];
-             encoded3 = lookup[base64.charCodeAt(i+2)];
-             encoded4 = lookup[base64.charCodeAt(i+3)];
-
-             bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
-             bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
-             bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
-           }
-
-           return arraybuffer;
-         };
-       })();
-
-
-/***/ },
-/* 17 */
-/***/ function(module, exports) {
-
-       /**\r
-        * Create a blob builder even when vendor prefixes exist\r
-        */\r
-\r
-       var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r
-         typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r
-         typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r
-         typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r
-         false;\r
-\r
-       /**\r
-        * Check if Blob constructor is supported\r
-        */\r
-\r
-       var blobSupported = (function() {\r
-         try {\r
-           var a = new Blob(['hi']);\r
-           return a.size === 2;\r
-         } catch(e) {\r
-           return false;\r
-         }\r
-       })();\r
-\r
-       /**\r
-        * Check if Blob constructor supports ArrayBufferViews\r
-        * Fails in Safari 6, so we need to map to ArrayBuffers there.\r
-        */\r
-\r
-       var blobSupportsArrayBufferView = blobSupported && (function() {\r
-         try {\r
-           var b = new Blob([new Uint8Array([1,2])]);\r
-           return b.size === 2;\r
-         } catch(e) {\r
-           return false;\r
-         }\r
-       })();\r
-\r
-       /**\r
-        * Check if BlobBuilder is supported\r
-        */\r
-\r
-       var blobBuilderSupported = BlobBuilder\r
-         && BlobBuilder.prototype.append\r
-         && BlobBuilder.prototype.getBlob;\r
-\r
-       /**\r
-        * Helper function that maps ArrayBufferViews to ArrayBuffers\r
-        * Used by BlobBuilder constructor and old browsers that didn't\r
-        * support it in the Blob constructor.\r
-        */\r
-\r
-       function mapArrayBufferViews(ary) {\r
-         return ary.map(function(chunk) {\r
-           if (chunk.buffer instanceof ArrayBuffer) {\r
-             var buf = chunk.buffer;\r
-\r
-             // if this is a subarray, make a copy so we only\r
-             // include the subarray region from the underlying buffer\r
-             if (chunk.byteLength !== buf.byteLength) {\r
-               var copy = new Uint8Array(chunk.byteLength);\r
-               copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r
-               buf = copy.buffer;\r
-             }\r
-\r
-             return buf;\r
-           }\r
-\r
-           return chunk;\r
-         });\r
-       }\r
-\r
-       function BlobBuilderConstructor(ary, options) {\r
-         options = options || {};\r
-\r
-         var bb = new BlobBuilder();\r
-         mapArrayBufferViews(ary).forEach(function(part) {\r
-           bb.append(part);\r
-         });\r
-\r
-         return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r
-       };\r
-\r
-       function BlobConstructor(ary, options) {\r
-         return new Blob(mapArrayBufferViews(ary), options || {});\r
-       };\r
-\r
-       if (typeof Blob !== 'undefined') {\r
-         BlobBuilderConstructor.prototype = Blob.prototype;\r
-         BlobConstructor.prototype = Blob.prototype;\r
-       }\r
-\r
-       module.exports = (function() {\r
-         if (blobSupported) {\r
-           return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r
-         } else if (blobBuilderSupported) {\r
-           return BlobBuilderConstructor;\r
-         } else {\r
-           return undefined;\r
-         }\r
-       })();\r
-
-
-/***/ },
-/* 18 */
-/***/ function(module, exports, __webpack_require__) {
-
-       \r
-       /**\r
-        * Expose `Emitter`.\r
-        */\r
-\r
-       if (true) {\r
-         module.exports = Emitter;\r
-       }\r
-\r
-       /**\r
-        * Initialize a new `Emitter`.\r
-        *\r
-        * @api public\r
-        */\r
-\r
-       function Emitter(obj) {\r
-         if (obj) return mixin(obj);\r
-       };\r
-\r
-       /**\r
-        * Mixin the emitter properties.\r
-        *\r
-        * @param {Object} obj\r
-        * @return {Object}\r
-        * @api private\r
-        */\r
-\r
-       function mixin(obj) {\r
-         for (var key in Emitter.prototype) {\r
-           obj[key] = Emitter.prototype[key];\r
-         }\r
-         return obj;\r
-       }\r
-\r
-       /**\r
-        * Listen on the given `event` with `fn`.\r
-        *\r
-        * @param {String} event\r
-        * @param {Function} fn\r
-        * @return {Emitter}\r
-        * @api public\r
-        */\r
-\r
-       Emitter.prototype.on =\r
-       Emitter.prototype.addEventListener = function(event, fn){\r
-         this._callbacks = this._callbacks || {};\r
-         (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r
-           .push(fn);\r
-         return this;\r
-       };\r
-\r
-       /**\r
-        * Adds an `event` listener that will be invoked a single\r
-        * time then automatically removed.\r
-        *\r
-        * @param {String} event\r
-        * @param {Function} fn\r
-        * @return {Emitter}\r
-        * @api public\r
-        */\r
-\r
-       Emitter.prototype.once = function(event, fn){\r
-         function on() {\r
-           this.off(event, on);\r
-           fn.apply(this, arguments);\r
-         }\r
-\r
-         on.fn = fn;\r
-         this.on(event, on);\r
-         return this;\r
-       };\r
-\r
-       /**\r
-        * Remove the given callback for `event` or all\r
-        * registered callbacks.\r
-        *\r
-        * @param {String} event\r
-        * @param {Function} fn\r
-        * @return {Emitter}\r
-        * @api public\r
-        */\r
-\r
-       Emitter.prototype.off =\r
-       Emitter.prototype.removeListener =\r
-       Emitter.prototype.removeAllListeners =\r
-       Emitter.prototype.removeEventListener = function(event, fn){\r
-         this._callbacks = this._callbacks || {};\r
-\r
-         // all\r
-         if (0 == arguments.length) {\r
-           this._callbacks = {};\r
-           return this;\r
-         }\r
-\r
-         // specific event\r
-         var callbacks = this._callbacks['$' + event];\r
-         if (!callbacks) return this;\r
-\r
-         // remove all handlers\r
-         if (1 == arguments.length) {\r
-           delete this._callbacks['$' + event];\r
-           return this;\r
-         }\r
-\r
-         // remove specific handler\r
-         var cb;\r
-         for (var i = 0; i < callbacks.length; i++) {\r
-           cb = callbacks[i];\r
-           if (cb === fn || cb.fn === fn) {\r
-             callbacks.splice(i, 1);\r
-             break;\r
-           }\r
-         }\r
-         return this;\r
-       };\r
-\r
-       /**\r
-        * Emit `event` with the given args.\r
-        *\r
-        * @param {String} event\r
-        * @param {Mixed} ...\r
-        * @return {Emitter}\r
-        */\r
-\r
-       Emitter.prototype.emit = function(event){\r
-         this._callbacks = this._callbacks || {};\r
-         var args = [].slice.call(arguments, 1)\r
-           , callbacks = this._callbacks['$' + event];\r
-\r
-         if (callbacks) {\r
-           callbacks = callbacks.slice(0);\r
-           for (var i = 0, len = callbacks.length; i < len; ++i) {\r
-             callbacks[i].apply(this, args);\r
-           }\r
-         }\r
-\r
-         return this;\r
-       };\r
-\r
-       /**\r
-        * Return array of callbacks for `event`.\r
-        *\r
-        * @param {String} event\r
-        * @return {Array}\r
-        * @api public\r
-        */\r
-\r
-       Emitter.prototype.listeners = function(event){\r
-         this._callbacks = this._callbacks || {};\r
-         return this._callbacks['$' + event] || [];\r
-       };\r
-\r
-       /**\r
-        * Check if this emitter has `event` handlers.\r
-        *\r
-        * @param {String} event\r
-        * @return {Boolean}\r
-        * @api public\r
-        */\r
-\r
-       Emitter.prototype.hasListeners = function(event){\r
-         return !! this.listeners(event).length;\r
-       };\r
-
-
-/***/ },
-/* 19 */
-/***/ function(module, exports) {
-
-       /**\r
-        * Compiles a querystring\r
-        * Returns string representation of the object\r
-        *\r
-        * @param {Object}\r
-        * @api private\r
-        */\r
-\r
-       exports.encode = function (obj) {\r
-         var str = '';\r
-\r
-         for (var i in obj) {\r
-           if (obj.hasOwnProperty(i)) {\r
-             if (str.length) str += '&';\r
-             str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r
-           }\r
-         }\r
-\r
-         return str;\r
-       };\r
-\r
-       /**\r
-        * Parses a simple querystring into an object\r
-        *\r
-        * @param {String} qs\r
-        * @api private\r
-        */\r
-\r
-       exports.decode = function(qs){\r
-         var qry = {};\r
-         var pairs = qs.split('&');\r
-         for (var i = 0, l = pairs.length; i < l; i++) {\r
-           var pair = pairs[i].split('=');\r
-           qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r
-         }\r
-         return qry;\r
-       };\r
-
-
-/***/ },
-/* 20 */
-/***/ function(module, exports) {
-
-       
-       module.exports = function(a, b){
-         var fn = function(){};
-         fn.prototype = b.prototype;
-         a.prototype = new fn;
-         a.prototype.constructor = a;
-       };
-
-/***/ },
-/* 21 */
-/***/ function(module, exports) {
-
-       'use strict';
-
-       var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')
-         , length = 64
-         , map = {}
-         , seed = 0
-         , i = 0
-         , prev;
-
-       /**
-        * Return a string representing the specified number.
-        *
-        * @param {Number} num The number to convert.
-        * @returns {String} The string representation of the number.
-        * @api public
-        */
-       function encode(num) {
-         var encoded = '';
-
-         do {
-           encoded = alphabet[num % length] + encoded;
-           num = Math.floor(num / length);
-         } while (num > 0);
-
-         return encoded;
-       }
-
-       /**
-        * Return the integer value specified by the given string.
-        *
-        * @param {String} str The string to convert.
-        * @returns {Number} The integer value represented by the string.
-        * @api public
-        */
-       function decode(str) {
-         var decoded = 0;
-
-         for (i = 0; i < str.length; i++) {
-           decoded = decoded * length + map[str.charAt(i)];
-         }
-
-         return decoded;
-       }
-
-       /**
-        * Yeast: A tiny growing id generator.
-        *
-        * @returns {String} A unique id.
-        * @api public
-        */
-       function yeast() {
-         var now = encode(+new Date());
-
-         if (now !== prev) return seed = 0, prev = now;
-         return now +'.'+ encode(seed++);
-       }
-
-       //
-       // Map each character to its index.
-       //
-       for (; i < length; i++) map[alphabet[i]] = i;
-
-       //
-       // Expose the `yeast`, `encode` and `decode` functions.
-       //
-       yeast.encode = encode;
-       yeast.decode = decode;
-       module.exports = yeast;
-
-
-/***/ },
-/* 22 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {'use strict';
-
-       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-       /* eslint-env browser */
-
-       /**
-        * This is the web browser implementation of `debug()`.
-        */
-
-       exports.log = log;
-       exports.formatArgs = formatArgs;
-       exports.save = save;
-       exports.load = load;
-       exports.useColors = useColors;
-       exports.storage = localstorage();
-
-       /**
-        * Colors.
-        */
-
-       exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];
-
-       /**
-        * Currently only WebKit-based Web Inspectors, Firefox >= v31,
-        * and the Firebug extension (any Firefox version) are known
-        * to support "%c" CSS customizations.
-        *
-        * TODO: add a `localStorage` variable to explicitly enable/disable colors
-        */
-
-       // eslint-disable-next-line complexity
-       function useColors() {
-               // NB: In an Electron preload script, document will be defined but not fully
-               // initialized. Since we know we're in Chrome, we'll just detect this case
-               // explicitly
-               if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
-                       return true;
-               }
-
-               // Internet Explorer and Edge do not support colors.
-               if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
-                       return false;
-               }
-
-               // Is webkit? http://stackoverflow.com/a/16459606/376773
-               // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
-               return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||
-               // Is firebug? http://stackoverflow.com/a/398120/376773
-               typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||
-               // Is firefox >= v31?
-               // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
-               typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||
-               // Double check webkit in userAgent just in case we are in a worker
-               typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
-       }
-
-       /**
-        * Colorize log arguments if enabled.
-        *
-        * @api public
-        */
-
-       function formatArgs(args) {
-               args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);
-
-               if (!this.useColors) {
-                       return;
-               }
-
-               var c = 'color: ' + this.color;
-               args.splice(1, 0, c, 'color: inherit');
-
-               // The final "%c" is somewhat tricky, because there could be other
-               // arguments passed either before or after the %c, so we need to
-               // figure out the correct index to insert the CSS into
-               var index = 0;
-               var lastC = 0;
-               args[0].replace(/%[a-zA-Z%]/g, function (match) {
-                       if (match === '%%') {
-                               return;
-                       }
-                       index++;
-                       if (match === '%c') {
-                               // We only are interested in the *last* %c
-                               // (the user may have provided their own)
-                               lastC = index;
-                       }
-               });
-
-               args.splice(lastC, 0, c);
-       }
-
-       /**
-        * Invokes `console.log()` when available.
-        * No-op when `console.log` is not a "function".
-        *
-        * @api public
-        */
-       function log() {
-               var _console;
-
-               // This hackery is required for IE8/9, where
-               // the `console.log` function doesn't have 'apply'
-               return (typeof console === 'undefined' ? 'undefined' : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);
-       }
-
-       /**
-        * Save `namespaces`.
-        *
-        * @param {String} namespaces
-        * @api private
-        */
-       function save(namespaces) {
-               try {
-                       if (namespaces) {
-                               exports.storage.setItem('debug', namespaces);
-                       } else {
-                               exports.storage.removeItem('debug');
-                       }
-               } catch (error) {
-                       // Swallow
-                       // XXX (@Qix-) should we be logging these?
-               }
-       }
-
-       /**
-        * Load `namespaces`.
-        *
-        * @return {String} returns the previously persisted debug modes
-        * @api private
-        */
-       function load() {
-               var r = void 0;
-               try {
-                       r = exports.storage.getItem('debug');
-               } catch (error) {}
-               // Swallow
-               // XXX (@Qix-) should we be logging these?
-
-
-               // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
-               if (!r && typeof process !== 'undefined' && 'env' in process) {
-                       r = process.env.DEBUG;
-               }
-
-               return r;
-       }
-
-       /**
-        * Localstorage attempts to return the localstorage.
-        *
-        * This is necessary because safari throws
-        * when a user disables cookies/localstorage
-        * and you attempt to access it.
-        *
-        * @return {LocalStorage}
-        * @api private
-        */
-
-       function localstorage() {
-               try {
-                       // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
-                       // The Browser also has localStorage in the global context.
-                       return localStorage;
-               } catch (error) {
-                       // Swallow
-                       // XXX (@Qix-) should we be logging these?
-               }
-       }
-
-       module.exports = __webpack_require__(24)(exports);
-
-       var formatters = module.exports.formatters;
-
-       /**
-        * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
-        */
-
-       formatters.j = function (v) {
-               try {
-                       return JSON.stringify(v);
-               } catch (error) {
-                       return '[UnexpectedJSONParseError]: ' + error.message;
-               }
-       };
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(23)))
-
-/***/ },
-/* 23 */
-/***/ function(module, exports) {
-
-       // shim for using process in browser
-       var process = module.exports = {};
-
-       // cached from whatever global is present so that test runners that stub it
-       // don't break things.  But we need to wrap it in a try catch in case it is
-       // wrapped in strict mode code which doesn't define any globals.  It's inside a
-       // function because try/catches deoptimize in certain engines.
-
-       var cachedSetTimeout;
-       var cachedClearTimeout;
-
-       function defaultSetTimout() {
-           throw new Error('setTimeout has not been defined');
-       }
-       function defaultClearTimeout () {
-           throw new Error('clearTimeout has not been defined');
-       }
-       (function () {
-           try {
-               if (typeof setTimeout === 'function') {
-                   cachedSetTimeout = setTimeout;
-               } else {
-                   cachedSetTimeout = defaultSetTimout;
-               }
-           } catch (e) {
-               cachedSetTimeout = defaultSetTimout;
-           }
-           try {
-               if (typeof clearTimeout === 'function') {
-                   cachedClearTimeout = clearTimeout;
-               } else {
-                   cachedClearTimeout = defaultClearTimeout;
-               }
-           } catch (e) {
-               cachedClearTimeout = defaultClearTimeout;
-           }
-       } ())
-       function runTimeout(fun) {
-           if (cachedSetTimeout === setTimeout) {
-               //normal enviroments in sane situations
-               return setTimeout(fun, 0);
-           }
-           // if setTimeout wasn't available but was latter defined
-           if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
-               cachedSetTimeout = setTimeout;
-               return setTimeout(fun, 0);
-           }
-           try {
-               // when when somebody has screwed with setTimeout but no I.E. maddness
-               return cachedSetTimeout(fun, 0);
-           } catch(e){
-               try {
-                   // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
-                   return cachedSetTimeout.call(null, fun, 0);
-               } catch(e){
-                   // 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
-                   return cachedSetTimeout.call(this, fun, 0);
-               }
-           }
-
-
-       }
-       function runClearTimeout(marker) {
-           if (cachedClearTimeout === clearTimeout) {
-               //normal enviroments in sane situations
-               return clearTimeout(marker);
-           }
-           // if clearTimeout wasn't available but was latter defined
-           if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
-               cachedClearTimeout = clearTimeout;
-               return clearTimeout(marker);
-           }
-           try {
-               // when when somebody has screwed with setTimeout but no I.E. maddness
-               return cachedClearTimeout(marker);
-           } catch (e){
-               try {
-                   // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
-                   return cachedClearTimeout.call(null, marker);
-               } catch (e){
-                   // 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.
-                   // Some versions of I.E. have different rules for clearTimeout vs setTimeout
-                   return cachedClearTimeout.call(this, marker);
-               }
-           }
-
-
-
-       }
-       var queue = [];
-       var draining = false;
-       var currentQueue;
-       var queueIndex = -1;
-
-       function cleanUpNextTick() {
-           if (!draining || !currentQueue) {
-               return;
-           }
-           draining = false;
-           if (currentQueue.length) {
-               queue = currentQueue.concat(queue);
-           } else {
-               queueIndex = -1;
-           }
-           if (queue.length) {
-               drainQueue();
-           }
-       }
-
-       function drainQueue() {
-           if (draining) {
-               return;
-           }
-           var timeout = runTimeout(cleanUpNextTick);
-           draining = true;
-
-           var len = queue.length;
-           while(len) {
-               currentQueue = queue;
-               queue = [];
-               while (++queueIndex < len) {
-                   if (currentQueue) {
-                       currentQueue[queueIndex].run();
-                   }
-               }
-               queueIndex = -1;
-               len = queue.length;
-           }
-           currentQueue = null;
-           draining = false;
-           runClearTimeout(timeout);
-       }
-
-       process.nextTick = function (fun) {
-           var args = new Array(arguments.length - 1);
-           if (arguments.length > 1) {
-               for (var i = 1; i < arguments.length; i++) {
-                   args[i - 1] = arguments[i];
-               }
-           }
-           queue.push(new Item(fun, args));
-           if (queue.length === 1 && !draining) {
-               runTimeout(drainQueue);
-           }
-       };
-
-       // v8 likes predictible objects
-       function Item(fun, array) {
-           this.fun = fun;
-           this.array = array;
-       }
-       Item.prototype.run = function () {
-           this.fun.apply(null, this.array);
-       };
-       process.title = 'browser';
-       process.browser = true;
-       process.env = {};
-       process.argv = [];
-       process.version = ''; // empty string to avoid regexp issues
-       process.versions = {};
-
-       function noop() {}
-
-       process.on = noop;
-       process.addListener = noop;
-       process.once = noop;
-       process.off = noop;
-       process.removeListener = noop;
-       process.removeAllListeners = noop;
-       process.emit = noop;
-       process.prependListener = noop;
-       process.prependOnceListener = noop;
-
-       process.listeners = function (name) { return [] }
-
-       process.binding = function (name) {
-           throw new Error('process.binding is not supported');
-       };
-
-       process.cwd = function () { return '/' };
-       process.chdir = function (dir) {
-           throw new Error('process.chdir is not supported');
-       };
-       process.umask = function() { return 0; };
-
-
-/***/ },
-/* 24 */
-/***/ function(module, exports, __webpack_require__) {
-
-       'use strict';
-
-       function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
-
-       /**
-        * This is the common logic for both the Node.js and web browser
-        * implementations of `debug()`.
-        */
-
-       function setup(env) {
-               createDebug.debug = createDebug;
-               createDebug.default = createDebug;
-               createDebug.coerce = coerce;
-               createDebug.disable = disable;
-               createDebug.enable = enable;
-               createDebug.enabled = enabled;
-               createDebug.humanize = __webpack_require__(25);
-
-               Object.keys(env).forEach(function (key) {
-                       createDebug[key] = env[key];
-               });
-
-               /**
-        * Active `debug` instances.
-        */
-               createDebug.instances = [];
-
-               /**
-        * The currently active debug mode names, and names to skip.
-        */
-
-               createDebug.names = [];
-               createDebug.skips = [];
-
-               /**
-        * Map of special "%n" handling functions, for the debug "format" argument.
-        *
-        * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
-        */
-               createDebug.formatters = {};
-
-               /**
-        * Selects a color for a debug namespace
-        * @param {String} namespace The namespace string for the for the debug instance to be colored
-        * @return {Number|String} An ANSI color code for the given namespace
-        * @api private
-        */
-               function selectColor(namespace) {
-                       var hash = 0;
-
-                       for (var i = 0; i < namespace.length; i++) {
-                               hash = (hash << 5) - hash + namespace.charCodeAt(i);
-                               hash |= 0; // Convert to 32bit integer
-                       }
-
-                       return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
-               }
-               createDebug.selectColor = selectColor;
-
-               /**
-        * Create a debugger with the given `namespace`.
-        *
-        * @param {String} namespace
-        * @return {Function}
-        * @api public
-        */
-               function createDebug(namespace) {
-                       var prevTime = void 0;
-
-                       function debug() {
-                               for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-                                       args[_key] = arguments[_key];
-                               }
-
-                               // Disabled?
-                               if (!debug.enabled) {
-                                       return;
-                               }
-
-                               var self = debug;
-
-                               // Set `diff` timestamp
-                               var curr = Number(new Date());
-                               var ms = curr - (prevTime || curr);
-                               self.diff = ms;
-                               self.prev = prevTime;
-                               self.curr = curr;
-                               prevTime = curr;
-
-                               args[0] = createDebug.coerce(args[0]);
-
-                               if (typeof args[0] !== 'string') {
-                                       // Anything else let's inspect with %O
-                                       args.unshift('%O');
-                               }
-
-                               // Apply any `formatters` transformations
-                               var index = 0;
-                               args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
-                                       // If we encounter an escaped % then don't increase the array index
-                                       if (match === '%%') {
-                                               return match;
-                                       }
-                                       index++;
-                                       var formatter = createDebug.formatters[format];
-                                       if (typeof formatter === 'function') {
-                                               var val = args[index];
-                                               match = formatter.call(self, val);
-
-                                               // Now we need to remove `args[index]` since it's inlined in the `format`
-                                               args.splice(index, 1);
-                                               index--;
-                                       }
-                                       return match;
-                               });
-
-                               // Apply env-specific formatting (colors, etc.)
-                               createDebug.formatArgs.call(self, args);
-
-                               var logFn = self.log || createDebug.log;
-                               logFn.apply(self, args);
-                       }
-
-                       debug.namespace = namespace;
-                       debug.enabled = createDebug.enabled(namespace);
-                       debug.useColors = createDebug.useColors();
-                       debug.color = selectColor(namespace);
-                       debug.destroy = destroy;
-                       debug.extend = extend;
-                       // Debug.formatArgs = formatArgs;
-                       // debug.rawLog = rawLog;
-
-                       // env-specific initialization logic for debug instances
-                       if (typeof createDebug.init === 'function') {
-                               createDebug.init(debug);
-                       }
-
-                       createDebug.instances.push(debug);
-
-                       return debug;
-               }
-
-               function destroy() {
-                       var index = createDebug.instances.indexOf(this);
-                       if (index !== -1) {
-                               createDebug.instances.splice(index, 1);
-                               return true;
-                       }
-                       return false;
-               }
-
-               function extend(namespace, delimiter) {
-                       var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
-                       newDebug.log = this.log;
-                       return newDebug;
-               }
-
-               /**
-        * Enables a debug mode by namespaces. This can include modes
-        * separated by a colon and wildcards.
-        *
-        * @param {String} namespaces
-        * @api public
-        */
-               function enable(namespaces) {
-                       createDebug.save(namespaces);
-
-                       createDebug.names = [];
-                       createDebug.skips = [];
-
-                       var i = void 0;
-                       var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
-                       var len = split.length;
-
-                       for (i = 0; i < len; i++) {
-                               if (!split[i]) {
-                                       // ignore empty strings
-                                       continue;
-                               }
-
-                               namespaces = split[i].replace(/\*/g, '.*?');
-
-                               if (namespaces[0] === '-') {
-                                       createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
-                               } else {
-                                       createDebug.names.push(new RegExp('^' + namespaces + '$'));
-                               }
-                       }
-
-                       for (i = 0; i < createDebug.instances.length; i++) {
-                               var instance = createDebug.instances[i];
-                               instance.enabled = createDebug.enabled(instance.namespace);
-                       }
-               }
-
-               /**
-        * Disable debug output.
-        *
-        * @return {String} namespaces
-        * @api public
-        */
-               function disable() {
-                       var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) {
-                               return '-' + namespace;
-                       }))).join(',');
-                       createDebug.enable('');
-                       return namespaces;
-               }
-
-               /**
-        * Returns true if the given mode name is enabled, false otherwise.
-        *
-        * @param {String} name
-        * @return {Boolean}
-        * @api public
-        */
-               function enabled(name) {
-                       if (name[name.length - 1] === '*') {
-                               return true;
-                       }
-
-                       var i = void 0;
-                       var len = void 0;
-
-                       for (i = 0, len = createDebug.skips.length; i < len; i++) {
-                               if (createDebug.skips[i].test(name)) {
-                                       return false;
-                               }
-                       }
-
-                       for (i = 0, len = createDebug.names.length; i < len; i++) {
-                               if (createDebug.names[i].test(name)) {
-                                       return true;
-                               }
-                       }
-
-                       return false;
-               }
-
-               /**
-        * Convert regexp to namespace
-        *
-        * @param {RegExp} regxep
-        * @return {String} namespace
-        * @api private
-        */
-               function toNamespace(regexp) {
-                       return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*');
-               }
-
-               /**
-        * Coerce `val`.
-        *
-        * @param {Mixed} val
-        * @return {Mixed}
-        * @api private
-        */
-               function coerce(val) {
-                       if (val instanceof Error) {
-                               return val.stack || val.message;
-                       }
-                       return val;
-               }
-
-               createDebug.enable(createDebug.load());
-
-               return createDebug;
-       }
-
-       module.exports = setup;
-
-/***/ },
-/* 25 */
-/***/ function(module, exports) {
-
-       /**
-        * Helpers.
-        */
-
-       var s = 1000;
-       var m = s * 60;
-       var h = m * 60;
-       var d = h * 24;
-       var w = d * 7;
-       var y = d * 365.25;
-
-       /**
-        * Parse or format the given `val`.
-        *
-        * Options:
-        *
-        *  - `long` verbose formatting [false]
-        *
-        * @param {String|Number} val
-        * @param {Object} [options]
-        * @throws {Error} throw an error if val is not a non-empty string or a number
-        * @return {String|Number}
-        * @api public
-        */
-
-       module.exports = function(val, options) {
-         options = options || {};
-         var type = typeof val;
-         if (type === 'string' && val.length > 0) {
-           return parse(val);
-         } else if (type === 'number' && isFinite(val)) {
-           return options.long ? fmtLong(val) : fmtShort(val);
-         }
-         throw new Error(
-           'val is not a non-empty string or a valid number. val=' +
-             JSON.stringify(val)
-         );
-       };
-
-       /**
-        * Parse the given `str` and return milliseconds.
-        *
-        * @param {String} str
-        * @return {Number}
-        * @api private
-        */
-
-       function parse(str) {
-         str = String(str);
-         if (str.length > 100) {
-           return;
-         }
-         var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
-           str
-         );
-         if (!match) {
-           return;
-         }
-         var n = parseFloat(match[1]);
-         var type = (match[2] || 'ms').toLowerCase();
-         switch (type) {
-           case 'years':
-           case 'year':
-           case 'yrs':
-           case 'yr':
-           case 'y':
-             return n * y;
-           case 'weeks':
-           case 'week':
-           case 'w':
-             return n * w;
-           case 'days':
-           case 'day':
-           case 'd':
-             return n * d;
-           case 'hours':
-           case 'hour':
-           case 'hrs':
-           case 'hr':
-           case 'h':
-             return n * h;
-           case 'minutes':
-           case 'minute':
-           case 'mins':
-           case 'min':
-           case 'm':
-             return n * m;
-           case 'seconds':
-           case 'second':
-           case 'secs':
-           case 'sec':
-           case 's':
-             return n * s;
-           case 'milliseconds':
-           case 'millisecond':
-           case 'msecs':
-           case 'msec':
-           case 'ms':
-             return n;
-           default:
-             return undefined;
-         }
-       }
-
-       /**
-        * Short format for `ms`.
-        *
-        * @param {Number} ms
-        * @return {String}
-        * @api private
-        */
-
-       function fmtShort(ms) {
-         var msAbs = Math.abs(ms);
-         if (msAbs >= d) {
-           return Math.round(ms / d) + 'd';
-         }
-         if (msAbs >= h) {
-           return Math.round(ms / h) + 'h';
-         }
-         if (msAbs >= m) {
-           return Math.round(ms / m) + 'm';
-         }
-         if (msAbs >= s) {
-           return Math.round(ms / s) + 's';
-         }
-         return ms + 'ms';
-       }
-
-       /**
-        * Long format for `ms`.
-        *
-        * @param {Number} ms
-        * @return {String}
-        * @api private
-        */
-
-       function fmtLong(ms) {
-         var msAbs = Math.abs(ms);
-         if (msAbs >= d) {
-           return plural(ms, msAbs, d, 'day');
-         }
-         if (msAbs >= h) {
-           return plural(ms, msAbs, h, 'hour');
-         }
-         if (msAbs >= m) {
-           return plural(ms, msAbs, m, 'minute');
-         }
-         if (msAbs >= s) {
-           return plural(ms, msAbs, s, 'second');
-         }
-         return ms + ' ms';
-       }
-
-       /**
-        * Pluralization helper.
-        */
-
-       function plural(ms, msAbs, n, name) {
-         var isPlural = msAbs >= n * 1.5;
-         return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
-       }
-
-
-/***/ },
-/* 26 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * Module requirements.
-        */
-
-       var Polling = __webpack_require__(7);
-       var inherit = __webpack_require__(20);
-       var globalThis = __webpack_require__(5);
-
-       /**
-        * Module exports.
-        */
-
-       module.exports = JSONPPolling;
-
-       /**
-        * Cached regular expressions.
-        */
-
-       var rNewline = /\n/g;
-       var rEscapedNewline = /\\n/g;
-
-       /**
-        * Global JSONP callbacks.
-        */
-
-       var callbacks;
-
-       /**
-        * Noop.
-        */
-
-       function empty () { }
-
-       /**
-        * JSONP Polling constructor.
-        *
-        * @param {Object} opts.
-        * @api public
-        */
-
-       function JSONPPolling (opts) {
-         Polling.call(this, opts);
-
-         this.query = this.query || {};
-
-         // define global callbacks array if not present
-         // we do this here (lazily) to avoid unneeded global pollution
-         if (!callbacks) {
-           // we need to consider multiple engines in the same page
-           callbacks = globalThis.___eio = (globalThis.___eio || []);
-         }
-
-         // callback identifier
-         this.index = callbacks.length;
-
-         // add callback to jsonp global
-         var self = this;
-         callbacks.push(function (msg) {
-           self.onData(msg);
-         });
-
-         // append to query string
-         this.query.j = this.index;
-
-         // prevent spurious errors from being emitted when the window is unloaded
-         if (typeof addEventListener === 'function') {
-           addEventListener('beforeunload', function () {
-             if (self.script) self.script.onerror = empty;
-           }, false);
-         }
-       }
-
-       /**
-        * Inherits from Polling.
-        */
-
-       inherit(JSONPPolling, Polling);
-
-       /*
-        * JSONP only supports binary as base64 encoded strings
-        */
-
-       JSONPPolling.prototype.supportsBinary = false;
-
-       /**
-        * Closes the socket.
-        *
-        * @api private
-        */
-
-       JSONPPolling.prototype.doClose = function () {
-         if (this.script) {
-           this.script.parentNode.removeChild(this.script);
-           this.script = null;
-         }
-
-         if (this.form) {
-           this.form.parentNode.removeChild(this.form);
-           this.form = null;
-           this.iframe = null;
-         }
-
-         Polling.prototype.doClose.call(this);
-       };
-
-       /**
-        * Starts a poll cycle.
-        *
-        * @api private
-        */
-
-       JSONPPolling.prototype.doPoll = function () {
-         var self = this;
-         var script = document.createElement('script');
-
-         if (this.script) {
-           this.script.parentNode.removeChild(this.script);
-           this.script = null;
-         }
-
-         script.async = true;
-         script.src = this.uri();
-         script.onerror = function (e) {
-           self.onError('jsonp poll error', e);
-         };
-
-         var insertAt = document.getElementsByTagName('script')[0];
-         if (insertAt) {
-           insertAt.parentNode.insertBefore(script, insertAt);
-         } else {
-           (document.head || document.body).appendChild(script);
-         }
-         this.script = script;
-
-         var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);
-
-         if (isUAgecko) {
-           setTimeout(function () {
-             var iframe = document.createElement('iframe');
-             document.body.appendChild(iframe);
-             document.body.removeChild(iframe);
-           }, 100);
-         }
-       };
-
-       /**
-        * Writes with a hidden iframe.
-        *
-        * @param {String} data to send
-        * @param {Function} called upon flush.
-        * @api private
-        */
-
-       JSONPPolling.prototype.doWrite = function (data, fn) {
-         var self = this;
-
-         if (!this.form) {
-           var form = document.createElement('form');
-           var area = document.createElement('textarea');
-           var id = this.iframeId = 'eio_iframe_' + this.index;
-           var iframe;
-
-           form.className = 'socketio';
-           form.style.position = 'absolute';
-           form.style.top = '-1000px';
-           form.style.left = '-1000px';
-           form.target = id;
-           form.method = 'POST';
-           form.setAttribute('accept-charset', 'utf-8');
-           area.name = 'd';
-           form.appendChild(area);
-           document.body.appendChild(form);
-
-           this.form = form;
-           this.area = area;
-         }
-
-         this.form.action = this.uri();
-
-         function complete () {
-           initIframe();
-           fn();
-         }
-
-         function initIframe () {
-           if (self.iframe) {
-             try {
-               self.form.removeChild(self.iframe);
-             } catch (e) {
-               self.onError('jsonp polling iframe removal error', e);
-             }
-           }
-
-           try {
-             // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
-             var html = '<iframe src="javascript:0" name="' + self.iframeId + '">';
-             iframe = document.createElement(html);
-           } catch (e) {
-             iframe = document.createElement('iframe');
-             iframe.name = self.iframeId;
-             iframe.src = 'javascript:0';
-           }
-
-           iframe.id = self.iframeId;
-
-           self.form.appendChild(iframe);
-           self.iframe = iframe;
-         }
-
-         initIframe();
-
-         // escape \n to prevent it from being converted into \r\n by some UAs
-         // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side
-         data = data.replace(rEscapedNewline, '\\\n');
-         this.area.value = data.replace(rNewline, '\\n');
-
-         try {
-           this.form.submit();
-         } catch (e) {}
-
-         if (this.iframe.attachEvent) {
-           this.iframe.onreadystatechange = function () {
-             if (self.iframe.readyState === 'complete') {
-               complete();
-             }
-           };
-         } else {
-           this.iframe.onload = complete;
-         }
-       };
-
-
-/***/ },
-/* 27 */
-/***/ function(module, exports, __webpack_require__) {
-
-       /**
-        * Module dependencies.
-        */
-
-       var Transport = __webpack_require__(8);
-       var parser = __webpack_require__(9);
-       var parseqs = __webpack_require__(19);
-       var inherit = __webpack_require__(20);
-       var yeast = __webpack_require__(21);
-       var debug = __webpack_require__(22)('engine.io-client:websocket');
-
-       var BrowserWebSocket, NodeWebSocket;
-
-       if (typeof WebSocket !== 'undefined') {
-         BrowserWebSocket = WebSocket;
-       } else if (typeof self !== 'undefined') {
-         BrowserWebSocket = self.WebSocket || self.MozWebSocket;
-       }
-
-       if (typeof window === 'undefined') {
-         try {
-           NodeWebSocket = __webpack_require__(28);
-         } catch (e) { }
-       }
-
-       /**
-        * Get either the `WebSocket` or `MozWebSocket` globals
-        * in the browser or try to resolve WebSocket-compatible
-        * interface exposed by `ws` for Node-like environment.
-        */
-
-       var WebSocketImpl = BrowserWebSocket || NodeWebSocket;
-
-       /**
-        * Module exports.
-        */
-
-       module.exports = WS;
-
-       /**
-        * WebSocket transport constructor.
-        *
-        * @api {Object} connection options
-        * @api public
-        */
-
-       function WS (opts) {
-         var forceBase64 = (opts && opts.forceBase64);
-         if (forceBase64) {
-           this.supportsBinary = false;
-         }
-         this.perMessageDeflate = opts.perMessageDeflate;
-         this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;
-         this.protocols = opts.protocols;
-         if (!this.usingBrowserWebSocket) {
-           WebSocketImpl = NodeWebSocket;
-         }
-         Transport.call(this, opts);
-       }
-
-       /**
-        * Inherits from Transport.
-        */
-
-       inherit(WS, Transport);
-
-       /**
-        * Transport name.
-        *
-        * @api public
-        */
-
-       WS.prototype.name = 'websocket';
-
-       /*
-        * WebSockets support binary
-        */
-
-       WS.prototype.supportsBinary = true;
-
-       /**
-        * Opens socket.
-        *
-        * @api private
-        */
-
-       WS.prototype.doOpen = function () {
-         if (!this.check()) {
-           // let probe timeout
-           return;
-         }
-
-         var uri = this.uri();
-         var protocols = this.protocols;
-         var opts = {
-           agent: this.agent,
-           perMessageDeflate: this.perMessageDeflate
-         };
-
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
-         if (this.extraHeaders) {
-           opts.headers = this.extraHeaders;
-         }
-         if (this.localAddress) {
-           opts.localAddress = this.localAddress;
-         }
-
-         try {
-           this.ws =
-             this.usingBrowserWebSocket && !this.isReactNative
-               ? protocols
-                 ? new WebSocketImpl(uri, protocols)
-                 : new WebSocketImpl(uri)
-               : new WebSocketImpl(uri, protocols, opts);
-         } catch (err) {
-           return this.emit('error', err);
-         }
-
-         if (this.ws.binaryType === undefined) {
-           this.supportsBinary = false;
-         }
-
-         if (this.ws.supports && this.ws.supports.binary) {
-           this.supportsBinary = true;
-           this.ws.binaryType = 'nodebuffer';
-         } else {
-           this.ws.binaryType = 'arraybuffer';
-         }
-
-         this.addEventListeners();
-       };
-
-       /**
-        * Adds event listeners to the socket
-        *
-        * @api private
-        */
-
-       WS.prototype.addEventListeners = function () {
-         var self = this;
-
-         this.ws.onopen = function () {
-           self.onOpen();
-         };
-         this.ws.onclose = function () {
-           self.onClose();
-         };
-         this.ws.onmessage = function (ev) {
-           self.onData(ev.data);
-         };
-         this.ws.onerror = function (e) {
-           self.onError('websocket error', e);
-         };
-       };
-
-       /**
-        * Writes data to socket.
-        *
-        * @param {Array} array of packets.
-        * @api private
-        */
-
-       WS.prototype.write = function (packets) {
-         var self = this;
-         this.writable = false;
-
-         // encodePacket efficient as it uses WS framing
-         // no need for encodePayload
-         var total = packets.length;
-         for (var i = 0, l = total; i < l; i++) {
-           (function (packet) {
-             parser.encodePacket(packet, self.supportsBinary, function (data) {
-               if (!self.usingBrowserWebSocket) {
-                 // always create a new object (GH-437)
-                 var opts = {};
-                 if (packet.options) {
-                   opts.compress = packet.options.compress;
-                 }
-
-                 if (self.perMessageDeflate) {
-                   var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;
-                   if (len < self.perMessageDeflate.threshold) {
-                     opts.compress = false;
-                   }
-                 }
-               }
-
-               // Sometimes the websocket has already been closed but the browser didn't
-               // have a chance of informing us about it yet, in that case send will
-               // throw an error
-               try {
-                 if (self.usingBrowserWebSocket) {
-                   // TypeError is thrown when passing the second argument on Safari
-                   self.ws.send(data);
-                 } else {
-                   self.ws.send(data, opts);
-                 }
-               } catch (e) {
-                 debug('websocket closed before onclose event');
-               }
-
-               --total || done();
-             });
-           })(packets[i]);
-         }
-
-         function done () {
-           self.emit('flush');
-
-           // fake drain
-           // defer to next tick to allow Socket to clear writeBuffer
-           setTimeout(function () {
-             self.writable = true;
-             self.emit('drain');
-           }, 0);
-         }
-       };
-
-       /**
-        * Called upon close
-        *
-        * @api private
-        */
-
-       WS.prototype.onClose = function () {
-         Transport.prototype.onClose.call(this);
-       };
-
-       /**
-        * Closes socket.
-        *
-        * @api private
-        */
-
-       WS.prototype.doClose = function () {
-         if (typeof this.ws !== 'undefined') {
-           this.ws.close();
-         }
-       };
-
-       /**
-        * Generates uri for connection.
-        *
-        * @api private
-        */
-
-       WS.prototype.uri = function () {
-         var query = this.query || {};
-         var schema = this.secure ? 'wss' : 'ws';
-         var port = '';
-
-         // avoid port if default for schema
-         if (this.port && (('wss' === schema && Number(this.port) !== 443) ||
-           ('ws' === schema && Number(this.port) !== 80))) {
-           port = ':' + this.port;
-         }
-
-         // append timestamp to URI
-         if (this.timestampRequests) {
-           query[this.timestampParam] = yeast();
-         }
-
-         // communicate binary support capabilities
-         if (!this.supportsBinary) {
-           query.b64 = 1;
-         }
-
-         query = parseqs.encode(query);
-
-         // prepend ? to query
-         if (query.length) {
-           query = '?' + query;
-         }
-
-         var ipv6 = this.hostname.indexOf(':') !== -1;
-         return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
-       };
-
-       /**
-        * Feature detection for WebSocket.
-        *
-        * @return {Boolean} whether this transport is available.
-        * @api public
-        */
-
-       WS.prototype.check = function () {
-         return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);
-       };
-
-
-/***/ },
-/* 28 */
-/***/ function(module, exports) {
-
-       /* (ignored) */
-
-/***/ },
-/* 29 */
-/***/ function(module, exports) {
-
-       
-       var indexOf = [].indexOf;
-
-       module.exports = function(arr, obj){
-         if (indexOf) return arr.indexOf(obj);
-         for (var i = 0; i < arr.length; ++i) {
-           if (arr[i] === obj) return i;
-         }
-         return -1;
-       };
-
-/***/ },
-/* 30 */
-/***/ function(module, exports) {
-
-       /**\r
-        * Parses an URI\r
-        *\r
-        * @author Steven Levithan <stevenlevithan.com> (MIT license)\r
-        * @api private\r
-        */\r
-\r
-       var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;\r
-\r
-       var parts = [\r
-           'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r
-       ];\r
-\r
-       module.exports = function parseuri(str) {\r
-           var src = str,\r
-               b = str.indexOf('['),\r
-               e = str.indexOf(']');\r
-\r
-           if (b != -1 && e != -1) {\r
-               str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r
-           }\r
-\r
-           var m = re.exec(str || ''),\r
-               uri = {},\r
-               i = 14;\r
-\r
-           while (i--) {\r
-               uri[parts[i]] = m[i] || '';\r
-           }\r
-\r
-           if (b != -1 && e != -1) {\r
-               uri.source = src;\r
-               uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r
-               uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r
-               uri.ipv6uri = true;\r
-           }\r
-\r
-           return uri;\r
-       };\r
-
-
-/***/ }
-/******/ ])
-});
-;
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/socket.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/socket.js
deleted file mode 100644 (file)
index 8a67cfa..0000000
+++ /dev/null
@@ -1,748 +0,0 @@
-/**
- * Module dependencies.
- */
-
-var transports = require('./transports/index');
-var Emitter = require('component-emitter');
-var debug = require('debug')('engine.io-client:socket');
-var index = require('indexof');
-var parser = require('engine.io-parser');
-var parseuri = require('parseuri');
-var parseqs = require('parseqs');
-
-/**
- * Module exports.
- */
-
-module.exports = Socket;
-
-/**
- * Socket constructor.
- *
- * @param {String|Object} uri or options
- * @param {Object} options
- * @api public
- */
-
-function Socket (uri, opts) {
-  if (!(this instanceof Socket)) return new Socket(uri, opts);
-
-  opts = opts || {};
-
-  if (uri && 'object' === typeof uri) {
-    opts = uri;
-    uri = null;
-  }
-
-  if (uri) {
-    uri = parseuri(uri);
-    opts.hostname = uri.host;
-    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';
-    opts.port = uri.port;
-    if (uri.query) opts.query = uri.query;
-  } else if (opts.host) {
-    opts.hostname = parseuri(opts.host).host;
-  }
-
-  this.secure = null != opts.secure ? opts.secure
-    : (typeof location !== 'undefined' && 'https:' === location.protocol);
-
-  if (opts.hostname && !opts.port) {
-    // if no port is specified manually, use the protocol default
-    opts.port = this.secure ? '443' : '80';
-  }
-
-  this.agent = opts.agent || false;
-  this.hostname = opts.hostname ||
-    (typeof location !== 'undefined' ? location.hostname : 'localhost');
-  this.port = opts.port || (typeof location !== 'undefined' && location.port
-      ? location.port
-      : (this.secure ? 443 : 80));
-  this.query = opts.query || {};
-  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);
-  this.upgrade = false !== opts.upgrade;
-  this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
-  this.forceJSONP = !!opts.forceJSONP;
-  this.jsonp = false !== opts.jsonp;
-  this.forceBase64 = !!opts.forceBase64;
-  this.enablesXDR = !!opts.enablesXDR;
-  this.withCredentials = false !== opts.withCredentials;
-  this.timestampParam = opts.timestampParam || 't';
-  this.timestampRequests = opts.timestampRequests;
-  this.transports = opts.transports || ['polling', 'websocket'];
-  this.transportOptions = opts.transportOptions || {};
-  this.readyState = '';
-  this.writeBuffer = [];
-  this.prevBufferLen = 0;
-  this.policyPort = opts.policyPort || 843;
-  this.rememberUpgrade = opts.rememberUpgrade || false;
-  this.binaryType = null;
-  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
-  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;
-
-  if (true === this.perMessageDeflate) this.perMessageDeflate = {};
-  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {
-    this.perMessageDeflate.threshold = 1024;
-  }
-
-  // SSL options for Node.js client
-  this.pfx = opts.pfx || null;
-  this.key = opts.key || null;
-  this.passphrase = opts.passphrase || null;
-  this.cert = opts.cert || null;
-  this.ca = opts.ca || null;
-  this.ciphers = opts.ciphers || null;
-  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;
-  this.forceNode = !!opts.forceNode;
-
-  // detect ReactNative environment
-  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');
-
-  // other options for Node.js or ReactNative client
-  if (typeof self === 'undefined' || this.isReactNative) {
-    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {
-      this.extraHeaders = opts.extraHeaders;
-    }
-
-    if (opts.localAddress) {
-      this.localAddress = opts.localAddress;
-    }
-  }
-
-  // set on handshake
-  this.id = null;
-  this.upgrades = null;
-  this.pingInterval = null;
-  this.pingTimeout = null;
-
-  // set on heartbeat
-  this.pingIntervalTimer = null;
-  this.pingTimeoutTimer = null;
-
-  this.open();
-}
-
-Socket.priorWebsocketSuccess = false;
-
-/**
- * Mix in `Emitter`.
- */
-
-Emitter(Socket.prototype);
-
-/**
- * Protocol version.
- *
- * @api public
- */
-
-Socket.protocol = parser.protocol; // this is an int
-
-/**
- * Expose deps for legacy compatibility
- * and standalone browser access.
- */
-
-Socket.Socket = Socket;
-Socket.Transport = require('./transport');
-Socket.transports = require('./transports/index');
-Socket.parser = require('engine.io-parser');
-
-/**
- * Creates transport of the given type.
- *
- * @param {String} transport name
- * @return {Transport}
- * @api private
- */
-
-Socket.prototype.createTransport = function (name) {
-  debug('creating transport "%s"', name);
-  var query = clone(this.query);
-
-  // append engine.io protocol identifier
-  query.EIO = parser.protocol;
-
-  // transport name
-  query.transport = name;
-
-  // per-transport options
-  var options = this.transportOptions[name] || {};
-
-  // session id if we already have one
-  if (this.id) query.sid = this.id;
-
-  var transport = new transports[name]({
-    query: query,
-    socket: this,
-    agent: options.agent || this.agent,
-    hostname: options.hostname || this.hostname,
-    port: options.port || this.port,
-    secure: options.secure || this.secure,
-    path: options.path || this.path,
-    forceJSONP: options.forceJSONP || this.forceJSONP,
-    jsonp: options.jsonp || this.jsonp,
-    forceBase64: options.forceBase64 || this.forceBase64,
-    enablesXDR: options.enablesXDR || this.enablesXDR,
-    withCredentials: options.withCredentials || this.withCredentials,
-    timestampRequests: options.timestampRequests || this.timestampRequests,
-    timestampParam: options.timestampParam || this.timestampParam,
-    policyPort: options.policyPort || this.policyPort,
-    pfx: options.pfx || this.pfx,
-    key: options.key || this.key,
-    passphrase: options.passphrase || this.passphrase,
-    cert: options.cert || this.cert,
-    ca: options.ca || this.ca,
-    ciphers: options.ciphers || this.ciphers,
-    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,
-    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,
-    extraHeaders: options.extraHeaders || this.extraHeaders,
-    forceNode: options.forceNode || this.forceNode,
-    localAddress: options.localAddress || this.localAddress,
-    requestTimeout: options.requestTimeout || this.requestTimeout,
-    protocols: options.protocols || void (0),
-    isReactNative: this.isReactNative
-  });
-
-  return transport;
-};
-
-function clone (obj) {
-  var o = {};
-  for (var i in obj) {
-    if (obj.hasOwnProperty(i)) {
-      o[i] = obj[i];
-    }
-  }
-  return o;
-}
-
-/**
- * Initializes transport to use and starts probe.
- *
- * @api private
- */
-Socket.prototype.open = function () {
-  var transport;
-  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {
-    transport = 'websocket';
-  } else if (0 === this.transports.length) {
-    // Emit error on next tick so it can be listened to
-    var self = this;
-    setTimeout(function () {
-      self.emit('error', 'No transports available');
-    }, 0);
-    return;
-  } else {
-    transport = this.transports[0];
-  }
-  this.readyState = 'opening';
-
-  // Retry with the next transport if the transport is disabled (jsonp: false)
-  try {
-    transport = this.createTransport(transport);
-  } catch (e) {
-    this.transports.shift();
-    this.open();
-    return;
-  }
-
-  transport.open();
-  this.setTransport(transport);
-};
-
-/**
- * Sets the current transport. Disables the existing one (if any).
- *
- * @api private
- */
-
-Socket.prototype.setTransport = function (transport) {
-  debug('setting transport %s', transport.name);
-  var self = this;
-
-  if (this.transport) {
-    debug('clearing existing transport %s', this.transport.name);
-    this.transport.removeAllListeners();
-  }
-
-  // set up transport
-  this.transport = transport;
-
-  // set up transport listeners
-  transport
-  .on('drain', function () {
-    self.onDrain();
-  })
-  .on('packet', function (packet) {
-    self.onPacket(packet);
-  })
-  .on('error', function (e) {
-    self.onError(e);
-  })
-  .on('close', function () {
-    self.onClose('transport close');
-  });
-};
-
-/**
- * Probes a transport.
- *
- * @param {String} transport name
- * @api private
- */
-
-Socket.prototype.probe = function (name) {
-  debug('probing transport "%s"', name);
-  var transport = this.createTransport(name, { probe: 1 });
-  var failed = false;
-  var self = this;
-
-  Socket.priorWebsocketSuccess = false;
-
-  function onTransportOpen () {
-    if (self.onlyBinaryUpgrades) {
-      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
-      failed = failed || upgradeLosesBinary;
-    }
-    if (failed) return;
-
-    debug('probe transport "%s" opened', name);
-    transport.send([{ type: 'ping', data: 'probe' }]);
-    transport.once('packet', function (msg) {
-      if (failed) return;
-      if ('pong' === msg.type && 'probe' === msg.data) {
-        debug('probe transport "%s" pong', name);
-        self.upgrading = true;
-        self.emit('upgrading', transport);
-        if (!transport) return;
-        Socket.priorWebsocketSuccess = 'websocket' === transport.name;
-
-        debug('pausing current transport "%s"', self.transport.name);
-        self.transport.pause(function () {
-          if (failed) return;
-          if ('closed' === self.readyState) return;
-          debug('changing transport and sending upgrade packet');
-
-          cleanup();
-
-          self.setTransport(transport);
-          transport.send([{ type: 'upgrade' }]);
-          self.emit('upgrade', transport);
-          transport = null;
-          self.upgrading = false;
-          self.flush();
-        });
-      } else {
-        debug('probe transport "%s" failed', name);
-        var err = new Error('probe error');
-        err.transport = transport.name;
-        self.emit('upgradeError', err);
-      }
-    });
-  }
-
-  function freezeTransport () {
-    if (failed) return;
-
-    // Any callback called by transport should be ignored since now
-    failed = true;
-
-    cleanup();
-
-    transport.close();
-    transport = null;
-  }
-
-  // Handle any error that happens while probing
-  function onerror (err) {
-    var error = new Error('probe error: ' + err);
-    error.transport = transport.name;
-
-    freezeTransport();
-
-    debug('probe transport "%s" failed because of error: %s', name, err);
-
-    self.emit('upgradeError', error);
-  }
-
-  function onTransportClose () {
-    onerror('transport closed');
-  }
-
-  // When the socket is closed while we're probing
-  function onclose () {
-    onerror('socket closed');
-  }
-
-  // When the socket is upgraded while we're probing
-  function onupgrade (to) {
-    if (transport && to.name !== transport.name) {
-      debug('"%s" works - aborting "%s"', to.name, transport.name);
-      freezeTransport();
-    }
-  }
-
-  // Remove all listeners on the transport and on self
-  function cleanup () {
-    transport.removeListener('open', onTransportOpen);
-    transport.removeListener('error', onerror);
-    transport.removeListener('close', onTransportClose);
-    self.removeListener('close', onclose);
-    self.removeListener('upgrading', onupgrade);
-  }
-
-  transport.once('open', onTransportOpen);
-  transport.once('error', onerror);
-  transport.once('close', onTransportClose);
-
-  this.once('close', onclose);
-  this.once('upgrading', onupgrade);
-
-  transport.open();
-};
-
-/**
- * Called when connection is deemed open.
- *
- * @api public
- */
-
-Socket.prototype.onOpen = function () {
-  debug('socket open');
-  this.readyState = 'open';
-  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;
-  this.emit('open');
-  this.flush();
-
-  // we check for `readyState` in case an `open`
-  // listener already closed the socket
-  if ('open' === this.readyState && this.upgrade && this.transport.pause) {
-    debug('starting upgrade probes');
-    for (var i = 0, l = this.upgrades.length; i < l; i++) {
-      this.probe(this.upgrades[i]);
-    }
-  }
-};
-
-/**
- * Handles a packet.
- *
- * @api private
- */
-
-Socket.prototype.onPacket = function (packet) {
-  if ('opening' === this.readyState || 'open' === this.readyState ||
-      'closing' === this.readyState) {
-    debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
-
-    this.emit('packet', packet);
-
-    // Socket is live - any packet counts
-    this.emit('heartbeat');
-
-    switch (packet.type) {
-      case 'open':
-        this.onHandshake(JSON.parse(packet.data));
-        break;
-
-      case 'pong':
-        this.setPing();
-        this.emit('pong');
-        break;
-
-      case 'error':
-        var err = new Error('server error');
-        err.code = packet.data;
-        this.onError(err);
-        break;
-
-      case 'message':
-        this.emit('data', packet.data);
-        this.emit('message', packet.data);
-        break;
-    }
-  } else {
-    debug('packet received with socket readyState "%s"', this.readyState);
-  }
-};
-
-/**
- * Called upon handshake completion.
- *
- * @param {Object} handshake obj
- * @api private
- */
-
-Socket.prototype.onHandshake = function (data) {
-  this.emit('handshake', data);
-  this.id = data.sid;
-  this.transport.query.sid = data.sid;
-  this.upgrades = this.filterUpgrades(data.upgrades);
-  this.pingInterval = data.pingInterval;
-  this.pingTimeout = data.pingTimeout;
-  this.onOpen();
-  // In case open handler closes socket
-  if ('closed' === this.readyState) return;
-  this.setPing();
-
-  // Prolong liveness of socket on heartbeat
-  this.removeListener('heartbeat', this.onHeartbeat);
-  this.on('heartbeat', this.onHeartbeat);
-};
-
-/**
- * Resets ping timeout.
- *
- * @api private
- */
-
-Socket.prototype.onHeartbeat = function (timeout) {
-  clearTimeout(this.pingTimeoutTimer);
-  var self = this;
-  self.pingTimeoutTimer = setTimeout(function () {
-    if ('closed' === self.readyState) return;
-    self.onClose('ping timeout');
-  }, timeout || (self.pingInterval + self.pingTimeout));
-};
-
-/**
- * Pings server every `this.pingInterval` and expects response
- * within `this.pingTimeout` or closes connection.
- *
- * @api private
- */
-
-Socket.prototype.setPing = function () {
-  var self = this;
-  clearTimeout(self.pingIntervalTimer);
-  self.pingIntervalTimer = setTimeout(function () {
-    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);
-    self.ping();
-    self.onHeartbeat(self.pingTimeout);
-  }, self.pingInterval);
-};
-
-/**
-* Sends a ping packet.
-*
-* @api private
-*/
-
-Socket.prototype.ping = function () {
-  var self = this;
-  this.sendPacket('ping', function () {
-    self.emit('ping');
-  });
-};
-
-/**
- * Called on `drain` event
- *
- * @api private
- */
-
-Socket.prototype.onDrain = function () {
-  this.writeBuffer.splice(0, this.prevBufferLen);
-
-  // setting prevBufferLen = 0 is very important
-  // for example, when upgrading, upgrade packet is sent over,
-  // and a nonzero prevBufferLen could cause problems on `drain`
-  this.prevBufferLen = 0;
-
-  if (0 === this.writeBuffer.length) {
-    this.emit('drain');
-  } else {
-    this.flush();
-  }
-};
-
-/**
- * Flush write buffers.
- *
- * @api private
- */
-
-Socket.prototype.flush = function () {
-  if ('closed' !== this.readyState && this.transport.writable &&
-    !this.upgrading && this.writeBuffer.length) {
-    debug('flushing %d packets in socket', this.writeBuffer.length);
-    this.transport.send(this.writeBuffer);
-    // keep track of current length of writeBuffer
-    // splice writeBuffer and callbackBuffer on `drain`
-    this.prevBufferLen = this.writeBuffer.length;
-    this.emit('flush');
-  }
-};
-
-/**
- * Sends a message.
- *
- * @param {String} message.
- * @param {Function} callback function.
- * @param {Object} options.
- * @return {Socket} for chaining.
- * @api public
- */
-
-Socket.prototype.write =
-Socket.prototype.send = function (msg, options, fn) {
-  this.sendPacket('message', msg, options, fn);
-  return this;
-};
-
-/**
- * Sends a packet.
- *
- * @param {String} packet type.
- * @param {String} data.
- * @param {Object} options.
- * @param {Function} callback function.
- * @api private
- */
-
-Socket.prototype.sendPacket = function (type, data, options, fn) {
-  if ('function' === typeof data) {
-    fn = data;
-    data = undefined;
-  }
-
-  if ('function' === typeof options) {
-    fn = options;
-    options = null;
-  }
-
-  if ('closing' === this.readyState || 'closed' === this.readyState) {
-    return;
-  }
-
-  options = options || {};
-  options.compress = false !== options.compress;
-
-  var packet = {
-    type: type,
-    data: data,
-    options: options
-  };
-  this.emit('packetCreate', packet);
-  this.writeBuffer.push(packet);
-  if (fn) this.once('flush', fn);
-  this.flush();
-};
-
-/**
- * Closes the connection.
- *
- * @api private
- */
-
-Socket.prototype.close = function () {
-  if ('opening' === this.readyState || 'open' === this.readyState) {
-    this.readyState = 'closing';
-
-    var self = this;
-
-    if (this.writeBuffer.length) {
-      this.once('drain', function () {
-        if (this.upgrading) {
-          waitForUpgrade();
-        } else {
-          close();
-        }
-      });
-    } else if (this.upgrading) {
-      waitForUpgrade();
-    } else {
-      close();
-    }
-  }
-
-  function close () {
-    self.onClose('forced close');
-    debug('socket closing - telling transport to close');
-    self.transport.close();
-  }
-
-  function cleanupAndClose () {
-    self.removeListener('upgrade', cleanupAndClose);
-    self.removeListener('upgradeError', cleanupAndClose);
-    close();
-  }
-
-  function waitForUpgrade () {
-    // wait for upgrade to finish since we can't send packets while pausing a transport
-    self.once('upgrade', cleanupAndClose);
-    self.once('upgradeError', cleanupAndClose);
-  }
-
-  return this;
-};
-
-/**
- * Called upon transport error
- *
- * @api private
- */
-
-Socket.prototype.onError = function (err) {
-  debug('socket error %j', err);
-  Socket.priorWebsocketSuccess = false;
-  this.emit('error', err);
-  this.onClose('transport error', err);
-};
-
-/**
- * Called upon transport close.
- *
- * @api private
- */
-
-Socket.prototype.onClose = function (reason, desc) {
-  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {
-    debug('socket close with reason: "%s"', reason);
-    var self = this;
-
-    // clear timers
-    clearTimeout(this.pingIntervalTimer);
-    clearTimeout(this.pingTimeoutTimer);
-
-    // stop event from firing again for transport
-    this.transport.removeAllListeners('close');
-
-    // ensure transport won't stay open
-    this.transport.close();
-
-    // ignore further transport communication
-    this.transport.removeAllListeners();
-
-    // set ready state
-    this.readyState = 'closed';
-
-    // clear session id
-    this.id = null;
-
-    // emit close event
-    this.emit('close', reason, desc);
-
-    // clean buffers after, so users can still
-    // grab the buffers on `close` event
-    self.writeBuffer = [];
-    self.prevBufferLen = 0;
-  }
-};
-
-/**
- * Filters upgrades, returning only those matching client transports.
- *
- * @param {Array} server upgrades
- * @api private
- *
- */
-
-Socket.prototype.filterUpgrades = function (upgrades) {
-  var filteredUpgrades = [];
-  for (var i = 0, j = upgrades.length; i < j; i++) {
-    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
-  }
-  return filteredUpgrades;
-};
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transports/polling.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transports/polling.js
deleted file mode 100644 (file)
index 970313e..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/**
- * Module dependencies.
- */
-
-var Transport = require('../transport');
-var parseqs = require('parseqs');
-var parser = require('engine.io-parser');
-var inherit = require('component-inherit');
-var yeast = require('yeast');
-var debug = require('debug')('engine.io-client:polling');
-
-/**
- * Module exports.
- */
-
-module.exports = Polling;
-
-/**
- * Is XHR2 supported?
- */
-
-var hasXHR2 = (function () {
-  var XMLHttpRequest = require('xmlhttprequest-ssl');
-  var xhr = new XMLHttpRequest({ xdomain: false });
-  return null != xhr.responseType;
-})();
-
-/**
- * Polling interface.
- *
- * @param {Object} opts
- * @api private
- */
-
-function Polling (opts) {
-  var forceBase64 = (opts && opts.forceBase64);
-  if (!hasXHR2 || forceBase64) {
-    this.supportsBinary = false;
-  }
-  Transport.call(this, opts);
-}
-
-/**
- * Inherits from Transport.
- */
-
-inherit(Polling, Transport);
-
-/**
- * Transport name.
- */
-
-Polling.prototype.name = 'polling';
-
-/**
- * Opens the socket (triggers polling). We write a PING message to determine
- * when the transport is open.
- *
- * @api private
- */
-
-Polling.prototype.doOpen = function () {
-  this.poll();
-};
-
-/**
- * Pauses polling.
- *
- * @param {Function} callback upon buffers are flushed and transport is paused
- * @api private
- */
-
-Polling.prototype.pause = function (onPause) {
-  var self = this;
-
-  this.readyState = 'pausing';
-
-  function pause () {
-    debug('paused');
-    self.readyState = 'paused';
-    onPause();
-  }
-
-  if (this.polling || !this.writable) {
-    var total = 0;
-
-    if (this.polling) {
-      debug('we are currently polling - waiting to pause');
-      total++;
-      this.once('pollComplete', function () {
-        debug('pre-pause polling complete');
-        --total || pause();
-      });
-    }
-
-    if (!this.writable) {
-      debug('we are currently writing - waiting to pause');
-      total++;
-      this.once('drain', function () {
-        debug('pre-pause writing complete');
-        --total || pause();
-      });
-    }
-  } else {
-    pause();
-  }
-};
-
-/**
- * Starts polling cycle.
- *
- * @api public
- */
-
-Polling.prototype.poll = function () {
-  debug('polling');
-  this.polling = true;
-  this.doPoll();
-  this.emit('poll');
-};
-
-/**
- * Overloads onData to detect payloads.
- *
- * @api private
- */
-
-Polling.prototype.onData = function (data) {
-  var self = this;
-  debug('polling got data %s', data);
-  var callback = function (packet, index, total) {
-    // if its the first message we consider the transport open
-    if ('opening' === self.readyState) {
-      self.onOpen();
-    }
-
-    // if its a close packet, we close the ongoing requests
-    if ('close' === packet.type) {
-      self.onClose();
-      return false;
-    }
-
-    // otherwise bypass onData and handle the message
-    self.onPacket(packet);
-  };
-
-  // decode payload
-  parser.decodePayload(data, this.socket.binaryType, callback);
-
-  // if an event did not trigger closing
-  if ('closed' !== this.readyState) {
-    // if we got data we're not polling
-    this.polling = false;
-    this.emit('pollComplete');
-
-    if ('open' === this.readyState) {
-      this.poll();
-    } else {
-      debug('ignoring poll - transport state "%s"', this.readyState);
-    }
-  }
-};
-
-/**
- * For polling, send a close packet.
- *
- * @api private
- */
-
-Polling.prototype.doClose = function () {
-  var self = this;
-
-  function close () {
-    debug('writing close packet');
-    self.write([{ type: 'close' }]);
-  }
-
-  if ('open' === this.readyState) {
-    debug('transport open - closing');
-    close();
-  } else {
-    // in case we're trying to close while
-    // handshaking is in progress (GH-164)
-    debug('transport not open - deferring close');
-    this.once('open', close);
-  }
-};
-
-/**
- * Writes a packets payload.
- *
- * @param {Array} data packets
- * @param {Function} drain callback
- * @api private
- */
-
-Polling.prototype.write = function (packets) {
-  var self = this;
-  this.writable = false;
-  var callbackfn = function () {
-    self.writable = true;
-    self.emit('drain');
-  };
-
-  parser.encodePayload(packets, this.supportsBinary, function (data) {
-    self.doWrite(data, callbackfn);
-  });
-};
-
-/**
- * Generates uri for connection.
- *
- * @api private
- */
-
-Polling.prototype.uri = function () {
-  var query = this.query || {};
-  var schema = this.secure ? 'https' : 'http';
-  var port = '';
-
-  // cache busting is forced
-  if (false !== this.timestampRequests) {
-    query[this.timestampParam] = yeast();
-  }
-
-  if (!this.supportsBinary && !query.sid) {
-    query.b64 = 1;
-  }
-
-  query = parseqs.encode(query);
-
-  // avoid port if default for schema
-  if (this.port && (('https' === schema && Number(this.port) !== 443) ||
-     ('http' === schema && Number(this.port) !== 80))) {
-    port = ':' + this.port;
-  }
-
-  // prepend ? to query
-  if (query.length) {
-    query = '?' + query;
-  }
-
-  var ipv6 = this.hostname.indexOf(':') !== -1;
-  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
-};
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transports/websocket.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/lib/transports/websocket.js
deleted file mode 100644 (file)
index de590bc..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/**
- * Module dependencies.
- */
-
-var Transport = require('../transport');
-var parser = require('engine.io-parser');
-var parseqs = require('parseqs');
-var inherit = require('component-inherit');
-var yeast = require('yeast');
-var debug = require('debug')('engine.io-client:websocket');
-
-var BrowserWebSocket, NodeWebSocket;
-
-if (typeof WebSocket !== 'undefined') {
-  BrowserWebSocket = WebSocket;
-} else if (typeof self !== 'undefined') {
-  BrowserWebSocket = self.WebSocket || self.MozWebSocket;
-}
-
-if (typeof window === 'undefined') {
-  try {
-    NodeWebSocket = require('ws');
-  } catch (e) { }
-}
-
-/**
- * Get either the `WebSocket` or `MozWebSocket` globals
- * in the browser or try to resolve WebSocket-compatible
- * interface exposed by `ws` for Node-like environment.
- */
-
-var WebSocketImpl = BrowserWebSocket || NodeWebSocket;
-
-/**
- * Module exports.
- */
-
-module.exports = WS;
-
-/**
- * WebSocket transport constructor.
- *
- * @api {Object} connection options
- * @api public
- */
-
-function WS (opts) {
-  var forceBase64 = (opts && opts.forceBase64);
-  if (forceBase64) {
-    this.supportsBinary = false;
-  }
-  this.perMessageDeflate = opts.perMessageDeflate;
-  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;
-  this.protocols = opts.protocols;
-  if (!this.usingBrowserWebSocket) {
-    WebSocketImpl = NodeWebSocket;
-  }
-  Transport.call(this, opts);
-}
-
-/**
- * Inherits from Transport.
- */
-
-inherit(WS, Transport);
-
-/**
- * Transport name.
- *
- * @api public
- */
-
-WS.prototype.name = 'websocket';
-
-/*
- * WebSockets support binary
- */
-
-WS.prototype.supportsBinary = true;
-
-/**
- * Opens socket.
- *
- * @api private
- */
-
-WS.prototype.doOpen = function () {
-  if (!this.check()) {
-    // let probe timeout
-    return;
-  }
-
-  var uri = this.uri();
-  var protocols = this.protocols;
-  var opts = {
-    agent: this.agent,
-    perMessageDeflate: this.perMessageDeflate
-  };
-
-  // SSL options for Node.js client
-  opts.pfx = this.pfx;
-  opts.key = this.key;
-  opts.passphrase = this.passphrase;
-  opts.cert = this.cert;
-  opts.ca = this.ca;
-  opts.ciphers = this.ciphers;
-  opts.rejectUnauthorized = this.rejectUnauthorized;
-  if (this.extraHeaders) {
-    opts.headers = this.extraHeaders;
-  }
-  if (this.localAddress) {
-    opts.localAddress = this.localAddress;
-  }
-
-  try {
-    this.ws =
-      this.usingBrowserWebSocket && !this.isReactNative
-        ? protocols
-          ? new WebSocketImpl(uri, protocols)
-          : new WebSocketImpl(uri)
-        : new WebSocketImpl(uri, protocols, opts);
-  } catch (err) {
-    return this.emit('error', err);
-  }
-
-  if (this.ws.binaryType === undefined) {
-    this.supportsBinary = false;
-  }
-
-  if (this.ws.supports && this.ws.supports.binary) {
-    this.supportsBinary = true;
-    this.ws.binaryType = 'nodebuffer';
-  } else {
-    this.ws.binaryType = 'arraybuffer';
-  }
-
-  this.addEventListeners();
-};
-
-/**
- * Adds event listeners to the socket
- *
- * @api private
- */
-
-WS.prototype.addEventListeners = function () {
-  var self = this;
-
-  this.ws.onopen = function () {
-    self.onOpen();
-  };
-  this.ws.onclose = function () {
-    self.onClose();
-  };
-  this.ws.onmessage = function (ev) {
-    self.onData(ev.data);
-  };
-  this.ws.onerror = function (e) {
-    self.onError('websocket error', e);
-  };
-};
-
-/**
- * Writes data to socket.
- *
- * @param {Array} array of packets.
- * @api private
- */
-
-WS.prototype.write = function (packets) {
-  var self = this;
-  this.writable = false;
-
-  // encodePacket efficient as it uses WS framing
-  // no need for encodePayload
-  var total = packets.length;
-  for (var i = 0, l = total; i < l; i++) {
-    (function (packet) {
-      parser.encodePacket(packet, self.supportsBinary, function (data) {
-        if (!self.usingBrowserWebSocket) {
-          // always create a new object (GH-437)
-          var opts = {};
-          if (packet.options) {
-            opts.compress = packet.options.compress;
-          }
-
-          if (self.perMessageDeflate) {
-            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;
-            if (len < self.perMessageDeflate.threshold) {
-              opts.compress = false;
-            }
-          }
-        }
-
-        // Sometimes the websocket has already been closed but the browser didn't
-        // have a chance of informing us about it yet, in that case send will
-        // throw an error
-        try {
-          if (self.usingBrowserWebSocket) {
-            // TypeError is thrown when passing the second argument on Safari
-            self.ws.send(data);
-          } else {
-            self.ws.send(data, opts);
-          }
-        } catch (e) {
-          debug('websocket closed before onclose event');
-        }
-
-        --total || done();
-      });
-    })(packets[i]);
-  }
-
-  function done () {
-    self.emit('flush');
-
-    // fake drain
-    // defer to next tick to allow Socket to clear writeBuffer
-    setTimeout(function () {
-      self.writable = true;
-      self.emit('drain');
-    }, 0);
-  }
-};
-
-/**
- * Called upon close
- *
- * @api private
- */
-
-WS.prototype.onClose = function () {
-  Transport.prototype.onClose.call(this);
-};
-
-/**
- * Closes socket.
- *
- * @api private
- */
-
-WS.prototype.doClose = function () {
-  if (typeof this.ws !== 'undefined') {
-    this.ws.close();
-  }
-};
-
-/**
- * Generates uri for connection.
- *
- * @api private
- */
-
-WS.prototype.uri = function () {
-  var query = this.query || {};
-  var schema = this.secure ? 'wss' : 'ws';
-  var port = '';
-
-  // avoid port if default for schema
-  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||
-    ('ws' === schema && Number(this.port) !== 80))) {
-    port = ':' + this.port;
-  }
-
-  // append timestamp to URI
-  if (this.timestampRequests) {
-    query[this.timestampParam] = yeast();
-  }
-
-  // communicate binary support capabilities
-  if (!this.supportsBinary) {
-    query.b64 = 1;
-  }
-
-  query = parseqs.encode(query);
-
-  // prepend ? to query
-  if (query.length) {
-    query = '?' + query;
-  }
-
-  var ipv6 = this.hostname.indexOf(':') !== -1;
-  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
-};
-
-/**
- * Feature detection for WebSocket.
- *
- * @return {Boolean} whether this transport is available.
- * @api public
- */
-
-WS.prototype.check = function () {
-  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);
-};
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/README.md b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/README.md
deleted file mode 100644 (file)
index 7c87b11..0000000
+++ /dev/null
@@ -1,449 +0,0 @@
-# ws: a Node.js WebSocket library
-
-[![Version npm](https://img.shields.io/npm/v/ws.svg)](https://www.npmjs.com/package/ws)
-[![Linux Build](https://img.shields.io/travis/websockets/ws/master.svg)](https://travis-ci.org/websockets/ws)
-[![Windows Build](https://ci.appveyor.com/api/projects/status/github/websockets/ws?branch=master&svg=true)](https://ci.appveyor.com/project/lpinca/ws)
-[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg)](https://coveralls.io/r/websockets/ws?branch=master)
-
-ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and
-server implementation.
-
-Passes the quite extensive Autobahn test suite: [server][server-report],
-[client][client-report].
-
-**Note**: This module does not work in the browser. The client in the docs is a
-reference to a back end with the role of a client in the WebSocket
-communication. Browser clients must use the native
-[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket)
-object. To make the same code work seamlessly on Node.js and the browser, you
-can use one of the many wrappers available on npm, like
-[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws).
-
-## Table of Contents
-
-- [Protocol support](#protocol-support)
-- [Installing](#installing)
-  - [Opt-in for performance and spec compliance](#opt-in-for-performance-and-spec-compliance)
-- [API docs](#api-docs)
-- [WebSocket compression](#websocket-compression)
-- [Usage examples](#usage-examples)
-  - [Sending and receiving text data](#sending-and-receiving-text-data)
-  - [Sending binary data](#sending-binary-data)
-  - [Simple server](#simple-server)
-  - [External HTTP/S server](#external-https-server)
-  - [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server)
-  - [Server broadcast](#server-broadcast)
-  - [echo.websocket.org demo](#echowebsocketorg-demo)
-  - [Other examples](#other-examples)
-- [Error handling best practices](#error-handling-best-practices)
-- [FAQ](#faq)
-  - [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client)
-  - [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections)
-  - [How to connect via a proxy?](#how-to-connect-via-a-proxy)
-- [Changelog](#changelog)
-- [License](#license)
-
-## Protocol support
-
-- **HyBi drafts 07-12** (Use the option `protocolVersion: 8`)
-- **HyBi drafts 13-17** (Current default, alternatively option
-  `protocolVersion: 13`)
-
-## Installing
-
-```
-npm install ws
-```
-
-### Opt-in for performance and spec compliance
-
-There are 2 optional modules that can be installed along side with the ws
-module. These modules are binary addons which improve certain operations.
-Prebuilt binaries are available for the most popular platforms so you don't
-necessarily need to have a C++ compiler installed on your machine.
-
-- `npm install --save-optional bufferutil`: Allows to efficiently perform
-  operations such as masking and unmasking the data payload of the WebSocket
-  frames.
-- `npm install --save-optional utf-8-validate`: Allows to efficiently check if a
-  message contains valid UTF-8 as required by the spec.
-
-## API docs
-
-See [`/doc/ws.md`](./doc/ws.md) for Node.js-like docs for the ws classes.
-
-## WebSocket compression
-
-ws supports the [permessage-deflate extension][permessage-deflate] which enables
-the client and server to negotiate a compression algorithm and its parameters,
-and then selectively apply it to the data payloads of each WebSocket message.
-
-The extension is disabled by default on the server and enabled by default on the
-client. It adds a significant overhead in terms of performance and memory
-consumption so we suggest to enable it only if it is really needed.
-
-Note that Node.js has a variety of issues with high-performance compression,
-where increased concurrency, especially on Linux, can lead to [catastrophic
-memory fragmentation][node-zlib-bug] and slow performance. If you intend to use
-permessage-deflate in production, it is worthwhile to set up a test
-representative of your workload and ensure Node.js/zlib will handle it with
-acceptable performance and memory usage.
-
-Tuning of permessage-deflate can be done via the options defined below. You can
-also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly
-into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs].
-
-See [the docs][ws-server-options] for more options.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({
-  port: 8080,
-  perMessageDeflate: {
-    zlibDeflateOptions: {
-      // See zlib defaults.
-      chunkSize: 1024,
-      memLevel: 7,
-      level: 3
-    },
-    zlibInflateOptions: {
-      chunkSize: 10 * 1024
-    },
-    // Other options settable:
-    clientNoContextTakeover: true, // Defaults to negotiated value.
-    serverNoContextTakeover: true, // Defaults to negotiated value.
-    serverMaxWindowBits: 10, // Defaults to negotiated value.
-    // Below options specified as default values.
-    concurrencyLimit: 10, // Limits zlib concurrency for perf.
-    threshold: 1024 // Size (in bytes) below which messages
-    // should not be compressed.
-  }
-});
-```
-
-The client will only use the extension if it is supported and enabled on the
-server. To always disable the extension on the client set the
-`perMessageDeflate` option to `false`.
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path', {
-  perMessageDeflate: false
-});
-```
-
-## Usage examples
-
-### Sending and receiving text data
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path');
-
-ws.on('open', function open() {
-  ws.send('something');
-});
-
-ws.on('message', function incoming(data) {
-  console.log(data);
-});
-```
-
-### Sending binary data
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path');
-
-ws.on('open', function open() {
-  const array = new Float32Array(5);
-
-  for (var i = 0; i < array.length; ++i) {
-    array[i] = i / 2;
-  }
-
-  ws.send(array);
-});
-```
-
-### Simple server
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(message) {
-    console.log('received: %s', message);
-  });
-
-  ws.send('something');
-});
-```
-
-### External HTTP/S server
-
-```js
-const fs = require('fs');
-const https = require('https');
-const WebSocket = require('ws');
-
-const server = new https.createServer({
-  cert: fs.readFileSync('/path/to/cert.pem'),
-  key: fs.readFileSync('/path/to/key.pem')
-});
-const wss = new WebSocket.Server({ server });
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(message) {
-    console.log('received: %s', message);
-  });
-
-  ws.send('something');
-});
-
-server.listen(8080);
-```
-
-### Multiple servers sharing a single HTTP/S server
-
-```js
-const http = require('http');
-const WebSocket = require('ws');
-
-const server = http.createServer();
-const wss1 = new WebSocket.Server({ noServer: true });
-const wss2 = new WebSocket.Server({ noServer: true });
-
-wss1.on('connection', function connection(ws) {
-  // ...
-});
-
-wss2.on('connection', function connection(ws) {
-  // ...
-});
-
-server.on('upgrade', function upgrade(request, socket, head) {
-  const pathname = url.parse(request.url).pathname;
-
-  if (pathname === '/foo') {
-    wss1.handleUpgrade(request, socket, head, function done(ws) {
-      wss1.emit('connection', ws, request);
-    });
-  } else if (pathname === '/bar') {
-    wss2.handleUpgrade(request, socket, head, function done(ws) {
-      wss2.emit('connection', ws, request);
-    });
-  } else {
-    socket.destroy();
-  }
-});
-
-server.listen(8080);
-```
-
-### Server broadcast
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-// Broadcast to all.
-wss.broadcast = function broadcast(data) {
-  wss.clients.forEach(function each(client) {
-    if (client.readyState === WebSocket.OPEN) {
-      client.send(data);
-    }
-  });
-};
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(data) {
-    // Broadcast to everyone else.
-    wss.clients.forEach(function each(client) {
-      if (client !== ws && client.readyState === WebSocket.OPEN) {
-        client.send(data);
-      }
-    });
-  });
-});
-```
-
-### echo.websocket.org demo
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('wss://echo.websocket.org/', {
-  origin: 'https://websocket.org'
-});
-
-ws.on('open', function open() {
-  console.log('connected');
-  ws.send(Date.now());
-});
-
-ws.on('close', function close() {
-  console.log('disconnected');
-});
-
-ws.on('message', function incoming(data) {
-  console.log(`Roundtrip time: ${Date.now() - data} ms`);
-
-  setTimeout(function timeout() {
-    ws.send(Date.now());
-  }, 500);
-});
-```
-
-### Other examples
-
-For a full example with a browser client communicating with a ws server, see the
-examples folder.
-
-Otherwise, see the test cases.
-
-## Error handling best practices
-
-```js
-// If the WebSocket is closed before the following send is attempted
-ws.send('something');
-
-// Errors (both immediate and async write errors) can be detected in an optional
-// callback. The callback is also the only way of being notified that data has
-// actually been sent.
-ws.send('something', function ack(error) {
-  // If error is not defined, the send has been completed, otherwise the error
-  // object will indicate what failed.
-});
-
-// Immediate errors can also be handled with `try...catch`, but **note** that
-// since sends are inherently asynchronous, socket write failures will *not* be
-// captured when this technique is used.
-try {
-  ws.send('something');
-} catch (e) {
-  /* handle error */
-}
-```
-
-## FAQ
-
-### How to get the IP address of the client?
-
-The remote IP address can be obtained from the raw socket.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws, req) {
-  const ip = req.connection.remoteAddress;
-});
-```
-
-When the server runs behind a proxy like NGINX, the de-facto standard is to use
-the `X-Forwarded-For` header.
-
-```js
-wss.on('connection', function connection(ws, req) {
-  const ip = req.headers['x-forwarded-for'].split(/\s*,\s*/)[0];
-});
-```
-
-### How to detect and close broken connections?
-
-Sometimes the link between the server and the client can be interrupted in a way
-that keeps both the server and the client unaware of the broken state of the
-connection (e.g. when pulling the cord).
-
-In these cases ping messages can be used as a means to verify that the remote
-endpoint is still responsive.
-
-```js
-const WebSocket = require('ws');
-
-function noop() {}
-
-function heartbeat() {
-  this.isAlive = true;
-}
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws) {
-  ws.isAlive = true;
-  ws.on('pong', heartbeat);
-});
-
-const interval = setInterval(function ping() {
-  wss.clients.forEach(function each(ws) {
-    if (ws.isAlive === false) return ws.terminate();
-
-    ws.isAlive = false;
-    ws.ping(noop);
-  });
-}, 30000);
-```
-
-Pong messages are automatically sent in response to ping messages as required by
-the spec.
-
-Just like the server example above your clients might as well lose connection
-without knowing it. You might want to add a ping listener on your clients to
-prevent that. A simple implementation would be:
-
-```js
-const WebSocket = require('ws');
-
-function heartbeat() {
-  clearTimeout(this.pingTimeout);
-
-  // Use `WebSocket#terminate()` and not `WebSocket#close()`. Delay should be
-  // equal to the interval at which your server sends out pings plus a
-  // conservative assumption of the latency.
-  this.pingTimeout = setTimeout(() => {
-    this.terminate();
-  }, 30000 + 1000);
-}
-
-const client = new WebSocket('wss://echo.websocket.org/');
-
-client.on('open', heartbeat);
-client.on('ping', heartbeat);
-client.on('close', function clear() {
-  clearTimeout(this.pingTimeout);
-});
-```
-
-### How to connect via a proxy?
-
-Use a custom `http.Agent` implementation like [https-proxy-agent][] or
-[socks-proxy-agent][].
-
-## Changelog
-
-We're using the GitHub [releases][changelog] for changelog entries.
-
-## License
-
-[MIT](LICENSE)
-
-[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent
-[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent
-[client-report]: http://websockets.github.io/ws/autobahn/clients/
-[server-report]: http://websockets.github.io/ws/autobahn/servers/
-[permessage-deflate]: https://tools.ietf.org/html/rfc7692
-[changelog]: https://github.com/websockets/ws/releases
-[node-zlib-bug]: https://github.com/nodejs/node/issues/8871
-[node-zlib-deflaterawdocs]:
-  https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options
-[ws-server-options]:
-  https://github.com/websockets/ws/blob/master/doc/ws.md#new-websocketserveroptions-callback
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/browser.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/browser.js
deleted file mode 100644 (file)
index 7820779..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-module.exports = function() {
-  throw new Error(
-    'ws does not work in the browser. Browser clients must use the native ' +
-      'WebSocket object'
-  );
-};
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/index.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/index.js
deleted file mode 100644 (file)
index b8d6be1..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-const WebSocket = require('./lib/websocket');
-
-WebSocket.Server = require('./lib/websocket-server');
-WebSocket.Receiver = require('./lib/receiver');
-WebSocket.Sender = require('./lib/sender');
-
-module.exports = WebSocket;
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js
deleted file mode 100644 (file)
index 54867ac..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-'use strict';
-
-/**
- * Merges an array of buffers into a new buffer.
- *
- * @param {Buffer[]} list The array of buffers to concat
- * @param {Number} totalLength The total length of buffers in the list
- * @return {Buffer} The resulting buffer
- * @public
- */
-function concat(list, totalLength) {
-  const target = Buffer.allocUnsafe(totalLength);
-  var offset = 0;
-
-  for (var i = 0; i < list.length; i++) {
-    const buf = list[i];
-    buf.copy(target, offset);
-    offset += buf.length;
-  }
-
-  return target;
-}
-
-/**
- * Masks a buffer using the given mask.
- *
- * @param {Buffer} source The buffer to mask
- * @param {Buffer} mask The mask to use
- * @param {Buffer} output The buffer where to store the result
- * @param {Number} offset The offset at which to start writing
- * @param {Number} length The number of bytes to mask.
- * @public
- */
-function _mask(source, mask, output, offset, length) {
-  for (var i = 0; i < length; i++) {
-    output[offset + i] = source[i] ^ mask[i & 3];
-  }
-}
-
-/**
- * Unmasks a buffer using the given mask.
- *
- * @param {Buffer} buffer The buffer to unmask
- * @param {Buffer} mask The mask to use
- * @public
- */
-function _unmask(buffer, mask) {
-  // Required until https://github.com/nodejs/node/issues/9006 is resolved.
-  const length = buffer.length;
-  for (var i = 0; i < length; i++) {
-    buffer[i] ^= mask[i & 3];
-  }
-}
-
-try {
-  const bufferUtil = require('bufferutil');
-  const bu = bufferUtil.BufferUtil || bufferUtil;
-
-  module.exports = {
-    mask(source, mask, output, offset, length) {
-      if (length < 48) _mask(source, mask, output, offset, length);
-      else bu.mask(source, mask, output, offset, length);
-    },
-    unmask(buffer, mask) {
-      if (buffer.length < 32) _unmask(buffer, mask);
-      else bu.unmask(buffer, mask);
-    },
-    concat
-  };
-} catch (e) /* istanbul ignore next */ {
-  module.exports = { concat, mask: _mask, unmask: _unmask };
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/event-target.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/event-target.js
deleted file mode 100644 (file)
index 44c81d9..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-'use strict';
-
-/**
- * Class representing an event.
- *
- * @private
- */
-class Event {
-  /**
-   * Create a new `Event`.
-   *
-   * @param {String} type The name of the event
-   * @param {Object} target A reference to the target to which the event was dispatched
-   */
-  constructor(type, target) {
-    this.target = target;
-    this.type = type;
-  }
-}
-
-/**
- * Class representing a message event.
- *
- * @extends Event
- * @private
- */
-class MessageEvent extends Event {
-  /**
-   * Create a new `MessageEvent`.
-   *
-   * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data
-   * @param {WebSocket} target A reference to the target to which the event was dispatched
-   */
-  constructor(data, target) {
-    super('message', target);
-
-    this.data = data;
-  }
-}
-
-/**
- * Class representing a close event.
- *
- * @extends Event
- * @private
- */
-class CloseEvent extends Event {
-  /**
-   * Create a new `CloseEvent`.
-   *
-   * @param {Number} code The status code explaining why the connection is being closed
-   * @param {String} reason A human-readable string explaining why the connection is closing
-   * @param {WebSocket} target A reference to the target to which the event was dispatched
-   */
-  constructor(code, reason, target) {
-    super('close', target);
-
-    this.wasClean = target._closeFrameReceived && target._closeFrameSent;
-    this.reason = reason;
-    this.code = code;
-  }
-}
-
-/**
- * Class representing an open event.
- *
- * @extends Event
- * @private
- */
-class OpenEvent extends Event {
-  /**
-   * Create a new `OpenEvent`.
-   *
-   * @param {WebSocket} target A reference to the target to which the event was dispatched
-   */
-  constructor(target) {
-    super('open', target);
-  }
-}
-
-/**
- * Class representing an error event.
- *
- * @extends Event
- * @private
- */
-class ErrorEvent extends Event {
-  /**
-   * Create a new `ErrorEvent`.
-   *
-   * @param {Object} error The error that generated this event
-   * @param {WebSocket} target A reference to the target to which the event was dispatched
-   */
-  constructor(error, target) {
-    super('error', target);
-
-    this.message = error.message;
-    this.error = error;
-  }
-}
-
-/**
- * This provides methods for emulating the `EventTarget` interface. It's not
- * meant to be used directly.
- *
- * @mixin
- */
-const EventTarget = {
-  /**
-   * Register an event listener.
-   *
-   * @param {String} method A string representing the event type to listen for
-   * @param {Function} listener The listener to add
-   * @public
-   */
-  addEventListener(method, listener) {
-    if (typeof listener !== 'function') return;
-
-    function onMessage(data) {
-      listener.call(this, new MessageEvent(data, this));
-    }
-
-    function onClose(code, message) {
-      listener.call(this, new CloseEvent(code, message, this));
-    }
-
-    function onError(error) {
-      listener.call(this, new ErrorEvent(error, this));
-    }
-
-    function onOpen() {
-      listener.call(this, new OpenEvent(this));
-    }
-
-    if (method === 'message') {
-      onMessage._listener = listener;
-      this.on(method, onMessage);
-    } else if (method === 'close') {
-      onClose._listener = listener;
-      this.on(method, onClose);
-    } else if (method === 'error') {
-      onError._listener = listener;
-      this.on(method, onError);
-    } else if (method === 'open') {
-      onOpen._listener = listener;
-      this.on(method, onOpen);
-    } else {
-      this.on(method, listener);
-    }
-  },
-
-  /**
-   * Remove an event listener.
-   *
-   * @param {String} method A string representing the event type to remove
-   * @param {Function} listener The listener to remove
-   * @public
-   */
-  removeEventListener(method, listener) {
-    const listeners = this.listeners(method);
-
-    for (var i = 0; i < listeners.length; i++) {
-      if (listeners[i] === listener || listeners[i]._listener === listener) {
-        this.removeListener(method, listeners[i]);
-      }
-    }
-  }
-};
-
-module.exports = EventTarget;
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/extension.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/extension.js
deleted file mode 100644 (file)
index 47096b9..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-'use strict';
-
-//
-// Allowed token characters:
-//
-// '!', '#', '$', '%', '&', ''', '*', '+', '-',
-// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'
-//
-// tokenChars[32] === 0 // ' '
-// tokenChars[33] === 1 // '!'
-// tokenChars[34] === 0 // '"'
-// ...
-//
-// prettier-ignore
-const tokenChars = [
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
-  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63
-  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127
-];
-
-/**
- * Adds an offer to the map of extension offers or a parameter to the map of
- * parameters.
- *
- * @param {Object} dest The map of extension offers or parameters
- * @param {String} name The extension or parameter name
- * @param {(Object|Boolean|String)} elem The extension parameters or the
- *     parameter value
- * @private
- */
-function push(dest, name, elem) {
-  if (Object.prototype.hasOwnProperty.call(dest, name)) dest[name].push(elem);
-  else dest[name] = [elem];
-}
-
-/**
- * Parses the `Sec-WebSocket-Extensions` header into an object.
- *
- * @param {String} header The field value of the header
- * @return {Object} The parsed object
- * @public
- */
-function parse(header) {
-  const offers = {};
-
-  if (header === undefined || header === '') return offers;
-
-  var params = {};
-  var mustUnescape = false;
-  var isEscaping = false;
-  var inQuotes = false;
-  var extensionName;
-  var paramName;
-  var start = -1;
-  var end = -1;
-
-  for (var i = 0; i < header.length; i++) {
-    const code = header.charCodeAt(i);
-
-    if (extensionName === undefined) {
-      if (end === -1 && tokenChars[code] === 1) {
-        if (start === -1) start = i;
-      } else if (code === 0x20 /* ' ' */ || code === 0x09 /* '\t' */) {
-        if (end === -1 && start !== -1) end = i;
-      } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {
-        if (start === -1) {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-
-        if (end === -1) end = i;
-        const name = header.slice(start, end);
-        if (code === 0x2c) {
-          push(offers, name, params);
-          params = {};
-        } else {
-          extensionName = name;
-        }
-
-        start = end = -1;
-      } else {
-        throw new SyntaxError(`Unexpected character at index ${i}`);
-      }
-    } else if (paramName === undefined) {
-      if (end === -1 && tokenChars[code] === 1) {
-        if (start === -1) start = i;
-      } else if (code === 0x20 || code === 0x09) {
-        if (end === -1 && start !== -1) end = i;
-      } else if (code === 0x3b || code === 0x2c) {
-        if (start === -1) {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-
-        if (end === -1) end = i;
-        push(params, header.slice(start, end), true);
-        if (code === 0x2c) {
-          push(offers, extensionName, params);
-          params = {};
-          extensionName = undefined;
-        }
-
-        start = end = -1;
-      } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {
-        paramName = header.slice(start, i);
-        start = end = -1;
-      } else {
-        throw new SyntaxError(`Unexpected character at index ${i}`);
-      }
-    } else {
-      //
-      // The value of a quoted-string after unescaping must conform to the
-      // token ABNF, so only token characters are valid.
-      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1
-      //
-      if (isEscaping) {
-        if (tokenChars[code] !== 1) {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-        if (start === -1) start = i;
-        else if (!mustUnescape) mustUnescape = true;
-        isEscaping = false;
-      } else if (inQuotes) {
-        if (tokenChars[code] === 1) {
-          if (start === -1) start = i;
-        } else if (code === 0x22 /* '"' */ && start !== -1) {
-          inQuotes = false;
-          end = i;
-        } else if (code === 0x5c /* '\' */) {
-          isEscaping = true;
-        } else {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {
-        inQuotes = true;
-      } else if (end === -1 && tokenChars[code] === 1) {
-        if (start === -1) start = i;
-      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {
-        if (end === -1) end = i;
-      } else if (code === 0x3b || code === 0x2c) {
-        if (start === -1) {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-
-        if (end === -1) end = i;
-        var value = header.slice(start, end);
-        if (mustUnescape) {
-          value = value.replace(/\\/g, '');
-          mustUnescape = false;
-        }
-        push(params, paramName, value);
-        if (code === 0x2c) {
-          push(offers, extensionName, params);
-          params = {};
-          extensionName = undefined;
-        }
-
-        paramName = undefined;
-        start = end = -1;
-      } else {
-        throw new SyntaxError(`Unexpected character at index ${i}`);
-      }
-    }
-  }
-
-  if (start === -1 || inQuotes) {
-    throw new SyntaxError('Unexpected end of input');
-  }
-
-  if (end === -1) end = i;
-  const token = header.slice(start, end);
-  if (extensionName === undefined) {
-    push(offers, token, {});
-  } else {
-    if (paramName === undefined) {
-      push(params, token, true);
-    } else if (mustUnescape) {
-      push(params, paramName, token.replace(/\\/g, ''));
-    } else {
-      push(params, paramName, token);
-    }
-    push(offers, extensionName, params);
-  }
-
-  return offers;
-}
-
-/**
- * Builds the `Sec-WebSocket-Extensions` header field value.
- *
- * @param {Object} extensions The map of extensions and parameters to format
- * @return {String} A string representing the given object
- * @public
- */
-function format(extensions) {
-  return Object.keys(extensions)
-    .map((extension) => {
-      var configurations = extensions[extension];
-      if (!Array.isArray(configurations)) configurations = [configurations];
-      return configurations
-        .map((params) => {
-          return [extension]
-            .concat(
-              Object.keys(params).map((k) => {
-                var values = params[k];
-                if (!Array.isArray(values)) values = [values];
-                return values
-                  .map((v) => (v === true ? k : `${k}=${v}`))
-                  .join('; ');
-              })
-            )
-            .join('; ');
-        })
-        .join(', ');
-    })
-    .join(', ');
-}
-
-module.exports = { format, parse };
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js
deleted file mode 100644 (file)
index 9c88764..0000000
+++ /dev/null
@@ -1,502 +0,0 @@
-'use strict';
-
-const Limiter = require('async-limiter');
-const zlib = require('zlib');
-
-const bufferUtil = require('./buffer-util');
-const { kStatusCode, NOOP } = require('./constants');
-
-const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);
-const EMPTY_BLOCK = Buffer.from([0x00]);
-
-const kPerMessageDeflate = Symbol('permessage-deflate');
-const kTotalLength = Symbol('total-length');
-const kCallback = Symbol('callback');
-const kBuffers = Symbol('buffers');
-const kError = Symbol('error');
-
-//
-// We limit zlib concurrency, which prevents severe memory fragmentation
-// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913
-// and https://github.com/websockets/ws/issues/1202
-//
-// Intentionally global; it's the global thread pool that's an issue.
-//
-let zlibLimiter;
-
-/**
- * permessage-deflate implementation.
- */
-class PerMessageDeflate {
-  /**
-   * Creates a PerMessageDeflate instance.
-   *
-   * @param {Object} options Configuration options
-   * @param {Boolean} options.serverNoContextTakeover Request/accept disabling
-   *     of server context takeover
-   * @param {Boolean} options.clientNoContextTakeover Advertise/acknowledge
-   *     disabling of client context takeover
-   * @param {(Boolean|Number)} options.serverMaxWindowBits Request/confirm the
-   *     use of a custom server window size
-   * @param {(Boolean|Number)} options.clientMaxWindowBits Advertise support
-   *     for, or request, a custom client window size
-   * @param {Object} options.zlibDeflateOptions Options to pass to zlib on deflate
-   * @param {Object} options.zlibInflateOptions Options to pass to zlib on inflate
-   * @param {Number} options.threshold Size (in bytes) below which messages
-   *     should not be compressed
-   * @param {Number} options.concurrencyLimit The number of concurrent calls to
-   *     zlib
-   * @param {Boolean} isServer Create the instance in either server or client
-   *     mode
-   * @param {Number} maxPayload The maximum allowed message length
-   */
-  constructor(options, isServer, maxPayload) {
-    this._maxPayload = maxPayload | 0;
-    this._options = options || {};
-    this._threshold =
-      this._options.threshold !== undefined ? this._options.threshold : 1024;
-    this._isServer = !!isServer;
-    this._deflate = null;
-    this._inflate = null;
-
-    this.params = null;
-
-    if (!zlibLimiter) {
-      const concurrency =
-        this._options.concurrencyLimit !== undefined
-          ? this._options.concurrencyLimit
-          : 10;
-      zlibLimiter = new Limiter({ concurrency });
-    }
-  }
-
-  /**
-   * @type {String}
-   */
-  static get extensionName() {
-    return 'permessage-deflate';
-  }
-
-  /**
-   * Create an extension negotiation offer.
-   *
-   * @return {Object} Extension parameters
-   * @public
-   */
-  offer() {
-    const params = {};
-
-    if (this._options.serverNoContextTakeover) {
-      params.server_no_context_takeover = true;
-    }
-    if (this._options.clientNoContextTakeover) {
-      params.client_no_context_takeover = true;
-    }
-    if (this._options.serverMaxWindowBits) {
-      params.server_max_window_bits = this._options.serverMaxWindowBits;
-    }
-    if (this._options.clientMaxWindowBits) {
-      params.client_max_window_bits = this._options.clientMaxWindowBits;
-    } else if (this._options.clientMaxWindowBits == null) {
-      params.client_max_window_bits = true;
-    }
-
-    return params;
-  }
-
-  /**
-   * Accept an extension negotiation offer/response.
-   *
-   * @param {Array} configurations The extension negotiation offers/reponse
-   * @return {Object} Accepted configuration
-   * @public
-   */
-  accept(configurations) {
-    configurations = this.normalizeParams(configurations);
-
-    this.params = this._isServer
-      ? this.acceptAsServer(configurations)
-      : this.acceptAsClient(configurations);
-
-    return this.params;
-  }
-
-  /**
-   * Releases all resources used by the extension.
-   *
-   * @public
-   */
-  cleanup() {
-    if (this._inflate) {
-      this._inflate.close();
-      this._inflate = null;
-    }
-
-    if (this._deflate) {
-      this._deflate.close();
-      this._deflate = null;
-    }
-  }
-
-  /**
-   *  Accept an extension negotiation offer.
-   *
-   * @param {Array} offers The extension negotiation offers
-   * @return {Object} Accepted configuration
-   * @private
-   */
-  acceptAsServer(offers) {
-    const opts = this._options;
-    const accepted = offers.find((params) => {
-      if (
-        (opts.serverNoContextTakeover === false &&
-          params.server_no_context_takeover) ||
-        (params.server_max_window_bits &&
-          (opts.serverMaxWindowBits === false ||
-            (typeof opts.serverMaxWindowBits === 'number' &&
-              opts.serverMaxWindowBits > params.server_max_window_bits))) ||
-        (typeof opts.clientMaxWindowBits === 'number' &&
-          !params.client_max_window_bits)
-      ) {
-        return false;
-      }
-
-      return true;
-    });
-
-    if (!accepted) {
-      throw new Error('None of the extension offers can be accepted');
-    }
-
-    if (opts.serverNoContextTakeover) {
-      accepted.server_no_context_takeover = true;
-    }
-    if (opts.clientNoContextTakeover) {
-      accepted.client_no_context_takeover = true;
-    }
-    if (typeof opts.serverMaxWindowBits === 'number') {
-      accepted.server_max_window_bits = opts.serverMaxWindowBits;
-    }
-    if (typeof opts.clientMaxWindowBits === 'number') {
-      accepted.client_max_window_bits = opts.clientMaxWindowBits;
-    } else if (
-      accepted.client_max_window_bits === true ||
-      opts.clientMaxWindowBits === false
-    ) {
-      delete accepted.client_max_window_bits;
-    }
-
-    return accepted;
-  }
-
-  /**
-   * Accept the extension negotiation response.
-   *
-   * @param {Array} response The extension negotiation response
-   * @return {Object} Accepted configuration
-   * @private
-   */
-  acceptAsClient(response) {
-    const params = response[0];
-
-    if (
-      this._options.clientNoContextTakeover === false &&
-      params.client_no_context_takeover
-    ) {
-      throw new Error('Unexpected parameter "client_no_context_takeover"');
-    }
-
-    if (!params.client_max_window_bits) {
-      if (typeof this._options.clientMaxWindowBits === 'number') {
-        params.client_max_window_bits = this._options.clientMaxWindowBits;
-      }
-    } else if (
-      this._options.clientMaxWindowBits === false ||
-      (typeof this._options.clientMaxWindowBits === 'number' &&
-        params.client_max_window_bits > this._options.clientMaxWindowBits)
-    ) {
-      throw new Error(
-        'Unexpected or invalid parameter "client_max_window_bits"'
-      );
-    }
-
-    return params;
-  }
-
-  /**
-   * Normalize parameters.
-   *
-   * @param {Array} configurations The extension negotiation offers/reponse
-   * @return {Array} The offers/response with normalized parameters
-   * @private
-   */
-  normalizeParams(configurations) {
-    configurations.forEach((params) => {
-      Object.keys(params).forEach((key) => {
-        var value = params[key];
-
-        if (value.length > 1) {
-          throw new Error(`Parameter "${key}" must have only a single value`);
-        }
-
-        value = value[0];
-
-        if (key === 'client_max_window_bits') {
-          if (value !== true) {
-            const num = +value;
-            if (!Number.isInteger(num) || num < 8 || num > 15) {
-              throw new TypeError(
-                `Invalid value for parameter "${key}": ${value}`
-              );
-            }
-            value = num;
-          } else if (!this._isServer) {
-            throw new TypeError(
-              `Invalid value for parameter "${key}": ${value}`
-            );
-          }
-        } else if (key === 'server_max_window_bits') {
-          const num = +value;
-          if (!Number.isInteger(num) || num < 8 || num > 15) {
-            throw new TypeError(
-              `Invalid value for parameter "${key}": ${value}`
-            );
-          }
-          value = num;
-        } else if (
-          key === 'client_no_context_takeover' ||
-          key === 'server_no_context_takeover'
-        ) {
-          if (value !== true) {
-            throw new TypeError(
-              `Invalid value for parameter "${key}": ${value}`
-            );
-          }
-        } else {
-          throw new Error(`Unknown parameter "${key}"`);
-        }
-
-        params[key] = value;
-      });
-    });
-
-    return configurations;
-  }
-
-  /**
-   * Decompress data. Concurrency limited by async-limiter.
-   *
-   * @param {Buffer} data Compressed data
-   * @param {Boolean} fin Specifies whether or not this is the last fragment
-   * @param {Function} callback Callback
-   * @public
-   */
-  decompress(data, fin, callback) {
-    zlibLimiter.push((done) => {
-      this._decompress(data, fin, (err, result) => {
-        done();
-        callback(err, result);
-      });
-    });
-  }
-
-  /**
-   * Compress data. Concurrency limited by async-limiter.
-   *
-   * @param {Buffer} data Data to compress
-   * @param {Boolean} fin Specifies whether or not this is the last fragment
-   * @param {Function} callback Callback
-   * @public
-   */
-  compress(data, fin, callback) {
-    zlibLimiter.push((done) => {
-      this._compress(data, fin, (err, result) => {
-        done();
-        callback(err, result);
-      });
-    });
-  }
-
-  /**
-   * Decompress data.
-   *
-   * @param {Buffer} data Compressed data
-   * @param {Boolean} fin Specifies whether or not this is the last fragment
-   * @param {Function} callback Callback
-   * @private
-   */
-  _decompress(data, fin, callback) {
-    const endpoint = this._isServer ? 'client' : 'server';
-
-    if (!this._inflate) {
-      const key = `${endpoint}_max_window_bits`;
-      const windowBits =
-        typeof this.params[key] !== 'number'
-          ? zlib.Z_DEFAULT_WINDOWBITS
-          : this.params[key];
-
-      this._inflate = zlib.createInflateRaw(
-        Object.assign({}, this._options.zlibInflateOptions, { windowBits })
-      );
-      this._inflate[kPerMessageDeflate] = this;
-      this._inflate[kTotalLength] = 0;
-      this._inflate[kBuffers] = [];
-      this._inflate.on('error', inflateOnError);
-      this._inflate.on('data', inflateOnData);
-    }
-
-    this._inflate[kCallback] = callback;
-
-    this._inflate.write(data);
-    if (fin) this._inflate.write(TRAILER);
-
-    this._inflate.flush(() => {
-      const err = this._inflate[kError];
-
-      if (err) {
-        this._inflate.close();
-        this._inflate = null;
-        callback(err);
-        return;
-      }
-
-      const data = bufferUtil.concat(
-        this._inflate[kBuffers],
-        this._inflate[kTotalLength]
-      );
-
-      if (fin && this.params[`${endpoint}_no_context_takeover`]) {
-        this._inflate.close();
-        this._inflate = null;
-      } else {
-        this._inflate[kTotalLength] = 0;
-        this._inflate[kBuffers] = [];
-      }
-
-      callback(null, data);
-    });
-  }
-
-  /**
-   * Compress data.
-   *
-   * @param {Buffer} data Data to compress
-   * @param {Boolean} fin Specifies whether or not this is the last fragment
-   * @param {Function} callback Callback
-   * @private
-   */
-  _compress(data, fin, callback) {
-    if (!data || data.length === 0) {
-      process.nextTick(callback, null, EMPTY_BLOCK);
-      return;
-    }
-
-    const endpoint = this._isServer ? 'server' : 'client';
-
-    if (!this._deflate) {
-      const key = `${endpoint}_max_window_bits`;
-      const windowBits =
-        typeof this.params[key] !== 'number'
-          ? zlib.Z_DEFAULT_WINDOWBITS
-          : this.params[key];
-
-      this._deflate = zlib.createDeflateRaw(
-        Object.assign({}, this._options.zlibDeflateOptions, { windowBits })
-      );
-
-      this._deflate[kTotalLength] = 0;
-      this._deflate[kBuffers] = [];
-
-      //
-      // An `'error'` event is emitted, only on Node.js < 10.0.0, if the
-      // `zlib.DeflateRaw` instance is closed while data is being processed.
-      // This can happen if `PerMessageDeflate#cleanup()` is called at the wrong
-      // time due to an abnormal WebSocket closure.
-      //
-      this._deflate.on('error', NOOP);
-      this._deflate.on('data', deflateOnData);
-    }
-
-    this._deflate.write(data);
-    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {
-      if (!this._deflate) {
-        //
-        // This `if` statement is only needed for Node.js < 10.0.0 because as of
-        // commit https://github.com/nodejs/node/commit/5e3f5164, the flush
-        // callback is no longer called if the deflate stream is closed while
-        // data is being processed.
-        //
-        return;
-      }
-
-      var data = bufferUtil.concat(
-        this._deflate[kBuffers],
-        this._deflate[kTotalLength]
-      );
-
-      if (fin) data = data.slice(0, data.length - 4);
-
-      if (fin && this.params[`${endpoint}_no_context_takeover`]) {
-        this._deflate.close();
-        this._deflate = null;
-      } else {
-        this._deflate[kTotalLength] = 0;
-        this._deflate[kBuffers] = [];
-      }
-
-      callback(null, data);
-    });
-  }
-}
-
-module.exports = PerMessageDeflate;
-
-/**
- * The listener of the `zlib.DeflateRaw` stream `'data'` event.
- *
- * @param {Buffer} chunk A chunk of data
- * @private
- */
-function deflateOnData(chunk) {
-  this[kBuffers].push(chunk);
-  this[kTotalLength] += chunk.length;
-}
-
-/**
- * The listener of the `zlib.InflateRaw` stream `'data'` event.
- *
- * @param {Buffer} chunk A chunk of data
- * @private
- */
-function inflateOnData(chunk) {
-  this[kTotalLength] += chunk.length;
-
-  if (
-    this[kPerMessageDeflate]._maxPayload < 1 ||
-    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload
-  ) {
-    this[kBuffers].push(chunk);
-    return;
-  }
-
-  this[kError] = new RangeError('Max payload size exceeded');
-  this[kError][kStatusCode] = 1009;
-  this.removeListener('data', inflateOnData);
-  this.reset();
-}
-
-/**
- * The listener of the `zlib.InflateRaw` stream `'error'` event.
- *
- * @param {Error} err The emitted error
- * @private
- */
-function inflateOnError(err) {
-  //
-  // There is no need to call `Zlib#close()` as the handle is automatically
-  // closed when an error is emitted.
-  //
-  this[kPerMessageDeflate]._inflate = null;
-  err[kStatusCode] = 1007;
-  this[kCallback](err);
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/receiver.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/receiver.js
deleted file mode 100644 (file)
index a2cef8c..0000000
+++ /dev/null
@@ -1,515 +0,0 @@
-'use strict';
-
-const stream = require('stream');
-
-const PerMessageDeflate = require('./permessage-deflate');
-const bufferUtil = require('./buffer-util');
-const validation = require('./validation');
-const constants = require('./constants');
-
-const GET_INFO = 0;
-const GET_PAYLOAD_LENGTH_16 = 1;
-const GET_PAYLOAD_LENGTH_64 = 2;
-const GET_MASK = 3;
-const GET_DATA = 4;
-const INFLATING = 5;
-
-/**
- * HyBi Receiver implementation.
- *
- * @extends stream.Writable
- */
-class Receiver extends stream.Writable {
-  /**
-   * Creates a Receiver instance.
-   *
-   * @param {String} binaryType The type for binary data
-   * @param {Object} extensions An object containing the negotiated extensions
-   * @param {Number} maxPayload The maximum allowed message length
-   */
-  constructor(binaryType, extensions, maxPayload) {
-    super();
-
-    this._binaryType = binaryType || constants.BINARY_TYPES[0];
-    this[constants.kWebSocket] = undefined;
-    this._extensions = extensions || {};
-    this._maxPayload = maxPayload | 0;
-
-    this._bufferedBytes = 0;
-    this._buffers = [];
-
-    this._compressed = false;
-    this._payloadLength = 0;
-    this._mask = undefined;
-    this._fragmented = 0;
-    this._masked = false;
-    this._fin = false;
-    this._opcode = 0;
-
-    this._totalPayloadLength = 0;
-    this._messageLength = 0;
-    this._fragments = [];
-
-    this._state = GET_INFO;
-    this._loop = false;
-  }
-
-  /**
-   * Implements `Writable.prototype._write()`.
-   *
-   * @param {Buffer} chunk The chunk of data to write
-   * @param {String} encoding The character encoding of `chunk`
-   * @param {Function} cb Callback
-   */
-  _write(chunk, encoding, cb) {
-    if (this._opcode === 0x08 && this._state == GET_INFO) return cb();
-
-    this._bufferedBytes += chunk.length;
-    this._buffers.push(chunk);
-    this.startLoop(cb);
-  }
-
-  /**
-   * Consumes `n` bytes from the buffered data.
-   *
-   * @param {Number} n The number of bytes to consume
-   * @return {Buffer} The consumed bytes
-   * @private
-   */
-  consume(n) {
-    this._bufferedBytes -= n;
-
-    if (n === this._buffers[0].length) return this._buffers.shift();
-
-    if (n < this._buffers[0].length) {
-      const buf = this._buffers[0];
-      this._buffers[0] = buf.slice(n);
-      return buf.slice(0, n);
-    }
-
-    const dst = Buffer.allocUnsafe(n);
-
-    do {
-      const buf = this._buffers[0];
-
-      if (n >= buf.length) {
-        this._buffers.shift().copy(dst, dst.length - n);
-      } else {
-        buf.copy(dst, dst.length - n, 0, n);
-        this._buffers[0] = buf.slice(n);
-      }
-
-      n -= buf.length;
-    } while (n > 0);
-
-    return dst;
-  }
-
-  /**
-   * Starts the parsing loop.
-   *
-   * @param {Function} cb Callback
-   * @private
-   */
-  startLoop(cb) {
-    var err;
-    this._loop = true;
-
-    do {
-      switch (this._state) {
-        case GET_INFO:
-          err = this.getInfo();
-          break;
-        case GET_PAYLOAD_LENGTH_16:
-          err = this.getPayloadLength16();
-          break;
-        case GET_PAYLOAD_LENGTH_64:
-          err = this.getPayloadLength64();
-          break;
-        case GET_MASK:
-          this.getMask();
-          break;
-        case GET_DATA:
-          err = this.getData(cb);
-          break;
-        default:
-          // `INFLATING`
-          this._loop = false;
-          return;
-      }
-    } while (this._loop);
-
-    cb(err);
-  }
-
-  /**
-   * Reads the first two bytes of a frame.
-   *
-   * @return {(RangeError|undefined)} A possible error
-   * @private
-   */
-  getInfo() {
-    if (this._bufferedBytes < 2) {
-      this._loop = false;
-      return;
-    }
-
-    const buf = this.consume(2);
-
-    if ((buf[0] & 0x30) !== 0x00) {
-      this._loop = false;
-      return error(RangeError, 'RSV2 and RSV3 must be clear', true, 1002);
-    }
-
-    const compressed = (buf[0] & 0x40) === 0x40;
-
-    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {
-      this._loop = false;
-      return error(RangeError, 'RSV1 must be clear', true, 1002);
-    }
-
-    this._fin = (buf[0] & 0x80) === 0x80;
-    this._opcode = buf[0] & 0x0f;
-    this._payloadLength = buf[1] & 0x7f;
-
-    if (this._opcode === 0x00) {
-      if (compressed) {
-        this._loop = false;
-        return error(RangeError, 'RSV1 must be clear', true, 1002);
-      }
-
-      if (!this._fragmented) {
-        this._loop = false;
-        return error(RangeError, 'invalid opcode 0', true, 1002);
-      }
-
-      this._opcode = this._fragmented;
-    } else if (this._opcode === 0x01 || this._opcode === 0x02) {
-      if (this._fragmented) {
-        this._loop = false;
-        return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
-      }
-
-      this._compressed = compressed;
-    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {
-      if (!this._fin) {
-        this._loop = false;
-        return error(RangeError, 'FIN must be set', true, 1002);
-      }
-
-      if (compressed) {
-        this._loop = false;
-        return error(RangeError, 'RSV1 must be clear', true, 1002);
-      }
-
-      if (this._payloadLength > 0x7d) {
-        this._loop = false;
-        return error(
-          RangeError,
-          `invalid payload length ${this._payloadLength}`,
-          true,
-          1002
-        );
-      }
-    } else {
-      this._loop = false;
-      return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
-    }
-
-    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;
-    this._masked = (buf[1] & 0x80) === 0x80;
-
-    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;
-    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;
-    else return this.haveLength();
-  }
-
-  /**
-   * Gets extended payload length (7+16).
-   *
-   * @return {(RangeError|undefined)} A possible error
-   * @private
-   */
-  getPayloadLength16() {
-    if (this._bufferedBytes < 2) {
-      this._loop = false;
-      return;
-    }
-
-    this._payloadLength = this.consume(2).readUInt16BE(0);
-    return this.haveLength();
-  }
-
-  /**
-   * Gets extended payload length (7+64).
-   *
-   * @return {(RangeError|undefined)} A possible error
-   * @private
-   */
-  getPayloadLength64() {
-    if (this._bufferedBytes < 8) {
-      this._loop = false;
-      return;
-    }
-
-    const buf = this.consume(8);
-    const num = buf.readUInt32BE(0);
-
-    //
-    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned
-    // if payload length is greater than this number.
-    //
-    if (num > Math.pow(2, 53 - 32) - 1) {
-      this._loop = false;
-      return error(
-        RangeError,
-        'Unsupported WebSocket frame: payload length > 2^53 - 1',
-        false,
-        1009
-      );
-    }
-
-    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);
-    return this.haveLength();
-  }
-
-  /**
-   * Payload length has been read.
-   *
-   * @return {(RangeError|undefined)} A possible error
-   * @private
-   */
-  haveLength() {
-    if (this._payloadLength && this._opcode < 0x08) {
-      this._totalPayloadLength += this._payloadLength;
-      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {
-        this._loop = false;
-        return error(RangeError, 'Max payload size exceeded', false, 1009);
-      }
-    }
-
-    if (this._masked) this._state = GET_MASK;
-    else this._state = GET_DATA;
-  }
-
-  /**
-   * Reads mask bytes.
-   *
-   * @private
-   */
-  getMask() {
-    if (this._bufferedBytes < 4) {
-      this._loop = false;
-      return;
-    }
-
-    this._mask = this.consume(4);
-    this._state = GET_DATA;
-  }
-
-  /**
-   * Reads data bytes.
-   *
-   * @param {Function} cb Callback
-   * @return {(Error|RangeError|undefined)} A possible error
-   * @private
-   */
-  getData(cb) {
-    var data = constants.EMPTY_BUFFER;
-
-    if (this._payloadLength) {
-      if (this._bufferedBytes < this._payloadLength) {
-        this._loop = false;
-        return;
-      }
-
-      data = this.consume(this._payloadLength);
-      if (this._masked) bufferUtil.unmask(data, this._mask);
-    }
-
-    if (this._opcode > 0x07) return this.controlMessage(data);
-
-    if (this._compressed) {
-      this._state = INFLATING;
-      this.decompress(data, cb);
-      return;
-    }
-
-    if (data.length) {
-      //
-      // This message is not compressed so its lenght is the sum of the payload
-      // length of all fragments.
-      //
-      this._messageLength = this._totalPayloadLength;
-      this._fragments.push(data);
-    }
-
-    return this.dataMessage();
-  }
-
-  /**
-   * Decompresses data.
-   *
-   * @param {Buffer} data Compressed data
-   * @param {Function} cb Callback
-   * @private
-   */
-  decompress(data, cb) {
-    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
-
-    perMessageDeflate.decompress(data, this._fin, (err, buf) => {
-      if (err) return cb(err);
-
-      if (buf.length) {
-        this._messageLength += buf.length;
-        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {
-          return cb(
-            error(RangeError, 'Max payload size exceeded', false, 1009)
-          );
-        }
-
-        this._fragments.push(buf);
-      }
-
-      const er = this.dataMessage();
-      if (er) return cb(er);
-
-      this.startLoop(cb);
-    });
-  }
-
-  /**
-   * Handles a data message.
-   *
-   * @return {(Error|undefined)} A possible error
-   * @private
-   */
-  dataMessage() {
-    if (this._fin) {
-      const messageLength = this._messageLength;
-      const fragments = this._fragments;
-
-      this._totalPayloadLength = 0;
-      this._messageLength = 0;
-      this._fragmented = 0;
-      this._fragments = [];
-
-      if (this._opcode === 2) {
-        var data;
-
-        if (this._binaryType === 'nodebuffer') {
-          data = toBuffer(fragments, messageLength);
-        } else if (this._binaryType === 'arraybuffer') {
-          data = toArrayBuffer(toBuffer(fragments, messageLength));
-        } else {
-          data = fragments;
-        }
-
-        this.emit('message', data);
-      } else {
-        const buf = toBuffer(fragments, messageLength);
-
-        if (!validation.isValidUTF8(buf)) {
-          this._loop = false;
-          return error(Error, 'invalid UTF-8 sequence', true, 1007);
-        }
-
-        this.emit('message', buf.toString());
-      }
-    }
-
-    this._state = GET_INFO;
-  }
-
-  /**
-   * Handles a control message.
-   *
-   * @param {Buffer} data Data to handle
-   * @return {(Error|RangeError|undefined)} A possible error
-   * @private
-   */
-  controlMessage(data) {
-    if (this._opcode === 0x08) {
-      this._loop = false;
-
-      if (data.length === 0) {
-        this.emit('conclude', 1005, '');
-        this.end();
-      } else if (data.length === 1) {
-        return error(RangeError, 'invalid payload length 1', true, 1002);
-      } else {
-        const code = data.readUInt16BE(0);
-
-        if (!validation.isValidStatusCode(code)) {
-          return error(RangeError, `invalid status code ${code}`, true, 1002);
-        }
-
-        const buf = data.slice(2);
-
-        if (!validation.isValidUTF8(buf)) {
-          return error(Error, 'invalid UTF-8 sequence', true, 1007);
-        }
-
-        this.emit('conclude', code, buf.toString());
-        this.end();
-      }
-    } else if (this._opcode === 0x09) {
-      this.emit('ping', data);
-    } else {
-      this.emit('pong', data);
-    }
-
-    this._state = GET_INFO;
-  }
-}
-
-module.exports = Receiver;
-
-/**
- * Builds an error object.
- *
- * @param {(Error|RangeError)} ErrorCtor The error constructor
- * @param {String} message The error message
- * @param {Boolean} prefix Specifies whether or not to add a default prefix to
- *     `message`
- * @param {Number} statusCode The status code
- * @return {(Error|RangeError)} The error
- * @private
- */
-function error(ErrorCtor, message, prefix, statusCode) {
-  const err = new ErrorCtor(
-    prefix ? `Invalid WebSocket frame: ${message}` : message
-  );
-
-  Error.captureStackTrace(err, error);
-  err[constants.kStatusCode] = statusCode;
-  return err;
-}
-
-/**
- * Makes a buffer from a list of fragments.
- *
- * @param {Buffer[]} fragments The list of fragments composing the message
- * @param {Number} messageLength The length of the message
- * @return {Buffer}
- * @private
- */
-function toBuffer(fragments, messageLength) {
-  if (fragments.length === 1) return fragments[0];
-  if (fragments.length > 1) return bufferUtil.concat(fragments, messageLength);
-  return constants.EMPTY_BUFFER;
-}
-
-/**
- * Converts a buffer to an `ArrayBuffer`.
- *
- * @param {Buffer} buf The buffer to convert
- * @return {ArrayBuffer} Converted buffer
- */
-function toArrayBuffer(buf) {
-  if (buf.byteLength === buf.buffer.byteLength) {
-    return buf.buffer;
-  }
-
-  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/sender.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/sender.js
deleted file mode 100644 (file)
index 3ac8bf8..0000000
+++ /dev/null
@@ -1,416 +0,0 @@
-'use strict';
-
-const crypto = require('crypto');
-
-const PerMessageDeflate = require('./permessage-deflate');
-const bufferUtil = require('./buffer-util');
-const validation = require('./validation');
-const constants = require('./constants');
-
-/**
- * HyBi Sender implementation.
- */
-class Sender {
-  /**
-   * Creates a Sender instance.
-   *
-   * @param {net.Socket} socket The connection socket
-   * @param {Object} extensions An object containing the negotiated extensions
-   */
-  constructor(socket, extensions) {
-    this._extensions = extensions || {};
-    this._socket = socket;
-
-    this._firstFragment = true;
-    this._compress = false;
-
-    this._bufferedBytes = 0;
-    this._deflating = false;
-    this._queue = [];
-  }
-
-  /**
-   * Frames a piece of data according to the HyBi WebSocket protocol.
-   *
-   * @param {Buffer} data The data to frame
-   * @param {Object} options Options object
-   * @param {Number} options.opcode The opcode
-   * @param {Boolean} options.readOnly Specifies whether `data` can be modified
-   * @param {Boolean} options.fin Specifies whether or not to set the FIN bit
-   * @param {Boolean} options.mask Specifies whether or not to mask `data`
-   * @param {Boolean} options.rsv1 Specifies whether or not to set the RSV1 bit
-   * @return {Buffer[]} The framed data as a list of `Buffer` instances
-   * @public
-   */
-  static frame(data, options) {
-    const merge = data.length < 1024 || (options.mask && options.readOnly);
-    var offset = options.mask ? 6 : 2;
-    var payloadLength = data.length;
-
-    if (data.length >= 65536) {
-      offset += 8;
-      payloadLength = 127;
-    } else if (data.length > 125) {
-      offset += 2;
-      payloadLength = 126;
-    }
-
-    const target = Buffer.allocUnsafe(merge ? data.length + offset : offset);
-
-    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;
-    if (options.rsv1) target[0] |= 0x40;
-
-    if (payloadLength === 126) {
-      target.writeUInt16BE(data.length, 2);
-    } else if (payloadLength === 127) {
-      target.writeUInt32BE(0, 2);
-      target.writeUInt32BE(data.length, 6);
-    }
-
-    if (!options.mask) {
-      target[1] = payloadLength;
-      if (merge) {
-        data.copy(target, offset);
-        return [target];
-      }
-
-      return [target, data];
-    }
-
-    const mask = crypto.randomBytes(4);
-
-    target[1] = payloadLength | 0x80;
-    target[offset - 4] = mask[0];
-    target[offset - 3] = mask[1];
-    target[offset - 2] = mask[2];
-    target[offset - 1] = mask[3];
-
-    if (merge) {
-      bufferUtil.mask(data, mask, target, offset, data.length);
-      return [target];
-    }
-
-    bufferUtil.mask(data, mask, data, 0, data.length);
-    return [target, data];
-  }
-
-  /**
-   * Sends a close message to the other peer.
-   *
-   * @param {(Number|undefined)} code The status code component of the body
-   * @param {String} data The message component of the body
-   * @param {Boolean} mask Specifies whether or not to mask the message
-   * @param {Function} cb Callback
-   * @public
-   */
-  close(code, data, mask, cb) {
-    var buf;
-
-    if (code === undefined) {
-      buf = constants.EMPTY_BUFFER;
-    } else if (
-      typeof code !== 'number' ||
-      !validation.isValidStatusCode(code)
-    ) {
-      throw new TypeError('First argument must be a valid error code number');
-    } else if (data === undefined || data === '') {
-      buf = Buffer.allocUnsafe(2);
-      buf.writeUInt16BE(code, 0);
-    } else {
-      buf = Buffer.allocUnsafe(2 + Buffer.byteLength(data));
-      buf.writeUInt16BE(code, 0);
-      buf.write(data, 2);
-    }
-
-    if (this._deflating) {
-      this.enqueue([this.doClose, buf, mask, cb]);
-    } else {
-      this.doClose(buf, mask, cb);
-    }
-  }
-
-  /**
-   * Frames and sends a close message.
-   *
-   * @param {Buffer} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback
-   * @private
-   */
-  doClose(data, mask, cb) {
-    this.sendFrame(
-      Sender.frame(data, {
-        fin: true,
-        rsv1: false,
-        opcode: 0x08,
-        mask,
-        readOnly: false
-      }),
-      cb
-    );
-  }
-
-  /**
-   * Sends a ping message to the other peer.
-   *
-   * @param {*} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback
-   * @public
-   */
-  ping(data, mask, cb) {
-    var readOnly = true;
-
-    if (!Buffer.isBuffer(data)) {
-      if (data instanceof ArrayBuffer) {
-        data = Buffer.from(data);
-      } else if (ArrayBuffer.isView(data)) {
-        data = viewToBuffer(data);
-      } else {
-        data = Buffer.from(data);
-        readOnly = false;
-      }
-    }
-
-    if (this._deflating) {
-      this.enqueue([this.doPing, data, mask, readOnly, cb]);
-    } else {
-      this.doPing(data, mask, readOnly, cb);
-    }
-  }
-
-  /**
-   * Frames and sends a ping message.
-   *
-   * @param {*} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Boolean} readOnly Specifies whether `data` can be modified
-   * @param {Function} cb Callback
-   * @private
-   */
-  doPing(data, mask, readOnly, cb) {
-    this.sendFrame(
-      Sender.frame(data, {
-        fin: true,
-        rsv1: false,
-        opcode: 0x09,
-        mask,
-        readOnly
-      }),
-      cb
-    );
-  }
-
-  /**
-   * Sends a pong message to the other peer.
-   *
-   * @param {*} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback
-   * @public
-   */
-  pong(data, mask, cb) {
-    var readOnly = true;
-
-    if (!Buffer.isBuffer(data)) {
-      if (data instanceof ArrayBuffer) {
-        data = Buffer.from(data);
-      } else if (ArrayBuffer.isView(data)) {
-        data = viewToBuffer(data);
-      } else {
-        data = Buffer.from(data);
-        readOnly = false;
-      }
-    }
-
-    if (this._deflating) {
-      this.enqueue([this.doPong, data, mask, readOnly, cb]);
-    } else {
-      this.doPong(data, mask, readOnly, cb);
-    }
-  }
-
-  /**
-   * Frames and sends a pong message.
-   *
-   * @param {*} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Boolean} readOnly Specifies whether `data` can be modified
-   * @param {Function} cb Callback
-   * @private
-   */
-  doPong(data, mask, readOnly, cb) {
-    this.sendFrame(
-      Sender.frame(data, {
-        fin: true,
-        rsv1: false,
-        opcode: 0x0a,
-        mask,
-        readOnly
-      }),
-      cb
-    );
-  }
-
-  /**
-   * Sends a data message to the other peer.
-   *
-   * @param {*} data The message to send
-   * @param {Object} options Options object
-   * @param {Boolean} options.compress Specifies whether or not to compress `data`
-   * @param {Boolean} options.binary Specifies whether `data` is binary or text
-   * @param {Boolean} options.fin Specifies whether the fragment is the last one
-   * @param {Boolean} options.mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback
-   * @public
-   */
-  send(data, options, cb) {
-    var opcode = options.binary ? 2 : 1;
-    var rsv1 = options.compress;
-    var readOnly = true;
-
-    if (!Buffer.isBuffer(data)) {
-      if (data instanceof ArrayBuffer) {
-        data = Buffer.from(data);
-      } else if (ArrayBuffer.isView(data)) {
-        data = viewToBuffer(data);
-      } else {
-        data = Buffer.from(data);
-        readOnly = false;
-      }
-    }
-
-    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
-
-    if (this._firstFragment) {
-      this._firstFragment = false;
-      if (rsv1 && perMessageDeflate) {
-        rsv1 = data.length >= perMessageDeflate._threshold;
-      }
-      this._compress = rsv1;
-    } else {
-      rsv1 = false;
-      opcode = 0;
-    }
-
-    if (options.fin) this._firstFragment = true;
-
-    if (perMessageDeflate) {
-      const opts = {
-        fin: options.fin,
-        rsv1,
-        opcode,
-        mask: options.mask,
-        readOnly
-      };
-
-      if (this._deflating) {
-        this.enqueue([this.dispatch, data, this._compress, opts, cb]);
-      } else {
-        this.dispatch(data, this._compress, opts, cb);
-      }
-    } else {
-      this.sendFrame(
-        Sender.frame(data, {
-          fin: options.fin,
-          rsv1: false,
-          opcode,
-          mask: options.mask,
-          readOnly
-        }),
-        cb
-      );
-    }
-  }
-
-  /**
-   * Dispatches a data message.
-   *
-   * @param {Buffer} data The message to send
-   * @param {Boolean} compress Specifies whether or not to compress `data`
-   * @param {Object} options Options object
-   * @param {Number} options.opcode The opcode
-   * @param {Boolean} options.readOnly Specifies whether `data` can be modified
-   * @param {Boolean} options.fin Specifies whether or not to set the FIN bit
-   * @param {Boolean} options.mask Specifies whether or not to mask `data`
-   * @param {Boolean} options.rsv1 Specifies whether or not to set the RSV1 bit
-   * @param {Function} cb Callback
-   * @private
-   */
-  dispatch(data, compress, options, cb) {
-    if (!compress) {
-      this.sendFrame(Sender.frame(data, options), cb);
-      return;
-    }
-
-    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
-
-    this._deflating = true;
-    perMessageDeflate.compress(data, options.fin, (_, buf) => {
-      this._deflating = false;
-      options.readOnly = false;
-      this.sendFrame(Sender.frame(buf, options), cb);
-      this.dequeue();
-    });
-  }
-
-  /**
-   * Executes queued send operations.
-   *
-   * @private
-   */
-  dequeue() {
-    while (!this._deflating && this._queue.length) {
-      const params = this._queue.shift();
-
-      this._bufferedBytes -= params[1].length;
-      params[0].apply(this, params.slice(1));
-    }
-  }
-
-  /**
-   * Enqueues a send operation.
-   *
-   * @param {Array} params Send operation parameters.
-   * @private
-   */
-  enqueue(params) {
-    this._bufferedBytes += params[1].length;
-    this._queue.push(params);
-  }
-
-  /**
-   * Sends a frame.
-   *
-   * @param {Buffer[]} list The frame to send
-   * @param {Function} cb Callback
-   * @private
-   */
-  sendFrame(list, cb) {
-    if (list.length === 2) {
-      this._socket.write(list[0]);
-      this._socket.write(list[1], cb);
-    } else {
-      this._socket.write(list[0], cb);
-    }
-  }
-}
-
-module.exports = Sender;
-
-/**
- * Converts an `ArrayBuffer` view into a buffer.
- *
- * @param {(DataView|TypedArray)} view The view to convert
- * @return {Buffer} Converted view
- * @private
- */
-function viewToBuffer(view) {
-  const buf = Buffer.from(view.buffer);
-
-  if (view.byteLength !== view.buffer.byteLength) {
-    return buf.slice(view.byteOffset, view.byteOffset + view.byteLength);
-  }
-
-  return buf;
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/validation.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/validation.js
deleted file mode 100644 (file)
index 479a7db..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-'use strict';
-
-try {
-  const isValidUTF8 = require('utf-8-validate');
-
-  exports.isValidUTF8 =
-    typeof isValidUTF8 === 'object'
-      ? isValidUTF8.Validation.isValidUTF8 // utf-8-validate@<3.0.0
-      : isValidUTF8;
-} catch (e) /* istanbul ignore next */ {
-  exports.isValidUTF8 = () => true;
-}
-
-/**
- * Checks if a status code is allowed in a close frame.
- *
- * @param {Number} code The status code
- * @return {Boolean} `true` if the status code is valid, else `false`
- * @public
- */
-exports.isValidStatusCode = (code) => {
-  return (
-    (code >= 1000 &&
-      code <= 1013 &&
-      code !== 1004 &&
-      code !== 1005 &&
-      code !== 1006) ||
-    (code >= 3000 && code <= 4999)
-  );
-};
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js
deleted file mode 100644 (file)
index deca408..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-'use strict';
-
-const EventEmitter = require('events');
-const crypto = require('crypto');
-const http = require('http');
-
-const PerMessageDeflate = require('./permessage-deflate');
-const extension = require('./extension');
-const constants = require('./constants');
-const WebSocket = require('./websocket');
-
-/**
- * Class representing a WebSocket server.
- *
- * @extends EventEmitter
- */
-class WebSocketServer extends EventEmitter {
-  /**
-   * Create a `WebSocketServer` instance.
-   *
-   * @param {Object} options Configuration options
-   * @param {String} options.host The hostname where to bind the server
-   * @param {Number} options.port The port where to bind the server
-   * @param {http.Server} options.server A pre-created HTTP/S server to use
-   * @param {Function} options.verifyClient An hook to reject connections
-   * @param {Function} options.handleProtocols An hook to handle protocols
-   * @param {String} options.path Accept only connections matching this path
-   * @param {Boolean} options.noServer Enable no server mode
-   * @param {Boolean} options.clientTracking Specifies whether or not to track clients
-   * @param {(Boolean|Object)} options.perMessageDeflate Enable/disable permessage-deflate
-   * @param {Number} options.maxPayload The maximum allowed message size
-   * @param {Function} callback A listener for the `listening` event
-   */
-  constructor(options, callback) {
-    super();
-
-    options = Object.assign(
-      {
-        maxPayload: 100 * 1024 * 1024,
-        perMessageDeflate: false,
-        handleProtocols: null,
-        clientTracking: true,
-        verifyClient: null,
-        noServer: false,
-        backlog: null, // use default (511 as implemented in net.js)
-        server: null,
-        host: null,
-        path: null,
-        port: null
-      },
-      options
-    );
-
-    if (options.port == null && !options.server && !options.noServer) {
-      throw new TypeError(
-        'One of the "port", "server", or "noServer" options must be specified'
-      );
-    }
-
-    if (options.port != null) {
-      this._server = http.createServer((req, res) => {
-        const body = http.STATUS_CODES[426];
-
-        res.writeHead(426, {
-          'Content-Length': body.length,
-          'Content-Type': 'text/plain'
-        });
-        res.end(body);
-      });
-      this._server.listen(
-        options.port,
-        options.host,
-        options.backlog,
-        callback
-      );
-    } else if (options.server) {
-      this._server = options.server;
-    }
-
-    if (this._server) {
-      this._removeListeners = addListeners(this._server, {
-        listening: this.emit.bind(this, 'listening'),
-        error: this.emit.bind(this, 'error'),
-        upgrade: (req, socket, head) => {
-          this.handleUpgrade(req, socket, head, (ws) => {
-            this.emit('connection', ws, req);
-          });
-        }
-      });
-    }
-
-    if (options.perMessageDeflate === true) options.perMessageDeflate = {};
-    if (options.clientTracking) this.clients = new Set();
-    this.options = options;
-  }
-
-  /**
-   * Returns the bound address, the address family name, and port of the server
-   * as reported by the operating system if listening on an IP socket.
-   * If the server is listening on a pipe or UNIX domain socket, the name is
-   * returned as a string.
-   *
-   * @return {(Object|String|null)} The address of the server
-   * @public
-   */
-  address() {
-    if (this.options.noServer) {
-      throw new Error('The server is operating in "noServer" mode');
-    }
-
-    if (!this._server) return null;
-    return this._server.address();
-  }
-
-  /**
-   * Close the server.
-   *
-   * @param {Function} cb Callback
-   * @public
-   */
-  close(cb) {
-    if (cb) this.once('close', cb);
-
-    //
-    // Terminate all associated clients.
-    //
-    if (this.clients) {
-      for (const client of this.clients) client.terminate();
-    }
-
-    const server = this._server;
-
-    if (server) {
-      this._removeListeners();
-      this._removeListeners = this._server = null;
-
-      //
-      // Close the http server if it was internally created.
-      //
-      if (this.options.port != null) {
-        server.close(() => this.emit('close'));
-        return;
-      }
-    }
-
-    process.nextTick(emitClose, this);
-  }
-
-  /**
-   * See if a given request should be handled by this server instance.
-   *
-   * @param {http.IncomingMessage} req Request object to inspect
-   * @return {Boolean} `true` if the request is valid, else `false`
-   * @public
-   */
-  shouldHandle(req) {
-    if (this.options.path) {
-      const index = req.url.indexOf('?');
-      const pathname = index !== -1 ? req.url.slice(0, index) : req.url;
-
-      if (pathname !== this.options.path) return false;
-    }
-
-    return true;
-  }
-
-  /**
-   * Handle a HTTP Upgrade request.
-   *
-   * @param {http.IncomingMessage} req The request object
-   * @param {net.Socket} socket The network socket between the server and client
-   * @param {Buffer} head The first packet of the upgraded stream
-   * @param {Function} cb Callback
-   * @public
-   */
-  handleUpgrade(req, socket, head, cb) {
-    socket.on('error', socketOnError);
-
-    const version = +req.headers['sec-websocket-version'];
-    const extensions = {};
-
-    if (
-      req.method !== 'GET' ||
-      req.headers.upgrade.toLowerCase() !== 'websocket' ||
-      !req.headers['sec-websocket-key'] ||
-      (version !== 8 && version !== 13) ||
-      !this.shouldHandle(req)
-    ) {
-      return abortHandshake(socket, 400);
-    }
-
-    if (this.options.perMessageDeflate) {
-      const perMessageDeflate = new PerMessageDeflate(
-        this.options.perMessageDeflate,
-        true,
-        this.options.maxPayload
-      );
-
-      try {
-        const offers = extension.parse(req.headers['sec-websocket-extensions']);
-
-        if (offers[PerMessageDeflate.extensionName]) {
-          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);
-          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
-        }
-      } catch (err) {
-        return abortHandshake(socket, 400);
-      }
-    }
-
-    //
-    // Optionally call external client verification handler.
-    //
-    if (this.options.verifyClient) {
-      const info = {
-        origin:
-          req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],
-        secure: !!(req.connection.authorized || req.connection.encrypted),
-        req
-      };
-
-      if (this.options.verifyClient.length === 2) {
-        this.options.verifyClient(info, (verified, code, message, headers) => {
-          if (!verified) {
-            return abortHandshake(socket, code || 401, message, headers);
-          }
-
-          this.completeUpgrade(extensions, req, socket, head, cb);
-        });
-        return;
-      }
-
-      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);
-    }
-
-    this.completeUpgrade(extensions, req, socket, head, cb);
-  }
-
-  /**
-   * Upgrade the connection to WebSocket.
-   *
-   * @param {Object} extensions The accepted extensions
-   * @param {http.IncomingMessage} req The request object
-   * @param {net.Socket} socket The network socket between the server and client
-   * @param {Buffer} head The first packet of the upgraded stream
-   * @param {Function} cb Callback
-   * @private
-   */
-  completeUpgrade(extensions, req, socket, head, cb) {
-    //
-    // Destroy the socket if the client has already sent a FIN packet.
-    //
-    if (!socket.readable || !socket.writable) return socket.destroy();
-
-    const key = crypto
-      .createHash('sha1')
-      .update(req.headers['sec-websocket-key'] + constants.GUID, 'binary')
-      .digest('base64');
-
-    const headers = [
-      'HTTP/1.1 101 Switching Protocols',
-      'Upgrade: websocket',
-      'Connection: Upgrade',
-      `Sec-WebSocket-Accept: ${key}`
-    ];
-
-    const ws = new WebSocket(null);
-    var protocol = req.headers['sec-websocket-protocol'];
-
-    if (protocol) {
-      protocol = protocol.trim().split(/ *, */);
-
-      //
-      // Optionally call external protocol selection handler.
-      //
-      if (this.options.handleProtocols) {
-        protocol = this.options.handleProtocols(protocol, req);
-      } else {
-        protocol = protocol[0];
-      }
-
-      if (protocol) {
-        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);
-        ws.protocol = protocol;
-      }
-    }
-
-    if (extensions[PerMessageDeflate.extensionName]) {
-      const params = extensions[PerMessageDeflate.extensionName].params;
-      const value = extension.format({
-        [PerMessageDeflate.extensionName]: [params]
-      });
-      headers.push(`Sec-WebSocket-Extensions: ${value}`);
-      ws._extensions = extensions;
-    }
-
-    //
-    // Allow external modification/inspection of handshake headers.
-    //
-    this.emit('headers', headers, req);
-
-    socket.write(headers.concat('\r\n').join('\r\n'));
-    socket.removeListener('error', socketOnError);
-
-    ws.setSocket(socket, head, this.options.maxPayload);
-
-    if (this.clients) {
-      this.clients.add(ws);
-      ws.on('close', () => this.clients.delete(ws));
-    }
-
-    cb(ws);
-  }
-}
-
-module.exports = WebSocketServer;
-
-/**
- * Add event listeners on an `EventEmitter` using a map of <event, listener>
- * pairs.
- *
- * @param {EventEmitter} server The event emitter
- * @param {Object.<String, Function>} map The listeners to add
- * @return {Function} A function that will remove the added listeners when called
- * @private
- */
-function addListeners(server, map) {
-  for (const event of Object.keys(map)) server.on(event, map[event]);
-
-  return function removeListeners() {
-    for (const event of Object.keys(map)) {
-      server.removeListener(event, map[event]);
-    }
-  };
-}
-
-/**
- * Emit a `'close'` event on an `EventEmitter`.
- *
- * @param {EventEmitter} server The event emitter
- * @private
- */
-function emitClose(server) {
-  server.emit('close');
-}
-
-/**
- * Handle premature socket errors.
- *
- * @private
- */
-function socketOnError() {
-  this.destroy();
-}
-
-/**
- * Close the connection when preconditions are not fulfilled.
- *
- * @param {net.Socket} socket The socket of the upgrade request
- * @param {Number} code The HTTP response status code
- * @param {String} [message] The HTTP response body
- * @param {Object} [headers] Additional HTTP response headers
- * @private
- */
-function abortHandshake(socket, code, message, headers) {
-  if (socket.writable) {
-    message = message || http.STATUS_CODES[code];
-    headers = Object.assign(
-      {
-        Connection: 'close',
-        'Content-type': 'text/html',
-        'Content-Length': Buffer.byteLength(message)
-      },
-      headers
-    );
-
-    socket.write(
-      `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` +
-        Object.keys(headers)
-          .map((h) => `${h}: ${headers[h]}`)
-          .join('\r\n') +
-        '\r\n\r\n' +
-        message
-    );
-  }
-
-  socket.removeListener('error', socketOnError);
-  socket.destroy();
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/websocket.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/lib/websocket.js
deleted file mode 100644 (file)
index 1d7c446..0000000
+++ /dev/null
@@ -1,852 +0,0 @@
-'use strict';
-
-const EventEmitter = require('events');
-const crypto = require('crypto');
-const https = require('https');
-const http = require('http');
-const net = require('net');
-const tls = require('tls');
-const url = require('url');
-
-const PerMessageDeflate = require('./permessage-deflate');
-const EventTarget = require('./event-target');
-const extension = require('./extension');
-const constants = require('./constants');
-const Receiver = require('./receiver');
-const Sender = require('./sender');
-
-const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
-const kWebSocket = constants.kWebSocket;
-const protocolVersions = [8, 13];
-const closeTimeout = 30 * 1000; // Allow 30 seconds to terminate the connection cleanly.
-
-/**
- * Class representing a WebSocket.
- *
- * @extends EventEmitter
- */
-class WebSocket extends EventEmitter {
-  /**
-   * Create a new `WebSocket`.
-   *
-   * @param {(String|url.Url|url.URL)} address The URL to which to connect
-   * @param {(String|String[])} protocols The subprotocols
-   * @param {Object} options Connection options
-   */
-  constructor(address, protocols, options) {
-    super();
-
-    this.readyState = WebSocket.CONNECTING;
-    this.protocol = '';
-
-    this._binaryType = constants.BINARY_TYPES[0];
-    this._closeFrameReceived = false;
-    this._closeFrameSent = false;
-    this._closeMessage = '';
-    this._closeTimer = null;
-    this._closeCode = 1006;
-    this._extensions = {};
-    this._isServer = true;
-    this._receiver = null;
-    this._sender = null;
-    this._socket = null;
-
-    if (address !== null) {
-      if (Array.isArray(protocols)) {
-        protocols = protocols.join(', ');
-      } else if (typeof protocols === 'object' && protocols !== null) {
-        options = protocols;
-        protocols = undefined;
-      }
-
-      initAsClient.call(this, address, protocols, options);
-    }
-  }
-
-  get CONNECTING() {
-    return WebSocket.CONNECTING;
-  }
-  get CLOSING() {
-    return WebSocket.CLOSING;
-  }
-  get CLOSED() {
-    return WebSocket.CLOSED;
-  }
-  get OPEN() {
-    return WebSocket.OPEN;
-  }
-
-  /**
-   * This deviates from the WHATWG interface since ws doesn't support the required
-   * default "blob" type (instead we define a custom "nodebuffer" type).
-   *
-   * @type {String}
-   */
-  get binaryType() {
-    return this._binaryType;
-  }
-
-  set binaryType(type) {
-    if (!constants.BINARY_TYPES.includes(type)) return;
-
-    this._binaryType = type;
-
-    //
-    // Allow to change `binaryType` on the fly.
-    //
-    if (this._receiver) this._receiver._binaryType = type;
-  }
-
-  /**
-   * @type {Number}
-   */
-  get bufferedAmount() {
-    if (!this._socket) return 0;
-
-    //
-    // `socket.bufferSize` is `undefined` if the socket is closed.
-    //
-    return (this._socket.bufferSize || 0) + this._sender._bufferedBytes;
-  }
-
-  /**
-   * @type {String}
-   */
-  get extensions() {
-    return Object.keys(this._extensions).join();
-  }
-
-  /**
-   * Set up the socket and the internal resources.
-   *
-   * @param {net.Socket} socket The network socket between the server and client
-   * @param {Buffer} head The first packet of the upgraded stream
-   * @param {Number} maxPayload The maximum allowed message size
-   * @private
-   */
-  setSocket(socket, head, maxPayload) {
-    const receiver = new Receiver(
-      this._binaryType,
-      this._extensions,
-      maxPayload
-    );
-
-    this._sender = new Sender(socket, this._extensions);
-    this._receiver = receiver;
-    this._socket = socket;
-
-    receiver[kWebSocket] = this;
-    socket[kWebSocket] = this;
-
-    receiver.on('conclude', receiverOnConclude);
-    receiver.on('drain', receiverOnDrain);
-    receiver.on('error', receiverOnError);
-    receiver.on('message', receiverOnMessage);
-    receiver.on('ping', receiverOnPing);
-    receiver.on('pong', receiverOnPong);
-
-    socket.setTimeout(0);
-    socket.setNoDelay();
-
-    if (head.length > 0) socket.unshift(head);
-
-    socket.on('close', socketOnClose);
-    socket.on('data', socketOnData);
-    socket.on('end', socketOnEnd);
-    socket.on('error', socketOnError);
-
-    this.readyState = WebSocket.OPEN;
-    this.emit('open');
-  }
-
-  /**
-   * Emit the `'close'` event.
-   *
-   * @private
-   */
-  emitClose() {
-    this.readyState = WebSocket.CLOSED;
-
-    if (!this._socket) {
-      this.emit('close', this._closeCode, this._closeMessage);
-      return;
-    }
-
-    if (this._extensions[PerMessageDeflate.extensionName]) {
-      this._extensions[PerMessageDeflate.extensionName].cleanup();
-    }
-
-    this._receiver.removeAllListeners();
-    this.emit('close', this._closeCode, this._closeMessage);
-  }
-
-  /**
-   * Start a closing handshake.
-   *
-   *          +----------+   +-----------+   +----------+
-   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -
-   *    |     +----------+   +-----------+   +----------+     |
-   *          +----------+   +-----------+         |
-   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING
-   *          +----------+   +-----------+   |
-   *    |           |                        |   +---+        |
-   *                +------------------------+-->|fin| - - - -
-   *    |         +---+                      |   +---+
-   *     - - - - -|fin|<---------------------+
-   *              +---+
-   *
-   * @param {Number} code Status code explaining why the connection is closing
-   * @param {String} data A string explaining why the connection is closing
-   * @public
-   */
-  close(code, data) {
-    if (this.readyState === WebSocket.CLOSED) return;
-    if (this.readyState === WebSocket.CONNECTING) {
-      const msg = 'WebSocket was closed before the connection was established';
-      return abortHandshake(this, this._req, msg);
-    }
-
-    if (this.readyState === WebSocket.CLOSING) {
-      if (this._closeFrameSent && this._closeFrameReceived) this._socket.end();
-      return;
-    }
-
-    this.readyState = WebSocket.CLOSING;
-    this._sender.close(code, data, !this._isServer, (err) => {
-      //
-      // This error is handled by the `'error'` listener on the socket. We only
-      // want to know if the close frame has been sent here.
-      //
-      if (err) return;
-
-      this._closeFrameSent = true;
-
-      if (this._socket.writable) {
-        if (this._closeFrameReceived) this._socket.end();
-
-        //
-        // Ensure that the connection is closed even if the closing handshake
-        // fails.
-        //
-        this._closeTimer = setTimeout(
-          this._socket.destroy.bind(this._socket),
-          closeTimeout
-        );
-      }
-    });
-  }
-
-  /**
-   * Send a ping.
-   *
-   * @param {*} data The data to send
-   * @param {Boolean} mask Indicates whether or not to mask `data`
-   * @param {Function} cb Callback which is executed when the ping is sent
-   * @public
-   */
-  ping(data, mask, cb) {
-    if (typeof data === 'function') {
-      cb = data;
-      data = mask = undefined;
-    } else if (typeof mask === 'function') {
-      cb = mask;
-      mask = undefined;
-    }
-
-    if (this.readyState !== WebSocket.OPEN) {
-      const err = new Error(
-        `WebSocket is not open: readyState ${this.readyState} ` +
-          `(${readyStates[this.readyState]})`
-      );
-
-      if (cb) return cb(err);
-      throw err;
-    }
-
-    if (typeof data === 'number') data = data.toString();
-    if (mask === undefined) mask = !this._isServer;
-    this._sender.ping(data || constants.EMPTY_BUFFER, mask, cb);
-  }
-
-  /**
-   * Send a pong.
-   *
-   * @param {*} data The data to send
-   * @param {Boolean} mask Indicates whether or not to mask `data`
-   * @param {Function} cb Callback which is executed when the pong is sent
-   * @public
-   */
-  pong(data, mask, cb) {
-    if (typeof data === 'function') {
-      cb = data;
-      data = mask = undefined;
-    } else if (typeof mask === 'function') {
-      cb = mask;
-      mask = undefined;
-    }
-
-    if (this.readyState !== WebSocket.OPEN) {
-      const err = new Error(
-        `WebSocket is not open: readyState ${this.readyState} ` +
-          `(${readyStates[this.readyState]})`
-      );
-
-      if (cb) return cb(err);
-      throw err;
-    }
-
-    if (typeof data === 'number') data = data.toString();
-    if (mask === undefined) mask = !this._isServer;
-    this._sender.pong(data || constants.EMPTY_BUFFER, mask, cb);
-  }
-
-  /**
-   * Send a data message.
-   *
-   * @param {*} data The message to send
-   * @param {Object} options Options object
-   * @param {Boolean} options.compress Specifies whether or not to compress `data`
-   * @param {Boolean} options.binary Specifies whether `data` is binary or text
-   * @param {Boolean} options.fin Specifies whether the fragment is the last one
-   * @param {Boolean} options.mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback which is executed when data is written out
-   * @public
-   */
-  send(data, options, cb) {
-    if (typeof options === 'function') {
-      cb = options;
-      options = {};
-    }
-
-    if (this.readyState !== WebSocket.OPEN) {
-      const err = new Error(
-        `WebSocket is not open: readyState ${this.readyState} ` +
-          `(${readyStates[this.readyState]})`
-      );
-
-      if (cb) return cb(err);
-      throw err;
-    }
-
-    if (typeof data === 'number') data = data.toString();
-
-    const opts = Object.assign(
-      {
-        binary: typeof data !== 'string',
-        mask: !this._isServer,
-        compress: true,
-        fin: true
-      },
-      options
-    );
-
-    if (!this._extensions[PerMessageDeflate.extensionName]) {
-      opts.compress = false;
-    }
-
-    this._sender.send(data || constants.EMPTY_BUFFER, opts, cb);
-  }
-
-  /**
-   * Forcibly close the connection.
-   *
-   * @public
-   */
-  terminate() {
-    if (this.readyState === WebSocket.CLOSED) return;
-    if (this.readyState === WebSocket.CONNECTING) {
-      const msg = 'WebSocket was closed before the connection was established';
-      return abortHandshake(this, this._req, msg);
-    }
-
-    if (this._socket) {
-      this.readyState = WebSocket.CLOSING;
-      this._socket.destroy();
-    }
-  }
-}
-
-readyStates.forEach((readyState, i) => {
-  WebSocket[readyState] = i;
-});
-
-//
-// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.
-// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface
-//
-['open', 'error', 'close', 'message'].forEach((method) => {
-  Object.defineProperty(WebSocket.prototype, `on${method}`, {
-    /**
-     * Return the listener of the event.
-     *
-     * @return {(Function|undefined)} The event listener or `undefined`
-     * @public
-     */
-    get() {
-      const listeners = this.listeners(method);
-      for (var i = 0; i < listeners.length; i++) {
-        if (listeners[i]._listener) return listeners[i]._listener;
-      }
-
-      return undefined;
-    },
-    /**
-     * Add a listener for the event.
-     *
-     * @param {Function} listener The listener to add
-     * @public
-     */
-    set(listener) {
-      const listeners = this.listeners(method);
-      for (var i = 0; i < listeners.length; i++) {
-        //
-        // Remove only the listeners added via `addEventListener`.
-        //
-        if (listeners[i]._listener) this.removeListener(method, listeners[i]);
-      }
-      this.addEventListener(method, listener);
-    }
-  });
-});
-
-WebSocket.prototype.addEventListener = EventTarget.addEventListener;
-WebSocket.prototype.removeEventListener = EventTarget.removeEventListener;
-
-module.exports = WebSocket;
-
-/**
- * Initialize a WebSocket client.
- *
- * @param {(String|url.Url|url.URL)} address The URL to which to connect
- * @param {String} protocols The subprotocols
- * @param {Object} options Connection options
- * @param {(Boolean|Object)} options.perMessageDeflate Enable/disable permessage-deflate
- * @param {Number} options.handshakeTimeout Timeout in milliseconds for the handshake request
- * @param {Number} options.protocolVersion Value of the `Sec-WebSocket-Version` header
- * @param {String} options.origin Value of the `Origin` or `Sec-WebSocket-Origin` header
- * @param {Number} options.maxPayload The maximum allowed message size
- * @private
- */
-function initAsClient(address, protocols, options) {
-  options = Object.assign(
-    {
-      protocolVersion: protocolVersions[1],
-      perMessageDeflate: true,
-      maxPayload: 100 * 1024 * 1024
-    },
-    options,
-    {
-      createConnection: undefined,
-      socketPath: undefined,
-      hostname: undefined,
-      protocol: undefined,
-      timeout: undefined,
-      method: undefined,
-      auth: undefined,
-      host: undefined,
-      path: undefined,
-      port: undefined
-    }
-  );
-
-  if (!protocolVersions.includes(options.protocolVersion)) {
-    throw new RangeError(
-      `Unsupported protocol version: ${options.protocolVersion} ` +
-        `(supported versions: ${protocolVersions.join(', ')})`
-    );
-  }
-
-  this._isServer = false;
-
-  var parsedUrl;
-
-  if (typeof address === 'object' && address.href !== undefined) {
-    parsedUrl = address;
-    this.url = address.href;
-  } else {
-    //
-    // The WHATWG URL constructor is not available on Node.js < 6.13.0
-    //
-    parsedUrl = url.URL ? new url.URL(address) : url.parse(address);
-    this.url = address;
-  }
-
-  const isUnixSocket = parsedUrl.protocol === 'ws+unix:';
-
-  if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {
-    throw new Error(`Invalid URL: ${this.url}`);
-  }
-
-  const isSecure =
-    parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';
-  const defaultPort = isSecure ? 443 : 80;
-  const key = crypto.randomBytes(16).toString('base64');
-  const httpObj = isSecure ? https : http;
-  const path = parsedUrl.search
-    ? `${parsedUrl.pathname || '/'}${parsedUrl.search}`
-    : parsedUrl.pathname || '/';
-  var perMessageDeflate;
-
-  options.createConnection = isSecure ? tlsConnect : netConnect;
-  options.defaultPort = options.defaultPort || defaultPort;
-  options.port = parsedUrl.port || defaultPort;
-  options.host = parsedUrl.hostname.startsWith('[')
-    ? parsedUrl.hostname.slice(1, -1)
-    : parsedUrl.hostname;
-  options.headers = Object.assign(
-    {
-      'Sec-WebSocket-Version': options.protocolVersion,
-      'Sec-WebSocket-Key': key,
-      Connection: 'Upgrade',
-      Upgrade: 'websocket'
-    },
-    options.headers
-  );
-  options.path = path;
-  options.timeout = options.handshakeTimeout;
-
-  if (options.perMessageDeflate) {
-    perMessageDeflate = new PerMessageDeflate(
-      options.perMessageDeflate !== true ? options.perMessageDeflate : {},
-      false,
-      options.maxPayload
-    );
-    options.headers['Sec-WebSocket-Extensions'] = extension.format({
-      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()
-    });
-  }
-  if (protocols) {
-    options.headers['Sec-WebSocket-Protocol'] = protocols;
-  }
-  if (options.origin) {
-    if (options.protocolVersion < 13) {
-      options.headers['Sec-WebSocket-Origin'] = options.origin;
-    } else {
-      options.headers.Origin = options.origin;
-    }
-  }
-  if (parsedUrl.auth) {
-    options.auth = parsedUrl.auth;
-  } else if (parsedUrl.username || parsedUrl.password) {
-    options.auth = `${parsedUrl.username}:${parsedUrl.password}`;
-  }
-
-  if (isUnixSocket) {
-    const parts = path.split(':');
-
-    options.socketPath = parts[0];
-    options.path = parts[1];
-  }
-
-  var req = (this._req = httpObj.get(options));
-
-  if (options.handshakeTimeout) {
-    req.on('timeout', () => {
-      abortHandshake(this, req, 'Opening handshake has timed out');
-    });
-  }
-
-  req.on('error', (err) => {
-    if (this._req.aborted) return;
-
-    req = this._req = null;
-    this.readyState = WebSocket.CLOSING;
-    this.emit('error', err);
-    this.emitClose();
-  });
-
-  req.on('response', (res) => {
-    if (this.emit('unexpected-response', req, res)) return;
-
-    abortHandshake(this, req, `Unexpected server response: ${res.statusCode}`);
-  });
-
-  req.on('upgrade', (res, socket, head) => {
-    this.emit('upgrade', res);
-
-    //
-    // The user may have closed the connection from a listener of the `upgrade`
-    // event.
-    //
-    if (this.readyState !== WebSocket.CONNECTING) return;
-
-    req = this._req = null;
-
-    const digest = crypto
-      .createHash('sha1')
-      .update(key + constants.GUID, 'binary')
-      .digest('base64');
-
-    if (res.headers['sec-websocket-accept'] !== digest) {
-      abortHandshake(this, socket, 'Invalid Sec-WebSocket-Accept header');
-      return;
-    }
-
-    const serverProt = res.headers['sec-websocket-protocol'];
-    const protList = (protocols || '').split(/, */);
-    var protError;
-
-    if (!protocols && serverProt) {
-      protError = 'Server sent a subprotocol but none was requested';
-    } else if (protocols && !serverProt) {
-      protError = 'Server sent no subprotocol';
-    } else if (serverProt && !protList.includes(serverProt)) {
-      protError = 'Server sent an invalid subprotocol';
-    }
-
-    if (protError) {
-      abortHandshake(this, socket, protError);
-      return;
-    }
-
-    if (serverProt) this.protocol = serverProt;
-
-    if (perMessageDeflate) {
-      try {
-        const extensions = extension.parse(
-          res.headers['sec-websocket-extensions']
-        );
-
-        if (extensions[PerMessageDeflate.extensionName]) {
-          perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
-          this._extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
-        }
-      } catch (err) {
-        abortHandshake(this, socket, 'Invalid Sec-WebSocket-Extensions header');
-        return;
-      }
-    }
-
-    this.setSocket(socket, head, options.maxPayload);
-  });
-}
-
-/**
- * Create a `net.Socket` and initiate a connection.
- *
- * @param {Object} options Connection options
- * @return {net.Socket} The newly created socket used to start the connection
- * @private
- */
-function netConnect(options) {
-  //
-  // Override `options.path` only if `options` is a copy of the original options
-  // object. This is always true on Node.js >= 8 but not on Node.js 6 where
-  // `options.socketPath` might be `undefined` even if the `socketPath` option
-  // was originally set.
-  //
-  if (options.protocolVersion) options.path = options.socketPath;
-  return net.connect(options);
-}
-
-/**
- * Create a `tls.TLSSocket` and initiate a connection.
- *
- * @param {Object} options Connection options
- * @return {tls.TLSSocket} The newly created socket used to start the connection
- * @private
- */
-function tlsConnect(options) {
-  options.path = undefined;
-  options.servername = options.servername || options.host;
-  return tls.connect(options);
-}
-
-/**
- * Abort the handshake and emit an error.
- *
- * @param {WebSocket} websocket The WebSocket instance
- * @param {(http.ClientRequest|net.Socket)} stream The request to abort or the
- *     socket to destroy
- * @param {String} message The error message
- * @private
- */
-function abortHandshake(websocket, stream, message) {
-  websocket.readyState = WebSocket.CLOSING;
-
-  const err = new Error(message);
-  Error.captureStackTrace(err, abortHandshake);
-
-  if (stream.setHeader) {
-    stream.abort();
-    stream.once('abort', websocket.emitClose.bind(websocket));
-    websocket.emit('error', err);
-  } else {
-    stream.destroy(err);
-    stream.once('error', websocket.emit.bind(websocket, 'error'));
-    stream.once('close', websocket.emitClose.bind(websocket));
-  }
-}
-
-/**
- * The listener of the `Receiver` `'conclude'` event.
- *
- * @param {Number} code The status code
- * @param {String} reason The reason for closing
- * @private
- */
-function receiverOnConclude(code, reason) {
-  const websocket = this[kWebSocket];
-
-  websocket._socket.removeListener('data', socketOnData);
-  websocket._socket.resume();
-
-  websocket._closeFrameReceived = true;
-  websocket._closeMessage = reason;
-  websocket._closeCode = code;
-
-  if (code === 1005) websocket.close();
-  else websocket.close(code, reason);
-}
-
-/**
- * The listener of the `Receiver` `'drain'` event.
- *
- * @private
- */
-function receiverOnDrain() {
-  this[kWebSocket]._socket.resume();
-}
-
-/**
- * The listener of the `Receiver` `'error'` event.
- *
- * @param {(RangeError|Error)} err The emitted error
- * @private
- */
-function receiverOnError(err) {
-  const websocket = this[kWebSocket];
-
-  websocket._socket.removeListener('data', socketOnData);
-
-  websocket.readyState = WebSocket.CLOSING;
-  websocket._closeCode = err[constants.kStatusCode];
-  websocket.emit('error', err);
-  websocket._socket.destroy();
-}
-
-/**
- * The listener of the `Receiver` `'finish'` event.
- *
- * @private
- */
-function receiverOnFinish() {
-  this[kWebSocket].emitClose();
-}
-
-/**
- * The listener of the `Receiver` `'message'` event.
- *
- * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message
- * @private
- */
-function receiverOnMessage(data) {
-  this[kWebSocket].emit('message', data);
-}
-
-/**
- * The listener of the `Receiver` `'ping'` event.
- *
- * @param {Buffer} data The data included in the ping frame
- * @private
- */
-function receiverOnPing(data) {
-  const websocket = this[kWebSocket];
-
-  websocket.pong(data, !websocket._isServer, constants.NOOP);
-  websocket.emit('ping', data);
-}
-
-/**
- * The listener of the `Receiver` `'pong'` event.
- *
- * @param {Buffer} data The data included in the pong frame
- * @private
- */
-function receiverOnPong(data) {
-  this[kWebSocket].emit('pong', data);
-}
-
-/**
- * The listener of the `net.Socket` `'close'` event.
- *
- * @private
- */
-function socketOnClose() {
-  const websocket = this[kWebSocket];
-
-  this.removeListener('close', socketOnClose);
-  this.removeListener('end', socketOnEnd);
-
-  websocket.readyState = WebSocket.CLOSING;
-
-  //
-  // The close frame might not have been received or the `'end'` event emitted,
-  // for example, if the socket was destroyed due to an error. Ensure that the
-  // `receiver` stream is closed after writing any remaining buffered data to
-  // it. If the readable side of the socket is in flowing mode then there is no
-  // buffered data as everything has been already written and `readable.read()`
-  // will return `null`. If instead, the socket is paused, any possible buffered
-  // data will be read as a single chunk and emitted synchronously in a single
-  // `'data'` event.
-  //
-  websocket._socket.read();
-  websocket._receiver.end();
-
-  this.removeListener('data', socketOnData);
-  this[kWebSocket] = undefined;
-
-  clearTimeout(websocket._closeTimer);
-
-  if (
-    websocket._receiver._writableState.finished ||
-    websocket._receiver._writableState.errorEmitted
-  ) {
-    websocket.emitClose();
-  } else {
-    websocket._receiver.on('error', receiverOnFinish);
-    websocket._receiver.on('finish', receiverOnFinish);
-  }
-}
-
-/**
- * The listener of the `net.Socket` `'data'` event.
- *
- * @param {Buffer} chunk A chunk of data
- * @private
- */
-function socketOnData(chunk) {
-  if (!this[kWebSocket]._receiver.write(chunk)) {
-    this.pause();
-  }
-}
-
-/**
- * The listener of the `net.Socket` `'end'` event.
- *
- * @private
- */
-function socketOnEnd() {
-  const websocket = this[kWebSocket];
-
-  websocket.readyState = WebSocket.CLOSING;
-  websocket._receiver.end();
-  this.end();
-}
-
-/**
- * The listener of the `net.Socket` `'error'` event.
- *
- * @private
- */
-function socketOnError() {
-  const websocket = this[kWebSocket];
-
-  this.removeListener('error', socketOnError);
-  this.on('error', constants.NOOP);
-
-  if (websocket) {
-    websocket.readyState = WebSocket.CLOSING;
-    this.destroy();
-  }
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/package.json b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/node_modules/ws/package.json
deleted file mode 100644 (file)
index 0976777..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "_from": "ws@~6.1.0",
-  "_id": "ws@6.1.4",
-  "_inBundle": false,
-  "_integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
-  "_location": "/engine.io-client/ws",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "ws@~6.1.0",
-    "name": "ws",
-    "escapedName": "ws",
-    "rawSpec": "~6.1.0",
-    "saveSpec": null,
-    "fetchSpec": "~6.1.0"
-  },
-  "_requiredBy": [
-    "/engine.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
-  "_shasum": "5b5c8800afab925e94ccb29d153c8d02c1776ef9",
-  "_spec": "ws@~6.1.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io-client",
-  "author": {
-    "name": "Einar Otto Stangvik",
-    "email": "einaros@gmail.com",
-    "url": "http://2x.io"
-  },
-  "browser": "browser.js",
-  "bugs": {
-    "url": "https://github.com/websockets/ws/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "async-limiter": "~1.0.0"
-  },
-  "deprecated": false,
-  "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js",
-  "devDependencies": {
-    "benchmark": "~2.1.4",
-    "bufferutil": "~4.0.0",
-    "eslint": "~5.14.0",
-    "eslint-config-prettier": "~4.0.0",
-    "eslint-plugin-prettier": "~3.0.0",
-    "mocha": "~5.2.0",
-    "nyc": "~13.3.0",
-    "prettier": "~1.16.1",
-    "prettylint": "~1.0.0",
-    "utf-8-validate": "~5.0.0"
-  },
-  "files": [
-    "browser.js",
-    "index.js",
-    "lib/*.js"
-  ],
-  "homepage": "https://github.com/websockets/ws",
-  "keywords": [
-    "HyBi",
-    "Push",
-    "RFC-6455",
-    "WebSocket",
-    "WebSockets",
-    "real-time"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "ws",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/websockets/ws.git"
-  },
-  "scripts": {
-    "integration": "npm run lint && mocha test/*.integration.js",
-    "lint": "eslint . --ignore-path .gitignore && prettylint '**/*.{json,md}' --ignore-path .gitignore",
-    "test": "npm run lint && nyc --reporter=html --reporter=text mocha test/*.test.js"
-  },
-  "version": "6.1.4"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/package.json b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-client/package.json
deleted file mode 100644 (file)
index a9c2288..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-{
-  "_from": "engine.io-client@~3.4.0",
-  "_id": "engine.io-client@3.4.1",
-  "_inBundle": false,
-  "_integrity": "sha512-RJNmA+A9Js+8Aoq815xpGAsgWH1VoSYM//2VgIiu9lNOaHFfLpTjH4tOzktBpjIs5lvOfiNY1dwf+NuU6D38Mw==",
-  "_location": "/engine.io-client",
-  "_phantomChildren": {
-    "async-limiter": "1.0.1"
-  },
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "engine.io-client@~3.4.0",
-    "name": "engine.io-client",
-    "escapedName": "engine.io-client",
-    "rawSpec": "~3.4.0",
-    "saveSpec": null,
-    "fetchSpec": "~3.4.0"
-  },
-  "_requiredBy": [
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.1.tgz",
-  "_shasum": "922ddb47eecdcb541136a93aeead24718fd05461",
-  "_spec": "engine.io-client@~3.4.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "browser": {
-    "ws": false,
-    "xmlhttprequest-ssl": "./lib/xmlhttprequest.js",
-    "./lib/globalThis.js": "./lib/globalThis.browser.js"
-  },
-  "bugs": {
-    "url": "https://github.com/socketio/engine.io-client/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Guillermo Rauch",
-      "email": "rauchg@gmail.com"
-    },
-    {
-      "name": "Vladimir Dronnikov",
-      "email": "dronnikov@gmail.com"
-    },
-    {
-      "name": "Christoph Dorn",
-      "url": "https://github.com/cadorn"
-    },
-    {
-      "name": "Mark Mokryn",
-      "email": "mokesmokes@gmail.com"
-    }
-  ],
-  "dependencies": {
-    "component-emitter": "1.2.1",
-    "component-inherit": "0.0.3",
-    "debug": "~4.1.0",
-    "engine.io-parser": "~2.2.0",
-    "has-cors": "1.1.0",
-    "indexof": "0.0.1",
-    "parseqs": "0.0.5",
-    "parseuri": "0.0.5",
-    "ws": "~6.1.0",
-    "xmlhttprequest-ssl": "~1.5.4",
-    "yeast": "0.1.2"
-  },
-  "deprecated": false,
-  "description": "Client for the realtime Engine",
-  "devDependencies": {
-    "babel-core": "^6.24.0",
-    "babel-eslint": "4.1.7",
-    "babel-loader": "^6.4.1",
-    "babel-preset-es2015": "^6.24.0",
-    "blob": "^0.0.4",
-    "concat-stream": "^1.6.0",
-    "del": "^2.2.2",
-    "derequire": "^2.0.6",
-    "engine.io": "3.4.0",
-    "eslint-config-standard": "4.4.0",
-    "eslint-plugin-standard": "1.3.1",
-    "expect.js": "^0.3.1",
-    "express": "4.15.2",
-    "gulp": "3.9.1",
-    "gulp-eslint": "1.1.1",
-    "gulp-file": "^0.3.0",
-    "gulp-istanbul": "^1.1.1",
-    "gulp-mocha": "^4.3.0",
-    "gulp-task-listing": "1.0.1",
-    "istanbul": "^0.4.5",
-    "mocha": "^3.2.0",
-    "webpack": "1.12.12",
-    "webpack-stream": "^3.2.0",
-    "zuul": "3.11.1",
-    "zuul-builder-webpack": "^1.2.0",
-    "zuul-ngrok": "4.0.0"
-  },
-  "files": [
-    "index.js",
-    "lib/",
-    "engine.io.js"
-  ],
-  "homepage": "https://github.com/socketio/engine.io-client",
-  "license": "MIT",
-  "main": "lib/index.js",
-  "name": "engine.io-client",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/socketio/engine.io-client.git"
-  },
-  "scripts": {
-    "test": "gulp test"
-  },
-  "version": "3.4.1"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io-parser/package.json b/signaling_server/service/node_modules/socket.io/node_modules/engine.io-parser/package.json
deleted file mode 100644 (file)
index 4406a6b..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "_from": "engine.io-parser@~2.2.0",
-  "_id": "engine.io-parser@2.2.0",
-  "_inBundle": false,
-  "_integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==",
-  "_location": "/engine.io-parser",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "engine.io-parser@~2.2.0",
-    "name": "engine.io-parser",
-    "escapedName": "engine.io-parser",
-    "rawSpec": "~2.2.0",
-    "saveSpec": null,
-    "fetchSpec": "~2.2.0"
-  },
-  "_requiredBy": [
-    "/engine.io",
-    "/engine.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz",
-  "_shasum": "312c4894f57d52a02b420868da7b5c1c84af80ed",
-  "_spec": "engine.io-parser@~2.2.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io",
-  "browser": "./lib/browser.js",
-  "bugs": {
-    "url": "https://github.com/socketio/engine.io-parser/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "after": "0.8.2",
-    "arraybuffer.slice": "~0.0.7",
-    "base64-arraybuffer": "0.1.5",
-    "blob": "0.0.5",
-    "has-binary2": "~1.0.2"
-  },
-  "deprecated": false,
-  "description": "Parser for the client for the realtime Engine",
-  "devDependencies": {
-    "benchmark": "^2.1.4",
-    "expect.js": "0.3.1",
-    "mocha": "^5.2.0",
-    "socket.io-browsers": "^1.0.2",
-    "zuul": "3.11.1",
-    "zuul-ngrok": "4.0.0"
-  },
-  "files": [
-    "lib/"
-  ],
-  "homepage": "https://github.com/socketio/engine.io-parser",
-  "license": "MIT",
-  "main": "lib/index.js",
-  "name": "engine.io-parser",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/socketio/engine.io-parser.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "2.2.0"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io/CHANGELOG.md b/signaling_server/service/node_modules/socket.io/node_modules/engine.io/CHANGELOG.md
deleted file mode 100644 (file)
index 3125b08..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-## [3.4.1](https://github.com/socketio/engine.io/compare/3.4.0...3.4.1) (2020-04-17)
-
-
-### Bug Fixes
-
-* ignore errors when forcefully closing the socket ([da851ec](https://github.com/socketio/engine.io/commit/da851ec4ec89d96df2ee5c711f328b5d795423e9))
-* use SameSite=Strict by default ([001ca62](https://github.com/socketio/engine.io/commit/001ca62cc4a8f511f3b2fbd9e4493ad274a6a0e5))
-
-
-
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io/README.md b/signaling_server/service/node_modules/socket.io/node_modules/engine.io/README.md
deleted file mode 100644 (file)
index 7c63206..0000000
+++ /dev/null
@@ -1,564 +0,0 @@
-
-# Engine.IO: the realtime engine
-
-[![Build Status](https://travis-ci.org/socketio/engine.io.svg?branch=master)](http://travis-ci.org/socketio/engine.io)
-[![NPM version](https://badge.fury.io/js/engine.io.svg)](http://badge.fury.io/js/engine.io)
-
-`Engine.IO` is the implementation of transport-based
-cross-browser/cross-device bi-directional communication layer for
-[Socket.IO](http://github.com/socketio/socket.io).
-
-## How to use
-
-### Server
-
-#### (A) Listening on a port
-
-```js
-var engine = require('engine.io');
-var server = engine.listen(80);
-
-server.on('connection', function(socket){
-  socket.send('utf 8 string');
-  socket.send(Buffer.from([0, 1, 2, 3, 4, 5])); // binary data
-});
-```
-
-#### (B) Intercepting requests for a http.Server
-
-```js
-var engine = require('engine.io');
-var http = require('http').createServer().listen(3000);
-var server = engine.attach(http);
-
-server.on('connection', function (socket) {
-  socket.on('message', function(data){ });
-  socket.on('close', function(){ });
-});
-```
-
-#### (C) Passing in requests
-
-```js
-var engine = require('engine.io');
-var server = new engine.Server();
-
-server.on('connection', function(socket){
-  socket.send('hi');
-});
-
-// …
-httpServer.on('upgrade', function(req, socket, head){
-  server.handleUpgrade(req, socket, head);
-});
-httpServer.on('request', function(req, res){
-  server.handleRequest(req, res);
-});
-```
-
-### Client
-
-```html
-<script src="/path/to/engine.io.js"></script>
-<script>
-  var socket = new eio.Socket('ws://localhost/');
-  socket.on('open', function(){
-    socket.on('message', function(data){});
-    socket.on('close', function(){});
-  });
-</script>
-```
-
-For more information on the client refer to the
-[engine-client](http://github.com/learnboost/engine.io-client) repository.
-
-## What features does it have?
-
-- **Maximum reliability**. Connections are established even in the presence of:
-  - proxies and load balancers.
-  - personal firewall and antivirus software.
-  - for more information refer to **Goals** and **Architecture** sections
-- **Minimal client size** aided by:
-  - lazy loading of flash transports.
-  - lack of redundant transports.
-- **Scalable**
-  - load balancer friendly
-- **Future proof**
-- **100% Node.JS core style**
-  - No API sugar (left for higher level projects)
-  - Written in readable vanilla JavaScript
-
-## API
-
-### Server
-
-<hr><br>
-
-#### Top-level
-
-These are exposed by `require('engine.io')`:
-
-##### Events
-
-- `flush`
-    - Called when a socket buffer is being flushed.
-    - **Arguments**
-      - `Socket`: socket being flushed
-      - `Array`: write buffer
-- `drain`
-    - Called when a socket buffer is drained
-    - **Arguments**
-      - `Socket`: socket being flushed
-
-##### Properties
-
-- `protocol` _(Number)_: protocol revision number
-- `Server`: Server class constructor
-- `Socket`: Socket class constructor
-- `Transport` _(Function)_: transport constructor
-- `transports` _(Object)_: map of available transports
-
-##### Methods
-
-- `()`
-    - Returns a new `Server` instance. If the first argument is an `http.Server` then the
-      new `Server` instance will be attached to it. Otherwise, the arguments are passed
-      directly to the `Server` constructor.
-    - **Parameters**
-      - `http.Server`: optional, server to attach to.
-      - `Object`: optional, options object (see `Server#constructor` api docs below)
-
-  The following are identical ways to instantiate a server and then attach it.
-
-```js
-var httpServer; // previously created with `http.createServer();` from node.js api.
-
-// create a server first, and then attach
-var eioServer = require('engine.io').Server();
-eioServer.attach(httpServer);
-
-// or call the module as a function to get `Server`
-var eioServer = require('engine.io')();
-eioServer.attach(httpServer);
-
-// immediately attach
-var eioServer = require('engine.io')(httpServer);
-
-// with custom options
-var eioServer = require('engine.io')(httpServer, {
-  maxHttpBufferSize: 1e3
-});
-```
-
-- `listen`
-    - Creates an `http.Server` which listens on the given port and attaches WS
-      to it. It returns `501 Not Implemented` for regular http requests.
-    - **Parameters**
-      - `Number`: port to listen on.
-      - `Object`: optional, options object
-      - `Function`: callback for `listen`.
-    - **Options**
-      - All options from `Server.attach` method, documented below.
-      - **Additionally** See Server `constructor` below for options you can pass for creating the new Server
-    - **Returns** `Server`
-
-```js
-var engine = require('engine.io');
-var server = engine.listen(3000, {
-  pingTimeout: 2000,
-  pingInterval: 10000
-});
-
-server.on('connection', /* ... */);
-```
-
-- `attach`
-    - Captures `upgrade` requests for a `http.Server`. In other words, makes
-      a regular http.Server WebSocket-compatible.
-    - **Parameters**
-      - `http.Server`: server to attach to.
-      - `Object`: optional, options object
-    - **Options**
-      - All options from `Server.attach` method, documented below.
-      - **Additionally** See Server `constructor` below for options you can pass for creating the new Server
-    - **Returns** `Server` a new Server instance.
-
-```js
-var engine = require('engine.io');
-var httpServer = require('http').createServer().listen(3000);
-var server = engine.attach(httpServer, {
-  wsEngine: 'uws' // requires having uws as dependency
-});
-
-server.on('connection', /* ... */);
-```
-
-#### Server
-
-The main server/manager. _Inherits from EventEmitter_.
-
-##### Events
-
-- `connection`
-    - Fired when a new connection is established.
-    - **Arguments**
-      - `Socket`: a Socket object
-
-##### Properties
-
-**Important**: if you plan to use Engine.IO in a scalable way, please
-keep in mind the properties below will only reflect the clients connected
-to a single process.
-
-- `clients` _(Object)_: hash of connected clients by id.
-- `clientsCount` _(Number)_: number of connected clients.
-
-##### Methods
-
-- **constructor**
-    - Initializes the server
-    - **Parameters**
-      - `Object`: optional, options object
-    - **Options**
-      - `pingTimeout` (`Number`): how many ms without a pong packet to
-        consider the connection closed (`5000`)
-      - `pingInterval` (`Number`): how many ms before sending a new ping
-        packet (`25000`)
-      - `upgradeTimeout` (`Number`): how many ms before an uncompleted transport upgrade is cancelled (`10000`)
-      - `maxHttpBufferSize` (`Number`): how many bytes or characters a message
-        can be, before closing the session (to avoid DoS). Default
-        value is `10E7`.
-      - `allowRequest` (`Function`): A function that receives a given handshake
-        or upgrade request as its first parameter, and can decide whether to
-        continue or not. The second argument is a function that needs to be
-        called with the decided information: `fn(err, success)`, where
-        `success` is a boolean value where false means that the request is
-        rejected, and err is an error code.
-      - `transports` (`<Array> String`): transports to allow connections
-        to (`['polling', 'websocket']`)
-      - `allowUpgrades` (`Boolean`): whether to allow transport upgrades
-        (`true`)
-      - `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension
-        (see [ws module](https://github.com/einaros/ws) api docs). Set to `false` to disable. (`true`)
-        - `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
-      - `httpCompression` (`Object|Boolean`): parameters of the http compression for the polling transports
-        (see [zlib](http://nodejs.org/api/zlib.html#zlib_options) api docs). Set to `false` to disable. (`true`)
-        - `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
-      - `cookie` (`String|Boolean`): name of the HTTP cookie that
-        contains the client sid to send as part of handshake response
-        headers. Set to `false` to not send one. (`io`)
-      - `cookiePath` (`String|Boolean`): path of the above `cookie`
-        option. If false, no path will be sent, which means browsers will only send the cookie on the engine.io attached path (`/engine.io`).
-        Set false to not save io cookie on all requests. (`/`)
-      - `cookieHttpOnly` (`Boolean`): If `true` HttpOnly io cookie cannot be accessed by client-side APIs, such as JavaScript. (`true`) _This option has no effect if `cookie` or `cookiePath` is set to `false`._
-      - `wsEngine` (`String`): what WebSocket server implementation to use. Specified module must conform to the `ws` interface (see [ws module api docs](https://github.com/websockets/ws/blob/master/doc/ws.md)). Default value is `ws`. An alternative c++ addon is also available by installing `uws` module.
-      - `initialPacket` (`Object`): an optional packet which will be concatenated to the handshake packet emitted by Engine.IO.
-- `close`
-    - Closes all clients
-    - **Returns** `Server` for chaining
-- `handleRequest`
-    - Called internally when a `Engine` request is intercepted.
-    - **Parameters**
-      - `http.IncomingMessage`: a node request object
-      - `http.ServerResponse`: a node response object
-    - **Returns** `Server` for chaining
-- `handleUpgrade`
-    - Called internally when a `Engine` ws upgrade is intercepted.
-    - **Parameters** (same as `upgrade` event)
-      - `http.IncomingMessage`: a node request object
-      - `net.Stream`: TCP socket for the request
-      - `Buffer`: legacy tail bytes
-    - **Returns** `Server` for chaining
-- `attach`
-    - Attach this Server instance to an `http.Server`
-    - Captures `upgrade` requests for a `http.Server`. In other words, makes
-      a regular http.Server WebSocket-compatible.
-    - **Parameters**
-      - `http.Server`: server to attach to.
-      - `Object`: optional, options object
-    - **Options**
-      - `path` (`String`): name of the path to capture (`/engine.io`).
-      - `destroyUpgrade` (`Boolean`): destroy unhandled upgrade requests (`true`)
-      - `destroyUpgradeTimeout` (`Number`): milliseconds after which unhandled requests are ended (`1000`)
-      - `handlePreflightRequest` (`Boolean|Function`): whether to let engine.io handle the OPTIONS requests. You can also pass a custom function to handle the requests (`true`)
-- `generateId`
-    - Generate a socket id.
-    - Overwrite this method to generate your custom socket id.
-    - **Parameters**
-      - `http.IncomingMessage`: a node request object
-  - **Returns** A socket id for connected client.
-
-<hr><br>
-
-#### Socket
-
-A representation of a client. _Inherits from EventEmitter_.
-
-##### Events
-
-- `close`
-    - Fired when the client is disconnected.
-    - **Arguments**
-      - `String`: reason for closing
-      - `Object`: description object (optional)
-- `message`
-    - Fired when the client sends a message.
-    - **Arguments**
-      - `String` or `Buffer`: Unicode string or Buffer with binary contents
-- `error`
-    - Fired when an error occurs.
-    - **Arguments**
-      - `Error`: error object
-- `flush`
-    - Called when the write buffer is being flushed.
-    - **Arguments**
-      - `Array`: write buffer
-- `drain`
-    - Called when the write buffer is drained
-- `packet`
-    - Called when a socket received a packet (`message`, `ping`)
-    - **Arguments**
-      - `type`: packet type
-      - `data`: packet data (if type is message)
-- `packetCreate`
-    - Called before a socket sends a packet (`message`, `pong`)
-    - **Arguments**
-      - `type`: packet type
-      - `data`: packet data (if type is message)
-
-##### Properties
-
-- `id` _(String)_: unique identifier
-- `server` _(Server)_: engine parent reference
-- `request` _(http.IncomingMessage)_: request that originated the Socket
-- `upgraded` _(Boolean)_: whether the transport has been upgraded
-- `readyState` _(String)_: opening|open|closing|closed
-- `transport` _(Transport)_: transport reference
-
-##### Methods
-
-- `send`:
-    - Sends a message, performing `message = toString(arguments[0])` unless
-      sending binary data, which is sent as is.
-    - **Parameters**
-      - `String` | `Buffer` | `ArrayBuffer` | `ArrayBufferView`: a string or any object implementing `toString()`, with outgoing data, or a Buffer or ArrayBuffer with binary data. Also any ArrayBufferView can be sent as is.
-      - `Object`: optional, options object
-      - `Function`: optional, a callback executed when the message gets flushed out by the transport
-    - **Options**
-      - `compress` (`Boolean`): whether to compress sending data. This option might be ignored and forced to be `true` when using polling. (`true`)
-    - **Returns** `Socket` for chaining
-- `close`
-    - Disconnects the client
-    - **Returns** `Socket` for chaining
-
-### Client
-
-<hr><br>
-
-Exposed in the `eio` global namespace (in the browser), or by
-`require('engine.io-client')` (in Node.JS).
-
-For the client API refer to the
-[engine-client](http://github.com/learnboost/engine.io-client) repository.
-
-## Debug / logging
-
-Engine.IO is powered by [debug](http://github.com/visionmedia/debug).
-In order to see all the debug output, run your app with the environment variable
-`DEBUG` including the desired scope.
-
-To see the output from all of Engine.IO's debugging scopes you can use:
-
-```
-DEBUG=engine* node myapp
-```
-
-## Transports
-
-- `polling`: XHR / JSONP polling transport.
-- `websocket`: WebSocket transport.
-
-## Plugins
-
-- [engine.io-conflation](https://github.com/EugenDueck/engine.io-conflation): Makes **conflation and aggregation** of messages straightforward.
-
-## Support
-
-The support channels for `engine.io` are the same as `socket.io`:
-  - irc.freenode.net **#socket.io**
-  - [Google Groups](http://groups.google.com/group/socket_io)
-  - [Website](http://socket.io)
-
-## Development
-
-To contribute patches, run tests or benchmarks, make sure to clone the
-repository:
-
-```
-git clone git://github.com/LearnBoost/engine.io.git
-```
-
-Then:
-
-```
-cd engine.io
-npm install
-```
-
-## Tests
-
-Tests run with `npm test`. It runs the server tests that are aided by
-the usage of `engine.io-client`.
-
-Make sure `npm install` is run first.
-
-## Goals
-
-The main goal of `Engine` is ensuring the most reliable realtime communication.
-Unlike the previous Socket.IO core, it always establishes a long-polling
-connection first, then tries to upgrade to better transports that are "tested" on
-the side.
-
-During the lifetime of the Socket.IO projects, we've found countless drawbacks
-to relying on `HTML5 WebSocket` or `Flash Socket` as the first connection
-mechanisms.
-
-Both are clearly the _right way_ of establishing a bidirectional communication,
-with HTML5 WebSocket being the way of the future. However, to answer most business
-needs, alternative traditional HTTP 1.1 mechanisms are just as good as delivering
-the same solution.
-
-WebSocket based connections have two fundamental benefits:
-
-1. **Better server performance**
-  - _A: Load balancers_<br>
-      Load balancing a long polling connection poses a serious architectural nightmare
-      since requests can come from any number of open sockets by the user agent, but
-      they all need to be routed to the process and computer that owns the `Engine`
-      connection. This negatively impacts RAM and CPU usage.
-  - _B: Network traffic_<br>
-      WebSocket is designed around the premise that each message frame has to be
-      surrounded by the least amount of data. In HTTP 1.1 transports, each message
-      frame is surrounded by HTTP headers and chunked encoding frames. If you try to
-      send the message _"Hello world"_ with xhr-polling, the message ultimately
-      becomes larger than if you were to send it with WebSocket.
-  - _C: Lightweight parser_<br>
-      As an effect of **B**, the server has to do a lot more work to parse the network
-      data and figure out the message when traditional HTTP requests are used
-      (as in long polling). This means that another advantage of WebSocket is
-      less server CPU usage.
-
-2. **Better user experience**
-
-    Due to the reasons stated in point **1**, the most important effect of being able
-    to establish a WebSocket connection is raw data transfer speed, which translates
-    in _some_ cases in better user experience.
-
-    Applications with heavy realtime interaction (such as games) will benefit greatly,
-    whereas applications like realtime chat (Gmail/Facebook), newsfeeds (Facebook) or
-    timelines (Twitter) will have negligible user experience improvements.
-
-Having said this, attempting to establish a WebSocket connection directly so far has
-proven problematic:
-
-1. **Proxies**<br>
-    Many corporate proxies block WebSocket traffic.
-
-2. **Personal firewall and antivirus software**<br>
-    As a result of our research, we've found that at least 3 personal security
-    applications block WebSocket traffic.
-
-3. **Cloud application platforms**<br>
-    Platforms like Heroku or No.de have had trouble keeping up with the fast-paced
-    nature of the evolution of the WebSocket protocol. Applications therefore end up
-    inevitably using long polling, but the seamless installation experience of
-    Socket.IO we strive for (_"require() it and it just works"_) disappears.
-
-Some of these problems have solutions. In the case of proxies and personal programs,
-however, the solutions many times involve upgrading software. Experience has shown
-that relying on client software upgrades to deliver a business solution is
-fruitless: the very existence of this project has to do with a fragmented panorama
-of user agent distribution, with clients connecting with latest versions of the most
-modern user agents (Chrome, Firefox and Safari), but others with versions as low as
-IE 5.5.
-
-From the user perspective, an unsuccessful WebSocket connection can translate in
-up to at least 10 seconds of waiting for the realtime application to begin
-exchanging data. This **perceptively** hurts user experience.
-
-To summarize, **Engine** focuses on reliability and user experience first, marginal
-potential UX improvements and increased server performance second. `Engine` is the
-result of all the lessons learned with WebSocket in the wild.
-
-## Architecture
-
-The main premise of `Engine`, and the core of its existence, is the ability to
-swap transports on the fly. A connection starts as xhr-polling, but it can
-switch to WebSocket.
-
-The central problem this poses is: how do we switch transports without losing
-messages?
-
-`Engine` only switches from polling to another transport in between polling
-cycles. Since the server closes the connection after a certain timeout when
-there's no activity, and the polling transport implementation buffers messages
-in between connections, this ensures no message loss and optimal performance.
-
-Another benefit of this design is that we workaround almost all the limitations
-of **Flash Socket**, such as slow connection times, increased file size (we can
-safely lazy load it without hurting user experience), etc.
-
-## FAQ
-
-### Can I use engine without Socket.IO ?
-
-Absolutely. Although the recommended framework for building realtime applications
-is Socket.IO, since it provides fundamental features for real-world applications
-such as multiplexing, reconnection support, etc.
-
-`Engine` is to Socket.IO what Connect is to Express. An essential piece for building
-realtime frameworks, but something you _probably_ won't be using for building
-actual applications.
-
-### Does the server serve the client?
-
-No. The main reason is that `Engine` is meant to be bundled with frameworks.
-Socket.IO includes `Engine`, therefore serving two clients is not necessary. If
-you use Socket.IO, including
-
-```html
-<script src="/socket.io/socket.io.js">
-```
-
-has you covered.
-
-### Can I implement `Engine` in other languages?
-
-Absolutely. The [engine.io-protocol](https://github.com/LearnBoost/engine.io-protocol)
-repository contains the most up to date description of the specification
-at all times, and the parser implementation in JavaScript.
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2014 Guillermo Rauch &lt;guillermo@learnboost.com&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/server.js b/signaling_server/service/node_modules/socket.io/node_modules/engine.io/lib/server.js
deleted file mode 100644 (file)
index 3fbee3e..0000000
+++ /dev/null
@@ -1,591 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var qs = require('querystring');
-var parse = require('url').parse;
-var base64id = require('base64id');
-var transports = require('./transports');
-var EventEmitter = require('events').EventEmitter;
-var Socket = require('./socket');
-var util = require('util');
-var debug = require('debug')('engine');
-var cookieMod = require('cookie');
-
-/**
- * Module exports.
- */
-
-module.exports = Server;
-
-/**
- * Server constructor.
- *
- * @param {Object} options
- * @api public
- */
-
-function Server (opts) {
-  if (!(this instanceof Server)) {
-    return new Server(opts);
-  }
-
-  this.clients = {};
-  this.clientsCount = 0;
-
-  opts = opts || {};
-
-  this.wsEngine = opts.wsEngine || process.env.EIO_WS_ENGINE || 'ws';
-  this.pingTimeout = opts.pingTimeout || 5000;
-  this.pingInterval = opts.pingInterval || 25000;
-  this.upgradeTimeout = opts.upgradeTimeout || 10000;
-  this.maxHttpBufferSize = opts.maxHttpBufferSize || 10E7;
-  this.transports = opts.transports || Object.keys(transports);
-  this.allowUpgrades = false !== opts.allowUpgrades;
-  this.allowRequest = opts.allowRequest;
-  this.cookie = false !== opts.cookie ? (opts.cookie || 'io') : false;
-  this.cookiePath = false !== opts.cookiePath ? (opts.cookiePath || '/') : false;
-  this.cookieHttpOnly = false !== opts.cookieHttpOnly;
-  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || true) : false;
-  this.httpCompression = false !== opts.httpCompression ? (opts.httpCompression || {}) : false;
-  this.initialPacket = opts.initialPacket;
-
-  var self = this;
-
-  // initialize compression options
-  ['perMessageDeflate', 'httpCompression'].forEach(function (type) {
-    var compression = self[type];
-    if (true === compression) self[type] = compression = {};
-    if (compression && null == compression.threshold) {
-      compression.threshold = 1024;
-    }
-  });
-
-  this.init();
-}
-
-/**
- * Protocol errors mappings.
- */
-
-Server.errors = {
-  UNKNOWN_TRANSPORT: 0,
-  UNKNOWN_SID: 1,
-  BAD_HANDSHAKE_METHOD: 2,
-  BAD_REQUEST: 3,
-  FORBIDDEN: 4
-};
-
-Server.errorMessages = {
-  0: 'Transport unknown',
-  1: 'Session ID unknown',
-  2: 'Bad handshake method',
-  3: 'Bad request',
-  4: 'Forbidden'
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-util.inherits(Server, EventEmitter);
-
-/**
- * Initialize websocket server
- *
- * @api private
- */
-
-Server.prototype.init = function () {
-  if (!~this.transports.indexOf('websocket')) return;
-
-  if (this.ws) this.ws.close();
-
-  var wsModule;
-  switch (this.wsEngine) {
-    case 'uws': wsModule = require('uws'); break;
-    case 'ws': wsModule = require('ws'); break;
-    default: throw new Error('unknown wsEngine');
-  }
-  this.ws = new wsModule.Server({
-    noServer: true,
-    clientTracking: false,
-    perMessageDeflate: this.perMessageDeflate,
-    maxPayload: this.maxHttpBufferSize
-  });
-};
-
-/**
- * Returns a list of available transports for upgrade given a certain transport.
- *
- * @return {Array}
- * @api public
- */
-
-Server.prototype.upgrades = function (transport) {
-  if (!this.allowUpgrades) return [];
-  return transports[transport].upgradesTo || [];
-};
-
-/**
- * Verifies a request.
- *
- * @param {http.IncomingMessage}
- * @return {Boolean} whether the request is valid
- * @api private
- */
-
-Server.prototype.verify = function (req, upgrade, fn) {
-  // transport check
-  var transport = req._query.transport;
-  if (!~this.transports.indexOf(transport)) {
-    debug('unknown transport "%s"', transport);
-    return fn(Server.errors.UNKNOWN_TRANSPORT, false);
-  }
-
-  // 'Origin' header check
-  var isOriginInvalid = checkInvalidHeaderChar(req.headers.origin);
-  if (isOriginInvalid) {
-    req.headers.origin = null;
-    debug('origin header invalid');
-    return fn(Server.errors.BAD_REQUEST, false);
-  }
-
-  // sid check
-  var sid = req._query.sid;
-  if (sid) {
-    if (!this.clients.hasOwnProperty(sid)) {
-      debug('unknown sid "%s"', sid);
-      return fn(Server.errors.UNKNOWN_SID, false);
-    }
-    if (!upgrade && this.clients[sid].transport.name !== transport) {
-      debug('bad request: unexpected transport without upgrade');
-      return fn(Server.errors.BAD_REQUEST, false);
-    }
-  } else {
-    // handshake is GET only
-    if ('GET' !== req.method) return fn(Server.errors.BAD_HANDSHAKE_METHOD, false);
-    if (!this.allowRequest) return fn(null, true);
-    return this.allowRequest(req, fn);
-  }
-
-  fn(null, true);
-};
-
-/**
- * Prepares a request by processing the query string.
- *
- * @api private
- */
-
-Server.prototype.prepare = function (req) {
-  // try to leverage pre-existing `req._query` (e.g: from connect)
-  if (!req._query) {
-    req._query = ~req.url.indexOf('?') ? qs.parse(parse(req.url).query) : {};
-  }
-};
-
-/**
- * Closes all clients.
- *
- * @api public
- */
-
-Server.prototype.close = function () {
-  debug('closing all open clients');
-  for (var i in this.clients) {
-    if (this.clients.hasOwnProperty(i)) {
-      this.clients[i].close(true);
-    }
-  }
-  if (this.ws) {
-    debug('closing webSocketServer');
-    this.ws.close();
-    // don't delete this.ws because it can be used again if the http server starts listening again
-  }
-  return this;
-};
-
-/**
- * Handles an Engine.IO HTTP request.
- *
- * @param {http.IncomingMessage} request
- * @param {http.ServerResponse|http.OutgoingMessage} response
- * @api public
- */
-
-Server.prototype.handleRequest = function (req, res) {
-  debug('handling "%s" http request "%s"', req.method, req.url);
-  this.prepare(req);
-  req.res = res;
-
-  var self = this;
-  this.verify(req, false, function (err, success) {
-    if (!success) {
-      sendErrorMessage(req, res, err);
-      return;
-    }
-
-    if (req._query.sid) {
-      debug('setting new request for existing client');
-      self.clients[req._query.sid].transport.onRequest(req);
-    } else {
-      self.handshake(req._query.transport, req);
-    }
-  });
-};
-
-/**
- * Sends an Engine.IO Error Message
- *
- * @param {http.ServerResponse} response
- * @param {code} error code
- * @api private
- */
-
-function sendErrorMessage (req, res, code) {
-  var headers = { 'Content-Type': 'application/json' };
-
-  var isForbidden = !Server.errorMessages.hasOwnProperty(code);
-  if (isForbidden) {
-    res.writeHead(403, headers);
-    res.end(JSON.stringify({
-      code: Server.errors.FORBIDDEN,
-      message: code || Server.errorMessages[Server.errors.FORBIDDEN]
-    }));
-    return;
-  }
-  if (req.headers.origin) {
-    headers['Access-Control-Allow-Credentials'] = 'true';
-    headers['Access-Control-Allow-Origin'] = req.headers.origin;
-  } else {
-    headers['Access-Control-Allow-Origin'] = '*';
-  }
-  if (res !== undefined) {
-    res.writeHead(400, headers);
-    res.end(JSON.stringify({
-      code: code,
-      message: Server.errorMessages[code]
-    }));
-  }
-}
-
-/**
- * generate a socket id.
- * Overwrite this method to generate your custom socket id
- *
- * @param {Object} request object
- * @api public
- */
-
-Server.prototype.generateId = function (req) {
-  return base64id.generateId();
-};
-
-/**
- * Handshakes a new client.
- *
- * @param {String} transport name
- * @param {Object} request object
- * @api private
- */
-
-Server.prototype.handshake = function (transportName, req) {
-  var id = this.generateId(req);
-
-  debug('handshaking client "%s"', id);
-
-  try {
-    var transport = new transports[transportName](req);
-    if ('polling' === transportName) {
-      transport.maxHttpBufferSize = this.maxHttpBufferSize;
-      transport.httpCompression = this.httpCompression;
-    } else if ('websocket' === transportName) {
-      transport.perMessageDeflate = this.perMessageDeflate;
-    }
-
-    if (req._query && req._query.b64) {
-      transport.supportsBinary = false;
-    } else {
-      transport.supportsBinary = true;
-    }
-  } catch (e) {
-    debug('error handshaking to transport "%s"', transportName);
-    sendErrorMessage(req, req.res, Server.errors.BAD_REQUEST);
-    return;
-  }
-  var socket = new Socket(id, this, transport, req);
-  var self = this;
-
-  if (false !== this.cookie) {
-    transport.on('headers', function (headers) {
-      headers['Set-Cookie'] = cookieMod.serialize(self.cookie, id,
-        {
-          path: self.cookiePath,
-          httpOnly: self.cookiePath ? self.cookieHttpOnly : false,
-          sameSite: true
-        });
-    });
-  }
-
-  transport.onRequest(req);
-
-  this.clients[id] = socket;
-  this.clientsCount++;
-
-  socket.once('close', function () {
-    delete self.clients[id];
-    self.clientsCount--;
-  });
-
-  this.emit('connection', socket);
-};
-
-/**
- * Handles an Engine.IO HTTP Upgrade.
- *
- * @api public
- */
-
-Server.prototype.handleUpgrade = function (req, socket, upgradeHead) {
-  this.prepare(req);
-
-  var self = this;
-  this.verify(req, true, function (err, success) {
-    if (!success) {
-      abortConnection(socket, err);
-      return;
-    }
-
-    var head = Buffer.from(upgradeHead); // eslint-disable-line node/no-deprecated-api
-    upgradeHead = null;
-
-    // delegate to ws
-    self.ws.handleUpgrade(req, socket, head, function (conn) {
-      self.onWebSocket(req, conn);
-    });
-  });
-};
-
-/**
- * Called upon a ws.io connection.
- *
- * @param {ws.Socket} websocket
- * @api private
- */
-
-Server.prototype.onWebSocket = function (req, socket) {
-  socket.on('error', onUpgradeError);
-
-  if (transports[req._query.transport] !== undefined && !transports[req._query.transport].prototype.handlesUpgrades) {
-    debug('transport doesnt handle upgraded requests');
-    socket.close();
-    return;
-  }
-
-  // get client id
-  var id = req._query.sid;
-
-  // keep a reference to the ws.Socket
-  req.websocket = socket;
-
-  if (id) {
-    var client = this.clients[id];
-    if (!client) {
-      debug('upgrade attempt for closed client');
-      socket.close();
-    } else if (client.upgrading) {
-      debug('transport has already been trying to upgrade');
-      socket.close();
-    } else if (client.upgraded) {
-      debug('transport had already been upgraded');
-      socket.close();
-    } else {
-      debug('upgrading existing transport');
-
-      // transport error handling takes over
-      socket.removeListener('error', onUpgradeError);
-
-      var transport = new transports[req._query.transport](req);
-      if (req._query && req._query.b64) {
-        transport.supportsBinary = false;
-      } else {
-        transport.supportsBinary = true;
-      }
-      transport.perMessageDeflate = this.perMessageDeflate;
-      client.maybeUpgrade(transport);
-    }
-  } else {
-    // transport error handling takes over
-    socket.removeListener('error', onUpgradeError);
-
-    this.handshake(req._query.transport, req);
-  }
-
-  function onUpgradeError () {
-    debug('websocket error before upgrade');
-    // socket.close() not needed
-  }
-};
-
-/**
- * Captures upgrade requests for a http.Server.
- *
- * @param {http.Server} server
- * @param {Object} options
- * @api public
- */
-
-Server.prototype.attach = function (server, options) {
-  var self = this;
-  options = options || {};
-  var path = (options.path || '/engine.io').replace(/\/$/, '');
-
-  var destroyUpgradeTimeout = options.destroyUpgradeTimeout || 1000;
-
-  // normalize path
-  path += '/';
-
-  function check (req) {
-    if ('OPTIONS' === req.method && false === options.handlePreflightRequest) {
-      return false;
-    }
-    return path === req.url.substr(0, path.length);
-  }
-
-  // cache and clean up listeners
-  var listeners = server.listeners('request').slice(0);
-  server.removeAllListeners('request');
-  server.on('close', self.close.bind(self));
-  server.on('listening', self.init.bind(self));
-
-  // add request handler
-  server.on('request', function (req, res) {
-    if (check(req)) {
-      debug('intercepting request for path "%s"', path);
-      if ('OPTIONS' === req.method && 'function' === typeof options.handlePreflightRequest) {
-        options.handlePreflightRequest.call(server, req, res);
-      } else {
-        self.handleRequest(req, res);
-      }
-    } else {
-      for (var i = 0, l = listeners.length; i < l; i++) {
-        listeners[i].call(server, req, res);
-      }
-    }
-  });
-
-  if (~self.transports.indexOf('websocket')) {
-    server.on('upgrade', function (req, socket, head) {
-      if (check(req)) {
-        self.handleUpgrade(req, socket, head);
-      } else if (false !== options.destroyUpgrade) {
-        // default node behavior is to disconnect when no handlers
-        // but by adding a handler, we prevent that
-        // and if no eio thing handles the upgrade
-        // then the socket needs to die!
-        setTimeout(function () {
-          if (socket.writable && socket.bytesWritten <= 0) {
-            return socket.end();
-          }
-        }, destroyUpgradeTimeout);
-      }
-    });
-  }
-};
-
-/**
- * Closes the connection
- *
- * @param {net.Socket} socket
- * @param {code} error code
- * @api private
- */
-
-function abortConnection (socket, code) {
-  socket.on('error', () => {
-    debug('ignoring error from closed connection');
-  });
-  if (socket.writable) {
-    var message = Server.errorMessages.hasOwnProperty(code) ? Server.errorMessages[code] : String(code || '');
-    var length = Buffer.byteLength(message);
-    socket.write(
-      'HTTP/1.1 400 Bad Request\r\n' +
-      'Connection: close\r\n' +
-      'Content-type: text/html\r\n' +
-      'Content-Length: ' + length + '\r\n' +
-      '\r\n' +
-      message
-    );
-  }
-  socket.destroy();
-}
-
-/* eslint-disable */
-
-/**
- * From https://github.com/nodejs/node/blob/v8.4.0/lib/_http_common.js#L303-L354
- *
- * True if val contains an invalid field-vchar
- *  field-value    = *( field-content / obs-fold )
- *  field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
- *  field-vchar    = VCHAR / obs-text
- *
- * checkInvalidHeaderChar() is currently designed to be inlinable by v8,
- * so take care when making changes to the implementation so that the source
- * code size does not exceed v8's default max_inlined_source_size setting.
- **/
-var validHdrChars = [
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, // 0 - 15
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 32 - 47
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 48 - 63
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 80 - 95
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 112 - 127
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 128 ...
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1  // ... 255
-];
-
-function checkInvalidHeaderChar(val) {
-  val += '';
-  if (val.length < 1)
-    return false;
-  if (!validHdrChars[val.charCodeAt(0)]) {
-    debug('invalid header, index 0, char "%s"', val.charCodeAt(0));
-    return true;
-  }
-  if (val.length < 2)
-    return false;
-  if (!validHdrChars[val.charCodeAt(1)]) {
-    debug('invalid header, index 1, char "%s"', val.charCodeAt(1));
-    return true;
-  }
-  if (val.length < 3)
-    return false;
-  if (!validHdrChars[val.charCodeAt(2)]) {
-    debug('invalid header, index 2, char "%s"', val.charCodeAt(2));
-    return true;
-  }
-  if (val.length < 4)
-    return false;
-  if (!validHdrChars[val.charCodeAt(3)]) {
-    debug('invalid header, index 3, char "%s"', val.charCodeAt(3));
-    return true;
-  }
-  for (var i = 4; i < val.length; ++i) {
-    if (!validHdrChars[val.charCodeAt(i)]) {
-      debug('invalid header, index "%i", char "%s"', i, val.charCodeAt(i));
-      return true;
-    }
-  }
-  return false;
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/engine.io/package.json b/signaling_server/service/node_modules/socket.io/node_modules/engine.io/package.json
deleted file mode 100644 (file)
index 05f75c8..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-{
-  "_from": "engine.io@~3.4.0",
-  "_id": "engine.io@3.4.1",
-  "_inBundle": false,
-  "_integrity": "sha512-8MfIfF1/IIfxuc2gv5K+XlFZczw/BpTvqBdl0E2fBLkYQp4miv4LuDTVtYt4yMyaIFLEr4vtaSgV4mjvll8Crw==",
-  "_location": "/engine.io",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "engine.io@~3.4.0",
-    "name": "engine.io",
-    "escapedName": "engine.io",
-    "rawSpec": "~3.4.0",
-    "saveSpec": null,
-    "fetchSpec": "~3.4.0"
-  },
-  "_requiredBy": [
-    "/socket.io"
-  ],
-  "_resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.1.tgz",
-  "_shasum": "a61cbc13fa0cb27d9453fd079a29ee980564b069",
-  "_spec": "engine.io@~3.4.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io",
-  "author": {
-    "name": "Guillermo Rauch",
-    "email": "guillermo@learnboost.com"
-  },
-  "bugs": {
-    "url": "https://github.com/socketio/engine.io/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Eugen Dueck",
-      "url": "https://github.com/EugenDueck"
-    },
-    {
-      "name": "Afshin Mehrabani",
-      "url": "https://github.com/afshinm"
-    },
-    {
-      "name": "Christoph Dorn",
-      "url": "https://github.com/cadorn"
-    },
-    {
-      "name": "Mark Mokryn",
-      "email": "mokesmokes@gmail.com"
-    }
-  ],
-  "dependencies": {
-    "accepts": "~1.3.4",
-    "base64id": "2.0.0",
-    "cookie": "0.3.1",
-    "debug": "~4.1.0",
-    "engine.io-parser": "~2.2.0",
-    "ws": "^7.1.2"
-  },
-  "deprecated": false,
-  "description": "The realtime engine behind Socket.IO. Provides the foundation of a bidirectional connection between client and server",
-  "devDependencies": {
-    "babel-eslint": "^8.0.2",
-    "babel-preset-es2015": "^6.24.0",
-    "engine.io-client": "3.4.1",
-    "eslint": "^4.5.0",
-    "eslint-config-standard": "^10.2.1",
-    "eslint-plugin-import": "^2.7.0",
-    "eslint-plugin-node": "^5.1.1",
-    "eslint-plugin-promise": "^3.5.0",
-    "eslint-plugin-standard": "^3.0.1",
-    "expect.js": "^0.3.1",
-    "mocha": "^4.0.1",
-    "s": "0.1.1",
-    "superagent": "^3.8.1",
-    "uws": "~9.14.0"
-  },
-  "engines": {
-    "node": ">=8.0.0"
-  },
-  "files": [
-    "lib/"
-  ],
-  "homepage": "https://github.com/socketio/engine.io",
-  "license": "MIT",
-  "main": "lib/engine.io",
-  "name": "engine.io",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/socketio/engine.io.git"
-  },
-  "scripts": {
-    "lint": "eslint lib/ test/ *.js",
-    "test": "npm run lint && mocha && EIO_WS_ENGINE=uws mocha"
-  },
-  "version": "3.4.1"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/has-binary2/package.json b/signaling_server/service/node_modules/socket.io/node_modules/has-binary2/package.json
deleted file mode 100644 (file)
index 0b3a6aa..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "_from": "has-binary2@~1.0.2",
-  "_id": "has-binary2@1.0.3",
-  "_inBundle": false,
-  "_integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
-  "_location": "/has-binary2",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "has-binary2@~1.0.2",
-    "name": "has-binary2",
-    "escapedName": "has-binary2",
-    "rawSpec": "~1.0.2",
-    "saveSpec": null,
-    "fetchSpec": "~1.0.2"
-  },
-  "_requiredBy": [
-    "/engine.io-parser",
-    "/socket.io",
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
-  "_shasum": "7776ac627f3ea77250cfc332dab7ddf5e4f5d11d",
-  "_spec": "has-binary2@~1.0.2",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io",
-  "author": {
-    "name": "Kevin Roark"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "isarray": "2.0.1"
-  },
-  "deprecated": false,
-  "description": "A function that takes anything in javascript and returns true if its argument contains binary data.",
-  "devDependencies": {
-    "better-assert": "^1.0.2",
-    "mocha": "^3.2.0",
-    "semistandard": "^9.2.1"
-  },
-  "files": [
-    "index.js"
-  ],
-  "license": "MIT",
-  "name": "has-binary2",
-  "scripts": {
-    "checkstyle": "semistandard",
-    "test": "npm run checkstyle && mocha --bail"
-  },
-  "version": "1.0.3"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/has-cors/package.json b/signaling_server/service/node_modules/socket.io/node_modules/has-cors/package.json
deleted file mode 100644 (file)
index b7f0ccc..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "_from": "has-cors@1.1.0",
-  "_id": "has-cors@1.1.0",
-  "_inBundle": false,
-  "_integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
-  "_location": "/has-cors",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "has-cors@1.1.0",
-    "name": "has-cors",
-    "escapedName": "has-cors",
-    "rawSpec": "1.1.0",
-    "saveSpec": null,
-    "fetchSpec": "1.1.0"
-  },
-  "_requiredBy": [
-    "/engine.io-client",
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
-  "_shasum": "5e474793f7ea9843d1bb99c23eef49ff126fff39",
-  "_spec": "has-cors@1.1.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "author": {
-    "name": "Nathan Rajlich",
-    "email": "nathan@tootallnate.net",
-    "url": "http://n8.io/"
-  },
-  "bugs": {
-    "url": "https://github.com/component/has-cors/issues"
-  },
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "has-cors/index.js": "index.js"
-    }
-  },
-  "deprecated": false,
-  "description": "Detects support for Cross-Origin Resource Sharing",
-  "devDependencies": {
-    "chai": "^1.10",
-    "mocha": "^2.0"
-  },
-  "homepage": "https://github.com/component/has-cors#readme",
-  "keywords": [
-    "cors",
-    "cross",
-    "origin",
-    "resource",
-    "sharing",
-    "domain"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "has-cors",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/component/has-cors.git"
-  },
-  "scripts": {
-    "test": "mocha"
-  },
-  "version": "1.1.0"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/indexof/package.json b/signaling_server/service/node_modules/socket.io/node_modules/indexof/package.json
deleted file mode 100644 (file)
index 13ee300..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "_from": "indexof@0.0.1",
-  "_id": "indexof@0.0.1",
-  "_inBundle": false,
-  "_integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
-  "_location": "/indexof",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "indexof@0.0.1",
-    "name": "indexof",
-    "escapedName": "indexof",
-    "rawSpec": "0.0.1",
-    "saveSpec": null,
-    "fetchSpec": "0.0.1"
-  },
-  "_requiredBy": [
-    "/engine.io-client",
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
-  "_shasum": "82dc336d232b9062179d05ab3293a66059fd435d",
-  "_spec": "indexof@0.0.1",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "indexof/index.js": "index.js"
-    }
-  },
-  "dependencies": {},
-  "deprecated": false,
-  "description": "Microsoft sucks",
-  "keywords": [
-    "index",
-    "array",
-    "indexOf"
-  ],
-  "name": "indexof",
-  "version": "0.0.1"
-}
index e0e0c4d..b8b0f83 100644 (file)
@@ -1,9 +1,15 @@
 {
+  "_args": [
+    [
+      "isarray@2.0.1",
+      "/opt/source/offload.js"
+    ]
+  ],
   "_from": "isarray@2.0.1",
   "_id": "isarray@2.0.1",
   "_inBundle": false,
   "_integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
-  "_location": "/isarray",
+  "_location": "/socket.io/isarray",
   "_phantomChildren": {},
   "_requested": {
     "type": "version",
     "fetchSpec": "2.0.1"
   },
   "_requiredBy": [
-    "/has-binary2",
-    "/socket.io-client/socket.io-parser",
-    "/socket.io-parser"
+    "/socket.io/socket.io-client/socket.io-parser"
   ],
   "_resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
-  "_shasum": "a37d94ed9cda2d59865c9f76fe596ee1f338741e",
-  "_spec": "isarray@2.0.1",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/has-binary2",
+  "_spec": "2.0.1",
+  "_where": "/opt/source/offload.js",
   "author": {
     "name": "Julian Gruber",
     "email": "mail@juliangruber.com",
@@ -32,9 +35,7 @@
   "bugs": {
     "url": "https://github.com/juliangruber/isarray/issues"
   },
-  "bundleDependencies": false,
   "dependencies": {},
-  "deprecated": false,
   "description": "Array#isArray for older browsers",
   "devDependencies": {
     "tape": "~2.13.4"
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/mime-db/HISTORY.md b/signaling_server/service/node_modules/socket.io/node_modules/mime-db/HISTORY.md
deleted file mode 100644 (file)
index 85c0319..0000000
+++ /dev/null
@@ -1,446 +0,0 @@
-1.44.0 / 2020-04-22
-===================
-
-  * Add charsets from IANA
-  * Add extension `.cjs` to `application/node`
-  * Add new upstream MIME types
-
-1.43.0 / 2020-01-05
-===================
-
-  * Add `application/x-keepass2` with extension `.kdbx`
-  * Add extension `.mxmf` to `audio/mobile-xmf`
-  * Add extensions from IANA for `application/*+xml` types
-  * Add new upstream MIME types
-
-1.42.0 / 2019-09-25
-===================
-
-  * Add `image/vnd.ms-dds` with extension `.dds`
-  * Add new upstream MIME types
-  * Remove compressible from `multipart/mixed`
-
-1.41.0 / 2019-08-30
-===================
-
-  * Add new upstream MIME types
-  * Add `application/toml` with extension `.toml`
-  * Mark `font/ttf` as compressible
-
-1.40.0 / 2019-04-20
-===================
-
-  * Add extensions from IANA for `model/*` types
-  * Add `text/mdx` with extension `.mdx`
-
-1.39.0 / 2019-04-04
-===================
-
-  * Add extensions `.siv` and `.sieve` to `application/sieve`
-  * Add new upstream MIME types
-
-1.38.0 / 2019-02-04
-===================
-
-  * Add extension `.nq` to `application/n-quads`
-  * Add extension `.nt` to `application/n-triples`
-  * Add new upstream MIME types
-  * Mark `text/less` as compressible
-
-1.37.0 / 2018-10-19
-===================
-
-  * Add extensions to HEIC image types
-  * Add new upstream MIME types
-
-1.36.0 / 2018-08-20
-===================
-
-  * Add Apple file extensions from IANA
-  * Add extensions from IANA for `image/*` types
-  * Add new upstream MIME types
-
-1.35.0 / 2018-07-15
-===================
-
-  * Add extension `.owl` to `application/rdf+xml`
-  * Add new upstream MIME types
-    - Removes extension `.woff` from `application/font-woff`
-
-1.34.0 / 2018-06-03
-===================
-
-  * Add extension `.csl` to `application/vnd.citationstyles.style+xml`
-  * Add extension `.es` to `application/ecmascript`
-  * Add new upstream MIME types
-  * Add `UTF-8` as default charset for `text/turtle`
-  * Mark all XML-derived types as compressible
-
-1.33.0 / 2018-02-15
-===================
-
-  * Add extensions from IANA for `message/*` types
-  * Add new upstream MIME types
-  * Fix some incorrect OOXML types
-  * Remove `application/font-woff2`
-
-1.32.0 / 2017-11-29
-===================
-
-  * Add new upstream MIME types
-  * Update `text/hjson` to registered `application/hjson`
-  * Add `text/shex` with extension `.shex`
-
-1.31.0 / 2017-10-25
-===================
-
-  * Add `application/raml+yaml` with extension `.raml`
-  * Add `application/wasm` with extension `.wasm`
-  * Add new `font` type from IANA
-  * Add new upstream font extensions
-  * Add new upstream MIME types
-  * Add extensions for JPEG-2000 images
-
-1.30.0 / 2017-08-27
-===================
-
-  * Add `application/vnd.ms-outlook`
-  * Add `application/x-arj`
-  * Add extension `.mjs` to `application/javascript`
-  * Add glTF types and extensions
-  * Add new upstream MIME types
-  * Add `text/x-org`
-  * Add VirtualBox MIME types
-  * Fix `source` records for `video/*` types that are IANA
-  * Update `font/opentype` to registered `font/otf`
-
-1.29.0 / 2017-07-10
-===================
-
-  * Add `application/fido.trusted-apps+json`
-  * Add extension `.wadl` to `application/vnd.sun.wadl+xml`
-  * Add new upstream MIME types
-  * Add `UTF-8` as default charset for `text/css`
-
-1.28.0 / 2017-05-14
-===================
-
-  * Add new upstream MIME types
-  * Add extension `.gz` to `application/gzip`
-  * Update extensions `.md` and `.markdown` to be `text/markdown`
-
-1.27.0 / 2017-03-16
-===================
-
-  * Add new upstream MIME types
-  * Add `image/apng` with extension `.apng`
-
-1.26.0 / 2017-01-14
-===================
-
-  * Add new upstream MIME types
-  * Add extension `.geojson` to `application/geo+json`
-
-1.25.0 / 2016-11-11
-===================
-
-  * Add new upstream MIME types
-
-1.24.0 / 2016-09-18
-===================
-
-  * Add `audio/mp3`
-  * Add new upstream MIME types
-
-1.23.0 / 2016-05-01
-===================
-
-  * Add new upstream MIME types
-  * Add extension `.3gpp` to `audio/3gpp`
-
-1.22.0 / 2016-02-15
-===================
-
-  * Add `text/slim`
-  * Add extension `.rng` to `application/xml`
-  * Add new upstream MIME types
-  * Fix extension of `application/dash+xml` to be `.mpd`
-  * Update primary extension to `.m4a` for `audio/mp4`
-
-1.21.0 / 2016-01-06
-===================
-
-  * Add Google document types
-  * Add new upstream MIME types
-
-1.20.0 / 2015-11-10
-===================
-
-  * Add `text/x-suse-ymp`
-  * Add new upstream MIME types
-
-1.19.0 / 2015-09-17
-===================
-
-  * Add `application/vnd.apple.pkpass`
-  * Add new upstream MIME types
-
-1.18.0 / 2015-09-03
-===================
-
-  * Add new upstream MIME types
-
-1.17.0 / 2015-08-13
-===================
-
-  * Add `application/x-msdos-program`
-  * Add `audio/g711-0`
-  * Add `image/vnd.mozilla.apng`
-  * Add extension `.exe` to `application/x-msdos-program`
-
-1.16.0 / 2015-07-29
-===================
-
-  * Add `application/vnd.uri-map`
-
-1.15.0 / 2015-07-13
-===================
-
-  * Add `application/x-httpd-php`
-
-1.14.0 / 2015-06-25
-===================
-
-  * Add `application/scim+json`
-  * Add `application/vnd.3gpp.ussd+xml`
-  * Add `application/vnd.biopax.rdf+xml`
-  * Add `text/x-processing`
-
-1.13.0 / 2015-06-07
-===================
-
-  * Add nginx as a source
-  * Add `application/x-cocoa`
-  * Add `application/x-java-archive-diff`
-  * Add `application/x-makeself`
-  * Add `application/x-perl`
-  * Add `application/x-pilot`
-  * Add `application/x-redhat-package-manager`
-  * Add `application/x-sea`
-  * Add `audio/x-m4a`
-  * Add `audio/x-realaudio`
-  * Add `image/x-jng`
-  * Add `text/mathml`
-
-1.12.0 / 2015-06-05
-===================
-
-  * Add `application/bdoc`
-  * Add `application/vnd.hyperdrive+json`
-  * Add `application/x-bdoc`
-  * Add extension `.rtf` to `text/rtf`
-
-1.11.0 / 2015-05-31
-===================
-
-  * Add `audio/wav`
-  * Add `audio/wave`
-  * Add extension `.litcoffee` to `text/coffeescript`
-  * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data`
-  * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install`
-
-1.10.0 / 2015-05-19
-===================
-
-  * Add `application/vnd.balsamiq.bmpr`
-  * Add `application/vnd.microsoft.portable-executable`
-  * Add `application/x-ns-proxy-autoconfig`
-
-1.9.1 / 2015-04-19
-==================
-
-  * Remove `.json` extension from `application/manifest+json`
-    - This is causing bugs downstream
-
-1.9.0 / 2015-04-19
-==================
-
-  * Add `application/manifest+json`
-  * Add `application/vnd.micro+json`
-  * Add `image/vnd.zbrush.pcx`
-  * Add `image/x-ms-bmp`
-
-1.8.0 / 2015-03-13
-==================
-
-  * Add `application/vnd.citationstyles.style+xml`
-  * Add `application/vnd.fastcopy-disk-image`
-  * Add `application/vnd.gov.sk.xmldatacontainer+xml`
-  * Add extension `.jsonld` to `application/ld+json`
-
-1.7.0 / 2015-02-08
-==================
-
-  * Add `application/vnd.gerber`
-  * Add `application/vnd.msa-disk-image`
-
-1.6.1 / 2015-02-05
-==================
-
-  * Community extensions ownership transferred from `node-mime`
-
-1.6.0 / 2015-01-29
-==================
-
-  * Add `application/jose`
-  * Add `application/jose+json`
-  * Add `application/json-seq`
-  * Add `application/jwk+json`
-  * Add `application/jwk-set+json`
-  * Add `application/jwt`
-  * Add `application/rdap+json`
-  * Add `application/vnd.gov.sk.e-form+xml`
-  * Add `application/vnd.ims.imsccv1p3`
-
-1.5.0 / 2014-12-30
-==================
-
-  * Add `application/vnd.oracle.resource+json`
-  * Fix various invalid MIME type entries
-    - `application/mbox+xml`
-    - `application/oscp-response`
-    - `application/vwg-multiplexed`
-    - `audio/g721`
-
-1.4.0 / 2014-12-21
-==================
-
-  * Add `application/vnd.ims.imsccv1p2`
-  * Fix various invalid MIME type entries
-    - `application/vnd-acucobol`
-    - `application/vnd-curl`
-    - `application/vnd-dart`
-    - `application/vnd-dxr`
-    - `application/vnd-fdf`
-    - `application/vnd-mif`
-    - `application/vnd-sema`
-    - `application/vnd-wap-wmlc`
-    - `application/vnd.adobe.flash-movie`
-    - `application/vnd.dece-zip`
-    - `application/vnd.dvb_service`
-    - `application/vnd.micrografx-igx`
-    - `application/vnd.sealed-doc`
-    - `application/vnd.sealed-eml`
-    - `application/vnd.sealed-mht`
-    - `application/vnd.sealed-ppt`
-    - `application/vnd.sealed-tiff`
-    - `application/vnd.sealed-xls`
-    - `application/vnd.sealedmedia.softseal-html`
-    - `application/vnd.sealedmedia.softseal-pdf`
-    - `application/vnd.wap-slc`
-    - `application/vnd.wap-wbxml`
-    - `audio/vnd.sealedmedia.softseal-mpeg`
-    - `image/vnd-djvu`
-    - `image/vnd-svf`
-    - `image/vnd-wap-wbmp`
-    - `image/vnd.sealed-png`
-    - `image/vnd.sealedmedia.softseal-gif`
-    - `image/vnd.sealedmedia.softseal-jpg`
-    - `model/vnd-dwf`
-    - `model/vnd.parasolid.transmit-binary`
-    - `model/vnd.parasolid.transmit-text`
-    - `text/vnd-a`
-    - `text/vnd-curl`
-    - `text/vnd.wap-wml`
-  * Remove example template MIME types
-    - `application/example`
-    - `audio/example`
-    - `image/example`
-    - `message/example`
-    - `model/example`
-    - `multipart/example`
-    - `text/example`
-    - `video/example`
-
-1.3.1 / 2014-12-16
-==================
-
-  * Fix missing extensions
-    - `application/json5`
-    - `text/hjson`
-
-1.3.0 / 2014-12-07
-==================
-
-  * Add `application/a2l`
-  * Add `application/aml`
-  * Add `application/atfx`
-  * Add `application/atxml`
-  * Add `application/cdfx+xml`
-  * Add `application/dii`
-  * Add `application/json5`
-  * Add `application/lxf`
-  * Add `application/mf4`
-  * Add `application/vnd.apache.thrift.compact`
-  * Add `application/vnd.apache.thrift.json`
-  * Add `application/vnd.coffeescript`
-  * Add `application/vnd.enphase.envoy`
-  * Add `application/vnd.ims.imsccv1p1`
-  * Add `text/csv-schema`
-  * Add `text/hjson`
-  * Add `text/markdown`
-  * Add `text/yaml`
-
-1.2.0 / 2014-11-09
-==================
-
-  * Add `application/cea`
-  * Add `application/dit`
-  * Add `application/vnd.gov.sk.e-form+zip`
-  * Add `application/vnd.tmd.mediaflex.api+xml`
-  * Type `application/epub+zip` is now IANA-registered
-
-1.1.2 / 2014-10-23
-==================
-
-  * Rebuild database for `application/x-www-form-urlencoded` change
-
-1.1.1 / 2014-10-20
-==================
-
-  * Mark `application/x-www-form-urlencoded` as compressible.
-
-1.1.0 / 2014-09-28
-==================
-
-  * Add `application/font-woff2`
-
-1.0.3 / 2014-09-25
-==================
-
-  * Fix engine requirement in package
-
-1.0.2 / 2014-09-25
-==================
-
-  * Add `application/coap-group+json`
-  * Add `application/dcd`
-  * Add `application/vnd.apache.thrift.binary`
-  * Add `image/vnd.tencent.tap`
-  * Mark all JSON-derived types as compressible
-  * Update `text/vtt` data
-
-1.0.1 / 2014-08-30
-==================
-
-  * Fix extension ordering
-
-1.0.0 / 2014-08-30
-==================
-
-  * Add `application/atf`
-  * Add `application/merge-patch+json`
-  * Add `multipart/x-mixed-replace`
-  * Add `source: 'apache'` metadata
-  * Add `source: 'iana'` metadata
-  * Remove badly-assumed charset data
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/mime-db/README.md b/signaling_server/service/node_modules/socket.io/node_modules/mime-db/README.md
deleted file mode 100644 (file)
index d6a6f80..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# mime-db
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Coverage Status][coveralls-image]][coveralls-url]
-
-This is a database of all mime types.
-It consists of a single, public JSON file and does not include any logic,
-allowing it to remain as un-opinionated as possible with an API.
-It aggregates data from the following sources:
-
-- http://www.iana.org/assignments/media-types/media-types.xhtml
-- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
-- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types
-
-## Installation
-
-```bash
-npm install mime-db
-```
-
-### Database Download
-
-If you're crazy enough to use this in the browser, you can just grab the
-JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to
-replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags)
-as the JSON format may change in the future.
-
-```
-https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json
-```
-
-## Usage
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var db = require('mime-db')
-
-// grab data on .js files
-var data = db['application/javascript']
-```
-
-## Data Structure
-
-The JSON file is a map lookup for lowercased mime types.
-Each mime type has the following properties:
-
-- `.source` - where the mime type is defined.
-    If not set, it's probably a custom media type.
-    - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)
-    - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
-    - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)
-- `.extensions[]` - known extensions associated with this mime type.
-- `.compressible` - whether a file of this type can be gzipped.
-- `.charset` - the default charset associated with this type, if any.
-
-If unknown, every property could be `undefined`.
-
-## Contributing
-
-To edit the database, only make PRs against `src/custom.json` or
-`src/custom-suffix.json`.
-
-The `src/custom.json` file is a JSON object with the MIME type as the keys
-and the values being an object with the following keys:
-
-- `compressible` - leave out if you don't know, otherwise `true`/`false` to
-  indicate whether the data represented by the type is typically compressible.
-- `extensions` - include an array of file extensions that are associated with
-  the type.
-- `notes` - human-readable notes about the type, typically what the type is.
-- `sources` - include an array of URLs of where the MIME type and the associated
-  extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source);
-  links to type aggregating sites and Wikipedia are _not acceptable_.
-
-To update the build, run `npm run build`.
-
-### Adding Custom Media Types
-
-The best way to get new media types included in this library is to register
-them with the IANA. The community registration procedure is outlined in
-[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types
-registered with the IANA are automatically pulled into this library.
-
-If that is not possible / feasible, they can be added directly here as a
-"custom" type. To do this, it is required to have a primary source that
-definitively lists the media type. If an extension is going to be listed as
-associateed with this media type, the source must definitively link the
-media type and extension as well.
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master
-[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master
-[node-image]: https://badgen.net/npm/node/mime-db
-[node-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/mime-db
-[npm-url]: https://npmjs.org/package/mime-db
-[npm-version-image]: https://badgen.net/npm/v/mime-db
-[travis-image]: https://badgen.net/travis/jshttp/mime-db/master
-[travis-url]: https://travis-ci.org/jshttp/mime-db
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/mime-db/db.json b/signaling_server/service/node_modules/socket.io/node_modules/mime-db/db.json
deleted file mode 100644 (file)
index e69f352..0000000
+++ /dev/null
@@ -1,8176 +0,0 @@
-{
-  "application/1d-interleaved-parityfec": {
-    "source": "iana"
-  },
-  "application/3gpdash-qoe-report+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/3gpp-ims+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/a2l": {
-    "source": "iana"
-  },
-  "application/activemessage": {
-    "source": "iana"
-  },
-  "application/activity+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-costmap+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-costmapfilter+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-directory+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-endpointcost+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-endpointcostparams+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-endpointprop+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-endpointpropparams+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-error+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-networkmap+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-networkmapfilter+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-updatestreamcontrol+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/alto-updatestreamparams+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/aml": {
-    "source": "iana"
-  },
-  "application/andrew-inset": {
-    "source": "iana",
-    "extensions": ["ez"]
-  },
-  "application/applefile": {
-    "source": "iana"
-  },
-  "application/applixware": {
-    "source": "apache",
-    "extensions": ["aw"]
-  },
-  "application/atf": {
-    "source": "iana"
-  },
-  "application/atfx": {
-    "source": "iana"
-  },
-  "application/atom+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["atom"]
-  },
-  "application/atomcat+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["atomcat"]
-  },
-  "application/atomdeleted+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["atomdeleted"]
-  },
-  "application/atomicmail": {
-    "source": "iana"
-  },
-  "application/atomsvc+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["atomsvc"]
-  },
-  "application/atsc-dwd+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dwd"]
-  },
-  "application/atsc-dynamic-event-message": {
-    "source": "iana"
-  },
-  "application/atsc-held+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["held"]
-  },
-  "application/atsc-rdt+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/atsc-rsat+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rsat"]
-  },
-  "application/atxml": {
-    "source": "iana"
-  },
-  "application/auth-policy+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/bacnet-xdd+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/batch-smtp": {
-    "source": "iana"
-  },
-  "application/bdoc": {
-    "compressible": false,
-    "extensions": ["bdoc"]
-  },
-  "application/beep+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/calendar+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/calendar+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xcs"]
-  },
-  "application/call-completion": {
-    "source": "iana"
-  },
-  "application/cals-1840": {
-    "source": "iana"
-  },
-  "application/cap+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/cbor": {
-    "source": "iana"
-  },
-  "application/cbor-seq": {
-    "source": "iana"
-  },
-  "application/cccex": {
-    "source": "iana"
-  },
-  "application/ccmp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/ccxml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ccxml"]
-  },
-  "application/cdfx+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["cdfx"]
-  },
-  "application/cdmi-capability": {
-    "source": "iana",
-    "extensions": ["cdmia"]
-  },
-  "application/cdmi-container": {
-    "source": "iana",
-    "extensions": ["cdmic"]
-  },
-  "application/cdmi-domain": {
-    "source": "iana",
-    "extensions": ["cdmid"]
-  },
-  "application/cdmi-object": {
-    "source": "iana",
-    "extensions": ["cdmio"]
-  },
-  "application/cdmi-queue": {
-    "source": "iana",
-    "extensions": ["cdmiq"]
-  },
-  "application/cdni": {
-    "source": "iana"
-  },
-  "application/cea": {
-    "source": "iana"
-  },
-  "application/cea-2018+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cellml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cfw": {
-    "source": "iana"
-  },
-  "application/clue+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/clue_info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cms": {
-    "source": "iana"
-  },
-  "application/cnrp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/coap-group+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/coap-payload": {
-    "source": "iana"
-  },
-  "application/commonground": {
-    "source": "iana"
-  },
-  "application/conference-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cose": {
-    "source": "iana"
-  },
-  "application/cose-key": {
-    "source": "iana"
-  },
-  "application/cose-key-set": {
-    "source": "iana"
-  },
-  "application/cpl+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/csrattrs": {
-    "source": "iana"
-  },
-  "application/csta+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cstadata+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/csvm+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/cu-seeme": {
-    "source": "apache",
-    "extensions": ["cu"]
-  },
-  "application/cwt": {
-    "source": "iana"
-  },
-  "application/cybercash": {
-    "source": "iana"
-  },
-  "application/dart": {
-    "compressible": true
-  },
-  "application/dash+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mpd"]
-  },
-  "application/dashdelta": {
-    "source": "iana"
-  },
-  "application/davmount+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["davmount"]
-  },
-  "application/dca-rft": {
-    "source": "iana"
-  },
-  "application/dcd": {
-    "source": "iana"
-  },
-  "application/dec-dx": {
-    "source": "iana"
-  },
-  "application/dialog-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dicom": {
-    "source": "iana"
-  },
-  "application/dicom+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dicom+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dii": {
-    "source": "iana"
-  },
-  "application/dit": {
-    "source": "iana"
-  },
-  "application/dns": {
-    "source": "iana"
-  },
-  "application/dns+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dns-message": {
-    "source": "iana"
-  },
-  "application/docbook+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["dbk"]
-  },
-  "application/dots+cbor": {
-    "source": "iana"
-  },
-  "application/dskpp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/dssc+der": {
-    "source": "iana",
-    "extensions": ["dssc"]
-  },
-  "application/dssc+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdssc"]
-  },
-  "application/dvcs": {
-    "source": "iana"
-  },
-  "application/ecmascript": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ecma","es"]
-  },
-  "application/edi-consent": {
-    "source": "iana"
-  },
-  "application/edi-x12": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/edifact": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/efi": {
-    "source": "iana"
-  },
-  "application/emergencycalldata.comment+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.control+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.deviceinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.ecall.msd": {
-    "source": "iana"
-  },
-  "application/emergencycalldata.providerinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.serviceinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.subscriberinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emergencycalldata.veds+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/emma+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["emma"]
-  },
-  "application/emotionml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["emotionml"]
-  },
-  "application/encaprtp": {
-    "source": "iana"
-  },
-  "application/epp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/epub+zip": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["epub"]
-  },
-  "application/eshop": {
-    "source": "iana"
-  },
-  "application/exi": {
-    "source": "iana",
-    "extensions": ["exi"]
-  },
-  "application/expect-ct-report+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/fastinfoset": {
-    "source": "iana"
-  },
-  "application/fastsoap": {
-    "source": "iana"
-  },
-  "application/fdt+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["fdt"]
-  },
-  "application/fhir+json": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/fhir+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/fido.trusted-apps+json": {
-    "compressible": true
-  },
-  "application/fits": {
-    "source": "iana"
-  },
-  "application/flexfec": {
-    "source": "iana"
-  },
-  "application/font-sfnt": {
-    "source": "iana"
-  },
-  "application/font-tdpfr": {
-    "source": "iana",
-    "extensions": ["pfr"]
-  },
-  "application/font-woff": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/framework-attributes+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/geo+json": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["geojson"]
-  },
-  "application/geo+json-seq": {
-    "source": "iana"
-  },
-  "application/geopackage+sqlite3": {
-    "source": "iana"
-  },
-  "application/geoxacml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/gltf-buffer": {
-    "source": "iana"
-  },
-  "application/gml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["gml"]
-  },
-  "application/gpx+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["gpx"]
-  },
-  "application/gxf": {
-    "source": "apache",
-    "extensions": ["gxf"]
-  },
-  "application/gzip": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["gz"]
-  },
-  "application/h224": {
-    "source": "iana"
-  },
-  "application/held+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/hjson": {
-    "extensions": ["hjson"]
-  },
-  "application/http": {
-    "source": "iana"
-  },
-  "application/hyperstudio": {
-    "source": "iana",
-    "extensions": ["stk"]
-  },
-  "application/ibe-key-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/ibe-pkg-reply+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/ibe-pp-data": {
-    "source": "iana"
-  },
-  "application/iges": {
-    "source": "iana"
-  },
-  "application/im-iscomposing+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/index": {
-    "source": "iana"
-  },
-  "application/index.cmd": {
-    "source": "iana"
-  },
-  "application/index.obj": {
-    "source": "iana"
-  },
-  "application/index.response": {
-    "source": "iana"
-  },
-  "application/index.vnd": {
-    "source": "iana"
-  },
-  "application/inkml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ink","inkml"]
-  },
-  "application/iotp": {
-    "source": "iana"
-  },
-  "application/ipfix": {
-    "source": "iana",
-    "extensions": ["ipfix"]
-  },
-  "application/ipp": {
-    "source": "iana"
-  },
-  "application/isup": {
-    "source": "iana"
-  },
-  "application/its+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["its"]
-  },
-  "application/java-archive": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["jar","war","ear"]
-  },
-  "application/java-serialized-object": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["ser"]
-  },
-  "application/java-vm": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["class"]
-  },
-  "application/javascript": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["js","mjs"]
-  },
-  "application/jf2feed+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/jose": {
-    "source": "iana"
-  },
-  "application/jose+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/jrd+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/json": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["json","map"]
-  },
-  "application/json-patch+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/json-seq": {
-    "source": "iana"
-  },
-  "application/json5": {
-    "extensions": ["json5"]
-  },
-  "application/jsonml+json": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["jsonml"]
-  },
-  "application/jwk+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/jwk-set+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/jwt": {
-    "source": "iana"
-  },
-  "application/kpml-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/kpml-response+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/ld+json": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["jsonld"]
-  },
-  "application/lgr+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["lgr"]
-  },
-  "application/link-format": {
-    "source": "iana"
-  },
-  "application/load-control+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/lost+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["lostxml"]
-  },
-  "application/lostsync+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/lpf+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/lxf": {
-    "source": "iana"
-  },
-  "application/mac-binhex40": {
-    "source": "iana",
-    "extensions": ["hqx"]
-  },
-  "application/mac-compactpro": {
-    "source": "apache",
-    "extensions": ["cpt"]
-  },
-  "application/macwriteii": {
-    "source": "iana"
-  },
-  "application/mads+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mads"]
-  },
-  "application/manifest+json": {
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["webmanifest"]
-  },
-  "application/marc": {
-    "source": "iana",
-    "extensions": ["mrc"]
-  },
-  "application/marcxml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mrcx"]
-  },
-  "application/mathematica": {
-    "source": "iana",
-    "extensions": ["ma","nb","mb"]
-  },
-  "application/mathml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mathml"]
-  },
-  "application/mathml-content+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mathml-presentation+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-associated-procedure-description+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-deregister+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-envelope+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-msk+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-msk-response+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-protection-description+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-reception-report+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-register+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-register-response+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-schedule+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbms-user-service-description+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mbox": {
-    "source": "iana",
-    "extensions": ["mbox"]
-  },
-  "application/media-policy-dataset+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/media_control+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/mediaservercontrol+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mscml"]
-  },
-  "application/merge-patch+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/metalink+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["metalink"]
-  },
-  "application/metalink4+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["meta4"]
-  },
-  "application/mets+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mets"]
-  },
-  "application/mf4": {
-    "source": "iana"
-  },
-  "application/mikey": {
-    "source": "iana"
-  },
-  "application/mipc": {
-    "source": "iana"
-  },
-  "application/mmt-aei+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["maei"]
-  },
-  "application/mmt-usd+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["musd"]
-  },
-  "application/mods+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mods"]
-  },
-  "application/moss-keys": {
-    "source": "iana"
-  },
-  "application/moss-signature": {
-    "source": "iana"
-  },
-  "application/mosskey-data": {
-    "source": "iana"
-  },
-  "application/mosskey-request": {
-    "source": "iana"
-  },
-  "application/mp21": {
-    "source": "iana",
-    "extensions": ["m21","mp21"]
-  },
-  "application/mp4": {
-    "source": "iana",
-    "extensions": ["mp4s","m4p"]
-  },
-  "application/mpeg4-generic": {
-    "source": "iana"
-  },
-  "application/mpeg4-iod": {
-    "source": "iana"
-  },
-  "application/mpeg4-iod-xmt": {
-    "source": "iana"
-  },
-  "application/mrb-consumer+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdf"]
-  },
-  "application/mrb-publish+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdf"]
-  },
-  "application/msc-ivr+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/msc-mixer+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/msword": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["doc","dot"]
-  },
-  "application/mud+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/multipart-core": {
-    "source": "iana"
-  },
-  "application/mxf": {
-    "source": "iana",
-    "extensions": ["mxf"]
-  },
-  "application/n-quads": {
-    "source": "iana",
-    "extensions": ["nq"]
-  },
-  "application/n-triples": {
-    "source": "iana",
-    "extensions": ["nt"]
-  },
-  "application/nasdata": {
-    "source": "iana"
-  },
-  "application/news-checkgroups": {
-    "source": "iana",
-    "charset": "US-ASCII"
-  },
-  "application/news-groupinfo": {
-    "source": "iana",
-    "charset": "US-ASCII"
-  },
-  "application/news-transmission": {
-    "source": "iana"
-  },
-  "application/nlsml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/node": {
-    "source": "iana",
-    "extensions": ["cjs"]
-  },
-  "application/nss": {
-    "source": "iana"
-  },
-  "application/ocsp-request": {
-    "source": "iana"
-  },
-  "application/ocsp-response": {
-    "source": "iana"
-  },
-  "application/octet-stream": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]
-  },
-  "application/oda": {
-    "source": "iana",
-    "extensions": ["oda"]
-  },
-  "application/odm+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/odx": {
-    "source": "iana"
-  },
-  "application/oebps-package+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["opf"]
-  },
-  "application/ogg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["ogx"]
-  },
-  "application/omdoc+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["omdoc"]
-  },
-  "application/onenote": {
-    "source": "apache",
-    "extensions": ["onetoc","onetoc2","onetmp","onepkg"]
-  },
-  "application/oscore": {
-    "source": "iana"
-  },
-  "application/oxps": {
-    "source": "iana",
-    "extensions": ["oxps"]
-  },
-  "application/p2p-overlay+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["relo"]
-  },
-  "application/parityfec": {
-    "source": "iana"
-  },
-  "application/passport": {
-    "source": "iana"
-  },
-  "application/patch-ops-error+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xer"]
-  },
-  "application/pdf": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["pdf"]
-  },
-  "application/pdx": {
-    "source": "iana"
-  },
-  "application/pem-certificate-chain": {
-    "source": "iana"
-  },
-  "application/pgp-encrypted": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["pgp"]
-  },
-  "application/pgp-keys": {
-    "source": "iana"
-  },
-  "application/pgp-signature": {
-    "source": "iana",
-    "extensions": ["asc","sig"]
-  },
-  "application/pics-rules": {
-    "source": "apache",
-    "extensions": ["prf"]
-  },
-  "application/pidf+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/pidf-diff+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/pkcs10": {
-    "source": "iana",
-    "extensions": ["p10"]
-  },
-  "application/pkcs12": {
-    "source": "iana"
-  },
-  "application/pkcs7-mime": {
-    "source": "iana",
-    "extensions": ["p7m","p7c"]
-  },
-  "application/pkcs7-signature": {
-    "source": "iana",
-    "extensions": ["p7s"]
-  },
-  "application/pkcs8": {
-    "source": "iana",
-    "extensions": ["p8"]
-  },
-  "application/pkcs8-encrypted": {
-    "source": "iana"
-  },
-  "application/pkix-attr-cert": {
-    "source": "iana",
-    "extensions": ["ac"]
-  },
-  "application/pkix-cert": {
-    "source": "iana",
-    "extensions": ["cer"]
-  },
-  "application/pkix-crl": {
-    "source": "iana",
-    "extensions": ["crl"]
-  },
-  "application/pkix-pkipath": {
-    "source": "iana",
-    "extensions": ["pkipath"]
-  },
-  "application/pkixcmp": {
-    "source": "iana",
-    "extensions": ["pki"]
-  },
-  "application/pls+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["pls"]
-  },
-  "application/poc-settings+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/postscript": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ai","eps","ps"]
-  },
-  "application/ppsp-tracker+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/problem+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/problem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/provenance+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["provx"]
-  },
-  "application/prs.alvestrand.titrax-sheet": {
-    "source": "iana"
-  },
-  "application/prs.cww": {
-    "source": "iana",
-    "extensions": ["cww"]
-  },
-  "application/prs.hpub+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/prs.nprend": {
-    "source": "iana"
-  },
-  "application/prs.plucker": {
-    "source": "iana"
-  },
-  "application/prs.rdf-xml-crypt": {
-    "source": "iana"
-  },
-  "application/prs.xsf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/pskc+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["pskcxml"]
-  },
-  "application/pvd+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/qsig": {
-    "source": "iana"
-  },
-  "application/raml+yaml": {
-    "compressible": true,
-    "extensions": ["raml"]
-  },
-  "application/raptorfec": {
-    "source": "iana"
-  },
-  "application/rdap+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/rdf+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rdf","owl"]
-  },
-  "application/reginfo+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rif"]
-  },
-  "application/relax-ng-compact-syntax": {
-    "source": "iana",
-    "extensions": ["rnc"]
-  },
-  "application/remote-printing": {
-    "source": "iana"
-  },
-  "application/reputon+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/resource-lists+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rl"]
-  },
-  "application/resource-lists-diff+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rld"]
-  },
-  "application/rfc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/riscos": {
-    "source": "iana"
-  },
-  "application/rlmi+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/rls-services+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rs"]
-  },
-  "application/route-apd+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rapd"]
-  },
-  "application/route-s-tsid+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sls"]
-  },
-  "application/route-usd+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rusd"]
-  },
-  "application/rpki-ghostbusters": {
-    "source": "iana",
-    "extensions": ["gbr"]
-  },
-  "application/rpki-manifest": {
-    "source": "iana",
-    "extensions": ["mft"]
-  },
-  "application/rpki-publication": {
-    "source": "iana"
-  },
-  "application/rpki-roa": {
-    "source": "iana",
-    "extensions": ["roa"]
-  },
-  "application/rpki-updown": {
-    "source": "iana"
-  },
-  "application/rsd+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["rsd"]
-  },
-  "application/rss+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["rss"]
-  },
-  "application/rtf": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rtf"]
-  },
-  "application/rtploopback": {
-    "source": "iana"
-  },
-  "application/rtx": {
-    "source": "iana"
-  },
-  "application/samlassertion+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/samlmetadata+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sbe": {
-    "source": "iana"
-  },
-  "application/sbml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sbml"]
-  },
-  "application/scaip+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/scim+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/scvp-cv-request": {
-    "source": "iana",
-    "extensions": ["scq"]
-  },
-  "application/scvp-cv-response": {
-    "source": "iana",
-    "extensions": ["scs"]
-  },
-  "application/scvp-vp-request": {
-    "source": "iana",
-    "extensions": ["spq"]
-  },
-  "application/scvp-vp-response": {
-    "source": "iana",
-    "extensions": ["spp"]
-  },
-  "application/sdp": {
-    "source": "iana",
-    "extensions": ["sdp"]
-  },
-  "application/secevent+jwt": {
-    "source": "iana"
-  },
-  "application/senml+cbor": {
-    "source": "iana"
-  },
-  "application/senml+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/senml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["senmlx"]
-  },
-  "application/senml-etch+cbor": {
-    "source": "iana"
-  },
-  "application/senml-etch+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/senml-exi": {
-    "source": "iana"
-  },
-  "application/sensml+cbor": {
-    "source": "iana"
-  },
-  "application/sensml+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sensml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sensmlx"]
-  },
-  "application/sensml-exi": {
-    "source": "iana"
-  },
-  "application/sep+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sep-exi": {
-    "source": "iana"
-  },
-  "application/session-info": {
-    "source": "iana"
-  },
-  "application/set-payment": {
-    "source": "iana"
-  },
-  "application/set-payment-initiation": {
-    "source": "iana",
-    "extensions": ["setpay"]
-  },
-  "application/set-registration": {
-    "source": "iana"
-  },
-  "application/set-registration-initiation": {
-    "source": "iana",
-    "extensions": ["setreg"]
-  },
-  "application/sgml": {
-    "source": "iana"
-  },
-  "application/sgml-open-catalog": {
-    "source": "iana"
-  },
-  "application/shf+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["shf"]
-  },
-  "application/sieve": {
-    "source": "iana",
-    "extensions": ["siv","sieve"]
-  },
-  "application/simple-filter+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/simple-message-summary": {
-    "source": "iana"
-  },
-  "application/simplesymbolcontainer": {
-    "source": "iana"
-  },
-  "application/sipc": {
-    "source": "iana"
-  },
-  "application/slate": {
-    "source": "iana"
-  },
-  "application/smil": {
-    "source": "iana"
-  },
-  "application/smil+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["smi","smil"]
-  },
-  "application/smpte336m": {
-    "source": "iana"
-  },
-  "application/soap+fastinfoset": {
-    "source": "iana"
-  },
-  "application/soap+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sparql-query": {
-    "source": "iana",
-    "extensions": ["rq"]
-  },
-  "application/sparql-results+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["srx"]
-  },
-  "application/spirits-event+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/sql": {
-    "source": "iana"
-  },
-  "application/srgs": {
-    "source": "iana",
-    "extensions": ["gram"]
-  },
-  "application/srgs+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["grxml"]
-  },
-  "application/sru+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sru"]
-  },
-  "application/ssdl+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["ssdl"]
-  },
-  "application/ssml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ssml"]
-  },
-  "application/stix+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/swid+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["swidtag"]
-  },
-  "application/tamp-apex-update": {
-    "source": "iana"
-  },
-  "application/tamp-apex-update-confirm": {
-    "source": "iana"
-  },
-  "application/tamp-community-update": {
-    "source": "iana"
-  },
-  "application/tamp-community-update-confirm": {
-    "source": "iana"
-  },
-  "application/tamp-error": {
-    "source": "iana"
-  },
-  "application/tamp-sequence-adjust": {
-    "source": "iana"
-  },
-  "application/tamp-sequence-adjust-confirm": {
-    "source": "iana"
-  },
-  "application/tamp-status-query": {
-    "source": "iana"
-  },
-  "application/tamp-status-response": {
-    "source": "iana"
-  },
-  "application/tamp-update": {
-    "source": "iana"
-  },
-  "application/tamp-update-confirm": {
-    "source": "iana"
-  },
-  "application/tar": {
-    "compressible": true
-  },
-  "application/taxii+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/td+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/tei+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["tei","teicorpus"]
-  },
-  "application/tetra_isi": {
-    "source": "iana"
-  },
-  "application/thraud+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["tfi"]
-  },
-  "application/timestamp-query": {
-    "source": "iana"
-  },
-  "application/timestamp-reply": {
-    "source": "iana"
-  },
-  "application/timestamped-data": {
-    "source": "iana",
-    "extensions": ["tsd"]
-  },
-  "application/tlsrpt+gzip": {
-    "source": "iana"
-  },
-  "application/tlsrpt+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/tnauthlist": {
-    "source": "iana"
-  },
-  "application/toml": {
-    "compressible": true,
-    "extensions": ["toml"]
-  },
-  "application/trickle-ice-sdpfrag": {
-    "source": "iana"
-  },
-  "application/trig": {
-    "source": "iana"
-  },
-  "application/ttml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ttml"]
-  },
-  "application/tve-trigger": {
-    "source": "iana"
-  },
-  "application/tzif": {
-    "source": "iana"
-  },
-  "application/tzif-leap": {
-    "source": "iana"
-  },
-  "application/ulpfec": {
-    "source": "iana"
-  },
-  "application/urc-grpsheet+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/urc-ressheet+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rsheet"]
-  },
-  "application/urc-targetdesc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/urc-uisocketdesc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vcard+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vcard+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vemmi": {
-    "source": "iana"
-  },
-  "application/vividence.scriptfile": {
-    "source": "apache"
-  },
-  "application/vnd.1000minds.decision-model+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["1km"]
-  },
-  "application/vnd.3gpp-prose+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp-prose-pc3ch+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp-v2x-local-service-information": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.access-transfer-events+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.bsf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.gmop+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mc-signalling-ear": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.mcdata-affiliation-command+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcdata-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcdata-payload": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.mcdata-service-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcdata-signalling": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.mcdata-ue-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcdata-user-profile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-affiliation-command+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-floor-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-location-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-service-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-signed+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-ue-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-ue-init-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcptt-user-profile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-affiliation-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-location-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-service-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-transmission-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-ue-config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mcvideo-user-profile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.mid-call+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.pic-bw-large": {
-    "source": "iana",
-    "extensions": ["plb"]
-  },
-  "application/vnd.3gpp.pic-bw-small": {
-    "source": "iana",
-    "extensions": ["psb"]
-  },
-  "application/vnd.3gpp.pic-bw-var": {
-    "source": "iana",
-    "extensions": ["pvb"]
-  },
-  "application/vnd.3gpp.sms": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp.sms+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.srvcc-ext+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.srvcc-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.state-and-event-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp.ussd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp2.bcmcsinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.3gpp2.sms": {
-    "source": "iana"
-  },
-  "application/vnd.3gpp2.tcap": {
-    "source": "iana",
-    "extensions": ["tcap"]
-  },
-  "application/vnd.3lightssoftware.imagescal": {
-    "source": "iana"
-  },
-  "application/vnd.3m.post-it-notes": {
-    "source": "iana",
-    "extensions": ["pwn"]
-  },
-  "application/vnd.accpac.simply.aso": {
-    "source": "iana",
-    "extensions": ["aso"]
-  },
-  "application/vnd.accpac.simply.imp": {
-    "source": "iana",
-    "extensions": ["imp"]
-  },
-  "application/vnd.acucobol": {
-    "source": "iana",
-    "extensions": ["acu"]
-  },
-  "application/vnd.acucorp": {
-    "source": "iana",
-    "extensions": ["atc","acutc"]
-  },
-  "application/vnd.adobe.air-application-installer-package+zip": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["air"]
-  },
-  "application/vnd.adobe.flash.movie": {
-    "source": "iana"
-  },
-  "application/vnd.adobe.formscentral.fcdt": {
-    "source": "iana",
-    "extensions": ["fcdt"]
-  },
-  "application/vnd.adobe.fxp": {
-    "source": "iana",
-    "extensions": ["fxp","fxpl"]
-  },
-  "application/vnd.adobe.partial-upload": {
-    "source": "iana"
-  },
-  "application/vnd.adobe.xdp+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdp"]
-  },
-  "application/vnd.adobe.xfdf": {
-    "source": "iana",
-    "extensions": ["xfdf"]
-  },
-  "application/vnd.aether.imp": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.afplinedata": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.afplinedata-pagedef": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.foca-charset": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.foca-codedfont": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.foca-codepage": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-formdef": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-mediummap": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-objectcontainer": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-overlay": {
-    "source": "iana"
-  },
-  "application/vnd.afpc.modca-pagesegment": {
-    "source": "iana"
-  },
-  "application/vnd.ah-barcode": {
-    "source": "iana"
-  },
-  "application/vnd.ahead.space": {
-    "source": "iana",
-    "extensions": ["ahead"]
-  },
-  "application/vnd.airzip.filesecure.azf": {
-    "source": "iana",
-    "extensions": ["azf"]
-  },
-  "application/vnd.airzip.filesecure.azs": {
-    "source": "iana",
-    "extensions": ["azs"]
-  },
-  "application/vnd.amadeus+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.amazon.ebook": {
-    "source": "apache",
-    "extensions": ["azw"]
-  },
-  "application/vnd.amazon.mobi8-ebook": {
-    "source": "iana"
-  },
-  "application/vnd.americandynamics.acc": {
-    "source": "iana",
-    "extensions": ["acc"]
-  },
-  "application/vnd.amiga.ami": {
-    "source": "iana",
-    "extensions": ["ami"]
-  },
-  "application/vnd.amundsen.maze+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.android.ota": {
-    "source": "iana"
-  },
-  "application/vnd.android.package-archive": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["apk"]
-  },
-  "application/vnd.anki": {
-    "source": "iana"
-  },
-  "application/vnd.anser-web-certificate-issue-initiation": {
-    "source": "iana",
-    "extensions": ["cii"]
-  },
-  "application/vnd.anser-web-funds-transfer-initiation": {
-    "source": "apache",
-    "extensions": ["fti"]
-  },
-  "application/vnd.antix.game-component": {
-    "source": "iana",
-    "extensions": ["atx"]
-  },
-  "application/vnd.apache.thrift.binary": {
-    "source": "iana"
-  },
-  "application/vnd.apache.thrift.compact": {
-    "source": "iana"
-  },
-  "application/vnd.apache.thrift.json": {
-    "source": "iana"
-  },
-  "application/vnd.api+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.aplextor.warrp+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.apothekende.reservation+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.apple.installer+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mpkg"]
-  },
-  "application/vnd.apple.keynote": {
-    "source": "iana",
-    "extensions": ["keynote"]
-  },
-  "application/vnd.apple.mpegurl": {
-    "source": "iana",
-    "extensions": ["m3u8"]
-  },
-  "application/vnd.apple.numbers": {
-    "source": "iana",
-    "extensions": ["numbers"]
-  },
-  "application/vnd.apple.pages": {
-    "source": "iana",
-    "extensions": ["pages"]
-  },
-  "application/vnd.apple.pkpass": {
-    "compressible": false,
-    "extensions": ["pkpass"]
-  },
-  "application/vnd.arastra.swi": {
-    "source": "iana"
-  },
-  "application/vnd.aristanetworks.swi": {
-    "source": "iana",
-    "extensions": ["swi"]
-  },
-  "application/vnd.artisan+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.artsquare": {
-    "source": "iana"
-  },
-  "application/vnd.astraea-software.iota": {
-    "source": "iana",
-    "extensions": ["iota"]
-  },
-  "application/vnd.audiograph": {
-    "source": "iana",
-    "extensions": ["aep"]
-  },
-  "application/vnd.autopackage": {
-    "source": "iana"
-  },
-  "application/vnd.avalon+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.avistar+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.balsamiq.bmml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["bmml"]
-  },
-  "application/vnd.balsamiq.bmpr": {
-    "source": "iana"
-  },
-  "application/vnd.banana-accounting": {
-    "source": "iana"
-  },
-  "application/vnd.bbf.usp.error": {
-    "source": "iana"
-  },
-  "application/vnd.bbf.usp.msg": {
-    "source": "iana"
-  },
-  "application/vnd.bbf.usp.msg+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.bekitzur-stech+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.bint.med-content": {
-    "source": "iana"
-  },
-  "application/vnd.biopax.rdf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.blink-idb-value-wrapper": {
-    "source": "iana"
-  },
-  "application/vnd.blueice.multipass": {
-    "source": "iana",
-    "extensions": ["mpm"]
-  },
-  "application/vnd.bluetooth.ep.oob": {
-    "source": "iana"
-  },
-  "application/vnd.bluetooth.le.oob": {
-    "source": "iana"
-  },
-  "application/vnd.bmi": {
-    "source": "iana",
-    "extensions": ["bmi"]
-  },
-  "application/vnd.bpf": {
-    "source": "iana"
-  },
-  "application/vnd.bpf3": {
-    "source": "iana"
-  },
-  "application/vnd.businessobjects": {
-    "source": "iana",
-    "extensions": ["rep"]
-  },
-  "application/vnd.byu.uapi+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cab-jscript": {
-    "source": "iana"
-  },
-  "application/vnd.canon-cpdl": {
-    "source": "iana"
-  },
-  "application/vnd.canon-lips": {
-    "source": "iana"
-  },
-  "application/vnd.capasystems-pg+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cendio.thinlinc.clientconf": {
-    "source": "iana"
-  },
-  "application/vnd.century-systems.tcp_stream": {
-    "source": "iana"
-  },
-  "application/vnd.chemdraw+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["cdxml"]
-  },
-  "application/vnd.chess-pgn": {
-    "source": "iana"
-  },
-  "application/vnd.chipnuts.karaoke-mmd": {
-    "source": "iana",
-    "extensions": ["mmd"]
-  },
-  "application/vnd.ciedi": {
-    "source": "iana"
-  },
-  "application/vnd.cinderella": {
-    "source": "iana",
-    "extensions": ["cdy"]
-  },
-  "application/vnd.cirpack.isdn-ext": {
-    "source": "iana"
-  },
-  "application/vnd.citationstyles.style+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["csl"]
-  },
-  "application/vnd.claymore": {
-    "source": "iana",
-    "extensions": ["cla"]
-  },
-  "application/vnd.cloanto.rp9": {
-    "source": "iana",
-    "extensions": ["rp9"]
-  },
-  "application/vnd.clonk.c4group": {
-    "source": "iana",
-    "extensions": ["c4g","c4d","c4f","c4p","c4u"]
-  },
-  "application/vnd.cluetrust.cartomobile-config": {
-    "source": "iana",
-    "extensions": ["c11amc"]
-  },
-  "application/vnd.cluetrust.cartomobile-config-pkg": {
-    "source": "iana",
-    "extensions": ["c11amz"]
-  },
-  "application/vnd.coffeescript": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.document": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.document-template": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.presentation": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.presentation-template": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.spreadsheet": {
-    "source": "iana"
-  },
-  "application/vnd.collabio.xodocuments.spreadsheet-template": {
-    "source": "iana"
-  },
-  "application/vnd.collection+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.collection.doc+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.collection.next+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.comicbook+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.comicbook-rar": {
-    "source": "iana"
-  },
-  "application/vnd.commerce-battelle": {
-    "source": "iana"
-  },
-  "application/vnd.commonspace": {
-    "source": "iana",
-    "extensions": ["csp"]
-  },
-  "application/vnd.contact.cmsg": {
-    "source": "iana",
-    "extensions": ["cdbcmsg"]
-  },
-  "application/vnd.coreos.ignition+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cosmocaller": {
-    "source": "iana",
-    "extensions": ["cmc"]
-  },
-  "application/vnd.crick.clicker": {
-    "source": "iana",
-    "extensions": ["clkx"]
-  },
-  "application/vnd.crick.clicker.keyboard": {
-    "source": "iana",
-    "extensions": ["clkk"]
-  },
-  "application/vnd.crick.clicker.palette": {
-    "source": "iana",
-    "extensions": ["clkp"]
-  },
-  "application/vnd.crick.clicker.template": {
-    "source": "iana",
-    "extensions": ["clkt"]
-  },
-  "application/vnd.crick.clicker.wordbank": {
-    "source": "iana",
-    "extensions": ["clkw"]
-  },
-  "application/vnd.criticaltools.wbs+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["wbs"]
-  },
-  "application/vnd.cryptii.pipe+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.crypto-shade-file": {
-    "source": "iana"
-  },
-  "application/vnd.ctc-posml": {
-    "source": "iana",
-    "extensions": ["pml"]
-  },
-  "application/vnd.ctct.ws+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cups-pdf": {
-    "source": "iana"
-  },
-  "application/vnd.cups-postscript": {
-    "source": "iana"
-  },
-  "application/vnd.cups-ppd": {
-    "source": "iana",
-    "extensions": ["ppd"]
-  },
-  "application/vnd.cups-raster": {
-    "source": "iana"
-  },
-  "application/vnd.cups-raw": {
-    "source": "iana"
-  },
-  "application/vnd.curl": {
-    "source": "iana"
-  },
-  "application/vnd.curl.car": {
-    "source": "apache",
-    "extensions": ["car"]
-  },
-  "application/vnd.curl.pcurl": {
-    "source": "apache",
-    "extensions": ["pcurl"]
-  },
-  "application/vnd.cyan.dean.root+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.cybank": {
-    "source": "iana"
-  },
-  "application/vnd.d2l.coursepackage1p0+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.dart": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dart"]
-  },
-  "application/vnd.data-vision.rdz": {
-    "source": "iana",
-    "extensions": ["rdz"]
-  },
-  "application/vnd.datapackage+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dataresource+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dbf": {
-    "source": "iana"
-  },
-  "application/vnd.debian.binary-package": {
-    "source": "iana"
-  },
-  "application/vnd.dece.data": {
-    "source": "iana",
-    "extensions": ["uvf","uvvf","uvd","uvvd"]
-  },
-  "application/vnd.dece.ttml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["uvt","uvvt"]
-  },
-  "application/vnd.dece.unspecified": {
-    "source": "iana",
-    "extensions": ["uvx","uvvx"]
-  },
-  "application/vnd.dece.zip": {
-    "source": "iana",
-    "extensions": ["uvz","uvvz"]
-  },
-  "application/vnd.denovo.fcselayout-link": {
-    "source": "iana",
-    "extensions": ["fe_launch"]
-  },
-  "application/vnd.desmume.movie": {
-    "source": "iana"
-  },
-  "application/vnd.dir-bi.plate-dl-nosuffix": {
-    "source": "iana"
-  },
-  "application/vnd.dm.delegation+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dna": {
-    "source": "iana",
-    "extensions": ["dna"]
-  },
-  "application/vnd.document+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dolby.mlp": {
-    "source": "apache",
-    "extensions": ["mlp"]
-  },
-  "application/vnd.dolby.mobile.1": {
-    "source": "iana"
-  },
-  "application/vnd.dolby.mobile.2": {
-    "source": "iana"
-  },
-  "application/vnd.doremir.scorecloud-binary-document": {
-    "source": "iana"
-  },
-  "application/vnd.dpgraph": {
-    "source": "iana",
-    "extensions": ["dpg"]
-  },
-  "application/vnd.dreamfactory": {
-    "source": "iana",
-    "extensions": ["dfac"]
-  },
-  "application/vnd.drive+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ds-keypoint": {
-    "source": "apache",
-    "extensions": ["kpxx"]
-  },
-  "application/vnd.dtg.local": {
-    "source": "iana"
-  },
-  "application/vnd.dtg.local.flash": {
-    "source": "iana"
-  },
-  "application/vnd.dtg.local.html": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ait": {
-    "source": "iana",
-    "extensions": ["ait"]
-  },
-  "application/vnd.dvb.dvbisl+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.dvbj": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.esgcontainer": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcdftnotifaccess": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcesgaccess": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcesgaccess2": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcesgpdd": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.ipdcroaming": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.iptv.alfec-base": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.iptv.alfec-enhancement": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.notif-aggregate-root+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-container+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-generic+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-ia-msglist+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-ia-registration-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-ia-registration-response+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.notif-init+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.dvb.pfr": {
-    "source": "iana"
-  },
-  "application/vnd.dvb.service": {
-    "source": "iana",
-    "extensions": ["svc"]
-  },
-  "application/vnd.dxr": {
-    "source": "iana"
-  },
-  "application/vnd.dynageo": {
-    "source": "iana",
-    "extensions": ["geo"]
-  },
-  "application/vnd.dzr": {
-    "source": "iana"
-  },
-  "application/vnd.easykaraoke.cdgdownload": {
-    "source": "iana"
-  },
-  "application/vnd.ecdis-update": {
-    "source": "iana"
-  },
-  "application/vnd.ecip.rlp": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.chart": {
-    "source": "iana",
-    "extensions": ["mag"]
-  },
-  "application/vnd.ecowin.filerequest": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.fileupdate": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.series": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.seriesrequest": {
-    "source": "iana"
-  },
-  "application/vnd.ecowin.seriesupdate": {
-    "source": "iana"
-  },
-  "application/vnd.efi.img": {
-    "source": "iana"
-  },
-  "application/vnd.efi.iso": {
-    "source": "iana"
-  },
-  "application/vnd.emclient.accessrequest+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.enliven": {
-    "source": "iana",
-    "extensions": ["nml"]
-  },
-  "application/vnd.enphase.envoy": {
-    "source": "iana"
-  },
-  "application/vnd.eprints.data+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.epson.esf": {
-    "source": "iana",
-    "extensions": ["esf"]
-  },
-  "application/vnd.epson.msf": {
-    "source": "iana",
-    "extensions": ["msf"]
-  },
-  "application/vnd.epson.quickanime": {
-    "source": "iana",
-    "extensions": ["qam"]
-  },
-  "application/vnd.epson.salt": {
-    "source": "iana",
-    "extensions": ["slt"]
-  },
-  "application/vnd.epson.ssf": {
-    "source": "iana",
-    "extensions": ["ssf"]
-  },
-  "application/vnd.ericsson.quickcall": {
-    "source": "iana"
-  },
-  "application/vnd.espass-espass+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.eszigno3+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["es3","et3"]
-  },
-  "application/vnd.etsi.aoc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.asic-e+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.etsi.asic-s+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.etsi.cug+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvcommand+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvdiscovery+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvprofile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvsad-bc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvsad-cod+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvsad-npvr+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvservice+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvsync+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.iptvueprofile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.mcid+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.mheg5": {
-    "source": "iana"
-  },
-  "application/vnd.etsi.overload-control-policy-dataset+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.pstn+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.sci+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.simservs+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.timestamp-token": {
-    "source": "iana"
-  },
-  "application/vnd.etsi.tsl+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.etsi.tsl.der": {
-    "source": "iana"
-  },
-  "application/vnd.eudora.data": {
-    "source": "iana"
-  },
-  "application/vnd.evolv.ecig.profile": {
-    "source": "iana"
-  },
-  "application/vnd.evolv.ecig.settings": {
-    "source": "iana"
-  },
-  "application/vnd.evolv.ecig.theme": {
-    "source": "iana"
-  },
-  "application/vnd.exstream-empower+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.exstream-package": {
-    "source": "iana"
-  },
-  "application/vnd.ezpix-album": {
-    "source": "iana",
-    "extensions": ["ez2"]
-  },
-  "application/vnd.ezpix-package": {
-    "source": "iana",
-    "extensions": ["ez3"]
-  },
-  "application/vnd.f-secure.mobile": {
-    "source": "iana"
-  },
-  "application/vnd.fastcopy-disk-image": {
-    "source": "iana"
-  },
-  "application/vnd.fdf": {
-    "source": "iana",
-    "extensions": ["fdf"]
-  },
-  "application/vnd.fdsn.mseed": {
-    "source": "iana",
-    "extensions": ["mseed"]
-  },
-  "application/vnd.fdsn.seed": {
-    "source": "iana",
-    "extensions": ["seed","dataless"]
-  },
-  "application/vnd.ffsns": {
-    "source": "iana"
-  },
-  "application/vnd.ficlab.flb+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.filmit.zfc": {
-    "source": "iana"
-  },
-  "application/vnd.fints": {
-    "source": "iana"
-  },
-  "application/vnd.firemonkeys.cloudcell": {
-    "source": "iana"
-  },
-  "application/vnd.flographit": {
-    "source": "iana",
-    "extensions": ["gph"]
-  },
-  "application/vnd.fluxtime.clip": {
-    "source": "iana",
-    "extensions": ["ftc"]
-  },
-  "application/vnd.font-fontforge-sfd": {
-    "source": "iana"
-  },
-  "application/vnd.framemaker": {
-    "source": "iana",
-    "extensions": ["fm","frame","maker","book"]
-  },
-  "application/vnd.frogans.fnc": {
-    "source": "iana",
-    "extensions": ["fnc"]
-  },
-  "application/vnd.frogans.ltf": {
-    "source": "iana",
-    "extensions": ["ltf"]
-  },
-  "application/vnd.fsc.weblaunch": {
-    "source": "iana",
-    "extensions": ["fsc"]
-  },
-  "application/vnd.fujitsu.oasys": {
-    "source": "iana",
-    "extensions": ["oas"]
-  },
-  "application/vnd.fujitsu.oasys2": {
-    "source": "iana",
-    "extensions": ["oa2"]
-  },
-  "application/vnd.fujitsu.oasys3": {
-    "source": "iana",
-    "extensions": ["oa3"]
-  },
-  "application/vnd.fujitsu.oasysgp": {
-    "source": "iana",
-    "extensions": ["fg5"]
-  },
-  "application/vnd.fujitsu.oasysprs": {
-    "source": "iana",
-    "extensions": ["bh2"]
-  },
-  "application/vnd.fujixerox.art-ex": {
-    "source": "iana"
-  },
-  "application/vnd.fujixerox.art4": {
-    "source": "iana"
-  },
-  "application/vnd.fujixerox.ddd": {
-    "source": "iana",
-    "extensions": ["ddd"]
-  },
-  "application/vnd.fujixerox.docuworks": {
-    "source": "iana",
-    "extensions": ["xdw"]
-  },
-  "application/vnd.fujixerox.docuworks.binder": {
-    "source": "iana",
-    "extensions": ["xbd"]
-  },
-  "application/vnd.fujixerox.docuworks.container": {
-    "source": "iana"
-  },
-  "application/vnd.fujixerox.hbpl": {
-    "source": "iana"
-  },
-  "application/vnd.fut-misnet": {
-    "source": "iana"
-  },
-  "application/vnd.futoin+cbor": {
-    "source": "iana"
-  },
-  "application/vnd.futoin+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.fuzzysheet": {
-    "source": "iana",
-    "extensions": ["fzs"]
-  },
-  "application/vnd.genomatix.tuxedo": {
-    "source": "iana",
-    "extensions": ["txd"]
-  },
-  "application/vnd.gentics.grd+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.geo+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.geocube+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.geogebra.file": {
-    "source": "iana",
-    "extensions": ["ggb"]
-  },
-  "application/vnd.geogebra.tool": {
-    "source": "iana",
-    "extensions": ["ggt"]
-  },
-  "application/vnd.geometry-explorer": {
-    "source": "iana",
-    "extensions": ["gex","gre"]
-  },
-  "application/vnd.geonext": {
-    "source": "iana",
-    "extensions": ["gxt"]
-  },
-  "application/vnd.geoplan": {
-    "source": "iana",
-    "extensions": ["g2w"]
-  },
-  "application/vnd.geospace": {
-    "source": "iana",
-    "extensions": ["g3w"]
-  },
-  "application/vnd.gerber": {
-    "source": "iana"
-  },
-  "application/vnd.globalplatform.card-content-mgt": {
-    "source": "iana"
-  },
-  "application/vnd.globalplatform.card-content-mgt-response": {
-    "source": "iana"
-  },
-  "application/vnd.gmx": {
-    "source": "iana",
-    "extensions": ["gmx"]
-  },
-  "application/vnd.google-apps.document": {
-    "compressible": false,
-    "extensions": ["gdoc"]
-  },
-  "application/vnd.google-apps.presentation": {
-    "compressible": false,
-    "extensions": ["gslides"]
-  },
-  "application/vnd.google-apps.spreadsheet": {
-    "compressible": false,
-    "extensions": ["gsheet"]
-  },
-  "application/vnd.google-earth.kml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["kml"]
-  },
-  "application/vnd.google-earth.kmz": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["kmz"]
-  },
-  "application/vnd.gov.sk.e-form+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.gov.sk.e-form+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.gov.sk.xmldatacontainer+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.grafeq": {
-    "source": "iana",
-    "extensions": ["gqf","gqs"]
-  },
-  "application/vnd.gridmp": {
-    "source": "iana"
-  },
-  "application/vnd.groove-account": {
-    "source": "iana",
-    "extensions": ["gac"]
-  },
-  "application/vnd.groove-help": {
-    "source": "iana",
-    "extensions": ["ghf"]
-  },
-  "application/vnd.groove-identity-message": {
-    "source": "iana",
-    "extensions": ["gim"]
-  },
-  "application/vnd.groove-injector": {
-    "source": "iana",
-    "extensions": ["grv"]
-  },
-  "application/vnd.groove-tool-message": {
-    "source": "iana",
-    "extensions": ["gtm"]
-  },
-  "application/vnd.groove-tool-template": {
-    "source": "iana",
-    "extensions": ["tpl"]
-  },
-  "application/vnd.groove-vcard": {
-    "source": "iana",
-    "extensions": ["vcg"]
-  },
-  "application/vnd.hal+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hal+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["hal"]
-  },
-  "application/vnd.handheld-entertainment+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["zmm"]
-  },
-  "application/vnd.hbci": {
-    "source": "iana",
-    "extensions": ["hbci"]
-  },
-  "application/vnd.hc+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hcl-bireports": {
-    "source": "iana"
-  },
-  "application/vnd.hdt": {
-    "source": "iana"
-  },
-  "application/vnd.heroku+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hhe.lesson-player": {
-    "source": "iana",
-    "extensions": ["les"]
-  },
-  "application/vnd.hp-hpgl": {
-    "source": "iana",
-    "extensions": ["hpgl"]
-  },
-  "application/vnd.hp-hpid": {
-    "source": "iana",
-    "extensions": ["hpid"]
-  },
-  "application/vnd.hp-hps": {
-    "source": "iana",
-    "extensions": ["hps"]
-  },
-  "application/vnd.hp-jlyt": {
-    "source": "iana",
-    "extensions": ["jlt"]
-  },
-  "application/vnd.hp-pcl": {
-    "source": "iana",
-    "extensions": ["pcl"]
-  },
-  "application/vnd.hp-pclxl": {
-    "source": "iana",
-    "extensions": ["pclxl"]
-  },
-  "application/vnd.httphone": {
-    "source": "iana"
-  },
-  "application/vnd.hydrostatix.sof-data": {
-    "source": "iana",
-    "extensions": ["sfd-hdstx"]
-  },
-  "application/vnd.hyper+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hyper-item+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hyperdrive+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.hzn-3d-crossword": {
-    "source": "iana"
-  },
-  "application/vnd.ibm.afplinedata": {
-    "source": "iana"
-  },
-  "application/vnd.ibm.electronic-media": {
-    "source": "iana"
-  },
-  "application/vnd.ibm.minipay": {
-    "source": "iana",
-    "extensions": ["mpy"]
-  },
-  "application/vnd.ibm.modcap": {
-    "source": "iana",
-    "extensions": ["afp","listafp","list3820"]
-  },
-  "application/vnd.ibm.rights-management": {
-    "source": "iana",
-    "extensions": ["irm"]
-  },
-  "application/vnd.ibm.secure-container": {
-    "source": "iana",
-    "extensions": ["sc"]
-  },
-  "application/vnd.iccprofile": {
-    "source": "iana",
-    "extensions": ["icc","icm"]
-  },
-  "application/vnd.ieee.1905": {
-    "source": "iana"
-  },
-  "application/vnd.igloader": {
-    "source": "iana",
-    "extensions": ["igl"]
-  },
-  "application/vnd.imagemeter.folder+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.imagemeter.image+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.immervision-ivp": {
-    "source": "iana",
-    "extensions": ["ivp"]
-  },
-  "application/vnd.immervision-ivu": {
-    "source": "iana",
-    "extensions": ["ivu"]
-  },
-  "application/vnd.ims.imsccv1p1": {
-    "source": "iana"
-  },
-  "application/vnd.ims.imsccv1p2": {
-    "source": "iana"
-  },
-  "application/vnd.ims.imsccv1p3": {
-    "source": "iana"
-  },
-  "application/vnd.ims.lis.v2.result+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolproxy+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolproxy.id+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolsettings+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ims.lti.v2.toolsettings.simple+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.informedcontrol.rms+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.informix-visionary": {
-    "source": "iana"
-  },
-  "application/vnd.infotech.project": {
-    "source": "iana"
-  },
-  "application/vnd.infotech.project+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.innopath.wamp.notification": {
-    "source": "iana"
-  },
-  "application/vnd.insors.igm": {
-    "source": "iana",
-    "extensions": ["igm"]
-  },
-  "application/vnd.intercon.formnet": {
-    "source": "iana",
-    "extensions": ["xpw","xpx"]
-  },
-  "application/vnd.intergeo": {
-    "source": "iana",
-    "extensions": ["i2g"]
-  },
-  "application/vnd.intertrust.digibox": {
-    "source": "iana"
-  },
-  "application/vnd.intertrust.nncp": {
-    "source": "iana"
-  },
-  "application/vnd.intu.qbo": {
-    "source": "iana",
-    "extensions": ["qbo"]
-  },
-  "application/vnd.intu.qfx": {
-    "source": "iana",
-    "extensions": ["qfx"]
-  },
-  "application/vnd.iptc.g2.catalogitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.conceptitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.knowledgeitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.newsitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.newsmessage+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.packageitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.iptc.g2.planningitem+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ipunplugged.rcprofile": {
-    "source": "iana",
-    "extensions": ["rcprofile"]
-  },
-  "application/vnd.irepository.package+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["irp"]
-  },
-  "application/vnd.is-xpr": {
-    "source": "iana",
-    "extensions": ["xpr"]
-  },
-  "application/vnd.isac.fcs": {
-    "source": "iana",
-    "extensions": ["fcs"]
-  },
-  "application/vnd.iso11783-10+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.jam": {
-    "source": "iana",
-    "extensions": ["jam"]
-  },
-  "application/vnd.japannet-directory-service": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-jpnstore-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-payment-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-registration": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-registration-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-setstore-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-verification": {
-    "source": "iana"
-  },
-  "application/vnd.japannet-verification-wakeup": {
-    "source": "iana"
-  },
-  "application/vnd.jcp.javame.midlet-rms": {
-    "source": "iana",
-    "extensions": ["rms"]
-  },
-  "application/vnd.jisp": {
-    "source": "iana",
-    "extensions": ["jisp"]
-  },
-  "application/vnd.joost.joda-archive": {
-    "source": "iana",
-    "extensions": ["joda"]
-  },
-  "application/vnd.jsk.isdn-ngn": {
-    "source": "iana"
-  },
-  "application/vnd.kahootz": {
-    "source": "iana",
-    "extensions": ["ktz","ktr"]
-  },
-  "application/vnd.kde.karbon": {
-    "source": "iana",
-    "extensions": ["karbon"]
-  },
-  "application/vnd.kde.kchart": {
-    "source": "iana",
-    "extensions": ["chrt"]
-  },
-  "application/vnd.kde.kformula": {
-    "source": "iana",
-    "extensions": ["kfo"]
-  },
-  "application/vnd.kde.kivio": {
-    "source": "iana",
-    "extensions": ["flw"]
-  },
-  "application/vnd.kde.kontour": {
-    "source": "iana",
-    "extensions": ["kon"]
-  },
-  "application/vnd.kde.kpresenter": {
-    "source": "iana",
-    "extensions": ["kpr","kpt"]
-  },
-  "application/vnd.kde.kspread": {
-    "source": "iana",
-    "extensions": ["ksp"]
-  },
-  "application/vnd.kde.kword": {
-    "source": "iana",
-    "extensions": ["kwd","kwt"]
-  },
-  "application/vnd.kenameaapp": {
-    "source": "iana",
-    "extensions": ["htke"]
-  },
-  "application/vnd.kidspiration": {
-    "source": "iana",
-    "extensions": ["kia"]
-  },
-  "application/vnd.kinar": {
-    "source": "iana",
-    "extensions": ["kne","knp"]
-  },
-  "application/vnd.koan": {
-    "source": "iana",
-    "extensions": ["skp","skd","skt","skm"]
-  },
-  "application/vnd.kodak-descriptor": {
-    "source": "iana",
-    "extensions": ["sse"]
-  },
-  "application/vnd.las": {
-    "source": "iana"
-  },
-  "application/vnd.las.las+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.las.las+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["lasxml"]
-  },
-  "application/vnd.laszip": {
-    "source": "iana"
-  },
-  "application/vnd.leap+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.liberty-request+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.llamagraphics.life-balance.desktop": {
-    "source": "iana",
-    "extensions": ["lbd"]
-  },
-  "application/vnd.llamagraphics.life-balance.exchange+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["lbe"]
-  },
-  "application/vnd.logipipe.circuit+zip": {
-    "source": "iana",
-    "compressible": false
-  },
-  "application/vnd.loom": {
-    "source": "iana"
-  },
-  "application/vnd.lotus-1-2-3": {
-    "source": "iana",
-    "extensions": ["123"]
-  },
-  "application/vnd.lotus-approach": {
-    "source": "iana",
-    "extensions": ["apr"]
-  },
-  "application/vnd.lotus-freelance": {
-    "source": "iana",
-    "extensions": ["pre"]
-  },
-  "application/vnd.lotus-notes": {
-    "source": "iana",
-    "extensions": ["nsf"]
-  },
-  "application/vnd.lotus-organizer": {
-    "source": "iana",
-    "extensions": ["org"]
-  },
-  "application/vnd.lotus-screencam": {
-    "source": "iana",
-    "extensions": ["scm"]
-  },
-  "application/vnd.lotus-wordpro": {
-    "source": "iana",
-    "extensions": ["lwp"]
-  },
-  "application/vnd.macports.portpkg": {
-    "source": "iana",
-    "extensions": ["portpkg"]
-  },
-  "application/vnd.mapbox-vector-tile": {
-    "source": "iana"
-  },
-  "application/vnd.marlin.drm.actiontoken+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.marlin.drm.conftoken+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.marlin.drm.license+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.marlin.drm.mdcf": {
-    "source": "iana"
-  },
-  "application/vnd.mason+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.maxmind.maxmind-db": {
-    "source": "iana"
-  },
-  "application/vnd.mcd": {
-    "source": "iana",
-    "extensions": ["mcd"]
-  },
-  "application/vnd.medcalcdata": {
-    "source": "iana",
-    "extensions": ["mc1"]
-  },
-  "application/vnd.mediastation.cdkey": {
-    "source": "iana",
-    "extensions": ["cdkey"]
-  },
-  "application/vnd.meridian-slingshot": {
-    "source": "iana"
-  },
-  "application/vnd.mfer": {
-    "source": "iana",
-    "extensions": ["mwf"]
-  },
-  "application/vnd.mfmp": {
-    "source": "iana",
-    "extensions": ["mfm"]
-  },
-  "application/vnd.micro+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.micrografx.flo": {
-    "source": "iana",
-    "extensions": ["flo"]
-  },
-  "application/vnd.micrografx.igx": {
-    "source": "iana",
-    "extensions": ["igx"]
-  },
-  "application/vnd.microsoft.portable-executable": {
-    "source": "iana"
-  },
-  "application/vnd.microsoft.windows.thumbnail-cache": {
-    "source": "iana"
-  },
-  "application/vnd.miele+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.mif": {
-    "source": "iana",
-    "extensions": ["mif"]
-  },
-  "application/vnd.minisoft-hp3000-save": {
-    "source": "iana"
-  },
-  "application/vnd.mitsubishi.misty-guard.trustweb": {
-    "source": "iana"
-  },
-  "application/vnd.mobius.daf": {
-    "source": "iana",
-    "extensions": ["daf"]
-  },
-  "application/vnd.mobius.dis": {
-    "source": "iana",
-    "extensions": ["dis"]
-  },
-  "application/vnd.mobius.mbk": {
-    "source": "iana",
-    "extensions": ["mbk"]
-  },
-  "application/vnd.mobius.mqy": {
-    "source": "iana",
-    "extensions": ["mqy"]
-  },
-  "application/vnd.mobius.msl": {
-    "source": "iana",
-    "extensions": ["msl"]
-  },
-  "application/vnd.mobius.plc": {
-    "source": "iana",
-    "extensions": ["plc"]
-  },
-  "application/vnd.mobius.txf": {
-    "source": "iana",
-    "extensions": ["txf"]
-  },
-  "application/vnd.mophun.application": {
-    "source": "iana",
-    "extensions": ["mpn"]
-  },
-  "application/vnd.mophun.certificate": {
-    "source": "iana",
-    "extensions": ["mpc"]
-  },
-  "application/vnd.motorola.flexsuite": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.adsi": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.fis": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.gotap": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.kmr": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.ttc": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.flexsuite.wem": {
-    "source": "iana"
-  },
-  "application/vnd.motorola.iprm": {
-    "source": "iana"
-  },
-  "application/vnd.mozilla.xul+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xul"]
-  },
-  "application/vnd.ms-3mfdocument": {
-    "source": "iana"
-  },
-  "application/vnd.ms-artgalry": {
-    "source": "iana",
-    "extensions": ["cil"]
-  },
-  "application/vnd.ms-asf": {
-    "source": "iana"
-  },
-  "application/vnd.ms-cab-compressed": {
-    "source": "iana",
-    "extensions": ["cab"]
-  },
-  "application/vnd.ms-color.iccprofile": {
-    "source": "apache"
-  },
-  "application/vnd.ms-excel": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["xls","xlm","xla","xlc","xlt","xlw"]
-  },
-  "application/vnd.ms-excel.addin.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["xlam"]
-  },
-  "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["xlsb"]
-  },
-  "application/vnd.ms-excel.sheet.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["xlsm"]
-  },
-  "application/vnd.ms-excel.template.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["xltm"]
-  },
-  "application/vnd.ms-fontobject": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["eot"]
-  },
-  "application/vnd.ms-htmlhelp": {
-    "source": "iana",
-    "extensions": ["chm"]
-  },
-  "application/vnd.ms-ims": {
-    "source": "iana",
-    "extensions": ["ims"]
-  },
-  "application/vnd.ms-lrm": {
-    "source": "iana",
-    "extensions": ["lrm"]
-  },
-  "application/vnd.ms-office.activex+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ms-officetheme": {
-    "source": "iana",
-    "extensions": ["thmx"]
-  },
-  "application/vnd.ms-opentype": {
-    "source": "apache",
-    "compressible": true
-  },
-  "application/vnd.ms-outlook": {
-    "compressible": false,
-    "extensions": ["msg"]
-  },
-  "application/vnd.ms-package.obfuscated-opentype": {
-    "source": "apache"
-  },
-  "application/vnd.ms-pki.seccat": {
-    "source": "apache",
-    "extensions": ["cat"]
-  },
-  "application/vnd.ms-pki.stl": {
-    "source": "apache",
-    "extensions": ["stl"]
-  },
-  "application/vnd.ms-playready.initiator+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ms-powerpoint": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["ppt","pps","pot"]
-  },
-  "application/vnd.ms-powerpoint.addin.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["ppam"]
-  },
-  "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["pptm"]
-  },
-  "application/vnd.ms-powerpoint.slide.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["sldm"]
-  },
-  "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["ppsm"]
-  },
-  "application/vnd.ms-powerpoint.template.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["potm"]
-  },
-  "application/vnd.ms-printdevicecapabilities+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ms-printing.printticket+xml": {
-    "source": "apache",
-    "compressible": true
-  },
-  "application/vnd.ms-printschematicket+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.ms-project": {
-    "source": "iana",
-    "extensions": ["mpp","mpt"]
-  },
-  "application/vnd.ms-tnef": {
-    "source": "iana"
-  },
-  "application/vnd.ms-windows.devicepairing": {
-    "source": "iana"
-  },
-  "application/vnd.ms-windows.nwprinting.oob": {
-    "source": "iana"
-  },
-  "application/vnd.ms-windows.printerpairing": {
-    "source": "iana"
-  },
-  "application/vnd.ms-windows.wsd.oob": {
-    "source": "iana"
-  },
-  "application/vnd.ms-wmdrm.lic-chlg-req": {
-    "source": "iana"
-  },
-  "application/vnd.ms-wmdrm.lic-resp": {
-    "source": "iana"
-  },
-  "application/vnd.ms-wmdrm.meter-chlg-req": {
-    "source": "iana"
-  },
-  "application/vnd.ms-wmdrm.meter-resp": {
-    "source": "iana"
-  },
-  "application/vnd.ms-word.document.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["docm"]
-  },
-  "application/vnd.ms-word.template.macroenabled.12": {
-    "source": "iana",
-    "extensions": ["dotm"]
-  },
-  "application/vnd.ms-works": {
-    "source": "iana",
-    "extensions": ["wps","wks","wcm","wdb"]
-  },
-  "application/vnd.ms-wpl": {
-    "source": "iana",
-    "extensions": ["wpl"]
-  },
-  "application/vnd.ms-xpsdocument": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["xps"]
-  },
-  "application/vnd.msa-disk-image": {
-    "source": "iana"
-  },
-  "application/vnd.mseq": {
-    "source": "iana",
-    "extensions": ["mseq"]
-  },
-  "application/vnd.msign": {
-    "source": "iana"
-  },
-  "application/vnd.multiad.creator": {
-    "source": "iana"
-  },
-  "application/vnd.multiad.creator.cif": {
-    "source": "iana"
-  },
-  "application/vnd.music-niff": {
-    "source": "iana"
-  },
-  "application/vnd.musician": {
-    "source": "iana",
-    "extensions": ["mus"]
-  },
-  "application/vnd.muvee.style": {
-    "source": "iana",
-    "extensions": ["msty"]
-  },
-  "application/vnd.mynfc": {
-    "source": "iana",
-    "extensions": ["taglet"]
-  },
-  "application/vnd.ncd.control": {
-    "source": "iana"
-  },
-  "application/vnd.ncd.reference": {
-    "source": "iana"
-  },
-  "application/vnd.nearst.inv+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nervana": {
-    "source": "iana"
-  },
-  "application/vnd.netfpx": {
-    "source": "iana"
-  },
-  "application/vnd.neurolanguage.nlu": {
-    "source": "iana",
-    "extensions": ["nlu"]
-  },
-  "application/vnd.nimn": {
-    "source": "iana"
-  },
-  "application/vnd.nintendo.nitro.rom": {
-    "source": "iana"
-  },
-  "application/vnd.nintendo.snes.rom": {
-    "source": "iana"
-  },
-  "application/vnd.nitf": {
-    "source": "iana",
-    "extensions": ["ntf","nitf"]
-  },
-  "application/vnd.noblenet-directory": {
-    "source": "iana",
-    "extensions": ["nnd"]
-  },
-  "application/vnd.noblenet-sealer": {
-    "source": "iana",
-    "extensions": ["nns"]
-  },
-  "application/vnd.noblenet-web": {
-    "source": "iana",
-    "extensions": ["nnw"]
-  },
-  "application/vnd.nokia.catalogs": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.conml+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.conml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.iptv.config+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.isds-radio-presets": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.landmark+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.landmark+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.landmarkcollection+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.n-gage.ac+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ac"]
-  },
-  "application/vnd.nokia.n-gage.data": {
-    "source": "iana",
-    "extensions": ["ngdat"]
-  },
-  "application/vnd.nokia.n-gage.symbian.install": {
-    "source": "iana",
-    "extensions": ["n-gage"]
-  },
-  "application/vnd.nokia.ncd": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.pcd+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.nokia.pcd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.nokia.radio-preset": {
-    "source": "iana",
-    "extensions": ["rpst"]
-  },
-  "application/vnd.nokia.radio-presets": {
-    "source": "iana",
-    "extensions": ["rpss"]
-  },
-  "application/vnd.novadigm.edm": {
-    "source": "iana",
-    "extensions": ["edm"]
-  },
-  "application/vnd.novadigm.edx": {
-    "source": "iana",
-    "extensions": ["edx"]
-  },
-  "application/vnd.novadigm.ext": {
-    "source": "iana",
-    "extensions": ["ext"]
-  },
-  "application/vnd.ntt-local.content-share": {
-    "source": "iana"
-  },
-  "application/vnd.ntt-local.file-transfer": {
-    "source": "iana"
-  },
-  "application/vnd.ntt-local.ogw_remote-access": {
-    "source": "iana"
-  },
-  "application/vnd.ntt-local.sip-ta_remote": {
-    "source": "iana"
-  },
-  "application/vnd.ntt-local.sip-ta_tcp_stream": {
-    "source": "iana"
-  },
-  "application/vnd.oasis.opendocument.chart": {
-    "source": "iana",
-    "extensions": ["odc"]
-  },
-  "application/vnd.oasis.opendocument.chart-template": {
-    "source": "iana",
-    "extensions": ["otc"]
-  },
-  "application/vnd.oasis.opendocument.database": {
-    "source": "iana",
-    "extensions": ["odb"]
-  },
-  "application/vnd.oasis.opendocument.formula": {
-    "source": "iana",
-    "extensions": ["odf"]
-  },
-  "application/vnd.oasis.opendocument.formula-template": {
-    "source": "iana",
-    "extensions": ["odft"]
-  },
-  "application/vnd.oasis.opendocument.graphics": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["odg"]
-  },
-  "application/vnd.oasis.opendocument.graphics-template": {
-    "source": "iana",
-    "extensions": ["otg"]
-  },
-  "application/vnd.oasis.opendocument.image": {
-    "source": "iana",
-    "extensions": ["odi"]
-  },
-  "application/vnd.oasis.opendocument.image-template": {
-    "source": "iana",
-    "extensions": ["oti"]
-  },
-  "application/vnd.oasis.opendocument.presentation": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["odp"]
-  },
-  "application/vnd.oasis.opendocument.presentation-template": {
-    "source": "iana",
-    "extensions": ["otp"]
-  },
-  "application/vnd.oasis.opendocument.spreadsheet": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["ods"]
-  },
-  "application/vnd.oasis.opendocument.spreadsheet-template": {
-    "source": "iana",
-    "extensions": ["ots"]
-  },
-  "application/vnd.oasis.opendocument.text": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["odt"]
-  },
-  "application/vnd.oasis.opendocument.text-master": {
-    "source": "iana",
-    "extensions": ["odm"]
-  },
-  "application/vnd.oasis.opendocument.text-template": {
-    "source": "iana",
-    "extensions": ["ott"]
-  },
-  "application/vnd.oasis.opendocument.text-web": {
-    "source": "iana",
-    "extensions": ["oth"]
-  },
-  "application/vnd.obn": {
-    "source": "iana"
-  },
-  "application/vnd.ocf+cbor": {
-    "source": "iana"
-  },
-  "application/vnd.oci.image.manifest.v1+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oftn.l10n+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.contentaccessdownload+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.contentaccessstreaming+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.cspg-hexbinary": {
-    "source": "iana"
-  },
-  "application/vnd.oipf.dae.svg+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.dae.xhtml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.mippvcontrolmessage+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.pae.gem": {
-    "source": "iana"
-  },
-  "application/vnd.oipf.spdiscovery+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.spdlist+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.ueprofile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oipf.userprofile+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.olpc-sugar": {
-    "source": "iana",
-    "extensions": ["xo"]
-  },
-  "application/vnd.oma-scws-config": {
-    "source": "iana"
-  },
-  "application/vnd.oma-scws-http-request": {
-    "source": "iana"
-  },
-  "application/vnd.oma-scws-http-response": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.drm-trigger+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.imd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.ltkm": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.notification+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.provisioningtrigger": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.sgboot": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.sgdd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.sgdu": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.simple-symbol-container": {
-    "source": "iana"
-  },
-  "application/vnd.oma.bcast.smartcard-trigger+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.sprov+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.bcast.stkm": {
-    "source": "iana"
-  },
-  "application/vnd.oma.cab-address-book+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.cab-feature-handler+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.cab-pcc+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.cab-subs-invite+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.cab-user-prefs+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.dcd": {
-    "source": "iana"
-  },
-  "application/vnd.oma.dcdc": {
-    "source": "iana"
-  },
-  "application/vnd.oma.dd2+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dd2"]
-  },
-  "application/vnd.oma.drm.risd+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.group-usage-list+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.lwm2m+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.lwm2m+tlv": {
-    "source": "iana"
-  },
-  "application/vnd.oma.pal+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.detailed-progress-report+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.final-report+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.groups+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.invocation-descriptor+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.poc.optimized-progress-report+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.push": {
-    "source": "iana"
-  },
-  "application/vnd.oma.scidm.messages+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oma.xcap-directory+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.omads-email+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/vnd.omads-file+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/vnd.omads-folder+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/vnd.omaloc-supl-init": {
-    "source": "iana"
-  },
-  "application/vnd.onepager": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertamp": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertamx": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertat": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertatp": {
-    "source": "iana"
-  },
-  "application/vnd.onepagertatx": {
-    "source": "iana"
-  },
-  "application/vnd.openblox.game+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["obgx"]
-  },
-  "application/vnd.openblox.game-binary": {
-    "source": "iana"
-  },
-  "application/vnd.openeye.oeb": {
-    "source": "iana"
-  },
-  "application/vnd.openofficeorg.extension": {
-    "source": "apache",
-    "extensions": ["oxt"]
-  },
-  "application/vnd.openstreetmap.data+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["osm"]
-  },
-  "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawing+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["pptx"]
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slide": {
-    "source": "iana",
-    "extensions": ["sldx"]
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
-    "source": "iana",
-    "extensions": ["ppsx"]
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.template": {
-    "source": "iana",
-    "extensions": ["potx"]
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["xlsx"]
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
-    "source": "iana",
-    "extensions": ["xltx"]
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.theme+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.vmldrawing": {
-    "source": "iana"
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["docx"]
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
-    "source": "iana",
-    "extensions": ["dotx"]
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-package.core-properties+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.openxmlformats-package.relationships+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oracle.resource+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.orange.indata": {
-    "source": "iana"
-  },
-  "application/vnd.osa.netdeploy": {
-    "source": "iana"
-  },
-  "application/vnd.osgeo.mapguide.package": {
-    "source": "iana",
-    "extensions": ["mgp"]
-  },
-  "application/vnd.osgi.bundle": {
-    "source": "iana"
-  },
-  "application/vnd.osgi.dp": {
-    "source": "iana",
-    "extensions": ["dp"]
-  },
-  "application/vnd.osgi.subsystem": {
-    "source": "iana",
-    "extensions": ["esa"]
-  },
-  "application/vnd.otps.ct-kip+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.oxli.countgraph": {
-    "source": "iana"
-  },
-  "application/vnd.pagerduty+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.palm": {
-    "source": "iana",
-    "extensions": ["pdb","pqa","oprc"]
-  },
-  "application/vnd.panoply": {
-    "source": "iana"
-  },
-  "application/vnd.paos.xml": {
-    "source": "iana"
-  },
-  "application/vnd.patentdive": {
-    "source": "iana"
-  },
-  "application/vnd.patientecommsdoc": {
-    "source": "iana"
-  },
-  "application/vnd.pawaafile": {
-    "source": "iana",
-    "extensions": ["paw"]
-  },
-  "application/vnd.pcos": {
-    "source": "iana"
-  },
-  "application/vnd.pg.format": {
-    "source": "iana",
-    "extensions": ["str"]
-  },
-  "application/vnd.pg.osasli": {
-    "source": "iana",
-    "extensions": ["ei6"]
-  },
-  "application/vnd.piaccess.application-licence": {
-    "source": "iana"
-  },
-  "application/vnd.picsel": {
-    "source": "iana",
-    "extensions": ["efif"]
-  },
-  "application/vnd.pmi.widget": {
-    "source": "iana",
-    "extensions": ["wg"]
-  },
-  "application/vnd.poc.group-advertisement+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.pocketlearn": {
-    "source": "iana",
-    "extensions": ["plf"]
-  },
-  "application/vnd.powerbuilder6": {
-    "source": "iana",
-    "extensions": ["pbd"]
-  },
-  "application/vnd.powerbuilder6-s": {
-    "source": "iana"
-  },
-  "application/vnd.powerbuilder7": {
-    "source": "iana"
-  },
-  "application/vnd.powerbuilder7-s": {
-    "source": "iana"
-  },
-  "application/vnd.powerbuilder75": {
-    "source": "iana"
-  },
-  "application/vnd.powerbuilder75-s": {
-    "source": "iana"
-  },
-  "application/vnd.preminet": {
-    "source": "iana"
-  },
-  "application/vnd.previewsystems.box": {
-    "source": "iana",
-    "extensions": ["box"]
-  },
-  "application/vnd.proteus.magazine": {
-    "source": "iana",
-    "extensions": ["mgz"]
-  },
-  "application/vnd.psfs": {
-    "source": "iana"
-  },
-  "application/vnd.publishare-delta-tree": {
-    "source": "iana",
-    "extensions": ["qps"]
-  },
-  "application/vnd.pvi.ptid1": {
-    "source": "iana",
-    "extensions": ["ptid"]
-  },
-  "application/vnd.pwg-multiplexed": {
-    "source": "iana"
-  },
-  "application/vnd.pwg-xhtml-print+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.qualcomm.brew-app-res": {
-    "source": "iana"
-  },
-  "application/vnd.quarantainenet": {
-    "source": "iana"
-  },
-  "application/vnd.quark.quarkxpress": {
-    "source": "iana",
-    "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"]
-  },
-  "application/vnd.quobject-quoxdocument": {
-    "source": "iana"
-  },
-  "application/vnd.radisys.moml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit-conf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit-conn+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit-dialog+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-audit-stream+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-conf+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-base+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-fax-detect+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-group+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-speech+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.radisys.msml-dialog-transform+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.rainstor.data": {
-    "source": "iana"
-  },
-  "application/vnd.rapid": {
-    "source": "iana"
-  },
-  "application/vnd.rar": {
-    "source": "iana"
-  },
-  "application/vnd.realvnc.bed": {
-    "source": "iana",
-    "extensions": ["bed"]
-  },
-  "application/vnd.recordare.musicxml": {
-    "source": "iana",
-    "extensions": ["mxl"]
-  },
-  "application/vnd.recordare.musicxml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["musicxml"]
-  },
-  "application/vnd.renlearn.rlprint": {
-    "source": "iana"
-  },
-  "application/vnd.restful+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.rig.cryptonote": {
-    "source": "iana",
-    "extensions": ["cryptonote"]
-  },
-  "application/vnd.rim.cod": {
-    "source": "apache",
-    "extensions": ["cod"]
-  },
-  "application/vnd.rn-realmedia": {
-    "source": "apache",
-    "extensions": ["rm"]
-  },
-  "application/vnd.rn-realmedia-vbr": {
-    "source": "apache",
-    "extensions": ["rmvb"]
-  },
-  "application/vnd.route66.link66+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["link66"]
-  },
-  "application/vnd.rs-274x": {
-    "source": "iana"
-  },
-  "application/vnd.ruckus.download": {
-    "source": "iana"
-  },
-  "application/vnd.s3sms": {
-    "source": "iana"
-  },
-  "application/vnd.sailingtracker.track": {
-    "source": "iana",
-    "extensions": ["st"]
-  },
-  "application/vnd.sar": {
-    "source": "iana"
-  },
-  "application/vnd.sbm.cid": {
-    "source": "iana"
-  },
-  "application/vnd.sbm.mid2": {
-    "source": "iana"
-  },
-  "application/vnd.scribus": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.3df": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.csf": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.doc": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.eml": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.mht": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.net": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.ppt": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.tiff": {
-    "source": "iana"
-  },
-  "application/vnd.sealed.xls": {
-    "source": "iana"
-  },
-  "application/vnd.sealedmedia.softseal.html": {
-    "source": "iana"
-  },
-  "application/vnd.sealedmedia.softseal.pdf": {
-    "source": "iana"
-  },
-  "application/vnd.seemail": {
-    "source": "iana",
-    "extensions": ["see"]
-  },
-  "application/vnd.sema": {
-    "source": "iana",
-    "extensions": ["sema"]
-  },
-  "application/vnd.semd": {
-    "source": "iana",
-    "extensions": ["semd"]
-  },
-  "application/vnd.semf": {
-    "source": "iana",
-    "extensions": ["semf"]
-  },
-  "application/vnd.shade-save-file": {
-    "source": "iana"
-  },
-  "application/vnd.shana.informed.formdata": {
-    "source": "iana",
-    "extensions": ["ifm"]
-  },
-  "application/vnd.shana.informed.formtemplate": {
-    "source": "iana",
-    "extensions": ["itp"]
-  },
-  "application/vnd.shana.informed.interchange": {
-    "source": "iana",
-    "extensions": ["iif"]
-  },
-  "application/vnd.shana.informed.package": {
-    "source": "iana",
-    "extensions": ["ipk"]
-  },
-  "application/vnd.shootproof+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.shopkick+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.shp": {
-    "source": "iana"
-  },
-  "application/vnd.shx": {
-    "source": "iana"
-  },
-  "application/vnd.sigrok.session": {
-    "source": "iana"
-  },
-  "application/vnd.simtech-mindmapper": {
-    "source": "iana",
-    "extensions": ["twd","twds"]
-  },
-  "application/vnd.siren+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.smaf": {
-    "source": "iana",
-    "extensions": ["mmf"]
-  },
-  "application/vnd.smart.notebook": {
-    "source": "iana"
-  },
-  "application/vnd.smart.teacher": {
-    "source": "iana",
-    "extensions": ["teacher"]
-  },
-  "application/vnd.snesdev-page-table": {
-    "source": "iana"
-  },
-  "application/vnd.software602.filler.form+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["fo"]
-  },
-  "application/vnd.software602.filler.form-xml-zip": {
-    "source": "iana"
-  },
-  "application/vnd.solent.sdkm+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["sdkm","sdkd"]
-  },
-  "application/vnd.spotfire.dxp": {
-    "source": "iana",
-    "extensions": ["dxp"]
-  },
-  "application/vnd.spotfire.sfs": {
-    "source": "iana",
-    "extensions": ["sfs"]
-  },
-  "application/vnd.sqlite3": {
-    "source": "iana"
-  },
-  "application/vnd.sss-cod": {
-    "source": "iana"
-  },
-  "application/vnd.sss-dtf": {
-    "source": "iana"
-  },
-  "application/vnd.sss-ntf": {
-    "source": "iana"
-  },
-  "application/vnd.stardivision.calc": {
-    "source": "apache",
-    "extensions": ["sdc"]
-  },
-  "application/vnd.stardivision.draw": {
-    "source": "apache",
-    "extensions": ["sda"]
-  },
-  "application/vnd.stardivision.impress": {
-    "source": "apache",
-    "extensions": ["sdd"]
-  },
-  "application/vnd.stardivision.math": {
-    "source": "apache",
-    "extensions": ["smf"]
-  },
-  "application/vnd.stardivision.writer": {
-    "source": "apache",
-    "extensions": ["sdw","vor"]
-  },
-  "application/vnd.stardivision.writer-global": {
-    "source": "apache",
-    "extensions": ["sgl"]
-  },
-  "application/vnd.stepmania.package": {
-    "source": "iana",
-    "extensions": ["smzip"]
-  },
-  "application/vnd.stepmania.stepchart": {
-    "source": "iana",
-    "extensions": ["sm"]
-  },
-  "application/vnd.street-stream": {
-    "source": "iana"
-  },
-  "application/vnd.sun.wadl+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["wadl"]
-  },
-  "application/vnd.sun.xml.calc": {
-    "source": "apache",
-    "extensions": ["sxc"]
-  },
-  "application/vnd.sun.xml.calc.template": {
-    "source": "apache",
-    "extensions": ["stc"]
-  },
-  "application/vnd.sun.xml.draw": {
-    "source": "apache",
-    "extensions": ["sxd"]
-  },
-  "application/vnd.sun.xml.draw.template": {
-    "source": "apache",
-    "extensions": ["std"]
-  },
-  "application/vnd.sun.xml.impress": {
-    "source": "apache",
-    "extensions": ["sxi"]
-  },
-  "application/vnd.sun.xml.impress.template": {
-    "source": "apache",
-    "extensions": ["sti"]
-  },
-  "application/vnd.sun.xml.math": {
-    "source": "apache",
-    "extensions": ["sxm"]
-  },
-  "application/vnd.sun.xml.writer": {
-    "source": "apache",
-    "extensions": ["sxw"]
-  },
-  "application/vnd.sun.xml.writer.global": {
-    "source": "apache",
-    "extensions": ["sxg"]
-  },
-  "application/vnd.sun.xml.writer.template": {
-    "source": "apache",
-    "extensions": ["stw"]
-  },
-  "application/vnd.sus-calendar": {
-    "source": "iana",
-    "extensions": ["sus","susp"]
-  },
-  "application/vnd.svd": {
-    "source": "iana",
-    "extensions": ["svd"]
-  },
-  "application/vnd.swiftview-ics": {
-    "source": "iana"
-  },
-  "application/vnd.symbian.install": {
-    "source": "apache",
-    "extensions": ["sis","sisx"]
-  },
-  "application/vnd.syncml+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["xsm"]
-  },
-  "application/vnd.syncml.dm+wbxml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "extensions": ["bdm"]
-  },
-  "application/vnd.syncml.dm+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["xdm"]
-  },
-  "application/vnd.syncml.dm.notification": {
-    "source": "iana"
-  },
-  "application/vnd.syncml.dmddf+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.syncml.dmddf+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["ddf"]
-  },
-  "application/vnd.syncml.dmtnds+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.syncml.dmtnds+xml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true
-  },
-  "application/vnd.syncml.ds.notification": {
-    "source": "iana"
-  },
-  "application/vnd.tableschema+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.tao.intent-module-archive": {
-    "source": "iana",
-    "extensions": ["tao"]
-  },
-  "application/vnd.tcpdump.pcap": {
-    "source": "iana",
-    "extensions": ["pcap","cap","dmp"]
-  },
-  "application/vnd.think-cell.ppttc+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.tmd.mediaflex.api+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.tml": {
-    "source": "iana"
-  },
-  "application/vnd.tmobile-livetv": {
-    "source": "iana",
-    "extensions": ["tmo"]
-  },
-  "application/vnd.tri.onesource": {
-    "source": "iana"
-  },
-  "application/vnd.trid.tpt": {
-    "source": "iana",
-    "extensions": ["tpt"]
-  },
-  "application/vnd.triscape.mxs": {
-    "source": "iana",
-    "extensions": ["mxs"]
-  },
-  "application/vnd.trueapp": {
-    "source": "iana",
-    "extensions": ["tra"]
-  },
-  "application/vnd.truedoc": {
-    "source": "iana"
-  },
-  "application/vnd.ubisoft.webplayer": {
-    "source": "iana"
-  },
-  "application/vnd.ufdl": {
-    "source": "iana",
-    "extensions": ["ufd","ufdl"]
-  },
-  "application/vnd.uiq.theme": {
-    "source": "iana",
-    "extensions": ["utz"]
-  },
-  "application/vnd.umajin": {
-    "source": "iana",
-    "extensions": ["umj"]
-  },
-  "application/vnd.unity": {
-    "source": "iana",
-    "extensions": ["unityweb"]
-  },
-  "application/vnd.uoml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["uoml"]
-  },
-  "application/vnd.uplanet.alert": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.alert-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.bearer-choice": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.bearer-choice-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.cacheop": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.cacheop-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.channel": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.channel-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.list": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.list-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.listcmd": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.listcmd-wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.uplanet.signal": {
-    "source": "iana"
-  },
-  "application/vnd.uri-map": {
-    "source": "iana"
-  },
-  "application/vnd.valve.source.material": {
-    "source": "iana"
-  },
-  "application/vnd.vcx": {
-    "source": "iana",
-    "extensions": ["vcx"]
-  },
-  "application/vnd.vd-study": {
-    "source": "iana"
-  },
-  "application/vnd.vectorworks": {
-    "source": "iana"
-  },
-  "application/vnd.vel+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.verimatrix.vcas": {
-    "source": "iana"
-  },
-  "application/vnd.veryant.thin": {
-    "source": "iana"
-  },
-  "application/vnd.ves.encrypted": {
-    "source": "iana"
-  },
-  "application/vnd.vidsoft.vidconference": {
-    "source": "iana"
-  },
-  "application/vnd.visio": {
-    "source": "iana",
-    "extensions": ["vsd","vst","vss","vsw"]
-  },
-  "application/vnd.visionary": {
-    "source": "iana",
-    "extensions": ["vis"]
-  },
-  "application/vnd.vividence.scriptfile": {
-    "source": "iana"
-  },
-  "application/vnd.vsf": {
-    "source": "iana",
-    "extensions": ["vsf"]
-  },
-  "application/vnd.wap.sic": {
-    "source": "iana"
-  },
-  "application/vnd.wap.slc": {
-    "source": "iana"
-  },
-  "application/vnd.wap.wbxml": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "extensions": ["wbxml"]
-  },
-  "application/vnd.wap.wmlc": {
-    "source": "iana",
-    "extensions": ["wmlc"]
-  },
-  "application/vnd.wap.wmlscriptc": {
-    "source": "iana",
-    "extensions": ["wmlsc"]
-  },
-  "application/vnd.webturbo": {
-    "source": "iana",
-    "extensions": ["wtb"]
-  },
-  "application/vnd.wfa.p2p": {
-    "source": "iana"
-  },
-  "application/vnd.wfa.wsc": {
-    "source": "iana"
-  },
-  "application/vnd.windows.devicepairing": {
-    "source": "iana"
-  },
-  "application/vnd.wmc": {
-    "source": "iana"
-  },
-  "application/vnd.wmf.bootstrap": {
-    "source": "iana"
-  },
-  "application/vnd.wolfram.mathematica": {
-    "source": "iana"
-  },
-  "application/vnd.wolfram.mathematica.package": {
-    "source": "iana"
-  },
-  "application/vnd.wolfram.player": {
-    "source": "iana",
-    "extensions": ["nbp"]
-  },
-  "application/vnd.wordperfect": {
-    "source": "iana",
-    "extensions": ["wpd"]
-  },
-  "application/vnd.wqd": {
-    "source": "iana",
-    "extensions": ["wqd"]
-  },
-  "application/vnd.wrq-hp3000-labelled": {
-    "source": "iana"
-  },
-  "application/vnd.wt.stf": {
-    "source": "iana",
-    "extensions": ["stf"]
-  },
-  "application/vnd.wv.csp+wbxml": {
-    "source": "iana"
-  },
-  "application/vnd.wv.csp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.wv.ssp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.xacml+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.xara": {
-    "source": "iana",
-    "extensions": ["xar"]
-  },
-  "application/vnd.xfdl": {
-    "source": "iana",
-    "extensions": ["xfdl"]
-  },
-  "application/vnd.xfdl.webform": {
-    "source": "iana"
-  },
-  "application/vnd.xmi+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vnd.xmpie.cpkg": {
-    "source": "iana"
-  },
-  "application/vnd.xmpie.dpkg": {
-    "source": "iana"
-  },
-  "application/vnd.xmpie.plan": {
-    "source": "iana"
-  },
-  "application/vnd.xmpie.ppkg": {
-    "source": "iana"
-  },
-  "application/vnd.xmpie.xlim": {
-    "source": "iana"
-  },
-  "application/vnd.yamaha.hv-dic": {
-    "source": "iana",
-    "extensions": ["hvd"]
-  },
-  "application/vnd.yamaha.hv-script": {
-    "source": "iana",
-    "extensions": ["hvs"]
-  },
-  "application/vnd.yamaha.hv-voice": {
-    "source": "iana",
-    "extensions": ["hvp"]
-  },
-  "application/vnd.yamaha.openscoreformat": {
-    "source": "iana",
-    "extensions": ["osf"]
-  },
-  "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["osfpvg"]
-  },
-  "application/vnd.yamaha.remote-setup": {
-    "source": "iana"
-  },
-  "application/vnd.yamaha.smaf-audio": {
-    "source": "iana",
-    "extensions": ["saf"]
-  },
-  "application/vnd.yamaha.smaf-phrase": {
-    "source": "iana",
-    "extensions": ["spf"]
-  },
-  "application/vnd.yamaha.through-ngn": {
-    "source": "iana"
-  },
-  "application/vnd.yamaha.tunnel-udpencap": {
-    "source": "iana"
-  },
-  "application/vnd.yaoweme": {
-    "source": "iana"
-  },
-  "application/vnd.yellowriver-custom-menu": {
-    "source": "iana",
-    "extensions": ["cmp"]
-  },
-  "application/vnd.youtube.yt": {
-    "source": "iana"
-  },
-  "application/vnd.zul": {
-    "source": "iana",
-    "extensions": ["zir","zirz"]
-  },
-  "application/vnd.zzazz.deck+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["zaz"]
-  },
-  "application/voicexml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["vxml"]
-  },
-  "application/voucher-cms+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/vq-rtcpxr": {
-    "source": "iana"
-  },
-  "application/wasm": {
-    "compressible": true,
-    "extensions": ["wasm"]
-  },
-  "application/watcherinfo+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/webpush-options+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/whoispp-query": {
-    "source": "iana"
-  },
-  "application/whoispp-response": {
-    "source": "iana"
-  },
-  "application/widget": {
-    "source": "iana",
-    "extensions": ["wgt"]
-  },
-  "application/winhlp": {
-    "source": "apache",
-    "extensions": ["hlp"]
-  },
-  "application/wita": {
-    "source": "iana"
-  },
-  "application/wordperfect5.1": {
-    "source": "iana"
-  },
-  "application/wsdl+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["wsdl"]
-  },
-  "application/wspolicy+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["wspolicy"]
-  },
-  "application/x-7z-compressed": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["7z"]
-  },
-  "application/x-abiword": {
-    "source": "apache",
-    "extensions": ["abw"]
-  },
-  "application/x-ace-compressed": {
-    "source": "apache",
-    "extensions": ["ace"]
-  },
-  "application/x-amf": {
-    "source": "apache"
-  },
-  "application/x-apple-diskimage": {
-    "source": "apache",
-    "extensions": ["dmg"]
-  },
-  "application/x-arj": {
-    "compressible": false,
-    "extensions": ["arj"]
-  },
-  "application/x-authorware-bin": {
-    "source": "apache",
-    "extensions": ["aab","x32","u32","vox"]
-  },
-  "application/x-authorware-map": {
-    "source": "apache",
-    "extensions": ["aam"]
-  },
-  "application/x-authorware-seg": {
-    "source": "apache",
-    "extensions": ["aas"]
-  },
-  "application/x-bcpio": {
-    "source": "apache",
-    "extensions": ["bcpio"]
-  },
-  "application/x-bdoc": {
-    "compressible": false,
-    "extensions": ["bdoc"]
-  },
-  "application/x-bittorrent": {
-    "source": "apache",
-    "extensions": ["torrent"]
-  },
-  "application/x-blorb": {
-    "source": "apache",
-    "extensions": ["blb","blorb"]
-  },
-  "application/x-bzip": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["bz"]
-  },
-  "application/x-bzip2": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["bz2","boz"]
-  },
-  "application/x-cbr": {
-    "source": "apache",
-    "extensions": ["cbr","cba","cbt","cbz","cb7"]
-  },
-  "application/x-cdlink": {
-    "source": "apache",
-    "extensions": ["vcd"]
-  },
-  "application/x-cfs-compressed": {
-    "source": "apache",
-    "extensions": ["cfs"]
-  },
-  "application/x-chat": {
-    "source": "apache",
-    "extensions": ["chat"]
-  },
-  "application/x-chess-pgn": {
-    "source": "apache",
-    "extensions": ["pgn"]
-  },
-  "application/x-chrome-extension": {
-    "extensions": ["crx"]
-  },
-  "application/x-cocoa": {
-    "source": "nginx",
-    "extensions": ["cco"]
-  },
-  "application/x-compress": {
-    "source": "apache"
-  },
-  "application/x-conference": {
-    "source": "apache",
-    "extensions": ["nsc"]
-  },
-  "application/x-cpio": {
-    "source": "apache",
-    "extensions": ["cpio"]
-  },
-  "application/x-csh": {
-    "source": "apache",
-    "extensions": ["csh"]
-  },
-  "application/x-deb": {
-    "compressible": false
-  },
-  "application/x-debian-package": {
-    "source": "apache",
-    "extensions": ["deb","udeb"]
-  },
-  "application/x-dgc-compressed": {
-    "source": "apache",
-    "extensions": ["dgc"]
-  },
-  "application/x-director": {
-    "source": "apache",
-    "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]
-  },
-  "application/x-doom": {
-    "source": "apache",
-    "extensions": ["wad"]
-  },
-  "application/x-dtbncx+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["ncx"]
-  },
-  "application/x-dtbook+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["dtb"]
-  },
-  "application/x-dtbresource+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["res"]
-  },
-  "application/x-dvi": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["dvi"]
-  },
-  "application/x-envoy": {
-    "source": "apache",
-    "extensions": ["evy"]
-  },
-  "application/x-eva": {
-    "source": "apache",
-    "extensions": ["eva"]
-  },
-  "application/x-font-bdf": {
-    "source": "apache",
-    "extensions": ["bdf"]
-  },
-  "application/x-font-dos": {
-    "source": "apache"
-  },
-  "application/x-font-framemaker": {
-    "source": "apache"
-  },
-  "application/x-font-ghostscript": {
-    "source": "apache",
-    "extensions": ["gsf"]
-  },
-  "application/x-font-libgrx": {
-    "source": "apache"
-  },
-  "application/x-font-linux-psf": {
-    "source": "apache",
-    "extensions": ["psf"]
-  },
-  "application/x-font-pcf": {
-    "source": "apache",
-    "extensions": ["pcf"]
-  },
-  "application/x-font-snf": {
-    "source": "apache",
-    "extensions": ["snf"]
-  },
-  "application/x-font-speedo": {
-    "source": "apache"
-  },
-  "application/x-font-sunos-news": {
-    "source": "apache"
-  },
-  "application/x-font-type1": {
-    "source": "apache",
-    "extensions": ["pfa","pfb","pfm","afm"]
-  },
-  "application/x-font-vfont": {
-    "source": "apache"
-  },
-  "application/x-freearc": {
-    "source": "apache",
-    "extensions": ["arc"]
-  },
-  "application/x-futuresplash": {
-    "source": "apache",
-    "extensions": ["spl"]
-  },
-  "application/x-gca-compressed": {
-    "source": "apache",
-    "extensions": ["gca"]
-  },
-  "application/x-glulx": {
-    "source": "apache",
-    "extensions": ["ulx"]
-  },
-  "application/x-gnumeric": {
-    "source": "apache",
-    "extensions": ["gnumeric"]
-  },
-  "application/x-gramps-xml": {
-    "source": "apache",
-    "extensions": ["gramps"]
-  },
-  "application/x-gtar": {
-    "source": "apache",
-    "extensions": ["gtar"]
-  },
-  "application/x-gzip": {
-    "source": "apache"
-  },
-  "application/x-hdf": {
-    "source": "apache",
-    "extensions": ["hdf"]
-  },
-  "application/x-httpd-php": {
-    "compressible": true,
-    "extensions": ["php"]
-  },
-  "application/x-install-instructions": {
-    "source": "apache",
-    "extensions": ["install"]
-  },
-  "application/x-iso9660-image": {
-    "source": "apache",
-    "extensions": ["iso"]
-  },
-  "application/x-java-archive-diff": {
-    "source": "nginx",
-    "extensions": ["jardiff"]
-  },
-  "application/x-java-jnlp-file": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["jnlp"]
-  },
-  "application/x-javascript": {
-    "compressible": true
-  },
-  "application/x-keepass2": {
-    "extensions": ["kdbx"]
-  },
-  "application/x-latex": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["latex"]
-  },
-  "application/x-lua-bytecode": {
-    "extensions": ["luac"]
-  },
-  "application/x-lzh-compressed": {
-    "source": "apache",
-    "extensions": ["lzh","lha"]
-  },
-  "application/x-makeself": {
-    "source": "nginx",
-    "extensions": ["run"]
-  },
-  "application/x-mie": {
-    "source": "apache",
-    "extensions": ["mie"]
-  },
-  "application/x-mobipocket-ebook": {
-    "source": "apache",
-    "extensions": ["prc","mobi"]
-  },
-  "application/x-mpegurl": {
-    "compressible": false
-  },
-  "application/x-ms-application": {
-    "source": "apache",
-    "extensions": ["application"]
-  },
-  "application/x-ms-shortcut": {
-    "source": "apache",
-    "extensions": ["lnk"]
-  },
-  "application/x-ms-wmd": {
-    "source": "apache",
-    "extensions": ["wmd"]
-  },
-  "application/x-ms-wmz": {
-    "source": "apache",
-    "extensions": ["wmz"]
-  },
-  "application/x-ms-xbap": {
-    "source": "apache",
-    "extensions": ["xbap"]
-  },
-  "application/x-msaccess": {
-    "source": "apache",
-    "extensions": ["mdb"]
-  },
-  "application/x-msbinder": {
-    "source": "apache",
-    "extensions": ["obd"]
-  },
-  "application/x-mscardfile": {
-    "source": "apache",
-    "extensions": ["crd"]
-  },
-  "application/x-msclip": {
-    "source": "apache",
-    "extensions": ["clp"]
-  },
-  "application/x-msdos-program": {
-    "extensions": ["exe"]
-  },
-  "application/x-msdownload": {
-    "source": "apache",
-    "extensions": ["exe","dll","com","bat","msi"]
-  },
-  "application/x-msmediaview": {
-    "source": "apache",
-    "extensions": ["mvb","m13","m14"]
-  },
-  "application/x-msmetafile": {
-    "source": "apache",
-    "extensions": ["wmf","wmz","emf","emz"]
-  },
-  "application/x-msmoney": {
-    "source": "apache",
-    "extensions": ["mny"]
-  },
-  "application/x-mspublisher": {
-    "source": "apache",
-    "extensions": ["pub"]
-  },
-  "application/x-msschedule": {
-    "source": "apache",
-    "extensions": ["scd"]
-  },
-  "application/x-msterminal": {
-    "source": "apache",
-    "extensions": ["trm"]
-  },
-  "application/x-mswrite": {
-    "source": "apache",
-    "extensions": ["wri"]
-  },
-  "application/x-netcdf": {
-    "source": "apache",
-    "extensions": ["nc","cdf"]
-  },
-  "application/x-ns-proxy-autoconfig": {
-    "compressible": true,
-    "extensions": ["pac"]
-  },
-  "application/x-nzb": {
-    "source": "apache",
-    "extensions": ["nzb"]
-  },
-  "application/x-perl": {
-    "source": "nginx",
-    "extensions": ["pl","pm"]
-  },
-  "application/x-pilot": {
-    "source": "nginx",
-    "extensions": ["prc","pdb"]
-  },
-  "application/x-pkcs12": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["p12","pfx"]
-  },
-  "application/x-pkcs7-certificates": {
-    "source": "apache",
-    "extensions": ["p7b","spc"]
-  },
-  "application/x-pkcs7-certreqresp": {
-    "source": "apache",
-    "extensions": ["p7r"]
-  },
-  "application/x-pki-message": {
-    "source": "iana"
-  },
-  "application/x-rar-compressed": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["rar"]
-  },
-  "application/x-redhat-package-manager": {
-    "source": "nginx",
-    "extensions": ["rpm"]
-  },
-  "application/x-research-info-systems": {
-    "source": "apache",
-    "extensions": ["ris"]
-  },
-  "application/x-sea": {
-    "source": "nginx",
-    "extensions": ["sea"]
-  },
-  "application/x-sh": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["sh"]
-  },
-  "application/x-shar": {
-    "source": "apache",
-    "extensions": ["shar"]
-  },
-  "application/x-shockwave-flash": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["swf"]
-  },
-  "application/x-silverlight-app": {
-    "source": "apache",
-    "extensions": ["xap"]
-  },
-  "application/x-sql": {
-    "source": "apache",
-    "extensions": ["sql"]
-  },
-  "application/x-stuffit": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["sit"]
-  },
-  "application/x-stuffitx": {
-    "source": "apache",
-    "extensions": ["sitx"]
-  },
-  "application/x-subrip": {
-    "source": "apache",
-    "extensions": ["srt"]
-  },
-  "application/x-sv4cpio": {
-    "source": "apache",
-    "extensions": ["sv4cpio"]
-  },
-  "application/x-sv4crc": {
-    "source": "apache",
-    "extensions": ["sv4crc"]
-  },
-  "application/x-t3vm-image": {
-    "source": "apache",
-    "extensions": ["t3"]
-  },
-  "application/x-tads": {
-    "source": "apache",
-    "extensions": ["gam"]
-  },
-  "application/x-tar": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["tar"]
-  },
-  "application/x-tcl": {
-    "source": "apache",
-    "extensions": ["tcl","tk"]
-  },
-  "application/x-tex": {
-    "source": "apache",
-    "extensions": ["tex"]
-  },
-  "application/x-tex-tfm": {
-    "source": "apache",
-    "extensions": ["tfm"]
-  },
-  "application/x-texinfo": {
-    "source": "apache",
-    "extensions": ["texinfo","texi"]
-  },
-  "application/x-tgif": {
-    "source": "apache",
-    "extensions": ["obj"]
-  },
-  "application/x-ustar": {
-    "source": "apache",
-    "extensions": ["ustar"]
-  },
-  "application/x-virtualbox-hdd": {
-    "compressible": true,
-    "extensions": ["hdd"]
-  },
-  "application/x-virtualbox-ova": {
-    "compressible": true,
-    "extensions": ["ova"]
-  },
-  "application/x-virtualbox-ovf": {
-    "compressible": true,
-    "extensions": ["ovf"]
-  },
-  "application/x-virtualbox-vbox": {
-    "compressible": true,
-    "extensions": ["vbox"]
-  },
-  "application/x-virtualbox-vbox-extpack": {
-    "compressible": false,
-    "extensions": ["vbox-extpack"]
-  },
-  "application/x-virtualbox-vdi": {
-    "compressible": true,
-    "extensions": ["vdi"]
-  },
-  "application/x-virtualbox-vhd": {
-    "compressible": true,
-    "extensions": ["vhd"]
-  },
-  "application/x-virtualbox-vmdk": {
-    "compressible": true,
-    "extensions": ["vmdk"]
-  },
-  "application/x-wais-source": {
-    "source": "apache",
-    "extensions": ["src"]
-  },
-  "application/x-web-app-manifest+json": {
-    "compressible": true,
-    "extensions": ["webapp"]
-  },
-  "application/x-www-form-urlencoded": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/x-x509-ca-cert": {
-    "source": "iana",
-    "extensions": ["der","crt","pem"]
-  },
-  "application/x-x509-ca-ra-cert": {
-    "source": "iana"
-  },
-  "application/x-x509-next-ca-cert": {
-    "source": "iana"
-  },
-  "application/x-xfig": {
-    "source": "apache",
-    "extensions": ["fig"]
-  },
-  "application/x-xliff+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["xlf"]
-  },
-  "application/x-xpinstall": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["xpi"]
-  },
-  "application/x-xz": {
-    "source": "apache",
-    "extensions": ["xz"]
-  },
-  "application/x-zmachine": {
-    "source": "apache",
-    "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"]
-  },
-  "application/x400-bp": {
-    "source": "iana"
-  },
-  "application/xacml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xaml+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["xaml"]
-  },
-  "application/xcap-att+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xav"]
-  },
-  "application/xcap-caps+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xca"]
-  },
-  "application/xcap-diff+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xdf"]
-  },
-  "application/xcap-el+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xel"]
-  },
-  "application/xcap-error+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xer"]
-  },
-  "application/xcap-ns+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xns"]
-  },
-  "application/xcon-conference-info+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xcon-conference-info-diff+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xenc+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xenc"]
-  },
-  "application/xhtml+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xhtml","xht"]
-  },
-  "application/xhtml-voice+xml": {
-    "source": "apache",
-    "compressible": true
-  },
-  "application/xliff+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xlf"]
-  },
-  "application/xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xml","xsl","xsd","rng"]
-  },
-  "application/xml-dtd": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dtd"]
-  },
-  "application/xml-external-parsed-entity": {
-    "source": "iana"
-  },
-  "application/xml-patch+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xmpp+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/xop+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xop"]
-  },
-  "application/xproc+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["xpl"]
-  },
-  "application/xslt+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xslt"]
-  },
-  "application/xspf+xml": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["xspf"]
-  },
-  "application/xv+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["mxml","xhvml","xvml","xvm"]
-  },
-  "application/yang": {
-    "source": "iana",
-    "extensions": ["yang"]
-  },
-  "application/yang-data+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/yang-data+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/yang-patch+json": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/yang-patch+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "application/yin+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["yin"]
-  },
-  "application/zip": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["zip"]
-  },
-  "application/zlib": {
-    "source": "iana"
-  },
-  "application/zstd": {
-    "source": "iana"
-  },
-  "audio/1d-interleaved-parityfec": {
-    "source": "iana"
-  },
-  "audio/32kadpcm": {
-    "source": "iana"
-  },
-  "audio/3gpp": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["3gpp"]
-  },
-  "audio/3gpp2": {
-    "source": "iana"
-  },
-  "audio/aac": {
-    "source": "iana"
-  },
-  "audio/ac3": {
-    "source": "iana"
-  },
-  "audio/adpcm": {
-    "source": "apache",
-    "extensions": ["adp"]
-  },
-  "audio/amr": {
-    "source": "iana"
-  },
-  "audio/amr-wb": {
-    "source": "iana"
-  },
-  "audio/amr-wb+": {
-    "source": "iana"
-  },
-  "audio/aptx": {
-    "source": "iana"
-  },
-  "audio/asc": {
-    "source": "iana"
-  },
-  "audio/atrac-advanced-lossless": {
-    "source": "iana"
-  },
-  "audio/atrac-x": {
-    "source": "iana"
-  },
-  "audio/atrac3": {
-    "source": "iana"
-  },
-  "audio/basic": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["au","snd"]
-  },
-  "audio/bv16": {
-    "source": "iana"
-  },
-  "audio/bv32": {
-    "source": "iana"
-  },
-  "audio/clearmode": {
-    "source": "iana"
-  },
-  "audio/cn": {
-    "source": "iana"
-  },
-  "audio/dat12": {
-    "source": "iana"
-  },
-  "audio/dls": {
-    "source": "iana"
-  },
-  "audio/dsr-es201108": {
-    "source": "iana"
-  },
-  "audio/dsr-es202050": {
-    "source": "iana"
-  },
-  "audio/dsr-es202211": {
-    "source": "iana"
-  },
-  "audio/dsr-es202212": {
-    "source": "iana"
-  },
-  "audio/dv": {
-    "source": "iana"
-  },
-  "audio/dvi4": {
-    "source": "iana"
-  },
-  "audio/eac3": {
-    "source": "iana"
-  },
-  "audio/encaprtp": {
-    "source": "iana"
-  },
-  "audio/evrc": {
-    "source": "iana"
-  },
-  "audio/evrc-qcp": {
-    "source": "iana"
-  },
-  "audio/evrc0": {
-    "source": "iana"
-  },
-  "audio/evrc1": {
-    "source": "iana"
-  },
-  "audio/evrcb": {
-    "source": "iana"
-  },
-  "audio/evrcb0": {
-    "source": "iana"
-  },
-  "audio/evrcb1": {
-    "source": "iana"
-  },
-  "audio/evrcnw": {
-    "source": "iana"
-  },
-  "audio/evrcnw0": {
-    "source": "iana"
-  },
-  "audio/evrcnw1": {
-    "source": "iana"
-  },
-  "audio/evrcwb": {
-    "source": "iana"
-  },
-  "audio/evrcwb0": {
-    "source": "iana"
-  },
-  "audio/evrcwb1": {
-    "source": "iana"
-  },
-  "audio/evs": {
-    "source": "iana"
-  },
-  "audio/flexfec": {
-    "source": "iana"
-  },
-  "audio/fwdred": {
-    "source": "iana"
-  },
-  "audio/g711-0": {
-    "source": "iana"
-  },
-  "audio/g719": {
-    "source": "iana"
-  },
-  "audio/g722": {
-    "source": "iana"
-  },
-  "audio/g7221": {
-    "source": "iana"
-  },
-  "audio/g723": {
-    "source": "iana"
-  },
-  "audio/g726-16": {
-    "source": "iana"
-  },
-  "audio/g726-24": {
-    "source": "iana"
-  },
-  "audio/g726-32": {
-    "source": "iana"
-  },
-  "audio/g726-40": {
-    "source": "iana"
-  },
-  "audio/g728": {
-    "source": "iana"
-  },
-  "audio/g729": {
-    "source": "iana"
-  },
-  "audio/g7291": {
-    "source": "iana"
-  },
-  "audio/g729d": {
-    "source": "iana"
-  },
-  "audio/g729e": {
-    "source": "iana"
-  },
-  "audio/gsm": {
-    "source": "iana"
-  },
-  "audio/gsm-efr": {
-    "source": "iana"
-  },
-  "audio/gsm-hr-08": {
-    "source": "iana"
-  },
-  "audio/ilbc": {
-    "source": "iana"
-  },
-  "audio/ip-mr_v2.5": {
-    "source": "iana"
-  },
-  "audio/isac": {
-    "source": "apache"
-  },
-  "audio/l16": {
-    "source": "iana"
-  },
-  "audio/l20": {
-    "source": "iana"
-  },
-  "audio/l24": {
-    "source": "iana",
-    "compressible": false
-  },
-  "audio/l8": {
-    "source": "iana"
-  },
-  "audio/lpc": {
-    "source": "iana"
-  },
-  "audio/melp": {
-    "source": "iana"
-  },
-  "audio/melp1200": {
-    "source": "iana"
-  },
-  "audio/melp2400": {
-    "source": "iana"
-  },
-  "audio/melp600": {
-    "source": "iana"
-  },
-  "audio/mhas": {
-    "source": "iana"
-  },
-  "audio/midi": {
-    "source": "apache",
-    "extensions": ["mid","midi","kar","rmi"]
-  },
-  "audio/mobile-xmf": {
-    "source": "iana",
-    "extensions": ["mxmf"]
-  },
-  "audio/mp3": {
-    "compressible": false,
-    "extensions": ["mp3"]
-  },
-  "audio/mp4": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["m4a","mp4a"]
-  },
-  "audio/mp4a-latm": {
-    "source": "iana"
-  },
-  "audio/mpa": {
-    "source": "iana"
-  },
-  "audio/mpa-robust": {
-    "source": "iana"
-  },
-  "audio/mpeg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"]
-  },
-  "audio/mpeg4-generic": {
-    "source": "iana"
-  },
-  "audio/musepack": {
-    "source": "apache"
-  },
-  "audio/ogg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["oga","ogg","spx"]
-  },
-  "audio/opus": {
-    "source": "iana"
-  },
-  "audio/parityfec": {
-    "source": "iana"
-  },
-  "audio/pcma": {
-    "source": "iana"
-  },
-  "audio/pcma-wb": {
-    "source": "iana"
-  },
-  "audio/pcmu": {
-    "source": "iana"
-  },
-  "audio/pcmu-wb": {
-    "source": "iana"
-  },
-  "audio/prs.sid": {
-    "source": "iana"
-  },
-  "audio/qcelp": {
-    "source": "iana"
-  },
-  "audio/raptorfec": {
-    "source": "iana"
-  },
-  "audio/red": {
-    "source": "iana"
-  },
-  "audio/rtp-enc-aescm128": {
-    "source": "iana"
-  },
-  "audio/rtp-midi": {
-    "source": "iana"
-  },
-  "audio/rtploopback": {
-    "source": "iana"
-  },
-  "audio/rtx": {
-    "source": "iana"
-  },
-  "audio/s3m": {
-    "source": "apache",
-    "extensions": ["s3m"]
-  },
-  "audio/silk": {
-    "source": "apache",
-    "extensions": ["sil"]
-  },
-  "audio/smv": {
-    "source": "iana"
-  },
-  "audio/smv-qcp": {
-    "source": "iana"
-  },
-  "audio/smv0": {
-    "source": "iana"
-  },
-  "audio/sp-midi": {
-    "source": "iana"
-  },
-  "audio/speex": {
-    "source": "iana"
-  },
-  "audio/t140c": {
-    "source": "iana"
-  },
-  "audio/t38": {
-    "source": "iana"
-  },
-  "audio/telephone-event": {
-    "source": "iana"
-  },
-  "audio/tetra_acelp": {
-    "source": "iana"
-  },
-  "audio/tetra_acelp_bb": {
-    "source": "iana"
-  },
-  "audio/tone": {
-    "source": "iana"
-  },
-  "audio/uemclip": {
-    "source": "iana"
-  },
-  "audio/ulpfec": {
-    "source": "iana"
-  },
-  "audio/usac": {
-    "source": "iana"
-  },
-  "audio/vdvi": {
-    "source": "iana"
-  },
-  "audio/vmr-wb": {
-    "source": "iana"
-  },
-  "audio/vnd.3gpp.iufp": {
-    "source": "iana"
-  },
-  "audio/vnd.4sb": {
-    "source": "iana"
-  },
-  "audio/vnd.audiokoz": {
-    "source": "iana"
-  },
-  "audio/vnd.celp": {
-    "source": "iana"
-  },
-  "audio/vnd.cisco.nse": {
-    "source": "iana"
-  },
-  "audio/vnd.cmles.radio-events": {
-    "source": "iana"
-  },
-  "audio/vnd.cns.anp1": {
-    "source": "iana"
-  },
-  "audio/vnd.cns.inf1": {
-    "source": "iana"
-  },
-  "audio/vnd.dece.audio": {
-    "source": "iana",
-    "extensions": ["uva","uvva"]
-  },
-  "audio/vnd.digital-winds": {
-    "source": "iana",
-    "extensions": ["eol"]
-  },
-  "audio/vnd.dlna.adts": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.heaac.1": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.heaac.2": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.mlp": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.mps": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.pl2": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.pl2x": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.pl2z": {
-    "source": "iana"
-  },
-  "audio/vnd.dolby.pulse.1": {
-    "source": "iana"
-  },
-  "audio/vnd.dra": {
-    "source": "iana",
-    "extensions": ["dra"]
-  },
-  "audio/vnd.dts": {
-    "source": "iana",
-    "extensions": ["dts"]
-  },
-  "audio/vnd.dts.hd": {
-    "source": "iana",
-    "extensions": ["dtshd"]
-  },
-  "audio/vnd.dts.uhd": {
-    "source": "iana"
-  },
-  "audio/vnd.dvb.file": {
-    "source": "iana"
-  },
-  "audio/vnd.everad.plj": {
-    "source": "iana"
-  },
-  "audio/vnd.hns.audio": {
-    "source": "iana"
-  },
-  "audio/vnd.lucent.voice": {
-    "source": "iana",
-    "extensions": ["lvp"]
-  },
-  "audio/vnd.ms-playready.media.pya": {
-    "source": "iana",
-    "extensions": ["pya"]
-  },
-  "audio/vnd.nokia.mobile-xmf": {
-    "source": "iana"
-  },
-  "audio/vnd.nortel.vbk": {
-    "source": "iana"
-  },
-  "audio/vnd.nuera.ecelp4800": {
-    "source": "iana",
-    "extensions": ["ecelp4800"]
-  },
-  "audio/vnd.nuera.ecelp7470": {
-    "source": "iana",
-    "extensions": ["ecelp7470"]
-  },
-  "audio/vnd.nuera.ecelp9600": {
-    "source": "iana",
-    "extensions": ["ecelp9600"]
-  },
-  "audio/vnd.octel.sbc": {
-    "source": "iana"
-  },
-  "audio/vnd.presonus.multitrack": {
-    "source": "iana"
-  },
-  "audio/vnd.qcelp": {
-    "source": "iana"
-  },
-  "audio/vnd.rhetorex.32kadpcm": {
-    "source": "iana"
-  },
-  "audio/vnd.rip": {
-    "source": "iana",
-    "extensions": ["rip"]
-  },
-  "audio/vnd.rn-realaudio": {
-    "compressible": false
-  },
-  "audio/vnd.sealedmedia.softseal.mpeg": {
-    "source": "iana"
-  },
-  "audio/vnd.vmx.cvsd": {
-    "source": "iana"
-  },
-  "audio/vnd.wave": {
-    "compressible": false
-  },
-  "audio/vorbis": {
-    "source": "iana",
-    "compressible": false
-  },
-  "audio/vorbis-config": {
-    "source": "iana"
-  },
-  "audio/wav": {
-    "compressible": false,
-    "extensions": ["wav"]
-  },
-  "audio/wave": {
-    "compressible": false,
-    "extensions": ["wav"]
-  },
-  "audio/webm": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["weba"]
-  },
-  "audio/x-aac": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["aac"]
-  },
-  "audio/x-aiff": {
-    "source": "apache",
-    "extensions": ["aif","aiff","aifc"]
-  },
-  "audio/x-caf": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["caf"]
-  },
-  "audio/x-flac": {
-    "source": "apache",
-    "extensions": ["flac"]
-  },
-  "audio/x-m4a": {
-    "source": "nginx",
-    "extensions": ["m4a"]
-  },
-  "audio/x-matroska": {
-    "source": "apache",
-    "extensions": ["mka"]
-  },
-  "audio/x-mpegurl": {
-    "source": "apache",
-    "extensions": ["m3u"]
-  },
-  "audio/x-ms-wax": {
-    "source": "apache",
-    "extensions": ["wax"]
-  },
-  "audio/x-ms-wma": {
-    "source": "apache",
-    "extensions": ["wma"]
-  },
-  "audio/x-pn-realaudio": {
-    "source": "apache",
-    "extensions": ["ram","ra"]
-  },
-  "audio/x-pn-realaudio-plugin": {
-    "source": "apache",
-    "extensions": ["rmp"]
-  },
-  "audio/x-realaudio": {
-    "source": "nginx",
-    "extensions": ["ra"]
-  },
-  "audio/x-tta": {
-    "source": "apache"
-  },
-  "audio/x-wav": {
-    "source": "apache",
-    "extensions": ["wav"]
-  },
-  "audio/xm": {
-    "source": "apache",
-    "extensions": ["xm"]
-  },
-  "chemical/x-cdx": {
-    "source": "apache",
-    "extensions": ["cdx"]
-  },
-  "chemical/x-cif": {
-    "source": "apache",
-    "extensions": ["cif"]
-  },
-  "chemical/x-cmdf": {
-    "source": "apache",
-    "extensions": ["cmdf"]
-  },
-  "chemical/x-cml": {
-    "source": "apache",
-    "extensions": ["cml"]
-  },
-  "chemical/x-csml": {
-    "source": "apache",
-    "extensions": ["csml"]
-  },
-  "chemical/x-pdb": {
-    "source": "apache"
-  },
-  "chemical/x-xyz": {
-    "source": "apache",
-    "extensions": ["xyz"]
-  },
-  "font/collection": {
-    "source": "iana",
-    "extensions": ["ttc"]
-  },
-  "font/otf": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["otf"]
-  },
-  "font/sfnt": {
-    "source": "iana"
-  },
-  "font/ttf": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["ttf"]
-  },
-  "font/woff": {
-    "source": "iana",
-    "extensions": ["woff"]
-  },
-  "font/woff2": {
-    "source": "iana",
-    "extensions": ["woff2"]
-  },
-  "image/aces": {
-    "source": "iana",
-    "extensions": ["exr"]
-  },
-  "image/apng": {
-    "compressible": false,
-    "extensions": ["apng"]
-  },
-  "image/avci": {
-    "source": "iana"
-  },
-  "image/avcs": {
-    "source": "iana"
-  },
-  "image/bmp": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["bmp"]
-  },
-  "image/cgm": {
-    "source": "iana",
-    "extensions": ["cgm"]
-  },
-  "image/dicom-rle": {
-    "source": "iana",
-    "extensions": ["drle"]
-  },
-  "image/emf": {
-    "source": "iana",
-    "extensions": ["emf"]
-  },
-  "image/fits": {
-    "source": "iana",
-    "extensions": ["fits"]
-  },
-  "image/g3fax": {
-    "source": "iana",
-    "extensions": ["g3"]
-  },
-  "image/gif": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["gif"]
-  },
-  "image/heic": {
-    "source": "iana",
-    "extensions": ["heic"]
-  },
-  "image/heic-sequence": {
-    "source": "iana",
-    "extensions": ["heics"]
-  },
-  "image/heif": {
-    "source": "iana",
-    "extensions": ["heif"]
-  },
-  "image/heif-sequence": {
-    "source": "iana",
-    "extensions": ["heifs"]
-  },
-  "image/hej2k": {
-    "source": "iana",
-    "extensions": ["hej2"]
-  },
-  "image/hsj2": {
-    "source": "iana",
-    "extensions": ["hsj2"]
-  },
-  "image/ief": {
-    "source": "iana",
-    "extensions": ["ief"]
-  },
-  "image/jls": {
-    "source": "iana",
-    "extensions": ["jls"]
-  },
-  "image/jp2": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["jp2","jpg2"]
-  },
-  "image/jpeg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["jpeg","jpg","jpe"]
-  },
-  "image/jph": {
-    "source": "iana",
-    "extensions": ["jph"]
-  },
-  "image/jphc": {
-    "source": "iana",
-    "extensions": ["jhc"]
-  },
-  "image/jpm": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["jpm"]
-  },
-  "image/jpx": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["jpx","jpf"]
-  },
-  "image/jxr": {
-    "source": "iana",
-    "extensions": ["jxr"]
-  },
-  "image/jxra": {
-    "source": "iana",
-    "extensions": ["jxra"]
-  },
-  "image/jxrs": {
-    "source": "iana",
-    "extensions": ["jxrs"]
-  },
-  "image/jxs": {
-    "source": "iana",
-    "extensions": ["jxs"]
-  },
-  "image/jxsc": {
-    "source": "iana",
-    "extensions": ["jxsc"]
-  },
-  "image/jxsi": {
-    "source": "iana",
-    "extensions": ["jxsi"]
-  },
-  "image/jxss": {
-    "source": "iana",
-    "extensions": ["jxss"]
-  },
-  "image/ktx": {
-    "source": "iana",
-    "extensions": ["ktx"]
-  },
-  "image/naplps": {
-    "source": "iana"
-  },
-  "image/pjpeg": {
-    "compressible": false
-  },
-  "image/png": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["png"]
-  },
-  "image/prs.btif": {
-    "source": "iana",
-    "extensions": ["btif"]
-  },
-  "image/prs.pti": {
-    "source": "iana",
-    "extensions": ["pti"]
-  },
-  "image/pwg-raster": {
-    "source": "iana"
-  },
-  "image/sgi": {
-    "source": "apache",
-    "extensions": ["sgi"]
-  },
-  "image/svg+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["svg","svgz"]
-  },
-  "image/t38": {
-    "source": "iana",
-    "extensions": ["t38"]
-  },
-  "image/tiff": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["tif","tiff"]
-  },
-  "image/tiff-fx": {
-    "source": "iana",
-    "extensions": ["tfx"]
-  },
-  "image/vnd.adobe.photoshop": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["psd"]
-  },
-  "image/vnd.airzip.accelerator.azv": {
-    "source": "iana",
-    "extensions": ["azv"]
-  },
-  "image/vnd.cns.inf2": {
-    "source": "iana"
-  },
-  "image/vnd.dece.graphic": {
-    "source": "iana",
-    "extensions": ["uvi","uvvi","uvg","uvvg"]
-  },
-  "image/vnd.djvu": {
-    "source": "iana",
-    "extensions": ["djvu","djv"]
-  },
-  "image/vnd.dvb.subtitle": {
-    "source": "iana",
-    "extensions": ["sub"]
-  },
-  "image/vnd.dwg": {
-    "source": "iana",
-    "extensions": ["dwg"]
-  },
-  "image/vnd.dxf": {
-    "source": "iana",
-    "extensions": ["dxf"]
-  },
-  "image/vnd.fastbidsheet": {
-    "source": "iana",
-    "extensions": ["fbs"]
-  },
-  "image/vnd.fpx": {
-    "source": "iana",
-    "extensions": ["fpx"]
-  },
-  "image/vnd.fst": {
-    "source": "iana",
-    "extensions": ["fst"]
-  },
-  "image/vnd.fujixerox.edmics-mmr": {
-    "source": "iana",
-    "extensions": ["mmr"]
-  },
-  "image/vnd.fujixerox.edmics-rlc": {
-    "source": "iana",
-    "extensions": ["rlc"]
-  },
-  "image/vnd.globalgraphics.pgb": {
-    "source": "iana"
-  },
-  "image/vnd.microsoft.icon": {
-    "source": "iana",
-    "extensions": ["ico"]
-  },
-  "image/vnd.mix": {
-    "source": "iana"
-  },
-  "image/vnd.mozilla.apng": {
-    "source": "iana"
-  },
-  "image/vnd.ms-dds": {
-    "extensions": ["dds"]
-  },
-  "image/vnd.ms-modi": {
-    "source": "iana",
-    "extensions": ["mdi"]
-  },
-  "image/vnd.ms-photo": {
-    "source": "apache",
-    "extensions": ["wdp"]
-  },
-  "image/vnd.net-fpx": {
-    "source": "iana",
-    "extensions": ["npx"]
-  },
-  "image/vnd.radiance": {
-    "source": "iana"
-  },
-  "image/vnd.sealed.png": {
-    "source": "iana"
-  },
-  "image/vnd.sealedmedia.softseal.gif": {
-    "source": "iana"
-  },
-  "image/vnd.sealedmedia.softseal.jpg": {
-    "source": "iana"
-  },
-  "image/vnd.svf": {
-    "source": "iana"
-  },
-  "image/vnd.tencent.tap": {
-    "source": "iana",
-    "extensions": ["tap"]
-  },
-  "image/vnd.valve.source.texture": {
-    "source": "iana",
-    "extensions": ["vtf"]
-  },
-  "image/vnd.wap.wbmp": {
-    "source": "iana",
-    "extensions": ["wbmp"]
-  },
-  "image/vnd.xiff": {
-    "source": "iana",
-    "extensions": ["xif"]
-  },
-  "image/vnd.zbrush.pcx": {
-    "source": "iana",
-    "extensions": ["pcx"]
-  },
-  "image/webp": {
-    "source": "apache",
-    "extensions": ["webp"]
-  },
-  "image/wmf": {
-    "source": "iana",
-    "extensions": ["wmf"]
-  },
-  "image/x-3ds": {
-    "source": "apache",
-    "extensions": ["3ds"]
-  },
-  "image/x-cmu-raster": {
-    "source": "apache",
-    "extensions": ["ras"]
-  },
-  "image/x-cmx": {
-    "source": "apache",
-    "extensions": ["cmx"]
-  },
-  "image/x-freehand": {
-    "source": "apache",
-    "extensions": ["fh","fhc","fh4","fh5","fh7"]
-  },
-  "image/x-icon": {
-    "source": "apache",
-    "compressible": true,
-    "extensions": ["ico"]
-  },
-  "image/x-jng": {
-    "source": "nginx",
-    "extensions": ["jng"]
-  },
-  "image/x-mrsid-image": {
-    "source": "apache",
-    "extensions": ["sid"]
-  },
-  "image/x-ms-bmp": {
-    "source": "nginx",
-    "compressible": true,
-    "extensions": ["bmp"]
-  },
-  "image/x-pcx": {
-    "source": "apache",
-    "extensions": ["pcx"]
-  },
-  "image/x-pict": {
-    "source": "apache",
-    "extensions": ["pic","pct"]
-  },
-  "image/x-portable-anymap": {
-    "source": "apache",
-    "extensions": ["pnm"]
-  },
-  "image/x-portable-bitmap": {
-    "source": "apache",
-    "extensions": ["pbm"]
-  },
-  "image/x-portable-graymap": {
-    "source": "apache",
-    "extensions": ["pgm"]
-  },
-  "image/x-portable-pixmap": {
-    "source": "apache",
-    "extensions": ["ppm"]
-  },
-  "image/x-rgb": {
-    "source": "apache",
-    "extensions": ["rgb"]
-  },
-  "image/x-tga": {
-    "source": "apache",
-    "extensions": ["tga"]
-  },
-  "image/x-xbitmap": {
-    "source": "apache",
-    "extensions": ["xbm"]
-  },
-  "image/x-xcf": {
-    "compressible": false
-  },
-  "image/x-xpixmap": {
-    "source": "apache",
-    "extensions": ["xpm"]
-  },
-  "image/x-xwindowdump": {
-    "source": "apache",
-    "extensions": ["xwd"]
-  },
-  "message/cpim": {
-    "source": "iana"
-  },
-  "message/delivery-status": {
-    "source": "iana"
-  },
-  "message/disposition-notification": {
-    "source": "iana",
-    "extensions": [
-      "disposition-notification"
-    ]
-  },
-  "message/external-body": {
-    "source": "iana"
-  },
-  "message/feedback-report": {
-    "source": "iana"
-  },
-  "message/global": {
-    "source": "iana",
-    "extensions": ["u8msg"]
-  },
-  "message/global-delivery-status": {
-    "source": "iana",
-    "extensions": ["u8dsn"]
-  },
-  "message/global-disposition-notification": {
-    "source": "iana",
-    "extensions": ["u8mdn"]
-  },
-  "message/global-headers": {
-    "source": "iana",
-    "extensions": ["u8hdr"]
-  },
-  "message/http": {
-    "source": "iana",
-    "compressible": false
-  },
-  "message/imdn+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "message/news": {
-    "source": "iana"
-  },
-  "message/partial": {
-    "source": "iana",
-    "compressible": false
-  },
-  "message/rfc822": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["eml","mime"]
-  },
-  "message/s-http": {
-    "source": "iana"
-  },
-  "message/sip": {
-    "source": "iana"
-  },
-  "message/sipfrag": {
-    "source": "iana"
-  },
-  "message/tracking-status": {
-    "source": "iana"
-  },
-  "message/vnd.si.simp": {
-    "source": "iana"
-  },
-  "message/vnd.wfa.wsc": {
-    "source": "iana",
-    "extensions": ["wsc"]
-  },
-  "model/3mf": {
-    "source": "iana",
-    "extensions": ["3mf"]
-  },
-  "model/gltf+json": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["gltf"]
-  },
-  "model/gltf-binary": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["glb"]
-  },
-  "model/iges": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["igs","iges"]
-  },
-  "model/mesh": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["msh","mesh","silo"]
-  },
-  "model/mtl": {
-    "source": "iana",
-    "extensions": ["mtl"]
-  },
-  "model/obj": {
-    "source": "iana",
-    "extensions": ["obj"]
-  },
-  "model/stl": {
-    "source": "iana",
-    "extensions": ["stl"]
-  },
-  "model/vnd.collada+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["dae"]
-  },
-  "model/vnd.dwf": {
-    "source": "iana",
-    "extensions": ["dwf"]
-  },
-  "model/vnd.flatland.3dml": {
-    "source": "iana"
-  },
-  "model/vnd.gdl": {
-    "source": "iana",
-    "extensions": ["gdl"]
-  },
-  "model/vnd.gs-gdl": {
-    "source": "apache"
-  },
-  "model/vnd.gs.gdl": {
-    "source": "iana"
-  },
-  "model/vnd.gtw": {
-    "source": "iana",
-    "extensions": ["gtw"]
-  },
-  "model/vnd.moml+xml": {
-    "source": "iana",
-    "compressible": true
-  },
-  "model/vnd.mts": {
-    "source": "iana",
-    "extensions": ["mts"]
-  },
-  "model/vnd.opengex": {
-    "source": "iana",
-    "extensions": ["ogex"]
-  },
-  "model/vnd.parasolid.transmit.binary": {
-    "source": "iana",
-    "extensions": ["x_b"]
-  },
-  "model/vnd.parasolid.transmit.text": {
-    "source": "iana",
-    "extensions": ["x_t"]
-  },
-  "model/vnd.rosette.annotated-data-model": {
-    "source": "iana"
-  },
-  "model/vnd.usdz+zip": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["usdz"]
-  },
-  "model/vnd.valve.source.compiled-map": {
-    "source": "iana",
-    "extensions": ["bsp"]
-  },
-  "model/vnd.vtu": {
-    "source": "iana",
-    "extensions": ["vtu"]
-  },
-  "model/vrml": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["wrl","vrml"]
-  },
-  "model/x3d+binary": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["x3db","x3dbz"]
-  },
-  "model/x3d+fastinfoset": {
-    "source": "iana",
-    "extensions": ["x3db"]
-  },
-  "model/x3d+vrml": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["x3dv","x3dvz"]
-  },
-  "model/x3d+xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["x3d","x3dz"]
-  },
-  "model/x3d-vrml": {
-    "source": "iana",
-    "extensions": ["x3dv"]
-  },
-  "multipart/alternative": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/appledouble": {
-    "source": "iana"
-  },
-  "multipart/byteranges": {
-    "source": "iana"
-  },
-  "multipart/digest": {
-    "source": "iana"
-  },
-  "multipart/encrypted": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/form-data": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/header-set": {
-    "source": "iana"
-  },
-  "multipart/mixed": {
-    "source": "iana"
-  },
-  "multipart/multilingual": {
-    "source": "iana"
-  },
-  "multipart/parallel": {
-    "source": "iana"
-  },
-  "multipart/related": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/report": {
-    "source": "iana"
-  },
-  "multipart/signed": {
-    "source": "iana",
-    "compressible": false
-  },
-  "multipart/vnd.bint.med-plus": {
-    "source": "iana"
-  },
-  "multipart/voice-message": {
-    "source": "iana"
-  },
-  "multipart/x-mixed-replace": {
-    "source": "iana"
-  },
-  "text/1d-interleaved-parityfec": {
-    "source": "iana"
-  },
-  "text/cache-manifest": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["appcache","manifest"]
-  },
-  "text/calendar": {
-    "source": "iana",
-    "extensions": ["ics","ifb"]
-  },
-  "text/calender": {
-    "compressible": true
-  },
-  "text/cmd": {
-    "compressible": true
-  },
-  "text/coffeescript": {
-    "extensions": ["coffee","litcoffee"]
-  },
-  "text/css": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["css"]
-  },
-  "text/csv": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["csv"]
-  },
-  "text/csv-schema": {
-    "source": "iana"
-  },
-  "text/directory": {
-    "source": "iana"
-  },
-  "text/dns": {
-    "source": "iana"
-  },
-  "text/ecmascript": {
-    "source": "iana"
-  },
-  "text/encaprtp": {
-    "source": "iana"
-  },
-  "text/enriched": {
-    "source": "iana"
-  },
-  "text/flexfec": {
-    "source": "iana"
-  },
-  "text/fwdred": {
-    "source": "iana"
-  },
-  "text/grammar-ref-list": {
-    "source": "iana"
-  },
-  "text/html": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["html","htm","shtml"]
-  },
-  "text/jade": {
-    "extensions": ["jade"]
-  },
-  "text/javascript": {
-    "source": "iana",
-    "compressible": true
-  },
-  "text/jcr-cnd": {
-    "source": "iana"
-  },
-  "text/jsx": {
-    "compressible": true,
-    "extensions": ["jsx"]
-  },
-  "text/less": {
-    "compressible": true,
-    "extensions": ["less"]
-  },
-  "text/markdown": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["markdown","md"]
-  },
-  "text/mathml": {
-    "source": "nginx",
-    "extensions": ["mml"]
-  },
-  "text/mdx": {
-    "compressible": true,
-    "extensions": ["mdx"]
-  },
-  "text/mizar": {
-    "source": "iana"
-  },
-  "text/n3": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["n3"]
-  },
-  "text/parameters": {
-    "source": "iana",
-    "charset": "UTF-8"
-  },
-  "text/parityfec": {
-    "source": "iana"
-  },
-  "text/plain": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["txt","text","conf","def","list","log","in","ini"]
-  },
-  "text/provenance-notation": {
-    "source": "iana",
-    "charset": "UTF-8"
-  },
-  "text/prs.fallenstein.rst": {
-    "source": "iana"
-  },
-  "text/prs.lines.tag": {
-    "source": "iana",
-    "extensions": ["dsc"]
-  },
-  "text/prs.prop.logic": {
-    "source": "iana"
-  },
-  "text/raptorfec": {
-    "source": "iana"
-  },
-  "text/red": {
-    "source": "iana"
-  },
-  "text/rfc822-headers": {
-    "source": "iana"
-  },
-  "text/richtext": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rtx"]
-  },
-  "text/rtf": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["rtf"]
-  },
-  "text/rtp-enc-aescm128": {
-    "source": "iana"
-  },
-  "text/rtploopback": {
-    "source": "iana"
-  },
-  "text/rtx": {
-    "source": "iana"
-  },
-  "text/sgml": {
-    "source": "iana",
-    "extensions": ["sgml","sgm"]
-  },
-  "text/shex": {
-    "extensions": ["shex"]
-  },
-  "text/slim": {
-    "extensions": ["slim","slm"]
-  },
-  "text/strings": {
-    "source": "iana"
-  },
-  "text/stylus": {
-    "extensions": ["stylus","styl"]
-  },
-  "text/t140": {
-    "source": "iana"
-  },
-  "text/tab-separated-values": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["tsv"]
-  },
-  "text/troff": {
-    "source": "iana",
-    "extensions": ["t","tr","roff","man","me","ms"]
-  },
-  "text/turtle": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "extensions": ["ttl"]
-  },
-  "text/ulpfec": {
-    "source": "iana"
-  },
-  "text/uri-list": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["uri","uris","urls"]
-  },
-  "text/vcard": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["vcard"]
-  },
-  "text/vnd.a": {
-    "source": "iana"
-  },
-  "text/vnd.abc": {
-    "source": "iana"
-  },
-  "text/vnd.ascii-art": {
-    "source": "iana"
-  },
-  "text/vnd.curl": {
-    "source": "iana",
-    "extensions": ["curl"]
-  },
-  "text/vnd.curl.dcurl": {
-    "source": "apache",
-    "extensions": ["dcurl"]
-  },
-  "text/vnd.curl.mcurl": {
-    "source": "apache",
-    "extensions": ["mcurl"]
-  },
-  "text/vnd.curl.scurl": {
-    "source": "apache",
-    "extensions": ["scurl"]
-  },
-  "text/vnd.debian.copyright": {
-    "source": "iana",
-    "charset": "UTF-8"
-  },
-  "text/vnd.dmclientscript": {
-    "source": "iana"
-  },
-  "text/vnd.dvb.subtitle": {
-    "source": "iana",
-    "extensions": ["sub"]
-  },
-  "text/vnd.esmertec.theme-descriptor": {
-    "source": "iana",
-    "charset": "UTF-8"
-  },
-  "text/vnd.ficlab.flt": {
-    "source": "iana"
-  },
-  "text/vnd.fly": {
-    "source": "iana",
-    "extensions": ["fly"]
-  },
-  "text/vnd.fmi.flexstor": {
-    "source": "iana",
-    "extensions": ["flx"]
-  },
-  "text/vnd.gml": {
-    "source": "iana"
-  },
-  "text/vnd.graphviz": {
-    "source": "iana",
-    "extensions": ["gv"]
-  },
-  "text/vnd.hgl": {
-    "source": "iana"
-  },
-  "text/vnd.in3d.3dml": {
-    "source": "iana",
-    "extensions": ["3dml"]
-  },
-  "text/vnd.in3d.spot": {
-    "source": "iana",
-    "extensions": ["spot"]
-  },
-  "text/vnd.iptc.newsml": {
-    "source": "iana"
-  },
-  "text/vnd.iptc.nitf": {
-    "source": "iana"
-  },
-  "text/vnd.latex-z": {
-    "source": "iana"
-  },
-  "text/vnd.motorola.reflex": {
-    "source": "iana"
-  },
-  "text/vnd.ms-mediapackage": {
-    "source": "iana"
-  },
-  "text/vnd.net2phone.commcenter.command": {
-    "source": "iana"
-  },
-  "text/vnd.radisys.msml-basic-layout": {
-    "source": "iana"
-  },
-  "text/vnd.senx.warpscript": {
-    "source": "iana"
-  },
-  "text/vnd.si.uricatalogue": {
-    "source": "iana"
-  },
-  "text/vnd.sosi": {
-    "source": "iana"
-  },
-  "text/vnd.sun.j2me.app-descriptor": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "extensions": ["jad"]
-  },
-  "text/vnd.trolltech.linguist": {
-    "source": "iana",
-    "charset": "UTF-8"
-  },
-  "text/vnd.wap.si": {
-    "source": "iana"
-  },
-  "text/vnd.wap.sl": {
-    "source": "iana"
-  },
-  "text/vnd.wap.wml": {
-    "source": "iana",
-    "extensions": ["wml"]
-  },
-  "text/vnd.wap.wmlscript": {
-    "source": "iana",
-    "extensions": ["wmls"]
-  },
-  "text/vtt": {
-    "source": "iana",
-    "charset": "UTF-8",
-    "compressible": true,
-    "extensions": ["vtt"]
-  },
-  "text/x-asm": {
-    "source": "apache",
-    "extensions": ["s","asm"]
-  },
-  "text/x-c": {
-    "source": "apache",
-    "extensions": ["c","cc","cxx","cpp","h","hh","dic"]
-  },
-  "text/x-component": {
-    "source": "nginx",
-    "extensions": ["htc"]
-  },
-  "text/x-fortran": {
-    "source": "apache",
-    "extensions": ["f","for","f77","f90"]
-  },
-  "text/x-gwt-rpc": {
-    "compressible": true
-  },
-  "text/x-handlebars-template": {
-    "extensions": ["hbs"]
-  },
-  "text/x-java-source": {
-    "source": "apache",
-    "extensions": ["java"]
-  },
-  "text/x-jquery-tmpl": {
-    "compressible": true
-  },
-  "text/x-lua": {
-    "extensions": ["lua"]
-  },
-  "text/x-markdown": {
-    "compressible": true,
-    "extensions": ["mkd"]
-  },
-  "text/x-nfo": {
-    "source": "apache",
-    "extensions": ["nfo"]
-  },
-  "text/x-opml": {
-    "source": "apache",
-    "extensions": ["opml"]
-  },
-  "text/x-org": {
-    "compressible": true,
-    "extensions": ["org"]
-  },
-  "text/x-pascal": {
-    "source": "apache",
-    "extensions": ["p","pas"]
-  },
-  "text/x-processing": {
-    "compressible": true,
-    "extensions": ["pde"]
-  },
-  "text/x-sass": {
-    "extensions": ["sass"]
-  },
-  "text/x-scss": {
-    "extensions": ["scss"]
-  },
-  "text/x-setext": {
-    "source": "apache",
-    "extensions": ["etx"]
-  },
-  "text/x-sfv": {
-    "source": "apache",
-    "extensions": ["sfv"]
-  },
-  "text/x-suse-ymp": {
-    "compressible": true,
-    "extensions": ["ymp"]
-  },
-  "text/x-uuencode": {
-    "source": "apache",
-    "extensions": ["uu"]
-  },
-  "text/x-vcalendar": {
-    "source": "apache",
-    "extensions": ["vcs"]
-  },
-  "text/x-vcard": {
-    "source": "apache",
-    "extensions": ["vcf"]
-  },
-  "text/xml": {
-    "source": "iana",
-    "compressible": true,
-    "extensions": ["xml"]
-  },
-  "text/xml-external-parsed-entity": {
-    "source": "iana"
-  },
-  "text/yaml": {
-    "extensions": ["yaml","yml"]
-  },
-  "video/1d-interleaved-parityfec": {
-    "source": "iana"
-  },
-  "video/3gpp": {
-    "source": "iana",
-    "extensions": ["3gp","3gpp"]
-  },
-  "video/3gpp-tt": {
-    "source": "iana"
-  },
-  "video/3gpp2": {
-    "source": "iana",
-    "extensions": ["3g2"]
-  },
-  "video/bmpeg": {
-    "source": "iana"
-  },
-  "video/bt656": {
-    "source": "iana"
-  },
-  "video/celb": {
-    "source": "iana"
-  },
-  "video/dv": {
-    "source": "iana"
-  },
-  "video/encaprtp": {
-    "source": "iana"
-  },
-  "video/flexfec": {
-    "source": "iana"
-  },
-  "video/h261": {
-    "source": "iana",
-    "extensions": ["h261"]
-  },
-  "video/h263": {
-    "source": "iana",
-    "extensions": ["h263"]
-  },
-  "video/h263-1998": {
-    "source": "iana"
-  },
-  "video/h263-2000": {
-    "source": "iana"
-  },
-  "video/h264": {
-    "source": "iana",
-    "extensions": ["h264"]
-  },
-  "video/h264-rcdo": {
-    "source": "iana"
-  },
-  "video/h264-svc": {
-    "source": "iana"
-  },
-  "video/h265": {
-    "source": "iana"
-  },
-  "video/iso.segment": {
-    "source": "iana"
-  },
-  "video/jpeg": {
-    "source": "iana",
-    "extensions": ["jpgv"]
-  },
-  "video/jpeg2000": {
-    "source": "iana"
-  },
-  "video/jpm": {
-    "source": "apache",
-    "extensions": ["jpm","jpgm"]
-  },
-  "video/mj2": {
-    "source": "iana",
-    "extensions": ["mj2","mjp2"]
-  },
-  "video/mp1s": {
-    "source": "iana"
-  },
-  "video/mp2p": {
-    "source": "iana"
-  },
-  "video/mp2t": {
-    "source": "iana",
-    "extensions": ["ts"]
-  },
-  "video/mp4": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["mp4","mp4v","mpg4"]
-  },
-  "video/mp4v-es": {
-    "source": "iana"
-  },
-  "video/mpeg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["mpeg","mpg","mpe","m1v","m2v"]
-  },
-  "video/mpeg4-generic": {
-    "source": "iana"
-  },
-  "video/mpv": {
-    "source": "iana"
-  },
-  "video/nv": {
-    "source": "iana"
-  },
-  "video/ogg": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["ogv"]
-  },
-  "video/parityfec": {
-    "source": "iana"
-  },
-  "video/pointer": {
-    "source": "iana"
-  },
-  "video/quicktime": {
-    "source": "iana",
-    "compressible": false,
-    "extensions": ["qt","mov"]
-  },
-  "video/raptorfec": {
-    "source": "iana"
-  },
-  "video/raw": {
-    "source": "iana"
-  },
-  "video/rtp-enc-aescm128": {
-    "source": "iana"
-  },
-  "video/rtploopback": {
-    "source": "iana"
-  },
-  "video/rtx": {
-    "source": "iana"
-  },
-  "video/smpte291": {
-    "source": "iana"
-  },
-  "video/smpte292m": {
-    "source": "iana"
-  },
-  "video/ulpfec": {
-    "source": "iana"
-  },
-  "video/vc1": {
-    "source": "iana"
-  },
-  "video/vc2": {
-    "source": "iana"
-  },
-  "video/vnd.cctv": {
-    "source": "iana"
-  },
-  "video/vnd.dece.hd": {
-    "source": "iana",
-    "extensions": ["uvh","uvvh"]
-  },
-  "video/vnd.dece.mobile": {
-    "source": "iana",
-    "extensions": ["uvm","uvvm"]
-  },
-  "video/vnd.dece.mp4": {
-    "source": "iana"
-  },
-  "video/vnd.dece.pd": {
-    "source": "iana",
-    "extensions": ["uvp","uvvp"]
-  },
-  "video/vnd.dece.sd": {
-    "source": "iana",
-    "extensions": ["uvs","uvvs"]
-  },
-  "video/vnd.dece.video": {
-    "source": "iana",
-    "extensions": ["uvv","uvvv"]
-  },
-  "video/vnd.directv.mpeg": {
-    "source": "iana"
-  },
-  "video/vnd.directv.mpeg-tts": {
-    "source": "iana"
-  },
-  "video/vnd.dlna.mpeg-tts": {
-    "source": "iana"
-  },
-  "video/vnd.dvb.file": {
-    "source": "iana",
-    "extensions": ["dvb"]
-  },
-  "video/vnd.fvt": {
-    "source": "iana",
-    "extensions": ["fvt"]
-  },
-  "video/vnd.hns.video": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.1dparityfec-1010": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.1dparityfec-2005": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.2dparityfec-1010": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.2dparityfec-2005": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.ttsavc": {
-    "source": "iana"
-  },
-  "video/vnd.iptvforum.ttsmpeg2": {
-    "source": "iana"
-  },
-  "video/vnd.motorola.video": {
-    "source": "iana"
-  },
-  "video/vnd.motorola.videop": {
-    "source": "iana"
-  },
-  "video/vnd.mpegurl": {
-    "source": "iana",
-    "extensions": ["mxu","m4u"]
-  },
-  "video/vnd.ms-playready.media.pyv": {
-    "source": "iana",
-    "extensions": ["pyv"]
-  },
-  "video/vnd.nokia.interleaved-multimedia": {
-    "source": "iana"
-  },
-  "video/vnd.nokia.mp4vr": {
-    "source": "iana"
-  },
-  "video/vnd.nokia.videovoip": {
-    "source": "iana"
-  },
-  "video/vnd.objectvideo": {
-    "source": "iana"
-  },
-  "video/vnd.radgamettools.bink": {
-    "source": "iana"
-  },
-  "video/vnd.radgamettools.smacker": {
-    "source": "iana"
-  },
-  "video/vnd.sealed.mpeg1": {
-    "source": "iana"
-  },
-  "video/vnd.sealed.mpeg4": {
-    "source": "iana"
-  },
-  "video/vnd.sealed.swf": {
-    "source": "iana"
-  },
-  "video/vnd.sealedmedia.softseal.mov": {
-    "source": "iana"
-  },
-  "video/vnd.uvvu.mp4": {
-    "source": "iana",
-    "extensions": ["uvu","uvvu"]
-  },
-  "video/vnd.vivo": {
-    "source": "iana",
-    "extensions": ["viv"]
-  },
-  "video/vnd.youtube.yt": {
-    "source": "iana"
-  },
-  "video/vp8": {
-    "source": "iana"
-  },
-  "video/webm": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["webm"]
-  },
-  "video/x-f4v": {
-    "source": "apache",
-    "extensions": ["f4v"]
-  },
-  "video/x-fli": {
-    "source": "apache",
-    "extensions": ["fli"]
-  },
-  "video/x-flv": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["flv"]
-  },
-  "video/x-m4v": {
-    "source": "apache",
-    "extensions": ["m4v"]
-  },
-  "video/x-matroska": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["mkv","mk3d","mks"]
-  },
-  "video/x-mng": {
-    "source": "apache",
-    "extensions": ["mng"]
-  },
-  "video/x-ms-asf": {
-    "source": "apache",
-    "extensions": ["asf","asx"]
-  },
-  "video/x-ms-vob": {
-    "source": "apache",
-    "extensions": ["vob"]
-  },
-  "video/x-ms-wm": {
-    "source": "apache",
-    "extensions": ["wm"]
-  },
-  "video/x-ms-wmv": {
-    "source": "apache",
-    "compressible": false,
-    "extensions": ["wmv"]
-  },
-  "video/x-ms-wmx": {
-    "source": "apache",
-    "extensions": ["wmx"]
-  },
-  "video/x-ms-wvx": {
-    "source": "apache",
-    "extensions": ["wvx"]
-  },
-  "video/x-msvideo": {
-    "source": "apache",
-    "extensions": ["avi"]
-  },
-  "video/x-sgi-movie": {
-    "source": "apache",
-    "extensions": ["movie"]
-  },
-  "video/x-smv": {
-    "source": "apache",
-    "extensions": ["smv"]
-  },
-  "x-conference/x-cooltalk": {
-    "source": "apache",
-    "extensions": ["ice"]
-  },
-  "x-shader/x-fragment": {
-    "compressible": true
-  },
-  "x-shader/x-vertex": {
-    "compressible": true
-  }
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/mime-db/package.json b/signaling_server/service/node_modules/socket.io/node_modules/mime-db/package.json
deleted file mode 100644 (file)
index e897cb5..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-{
-  "_from": "mime-db@1.44.0",
-  "_id": "mime-db@1.44.0",
-  "_inBundle": false,
-  "_integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
-  "_location": "/mime-db",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "mime-db@1.44.0",
-    "name": "mime-db",
-    "escapedName": "mime-db",
-    "rawSpec": "1.44.0",
-    "saveSpec": null,
-    "fetchSpec": "1.44.0"
-  },
-  "_requiredBy": [
-    "/mime-types"
-  ],
-  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-  "_shasum": "fa11c5eb0aca1334b4233cb4d52f10c5a6272f92",
-  "_spec": "mime-db@1.44.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/mime-types",
-  "bugs": {
-    "url": "https://github.com/jshttp/mime-db/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    },
-    {
-      "name": "Robert Kieffer",
-      "email": "robert@broofa.com",
-      "url": "http://github.com/broofa"
-    }
-  ],
-  "deprecated": false,
-  "description": "Media Type Database",
-  "devDependencies": {
-    "bluebird": "3.7.2",
-    "co": "4.6.0",
-    "cogent": "1.0.1",
-    "csv-parse": "4.8.9",
-    "eslint": "6.8.0",
-    "eslint-config-standard": "14.1.1",
-    "eslint-plugin-import": "2.20.2",
-    "eslint-plugin-markdown": "1.0.2",
-    "eslint-plugin-node": "11.1.0",
-    "eslint-plugin-promise": "4.2.1",
-    "eslint-plugin-standard": "4.0.1",
-    "gnode": "0.1.2",
-    "mocha": "7.1.1",
-    "nyc": "15.0.1",
-    "raw-body": "2.4.1",
-    "stream-to-array": "2.3.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "db.json",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/mime-db#readme",
-  "keywords": [
-    "mime",
-    "db",
-    "type",
-    "types",
-    "database",
-    "charset",
-    "charsets"
-  ],
-  "license": "MIT",
-  "name": "mime-db",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/mime-db.git"
-  },
-  "scripts": {
-    "build": "node scripts/build",
-    "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx",
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --bail --check-leaks test/",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test",
-    "update": "npm run fetch && npm run build",
-    "version": "node scripts/version-history.js && git add HISTORY.md"
-  },
-  "version": "1.44.0"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/mime-types/HISTORY.md b/signaling_server/service/node_modules/socket.io/node_modules/mime-types/HISTORY.md
deleted file mode 100644 (file)
index e93149a..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-2.1.27 / 2020-04-23
-===================
-
-  * deps: mime-db@1.44.0
-    - Add charsets from IANA
-    - Add extension `.cjs` to `application/node`
-    - Add new upstream MIME types
-
-2.1.26 / 2020-01-05
-===================
-
-  * deps: mime-db@1.43.0
-    - Add `application/x-keepass2` with extension `.kdbx`
-    - Add extension `.mxmf` to `audio/mobile-xmf`
-    - Add extensions from IANA for `application/*+xml` types
-    - Add new upstream MIME types
-
-2.1.25 / 2019-11-12
-===================
-
-  * deps: mime-db@1.42.0
-    - Add new upstream MIME types
-    - Add `application/toml` with extension `.toml`
-    - Add `image/vnd.ms-dds` with extension `.dds`
-
-2.1.24 / 2019-04-20
-===================
-
-  * deps: mime-db@1.40.0
-    - Add extensions from IANA for `model/*` types
-    - Add `text/mdx` with extension `.mdx`
-
-2.1.23 / 2019-04-17
-===================
-
-  * deps: mime-db@~1.39.0
-    - Add extensions `.siv` and `.sieve` to `application/sieve`
-    - Add new upstream MIME types
-
-2.1.22 / 2019-02-14
-===================
-
-  * deps: mime-db@~1.38.0
-    - Add extension `.nq` to `application/n-quads`
-    - Add extension `.nt` to `application/n-triples`
-    - Add new upstream MIME types
-    - Mark `text/less` as compressible
-
-2.1.21 / 2018-10-19
-===================
-
-  * deps: mime-db@~1.37.0
-    - Add extensions to HEIC image types
-    - Add new upstream MIME types
-
-2.1.20 / 2018-08-26
-===================
-
-  * deps: mime-db@~1.36.0
-    - Add Apple file extensions from IANA
-    - Add extensions from IANA for `image/*` types
-    - Add new upstream MIME types
-
-2.1.19 / 2018-07-17
-===================
-
-  * deps: mime-db@~1.35.0
-    - Add extension `.csl` to `application/vnd.citationstyles.style+xml`
-    - Add extension `.es` to `application/ecmascript`
-    - Add extension `.owl` to `application/rdf+xml`
-    - Add new upstream MIME types
-    - Add UTF-8 as default charset for `text/turtle`
-
-2.1.18 / 2018-02-16
-===================
-
-  * deps: mime-db@~1.33.0
-    - Add `application/raml+yaml` with extension `.raml`
-    - Add `application/wasm` with extension `.wasm`
-    - Add `text/shex` with extension `.shex`
-    - Add extensions for JPEG-2000 images
-    - Add extensions from IANA for `message/*` types
-    - Add new upstream MIME types
-    - Update font MIME types
-    - Update `text/hjson` to registered `application/hjson`
-
-2.1.17 / 2017-09-01
-===================
-
-  * deps: mime-db@~1.30.0
-    - Add `application/vnd.ms-outlook`
-    - Add `application/x-arj`
-    - Add extension `.mjs` to `application/javascript`
-    - Add glTF types and extensions
-    - Add new upstream MIME types
-    - Add `text/x-org`
-    - Add VirtualBox MIME types
-    - Fix `source` records for `video/*` types that are IANA
-    - Update `font/opentype` to registered `font/otf`
-
-2.1.16 / 2017-07-24
-===================
-
-  * deps: mime-db@~1.29.0
-    - Add `application/fido.trusted-apps+json`
-    - Add extension `.wadl` to `application/vnd.sun.wadl+xml`
-    - Add extension `.gz` to `application/gzip`
-    - Add new upstream MIME types
-    - Update extensions `.md` and `.markdown` to be `text/markdown`
-
-2.1.15 / 2017-03-23
-===================
-
-  * deps: mime-db@~1.27.0
-    - Add new mime types
-    - Add `image/apng`
-
-2.1.14 / 2017-01-14
-===================
-
-  * deps: mime-db@~1.26.0
-    - Add new mime types
-
-2.1.13 / 2016-11-18
-===================
-
-  * deps: mime-db@~1.25.0
-    - Add new mime types
-
-2.1.12 / 2016-09-18
-===================
-
-  * deps: mime-db@~1.24.0
-    - Add new mime types
-    - Add `audio/mp3`
-
-2.1.11 / 2016-05-01
-===================
-
-  * deps: mime-db@~1.23.0
-    - Add new mime types
-
-2.1.10 / 2016-02-15
-===================
-
-  * deps: mime-db@~1.22.0
-    - Add new mime types
-    - Fix extension of `application/dash+xml`
-    - Update primary extension for `audio/mp4`
-
-2.1.9 / 2016-01-06
-==================
-
-  * deps: mime-db@~1.21.0
-    - Add new mime types
-
-2.1.8 / 2015-11-30
-==================
-
-  * deps: mime-db@~1.20.0
-    - Add new mime types
-
-2.1.7 / 2015-09-20
-==================
-
-  * deps: mime-db@~1.19.0
-    - Add new mime types
-
-2.1.6 / 2015-09-03
-==================
-
-  * deps: mime-db@~1.18.0
-    - Add new mime types
-
-2.1.5 / 2015-08-20
-==================
-
-  * deps: mime-db@~1.17.0
-    - Add new mime types
-
-2.1.4 / 2015-07-30
-==================
-
-  * deps: mime-db@~1.16.0
-    - Add new mime types
-
-2.1.3 / 2015-07-13
-==================
-
-  * deps: mime-db@~1.15.0
-    - Add new mime types
-
-2.1.2 / 2015-06-25
-==================
-
-  * deps: mime-db@~1.14.0
-    - Add new mime types
-
-2.1.1 / 2015-06-08
-==================
-
-  * perf: fix deopt during mapping
-
-2.1.0 / 2015-06-07
-==================
-
-  * Fix incorrectly treating extension-less file name as extension
-    - i.e. `'path/to/json'` will no longer return `application/json`
-  * Fix `.charset(type)` to accept parameters
-  * Fix `.charset(type)` to match case-insensitive
-  * Improve generation of extension to MIME mapping
-  * Refactor internals for readability and no argument reassignment
-  * Prefer `application/*` MIME types from the same source
-  * Prefer any type over `application/octet-stream`
-  * deps: mime-db@~1.13.0
-    - Add nginx as a source
-    - Add new mime types
-
-2.0.14 / 2015-06-06
-===================
-
-  * deps: mime-db@~1.12.0
-    - Add new mime types
-
-2.0.13 / 2015-05-31
-===================
-
-  * deps: mime-db@~1.11.0
-    - Add new mime types
-
-2.0.12 / 2015-05-19
-===================
-
-  * deps: mime-db@~1.10.0
-    - Add new mime types
-
-2.0.11 / 2015-05-05
-===================
-
-  * deps: mime-db@~1.9.1
-    - Add new mime types
-
-2.0.10 / 2015-03-13
-===================
-
-  * deps: mime-db@~1.8.0
-    - Add new mime types
-
-2.0.9 / 2015-02-09
-==================
-
-  * deps: mime-db@~1.7.0
-    - Add new mime types
-    - Community extensions ownership transferred from `node-mime`
-
-2.0.8 / 2015-01-29
-==================
-
-  * deps: mime-db@~1.6.0
-    - Add new mime types
-
-2.0.7 / 2014-12-30
-==================
-
-  * deps: mime-db@~1.5.0
-    - Add new mime types
-    - Fix various invalid MIME type entries
-
-2.0.6 / 2014-12-30
-==================
-
-  * deps: mime-db@~1.4.0
-    - Add new mime types
-    - Fix various invalid MIME type entries
-    - Remove example template MIME types
-
-2.0.5 / 2014-12-29
-==================
-
-  * deps: mime-db@~1.3.1
-    - Fix missing extensions
-
-2.0.4 / 2014-12-10
-==================
-
-  * deps: mime-db@~1.3.0
-    - Add new mime types
-
-2.0.3 / 2014-11-09
-==================
-
-  * deps: mime-db@~1.2.0
-    - Add new mime types
-
-2.0.2 / 2014-09-28
-==================
-
-  * deps: mime-db@~1.1.0
-    - Add new mime types
-    - Add additional compressible
-    - Update charsets
-
-2.0.1 / 2014-09-07
-==================
-
-  * Support Node.js 0.6
-
-2.0.0 / 2014-09-02
-==================
-
-  * Use `mime-db`
-  * Remove `.define()`
-
-1.0.2 / 2014-08-04
-==================
-
-  * Set charset=utf-8 for `text/javascript`
-
-1.0.1 / 2014-06-24
-==================
-
-  * Add `text/jsx` type
-
-1.0.0 / 2014-05-12
-==================
-
-  * Return `false` for unknown types
-  * Set charset=utf-8 for `application/json`
-
-0.1.0 / 2014-05-02
-==================
-
-  * Initial release
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/mime-types/README.md b/signaling_server/service/node_modules/socket.io/node_modules/mime-types/README.md
deleted file mode 100644 (file)
index 3863339..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-# mime-types
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][travis-image]][travis-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-The ultimate javascript content-type utility.
-
-Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except:
-
-- __No fallbacks.__ Instead of naively returning the first available type,
-  `mime-types` simply returns `false`, so do
-  `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.
-- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.
-- No `.define()` functionality
-- Bug fixes for `.lookup(path)`
-
-Otherwise, the API is compatible with `mime` 1.x.
-
-## Install
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install mime-types
-```
-
-## Adding Types
-
-All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db),
-so open a PR there if you'd like to add mime types.
-
-## API
-
-<!-- eslint-disable no-unused-vars -->
-
-```js
-var mime = require('mime-types')
-```
-
-All functions return `false` if input is invalid or not found.
-
-### mime.lookup(path)
-
-Lookup the content-type associated with a file.
-
-<!-- eslint-disable no-undef -->
-
-```js
-mime.lookup('json') // 'application/json'
-mime.lookup('.md') // 'text/markdown'
-mime.lookup('file.html') // 'text/html'
-mime.lookup('folder/file.js') // 'application/javascript'
-mime.lookup('folder/.htaccess') // false
-
-mime.lookup('cats') // false
-```
-
-### mime.contentType(type)
-
-Create a full content-type header given a content-type or extension.
-When given an extension, `mime.lookup` is used to get the matching
-content-type, otherwise the given content-type is used. Then if the
-content-type does not already have a `charset` parameter, `mime.charset`
-is used to get the default charset and add to the returned content-type.
-
-<!-- eslint-disable no-undef -->
-
-```js
-mime.contentType('markdown') // 'text/x-markdown; charset=utf-8'
-mime.contentType('file.json') // 'application/json; charset=utf-8'
-mime.contentType('text/html') // 'text/html; charset=utf-8'
-mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1'
-
-// from a full path
-mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'
-```
-
-### mime.extension(type)
-
-Get the default extension for a content-type.
-
-<!-- eslint-disable no-undef -->
-
-```js
-mime.extension('application/octet-stream') // 'bin'
-```
-
-### mime.charset(type)
-
-Lookup the implied default charset of a content-type.
-
-<!-- eslint-disable no-undef -->
-
-```js
-mime.charset('text/markdown') // 'UTF-8'
-```
-
-### var type = mime.types[extension]
-
-A map of content-types by extension.
-
-### [extensions...] = mime.extensions[type]
-
-A map of extensions by content-type.
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master
-[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master
-[node-version-image]: https://badgen.net/npm/node/mime-types
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/mime-types
-[npm-url]: https://npmjs.org/package/mime-types
-[npm-version-image]: https://badgen.net/npm/v/mime-types
-[travis-image]: https://badgen.net/travis/jshttp/mime-types/master
-[travis-url]: https://travis-ci.org/jshttp/mime-types
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/mime-types/package.json b/signaling_server/service/node_modules/socket.io/node_modules/mime-types/package.json
deleted file mode 100644 (file)
index 17457c4..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-{
-  "_from": "mime-types@~2.1.24",
-  "_id": "mime-types@2.1.27",
-  "_inBundle": false,
-  "_integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
-  "_location": "/mime-types",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "mime-types@~2.1.24",
-    "name": "mime-types",
-    "escapedName": "mime-types",
-    "rawSpec": "~2.1.24",
-    "saveSpec": null,
-    "fetchSpec": "~2.1.24"
-  },
-  "_requiredBy": [
-    "/accepts"
-  ],
-  "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
-  "_shasum": "47949f98e279ea53119f5722e0f34e529bec009f",
-  "_spec": "mime-types@~2.1.24",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/accepts",
-  "bugs": {
-    "url": "https://github.com/jshttp/mime-types/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Jeremiah Senkpiel",
-      "email": "fishrock123@rocketmail.com",
-      "url": "https://searchbeam.jit.su"
-    },
-    {
-      "name": "Jonathan Ong",
-      "email": "me@jongleberry.com",
-      "url": "http://jongleberry.com"
-    }
-  ],
-  "dependencies": {
-    "mime-db": "1.44.0"
-  },
-  "deprecated": false,
-  "description": "The ultimate javascript content-type utility.",
-  "devDependencies": {
-    "eslint": "6.8.0",
-    "eslint-config-standard": "14.1.1",
-    "eslint-plugin-import": "2.20.2",
-    "eslint-plugin-markdown": "1.0.2",
-    "eslint-plugin-node": "11.1.0",
-    "eslint-plugin-promise": "4.2.1",
-    "eslint-plugin-standard": "4.0.1",
-    "mocha": "7.1.1",
-    "nyc": "15.0.1"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "HISTORY.md",
-    "LICENSE",
-    "index.js"
-  ],
-  "homepage": "https://github.com/jshttp/mime-types#readme",
-  "keywords": [
-    "mime",
-    "types"
-  ],
-  "license": "MIT",
-  "name": "mime-types",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/mime-types.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec test/test.js",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test"
-  },
-  "version": "2.1.27"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/ms/package.json b/signaling_server/service/node_modules/socket.io/node_modules/ms/package.json
deleted file mode 100644 (file)
index e298c02..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "_from": "ms@^2.1.1",
-  "_id": "ms@2.1.2",
-  "_inBundle": false,
-  "_integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-  "_location": "/ms",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "ms@^2.1.1",
-    "name": "ms",
-    "escapedName": "ms",
-    "rawSpec": "^2.1.1",
-    "saveSpec": null,
-    "fetchSpec": "^2.1.1"
-  },
-  "_requiredBy": [
-    "/debug"
-  ],
-  "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-  "_shasum": "d09d1f357b443f493382a8eb3ccd183872ae6009",
-  "_spec": "ms@^2.1.1",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/debug",
-  "bugs": {
-    "url": "https://github.com/zeit/ms/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Tiny millisecond conversion utility",
-  "devDependencies": {
-    "eslint": "4.12.1",
-    "expect.js": "0.3.1",
-    "husky": "0.14.3",
-    "lint-staged": "5.0.0",
-    "mocha": "4.0.1"
-  },
-  "eslintConfig": {
-    "extends": "eslint:recommended",
-    "env": {
-      "node": true,
-      "es6": true
-    }
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/zeit/ms#readme",
-  "license": "MIT",
-  "lint-staged": {
-    "*.js": [
-      "npm run lint",
-      "prettier --single-quote --write",
-      "git add"
-    ]
-  },
-  "main": "./index",
-  "name": "ms",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/zeit/ms.git"
-  },
-  "scripts": {
-    "lint": "eslint lib/* bin/*",
-    "precommit": "lint-staged",
-    "test": "mocha tests.js"
-  },
-  "version": "2.1.2"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/negotiator/package.json b/signaling_server/service/node_modules/socket.io/node_modules/negotiator/package.json
deleted file mode 100644 (file)
index 14d22e6..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "_from": "negotiator@0.6.2",
-  "_id": "negotiator@0.6.2",
-  "_inBundle": false,
-  "_integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
-  "_location": "/negotiator",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "negotiator@0.6.2",
-    "name": "negotiator",
-    "escapedName": "negotiator",
-    "rawSpec": "0.6.2",
-    "saveSpec": null,
-    "fetchSpec": "0.6.2"
-  },
-  "_requiredBy": [
-    "/accepts"
-  ],
-  "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
-  "_shasum": "feacf7ccf525a77ae9634436a64883ffeca346fb",
-  "_spec": "negotiator@0.6.2",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/accepts",
-  "bugs": {
-    "url": "https://github.com/jshttp/negotiator/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Douglas Christopher Wilson",
-      "email": "doug@somethingdoug.com"
-    },
-    {
-      "name": "Federico Romero",
-      "email": "federico.romero@outboxlabs.com"
-    },
-    {
-      "name": "Isaac Z. Schlueter",
-      "email": "i@izs.me",
-      "url": "http://blog.izs.me/"
-    }
-  ],
-  "deprecated": false,
-  "description": "HTTP content negotiation",
-  "devDependencies": {
-    "eslint": "5.16.0",
-    "eslint-plugin-markdown": "1.0.0",
-    "mocha": "6.1.4",
-    "nyc": "14.0.0"
-  },
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "files": [
-    "lib/",
-    "HISTORY.md",
-    "LICENSE",
-    "index.js",
-    "README.md"
-  ],
-  "homepage": "https://github.com/jshttp/negotiator#readme",
-  "keywords": [
-    "http",
-    "content negotiation",
-    "accept",
-    "accept-language",
-    "accept-encoding",
-    "accept-charset"
-  ],
-  "license": "MIT",
-  "name": "negotiator",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jshttp/negotiator.git"
-  },
-  "scripts": {
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "mocha --reporter spec --check-leaks --bail test/",
-    "test-cov": "nyc --reporter=html --reporter=text npm test",
-    "test-travis": "nyc --reporter=text npm test"
-  },
-  "version": "0.6.2"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/object-component/History.md b/signaling_server/service/node_modules/socket.io/node_modules/object-component/History.md
deleted file mode 100644 (file)
index 15e0ee0..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-0.0.3 / 2012-10-15 
-==================
-
-  * package: added `component` namespace (fixes #1)
-
-0.0.2 / 2012-09-20 
-==================
-
-  * add code smell to `.merge()`
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/object-component/Makefile b/signaling_server/service/node_modules/socket.io/node_modules/object-component/Makefile
deleted file mode 100644 (file)
index b6b9850..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-build: components index.js
-       @component build
-
-components:
-       @Component install
-
-clean:
-       rm -fr build components template.js
-
-test:
-       @./node_modules/.bin/mocha \
-               --require should \
-               --reporter spec
-
-.PHONY: clean test
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/object-component/Readme.md b/signaling_server/service/node_modules/socket.io/node_modules/object-component/Readme.md
deleted file mode 100644 (file)
index 2c1f2d6..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-
-# object
-
-  Object utils.
-
-## API
-
-### .keys(obj)
-
-  Return the keys for `obj`.
-
-### .values(obj)
-
-  Return the values for `obj`.
-
-### .length(obj)
-
-  Return the number of keys for `obj`.
-
-### .isEmpty(obj)
-
-  Check if `obj` is empty.
-
-### .merge(a, b)
-
-  Merge object `b` into `a`, returns `a`.
-  Precedence is given to `b`.
-
-## License
-
-  MIT
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/object-component/component.json b/signaling_server/service/node_modules/socket.io/node_modules/object-component/component.json
deleted file mode 100644 (file)
index eebc82a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "object",
-  "description": "Object keys / values / length",
-  "version": "0.0.3",
-  "keywords": ["object", "keys", "utility"],
-  "dependencies": {},
-  "scripts": [
-    "index.js"
-  ]
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/object-component/index.js b/signaling_server/service/node_modules/socket.io/node_modules/object-component/index.js
deleted file mode 100644 (file)
index dba9eeb..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-
-/**
- * HOP ref.
- */
-
-var has = Object.prototype.hasOwnProperty;
-
-/**
- * Return own keys in `obj`.
- *
- * @param {Object} obj
- * @return {Array}
- * @api public
- */
-
-exports.keys = Object.keys || function(obj){
-  var keys = [];
-  for (var key in obj) {
-    if (has.call(obj, key)) {
-      keys.push(key);
-    }
-  }
-  return keys;
-};
-
-/**
- * Return own values in `obj`.
- *
- * @param {Object} obj
- * @return {Array}
- * @api public
- */
-
-exports.values = function(obj){
-  var vals = [];
-  for (var key in obj) {
-    if (has.call(obj, key)) {
-      vals.push(obj[key]);
-    }
-  }
-  return vals;
-};
-
-/**
- * Merge `b` into `a`.
- *
- * @param {Object} a
- * @param {Object} b
- * @return {Object} a
- * @api public
- */
-
-exports.merge = function(a, b){
-  for (var key in b) {
-    if (has.call(b, key)) {
-      a[key] = b[key];
-    }
-  }
-  return a;
-};
-
-/**
- * Return length of `obj`.
- *
- * @param {Object} obj
- * @return {Number}
- * @api public
- */
-
-exports.length = function(obj){
-  return exports.keys(obj).length;
-};
-
-/**
- * Check if `obj` is empty.
- *
- * @param {Object} obj
- * @return {Boolean}
- * @api public
- */
-
-exports.isEmpty = function(obj){
-  return 0 == exports.length(obj);
-};
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/object-component/package.json b/signaling_server/service/node_modules/socket.io/node_modules/object-component/package.json
deleted file mode 100644 (file)
index 5df6f1c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "_from": "object-component@0.0.3",
-  "_id": "object-component@0.0.3",
-  "_inBundle": false,
-  "_integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
-  "_location": "/object-component",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "object-component@0.0.3",
-    "name": "object-component",
-    "escapedName": "object-component",
-    "rawSpec": "0.0.3",
-    "saveSpec": null,
-    "fetchSpec": "0.0.3"
-  },
-  "_requiredBy": [
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
-  "_shasum": "f0c69aa50efc95b866c186f400a33769cb2f1291",
-  "_spec": "object-component@0.0.3",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "object/index.js": "index.js"
-    }
-  },
-  "deprecated": false,
-  "description": "Object utils.",
-  "devDependencies": {
-    "mocha": "*",
-    "should": "*"
-  },
-  "name": "object-component",
-  "version": "0.0.3"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/object-component/test/object.js b/signaling_server/service/node_modules/socket.io/node_modules/object-component/test/object.js
deleted file mode 100644 (file)
index 23a7423..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var object = require('..');
-
-describe('.keys(obj)', function(){
-  it('should return the keys of an object', function(){
-    var obj = { name: 'tobi', age: 1 };
-    object.keys(obj).should.eql(['name', 'age']);
-  })
-})
-
-describe('.values(obj)', function(){
-  it('should return the values of an object', function(){
-    var obj = { name: 'tobi', age: 1 };
-    object.values(obj).should.eql(['tobi', 1]);
-  })
-})
-
-describe('.length(obj)', function(){
-  it('should return key count', function(){
-    var obj = { name: 'tobi', age: 1 };
-    object.length(obj).should.equal(2);
-  })
-})
-
-describe('.merge(a, b)', function(){
-  it('should merge two objects', function(){
-    var a = { foo: 'bar' };
-    var b = { bar: 'baz' };
-    object.merge(a, b).should.eql({ foo: 'bar', bar: 'baz' });
-  })
-
-  it('should give precedence to b', function(){
-    var a = { foo: 'bar' };
-    var b = { foo: 'baz' };
-    object.merge(a, b).should.eql({ foo: 'baz' });
-  })
-})
-
-describe('.isEmpty()', function(){
-  it('should check if the object is empty', function(){
-    object.isEmpty({}).should.be.true;
-    object.isEmpty({ foo: 'bar' }).should.be.false;
-  })
-})
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseqs/.npmignore b/signaling_server/service/node_modules/socket.io/node_modules/parseqs/.npmignore
deleted file mode 100644 (file)
index 38920e1..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-.DS_Store\r
-node_modules\r
-npm-debug.log
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseqs/LICENSE b/signaling_server/service/node_modules/socket.io/node_modules/parseqs/LICENSE
deleted file mode 100644 (file)
index 1472010..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)\r
-\r
-Copyright (c) 2015 Gal Koren\r
-\r
-Permission is hereby granted, free of charge, to any person obtaining a copy\r
-of this software and associated documentation files (the "Software"), to deal\r
-in the Software without restriction, including without limitation the rights\r
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
-copies of the Software, and to permit persons to whom the Software is\r
-furnished to do so, subject to the following conditions:\r
-\r
-The above copyright notice and this permission notice shall be included in\r
-all copies or substantial portions of the Software.\r
-\r
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
-THE SOFTWARE.\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseqs/Makefile b/signaling_server/service/node_modules/socket.io/node_modules/parseqs/Makefile
deleted file mode 100644 (file)
index 2fbcce9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-\r
-test:\r
-       @./node_modules/.bin/mocha test.js\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseqs/README.md b/signaling_server/service/node_modules/socket.io/node_modules/parseqs/README.md
deleted file mode 100644 (file)
index 8c3148a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Provides methods for converting an object into string representation, and vice versa.\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseqs/index.js b/signaling_server/service/node_modules/socket.io/node_modules/parseqs/index.js
deleted file mode 100644 (file)
index f8b486f..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/**\r
- * Compiles a querystring\r
- * Returns string representation of the object\r
- *\r
- * @param {Object}\r
- * @api private\r
- */\r
-\r
-exports.encode = function (obj) {\r
-  var str = '';\r
-\r
-  for (var i in obj) {\r
-    if (obj.hasOwnProperty(i)) {\r
-      if (str.length) str += '&';\r
-      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r
-    }\r
-  }\r
-\r
-  return str;\r
-};\r
-\r
-/**\r
- * Parses a simple querystring into an object\r
- *\r
- * @param {String} qs\r
- * @api private\r
- */\r
-\r
-exports.decode = function(qs){\r
-  var qry = {};\r
-  var pairs = qs.split('&');\r
-  for (var i = 0, l = pairs.length; i < l; i++) {\r
-    var pair = pairs[i].split('=');\r
-    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r
-  }\r
-  return qry;\r
-};\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseqs/package.json b/signaling_server/service/node_modules/socket.io/node_modules/parseqs/package.json
deleted file mode 100644 (file)
index 231849c..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-  "_from": "parseqs@0.0.5",
-  "_id": "parseqs@0.0.5",
-  "_inBundle": false,
-  "_integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
-  "_location": "/parseqs",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "parseqs@0.0.5",
-    "name": "parseqs",
-    "escapedName": "parseqs",
-    "rawSpec": "0.0.5",
-    "saveSpec": null,
-    "fetchSpec": "0.0.5"
-  },
-  "_requiredBy": [
-    "/engine.io-client",
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
-  "_shasum": "d5208a3738e46766e291ba2ea173684921a8b89d",
-  "_spec": "parseqs@0.0.5",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "author": {
-    "name": "Gal Koren"
-  },
-  "bugs": {
-    "url": "https://github.com/get/querystring/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "better-assert": "~1.0.0"
-  },
-  "deprecated": false,
-  "description": "Provides methods for parsing a query string into an object, and vice versa.",
-  "devDependencies": {
-    "better-assert": "~1.0.0",
-    "mocha": "1.17.1"
-  },
-  "homepage": "https://github.com/get/querystring",
-  "license": "MIT",
-  "name": "parseqs",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/get/querystring.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "0.0.5"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseqs/test.js b/signaling_server/service/node_modules/socket.io/node_modules/parseqs/test.js
deleted file mode 100644 (file)
index 362ae65..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-var assert = require('better-assert');\r
-var expect = require('expect.js');\r
-var util = require('./index.js');\r
-\r
-describe('querystring test suite', function(){\r
-       it('should parse a querystring and return an object', function () {\r
-               \r
-               // Single assignment\r
-               var queryObj = util.decode("foo=bar");\r
-               expect(queryObj.foo).to.be("bar");\r
-               \r
-               // Multiple assignments\r
-               queryObj = util.decode("france=paris&germany=berlin");\r
-               expect(queryObj.france).to.be("paris");\r
-               expect(queryObj.germany).to.be("berlin");\r
-               \r
-               // Assignments containing non-alphanumeric characters\r
-               queryObj = util.decode("india=new%20delhi");\r
-               expect(queryObj.india).to.be("new delhi");\r
-       });\r
-       \r
-       it('should construct a query string from an object', function () {\r
-               expect(util.encode({ a: 'b' })).to.be('a=b');\r
-               expect(util.encode({ a: 'b', c: 'd' })).to.be('a=b&c=d');\r
-               expect(util.encode({ a: 'b', c: 'tobi rocks' })).to.be('a=b&c=tobi%20rocks');\r
-       });\r
-});\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseuri/.npmignore b/signaling_server/service/node_modules/socket.io/node_modules/parseuri/.npmignore
deleted file mode 100644 (file)
index 2bae02e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-.DS_Store\r
-.node_modules/*
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseuri/History.md b/signaling_server/service/node_modules/socket.io/node_modules/parseuri/History.md
deleted file mode 100644 (file)
index c198d2c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-\r
-n.n.n / 2014-02-09\r
-==================\r
-\r
- * parseuri first commit\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseuri/LICENSE b/signaling_server/service/node_modules/socket.io/node_modules/parseuri/LICENSE
deleted file mode 100644 (file)
index 25556e8..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)\r
-\r
-Copyright (c) 2014 Gal Koren\r
-\r
-Permission is hereby granted, free of charge, to any person obtaining a copy\r
-of this software and associated documentation files (the "Software"), to deal\r
-in the Software without restriction, including without limitation the rights\r
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
-copies of the Software, and to permit persons to whom the Software is\r
-furnished to do so, subject to the following conditions:\r
-\r
-The above copyright notice and this permission notice shall be included in\r
-all copies or substantial portions of the Software.\r
-\r
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
-THE SOFTWARE.\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseuri/Makefile b/signaling_server/service/node_modules/socket.io/node_modules/parseuri/Makefile
deleted file mode 100644 (file)
index 2fbcce9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-\r
-test:\r
-       @./node_modules/.bin/mocha test.js\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseuri/README.md b/signaling_server/service/node_modules/socket.io/node_modules/parseuri/README.md
deleted file mode 100644 (file)
index f108180..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-# parseuri\r
-Module for parsing URI's in engine.io-client\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseuri/index.js b/signaling_server/service/node_modules/socket.io/node_modules/parseuri/index.js
deleted file mode 100644 (file)
index 88639d5..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/**\r
- * Parses an URI\r
- *\r
- * @author Steven Levithan <stevenlevithan.com> (MIT license)\r
- * @api private\r
- */\r
-\r
-var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;\r
-\r
-var parts = [\r
-    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r
-];\r
-\r
-module.exports = function parseuri(str) {\r
-    var src = str,\r
-        b = str.indexOf('['),\r
-        e = str.indexOf(']');\r
-\r
-    if (b != -1 && e != -1) {\r
-        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r
-    }\r
-\r
-    var m = re.exec(str || ''),\r
-        uri = {},\r
-        i = 14;\r
-\r
-    while (i--) {\r
-        uri[parts[i]] = m[i] || '';\r
-    }\r
-\r
-    if (b != -1 && e != -1) {\r
-        uri.source = src;\r
-        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r
-        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r
-        uri.ipv6uri = true;\r
-    }\r
-\r
-    return uri;\r
-};\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseuri/package.json b/signaling_server/service/node_modules/socket.io/node_modules/parseuri/package.json
deleted file mode 100644 (file)
index 97c9941..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "_from": "parseuri@0.0.5",
-  "_id": "parseuri@0.0.5",
-  "_inBundle": false,
-  "_integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
-  "_location": "/parseuri",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "parseuri@0.0.5",
-    "name": "parseuri",
-    "escapedName": "parseuri",
-    "rawSpec": "0.0.5",
-    "saveSpec": null,
-    "fetchSpec": "0.0.5"
-  },
-  "_requiredBy": [
-    "/engine.io-client",
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
-  "_shasum": "80204a50d4dbb779bfdc6ebe2778d90e4bce320a",
-  "_spec": "parseuri@0.0.5",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "author": "",
-  "bugs": {
-    "url": "https://github.com/get/parseuri/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "better-assert": "~1.0.0"
-  },
-  "deprecated": false,
-  "description": "Method that parses a URI and returns an array of its components",
-  "devDependencies": {
-    "better-assert": "1.0.0",
-    "mocha": "1.17.1"
-  },
-  "homepage": "https://github.com/get/parseuri",
-  "license": "MIT",
-  "name": "parseuri",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/get/parseuri.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "0.0.5"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/parseuri/test.js b/signaling_server/service/node_modules/socket.io/node_modules/parseuri/test.js
deleted file mode 100644 (file)
index 01f5d8c..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-var assert = require('better-assert');\r
-var expect = require('expect.js');\r
-var parseuri = require('./index.js');\r
-\r
-describe('my suite', function(){\r
-       it('should parse an uri', function () {\r
-    var http = parseuri('http://google.com')\r
-      , https = parseuri('https://www.google.com:80')\r
-      , query = parseuri('google.com:8080/foo/bar?foo=bar')\r
-      , localhost = parseuri('localhost:8080')\r
-      , ipv6 = parseuri('2001:0db8:85a3:0042:1000:8a2e:0370:7334')\r
-      , ipv6short = parseuri('2001:db8:85a3:42:1000:8a2e:370:7334')\r
-      , ipv6port = parseuri('2001:db8:85a3:42:1000:8a2e:370:7334:80')\r
-      , ipv6abbrev = parseuri('2001::7334:a:80')\r
-      , ipv6http = parseuri('http://[2001::7334:a]:80')\r
-      , ipv6query = parseuri('http://[2001::7334:a]:80/foo/bar?foo=bar')\r
-\r
-    expect(http.protocol).to.be('http');\r
-    expect(http.port).to.be('');\r
-    expect(http.host).to.be('google.com');\r
-    expect(https.protocol).to.be('https');\r
-    expect(https.port).to.be('80');\r
-    expect(https.host).to.be('www.google.com');\r
-    expect(query.port).to.be('8080');\r
-    expect(query.query).to.be('foo=bar');\r
-    expect(query.path).to.be('/foo/bar');\r
-    expect(query.relative).to.be('/foo/bar?foo=bar');\r
-    expect(localhost.protocol).to.be('');\r
-    expect(localhost.host).to.be('localhost');\r
-    expect(localhost.port).to.be('8080');\r
-    expect(ipv6.protocol).to.be('');\r
-    expect(ipv6.host).to.be('2001:0db8:85a3:0042:1000:8a2e:0370:7334');\r
-    expect(ipv6.port).to.be('');\r
-    expect(ipv6short.protocol).to.be('');\r
-    expect(ipv6short.host).to.be('2001:db8:85a3:42:1000:8a2e:370:7334');\r
-    expect(ipv6short.port).to.be('');\r
-    expect(ipv6port.protocol).to.be('');\r
-    expect(ipv6port.host).to.be('2001:db8:85a3:42:1000:8a2e:370:7334');\r
-    expect(ipv6port.port).to.be('80');\r
-    expect(ipv6abbrev.protocol).to.be('');\r
-    expect(ipv6abbrev.host).to.be('2001::7334:a:80');\r
-    expect(ipv6abbrev.port).to.be('');\r
-    expect(ipv6http.protocol).to.be('http');\r
-    expect(ipv6http.port).to.be('80');\r
-    expect(ipv6http.host).to.be('2001::7334:a');\r
-    expect(ipv6query.protocol).to.be('http');\r
-    expect(ipv6query.port).to.be('80');\r
-    expect(ipv6query.host).to.be('2001::7334:a');\r
-    expect(ipv6query.relative).to.be('/foo/bar?foo=bar');\r
-  });\r
-});\r
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/package.json b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-adapter/package.json
deleted file mode 100644 (file)
index ca0e045..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "_from": "socket.io-adapter@~1.1.0",
-  "_id": "socket.io-adapter@1.1.2",
-  "_inBundle": false,
-  "_integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==",
-  "_location": "/socket.io-adapter",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "socket.io-adapter@~1.1.0",
-    "name": "socket.io-adapter",
-    "escapedName": "socket.io-adapter",
-    "rawSpec": "~1.1.0",
-    "saveSpec": null,
-    "fetchSpec": "~1.1.0"
-  },
-  "_requiredBy": [
-    "/socket.io"
-  ],
-  "_resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
-  "_shasum": "ab3f0d6f66b8fc7fca3959ab5991f82221789be9",
-  "_spec": "socket.io-adapter@~1.1.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io",
-  "bugs": {
-    "url": "https://github.com/socketio/socket.io-adapter/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "default socket.io in-memory adapter",
-  "homepage": "https://github.com/socketio/socket.io-adapter#readme",
-  "license": "MIT",
-  "name": "socket.io-adapter",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/socketio/socket.io-adapter.git"
-  },
-  "version": "1.1.2"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/CHANGELOG.md b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/CHANGELOG.md
new file mode 100644 (file)
index 0000000..b1e87ea
--- /dev/null
@@ -0,0 +1,20 @@
+# [2.4.0](https://github.com/Automattic/socket.io-client/compare/2.3.1...2.4.0) (2021-01-04)
+
+The minor bump is matching the bump of the server, but there is no new feature in this release.
+
+
+## [2.3.1](https://github.com/socketio/socket.io-client/compare/2.3.0...2.3.1) (2020-09-30)
+
+The `debug` dependency has been reverted to `~3.1.0`, as the newer versions contains ES6 syntax which breaks in IE
+browsers.
+
+Please note that this only applied to users that bundle the Socket.IO client in their application, with webpack for
+example, as the "official" bundles (in the dist/ folder) were already transpiled with babel.
+
+For webpack users, you can also take a look at the [webpack-remove-debug](https://github.com/johngodley/webpack-remove-debug)
+plugin.
+
+### Bug Fixes
+
+* fix reconnection after opening socket asynchronously ([#1253](https://github.com/socketio/socket.io-client/issues/1253)) ([050108b](https://github.com/Automattic/socket.io-client/commit/050108b2281effda086b197cf174ee2e8e1aad79))
+
index 865290e..bf7b5de 100644 (file)
@@ -1,7 +1,7 @@
 
 # socket.io-client
 
-[![Build Status](https://secure.travis-ci.org/socketio/socket.io-client.svg?branch=master)](http://travis-ci.org/socketio/socket.io-client)
+[![Build Status](https://github.com/socketio/socket.io-client/workflows/CI/badge.svg)](https://github.com/socketio/socket.io-client/actions)
 [![Dependency Status](https://david-dm.org/socketio/socket.io-client.svg)](https://david-dm.org/socketio/socket.io-client)
 [![devDependency Status](https://david-dm.org/socketio/socket.io-client/dev-status.svg)](https://david-dm.org/socketio/socket.io-client#info=devDependencies)
 [![NPM version](https://badge.fury.io/js/socket.io-client.svg)](https://www.npmjs.com/package/socket.io-client)
@@ -19,7 +19,7 @@ serve the file `socket.io.js` found in the `dist` folder or include it via [CDN]
 ```html
 <script src="/socket.io/socket.io.js"></script>
 <script>
-  var socket = io('http://localhost');
+  var socket = io();
   socket.on('connect', function(){});
   socket.on('event', function(data){});
   socket.on('disconnect', function(){});
@@ -30,7 +30,7 @@ serve the file `socket.io.js` found in the `dist` folder or include it via [CDN]
 // with ES6 import
 import io from 'socket.io-client';
 
-const socket = io('http://localhost');
+const socket = io();
 ```
 
 A slim build (without `JSON3`, a JSON polyfill for IE6/IE7, and `debug`) is also available: `socket.io.slim.js`.
@@ -42,12 +42,22 @@ Socket.IO is compatible with [browserify](http://browserify.org/) and [webpack](
   Add `socket.io-client` to your `package.json` and then:
 
   ```js
-  var socket = require('socket.io-client')('http://localhost');
+  var socket = require('socket.io-client')('http://localhost:3000');
   socket.on('connect', function(){});
   socket.on('event', function(data){});
   socket.on('disconnect', function(){});
   ```
 
+## Debug / logging
+
+In order to see all the client debug output, run the following command on the browser console – including the desired scope – and reload your app page:
+
+```
+localStorage.debug = '*';
+```
+
+And then, filter by the scopes you're interested in. See also: https://socket.io/docs/logging-and-debugging/
+
 ## API
 
 See [API](/docs/API.md)
index 5e48b99..1d158c9 100644 (file)
@@ -1,6 +1,6 @@
 /*!
- * Socket.IO v2.3.0
- * (c) 2014-2019 Guillermo Rauch
+ * Socket.IO v2.4.0
+ * (c) 2014-2021 Guillermo Rauch
  * Released under the MIT License.
  */
 (function webpackUniversalModuleDefinition(root, factory) {
@@ -66,7 +66,7 @@ return /******/ (function(modules) { // webpackBootstrap
        
        var url = __webpack_require__(1);
        var parser = __webpack_require__(7);
-       var Manager = __webpack_require__(15);
+       var Manager = __webpack_require__(12);
        var debug = __webpack_require__(3)('socket.io-client');
        
        /**
@@ -151,8 +151,8 @@ return /******/ (function(modules) { // webpackBootstrap
         * @api public
         */
        
-       exports.Manager = __webpack_require__(15);
-       exports.Socket = __webpack_require__(39);
+       exports.Manager = __webpack_require__(12);
+       exports.Socket = __webpack_require__(37);
 
 
 /***/ }),
@@ -277,8 +277,37 @@ return /******/ (function(modules) { // webpackBootstrap
                uri.ipv6uri = true;
            }
        
+           uri.pathNames = pathNames(uri, uri['path']);
+           uri.queryKey = queryKey(uri, uri['query']);
+       
            return uri;
        };
+       
+       function pathNames(obj, path) {
+           var regx = /\/{2,9}/g,
+               names = path.replace(regx, "/").split("/");
+       
+           if (path.substr(0, 1) == '/' || path.length === 0) {
+               names.splice(0, 1);
+           }
+           if (path.substr(path.length - 1, 1) == '/') {
+               names.splice(names.length - 1, 1);
+           }
+       
+           return names;
+       }
+       
+       function queryKey(uri, query) {
+           var data = {};
+       
+           query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {
+               if ($1) {
+                   data[$1] = $2;
+               }
+           });
+       
+           return data;
+       }
 
 
 /***/ }),
@@ -289,18 +318,19 @@ return /******/ (function(modules) { // webpackBootstrap
        
        var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
        
-       /* eslint-env browser */
-       
        /**
         * This is the web browser implementation of `debug()`.
+        *
+        * Expose `debug()` as the module.
         */
        
+       exports = module.exports = __webpack_require__(5);
        exports.log = log;
        exports.formatArgs = formatArgs;
        exports.save = save;
        exports.load = load;
        exports.useColors = useColors;
-       exports.storage = localstorage();
+       exports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();
        
        /**
         * Colors.
@@ -316,66 +346,75 @@ return /******/ (function(modules) { // webpackBootstrap
         * TODO: add a `localStorage` variable to explicitly enable/disable colors
         */
        
-       // eslint-disable-next-line complexity
        function useColors() {
-               // NB: In an Electron preload script, document will be defined but not fully
-               // initialized. Since we know we're in Chrome, we'll just detect this case
-               // explicitly
-               if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
-                       return true;
-               }
+         // NB: In an Electron preload script, document will be defined but not fully
+         // initialized. Since we know we're in Chrome, we'll just detect this case
+         // explicitly
+         if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
+           return true;
+         }
        
-               // Internet Explorer and Edge do not support colors.
-               if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
-                       return false;
-               }
+         // Internet Explorer and Edge do not support colors.
+         if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+           return false;
+         }
        
-               // Is webkit? http://stackoverflow.com/a/16459606/376773
-               // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
-               return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||
-               // Is firebug? http://stackoverflow.com/a/398120/376773
-               typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||
-               // Is firefox >= v31?
-               // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
-               typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||
-               // Double check webkit in userAgent just in case we are in a worker
-               typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
+         // is webkit? http://stackoverflow.com/a/16459606/376773
+         // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+         return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||
+         // is firebug? http://stackoverflow.com/a/398120/376773
+         typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||
+         // is firefox >= v31?
+         // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+         typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||
+         // double check webkit in userAgent just in case we are in a worker
+         typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
        }
        
        /**
+        * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+        */
+       
+       exports.formatters.j = function (v) {
+         try {
+           return JSON.stringify(v);
+         } catch (err) {
+           return '[UnexpectedJSONParseError]: ' + err.message;
+         }
+       };
+       
+       /**
         * Colorize log arguments if enabled.
         *
         * @api public
         */
        
        function formatArgs(args) {
-               args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);
+         var useColors = this.useColors;
        
-               if (!this.useColors) {
-                       return;
-               }
+         args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);
        
-               var c = 'color: ' + this.color;
-               args.splice(1, 0, c, 'color: inherit');
-       
-               // The final "%c" is somewhat tricky, because there could be other
-               // arguments passed either before or after the %c, so we need to
-               // figure out the correct index to insert the CSS into
-               var index = 0;
-               var lastC = 0;
-               args[0].replace(/%[a-zA-Z%]/g, function (match) {
-                       if (match === '%%') {
-                               return;
-                       }
-                       index++;
-                       if (match === '%c') {
-                               // We only are interested in the *last* %c
-                               // (the user may have provided their own)
-                               lastC = index;
-                       }
-               });
+         if (!useColors) return;
+       
+         var c = 'color: ' + this.color;
+         args.splice(1, 0, c, 'color: inherit');
+       
+         // the final "%c" is somewhat tricky, because there could be other
+         // arguments passed either before or after the %c, so we need to
+         // figure out the correct index to insert the CSS into
+         var index = 0;
+         var lastC = 0;
+         args[0].replace(/%[a-zA-Z%]/g, function (match) {
+           if ('%%' === match) return;
+           index++;
+           if ('%c' === match) {
+             // we only are interested in the *last* %c
+             // (the user may have provided their own)
+             lastC = index;
+           }
+         });
        
-               args.splice(lastC, 0, c);
+         args.splice(lastC, 0, c);
        }
        
        /**
@@ -384,12 +423,11 @@ return /******/ (function(modules) { // webpackBootstrap
         *
         * @api public
         */
-       function log() {
-               var _console;
        
-               // This hackery is required for IE8/9, where
-               // the `console.log` function doesn't have 'apply'
-               return (typeof console === 'undefined' ? 'undefined' : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);
+       function log() {
+         // this hackery is required for IE8/9, where
+         // the `console.log` function doesn't have 'apply'
+         return 'object' === (typeof console === 'undefined' ? 'undefined' : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments);
        }
        
        /**
@@ -398,17 +436,15 @@ return /******/ (function(modules) { // webpackBootstrap
         * @param {String} namespaces
         * @api private
         */
+       
        function save(namespaces) {
-               try {
-                       if (namespaces) {
-                               exports.storage.setItem('debug', namespaces);
-                       } else {
-                               exports.storage.removeItem('debug');
-                       }
-               } catch (error) {
-                       // Swallow
-                       // XXX (@Qix-) should we be logging these?
-               }
+         try {
+           if (null == namespaces) {
+             exports.storage.removeItem('debug');
+           } else {
+             exports.storage.debug = namespaces;
+           }
+         } catch (e) {}
        }
        
        /**
@@ -417,24 +453,28 @@ return /******/ (function(modules) { // webpackBootstrap
         * @return {String} returns the previously persisted debug modes
         * @api private
         */
-       function load() {
-               var r = void 0;
-               try {
-                       r = exports.storage.getItem('debug');
-               } catch (error) {}
-               // Swallow
-               // XXX (@Qix-) should we be logging these?
        
+       function load() {
+         var r;
+         try {
+           r = exports.storage.debug;
+         } catch (e) {}
        
-               // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
-               if (!r && typeof process !== 'undefined' && 'env' in process) {
-                       r = process.env.DEBUG;
-               }
+         // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+         if (!r && typeof process !== 'undefined' && 'env' in process) {
+           r = process.env.DEBUG;
+         }
        
-               return r;
+         return r;
        }
        
        /**
+        * Enable namespaces listed in `localStorage.debug` initially.
+        */
+       
+       exports.enable(load());
+       
+       /**
         * Localstorage attempts to return the localstorage.
         *
         * This is necessary because safari throws
@@ -446,31 +486,10 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        function localstorage() {
-               try {
-                       // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
-                       // The Browser also has localStorage in the global context.
-                       return localStorage;
-               } catch (error) {
-                       // Swallow
-                       // XXX (@Qix-) should we be logging these?
-               }
+         try {
+           return window.localStorage;
+         } catch (e) {}
        }
-       
-       module.exports = __webpack_require__(5)(exports);
-       
-       var formatters = module.exports.formatters;
-       
-       /**
-        * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
-        */
-       
-       formatters.j = function (v) {
-               try {
-                       return JSON.stringify(v);
-               } catch (error) {
-                       return '[UnexpectedJSONParseError]: ' + error.message;
-               }
-       };
        /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
 
 /***/ }),
@@ -669,274 +688,231 @@ return /******/ (function(modules) { // webpackBootstrap
 
        'use strict';
        
-       function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
-       
        /**
         * This is the common logic for both the Node.js and web browser
         * implementations of `debug()`.
+        *
+        * Expose `debug()` as the module.
         */
        
-       function setup(env) {
-               createDebug.debug = createDebug;
-               createDebug.default = createDebug;
-               createDebug.coerce = coerce;
-               createDebug.disable = disable;
-               createDebug.enable = enable;
-               createDebug.enabled = enabled;
-               createDebug.humanize = __webpack_require__(6);
-       
-               Object.keys(env).forEach(function (key) {
-                       createDebug[key] = env[key];
-               });
+       exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
+       exports.coerce = coerce;
+       exports.disable = disable;
+       exports.enable = enable;
+       exports.enabled = enabled;
+       exports.humanize = __webpack_require__(6);
        
-               /**
+       /**
         * Active `debug` instances.
         */
-               createDebug.instances = [];
+       exports.instances = [];
        
-               /**
+       /**
         * The currently active debug mode names, and names to skip.
         */
        
-               createDebug.names = [];
-               createDebug.skips = [];
+       exports.names = [];
+       exports.skips = [];
        
-               /**
+       /**
         * Map of special "%n" handling functions, for the debug "format" argument.
         *
         * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
         */
-               createDebug.formatters = {};
        
-               /**
-        * Selects a color for a debug namespace
-        * @param {String} namespace The namespace string for the for the debug instance to be colored
-        * @return {Number|String} An ANSI color code for the given namespace
+       exports.formatters = {};
+       
+       /**
+        * Select a color.
+        * @param {String} namespace
+        * @return {Number}
         * @api private
         */
-               function selectColor(namespace) {
-                       var hash = 0;
        
-                       for (var i = 0; i < namespace.length; i++) {
-                               hash = (hash << 5) - hash + namespace.charCodeAt(i);
-                               hash |= 0; // Convert to 32bit integer
-                       }
+       function selectColor(namespace) {
+         var hash = 0,
+             i;
        
-                       return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
-               }
-               createDebug.selectColor = selectColor;
+         for (i in namespace) {
+           hash = (hash << 5) - hash + namespace.charCodeAt(i);
+           hash |= 0; // Convert to 32bit integer
+         }
+       
+         return exports.colors[Math.abs(hash) % exports.colors.length];
+       }
        
-               /**
+       /**
         * Create a debugger with the given `namespace`.
         *
         * @param {String} namespace
         * @return {Function}
         * @api public
         */
-               function createDebug(namespace) {
-                       var prevTime = void 0;
        
-                       function debug() {
-                               for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-                                       args[_key] = arguments[_key];
-                               }
+       function createDebug(namespace) {
        
-                               // Disabled?
-                               if (!debug.enabled) {
-                                       return;
-                               }
+         var prevTime;
        
-                               var self = debug;
+         function debug() {
+           // disabled?
+           if (!debug.enabled) return;
        
-                               // Set `diff` timestamp
-                               var curr = Number(new Date());
-                               var ms = curr - (prevTime || curr);
-                               self.diff = ms;
-                               self.prev = prevTime;
-                               self.curr = curr;
-                               prevTime = curr;
+           var self = debug;
        
-                               args[0] = createDebug.coerce(args[0]);
+           // set `diff` timestamp
+           var curr = +new Date();
+           var ms = curr - (prevTime || curr);
+           self.diff = ms;
+           self.prev = prevTime;
+           self.curr = curr;
+           prevTime = curr;
        
-                               if (typeof args[0] !== 'string') {
-                                       // Anything else let's inspect with %O
-                                       args.unshift('%O');
-                               }
+           // turn the `arguments` into a proper Array
+           var args = new Array(arguments.length);
+           for (var i = 0; i < args.length; i++) {
+             args[i] = arguments[i];
+           }
        
-                               // Apply any `formatters` transformations
-                               var index = 0;
-                               args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
-                                       // If we encounter an escaped % then don't increase the array index
-                                       if (match === '%%') {
-                                               return match;
-                                       }
-                                       index++;
-                                       var formatter = createDebug.formatters[format];
-                                       if (typeof formatter === 'function') {
-                                               var val = args[index];
-                                               match = formatter.call(self, val);
-       
-                                               // Now we need to remove `args[index]` since it's inlined in the `format`
-                                               args.splice(index, 1);
-                                               index--;
-                                       }
-                                       return match;
-                               });
-       
-                               // Apply env-specific formatting (colors, etc.)
-                               createDebug.formatArgs.call(self, args);
-       
-                               var logFn = self.log || createDebug.log;
-                               logFn.apply(self, args);
-                       }
+           args[0] = exports.coerce(args[0]);
        
-                       debug.namespace = namespace;
-                       debug.enabled = createDebug.enabled(namespace);
-                       debug.useColors = createDebug.useColors();
-                       debug.color = selectColor(namespace);
-                       debug.destroy = destroy;
-                       debug.extend = extend;
-                       // Debug.formatArgs = formatArgs;
-                       // debug.rawLog = rawLog;
-       
-                       // env-specific initialization logic for debug instances
-                       if (typeof createDebug.init === 'function') {
-                               createDebug.init(debug);
-                       }
+           if ('string' !== typeof args[0]) {
+             // anything else let's inspect with %O
+             args.unshift('%O');
+           }
+       
+           // apply any `formatters` transformations
+           var index = 0;
+           args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
+             // if we encounter an escaped % then don't increase the array index
+             if (match === '%%') return match;
+             index++;
+             var formatter = exports.formatters[format];
+             if ('function' === typeof formatter) {
+               var val = args[index];
+               match = formatter.call(self, val);
        
-                       createDebug.instances.push(debug);
+               // now we need to remove `args[index]` since it's inlined in the `format`
+               args.splice(index, 1);
+               index--;
+             }
+             return match;
+           });
        
-                       return debug;
-               }
+           // apply env-specific formatting (colors, etc.)
+           exports.formatArgs.call(self, args);
        
-               function destroy() {
-                       var index = createDebug.instances.indexOf(this);
-                       if (index !== -1) {
-                               createDebug.instances.splice(index, 1);
-                               return true;
-                       }
-                       return false;
-               }
+           var logFn = debug.log || exports.log || console.log.bind(console);
+           logFn.apply(self, args);
+         }
        
-               function extend(namespace, delimiter) {
-                       var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
-                       newDebug.log = this.log;
-                       return newDebug;
-               }
+         debug.namespace = namespace;
+         debug.enabled = exports.enabled(namespace);
+         debug.useColors = exports.useColors();
+         debug.color = selectColor(namespace);
+         debug.destroy = destroy;
+       
+         // env-specific initialization logic for debug instances
+         if ('function' === typeof exports.init) {
+           exports.init(debug);
+         }
+       
+         exports.instances.push(debug);
+       
+         return debug;
+       }
+       
+       function destroy() {
+         var index = exports.instances.indexOf(this);
+         if (index !== -1) {
+           exports.instances.splice(index, 1);
+           return true;
+         } else {
+           return false;
+         }
+       }
        
-               /**
+       /**
         * Enables a debug mode by namespaces. This can include modes
         * separated by a colon and wildcards.
         *
         * @param {String} namespaces
         * @api public
         */
-               function enable(namespaces) {
-                       createDebug.save(namespaces);
        
-                       createDebug.names = [];
-                       createDebug.skips = [];
+       function enable(namespaces) {
+         exports.save(namespaces);
        
-                       var i = void 0;
-                       var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
-                       var len = split.length;
+         exports.names = [];
+         exports.skips = [];
        
-                       for (i = 0; i < len; i++) {
-                               if (!split[i]) {
-                                       // ignore empty strings
-                                       continue;
-                               }
+         var i;
+         var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+         var len = split.length;
        
-                               namespaces = split[i].replace(/\*/g, '.*?');
+         for (i = 0; i < len; i++) {
+           if (!split[i]) continue; // ignore empty strings
+           namespaces = split[i].replace(/\*/g, '.*?');
+           if (namespaces[0] === '-') {
+             exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+           } else {
+             exports.names.push(new RegExp('^' + namespaces + '$'));
+           }
+         }
        
-                               if (namespaces[0] === '-') {
-                                       createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
-                               } else {
-                                       createDebug.names.push(new RegExp('^' + namespaces + '$'));
-                               }
-                       }
-       
-                       for (i = 0; i < createDebug.instances.length; i++) {
-                               var instance = createDebug.instances[i];
-                               instance.enabled = createDebug.enabled(instance.namespace);
-                       }
-               }
+         for (i = 0; i < exports.instances.length; i++) {
+           var instance = exports.instances[i];
+           instance.enabled = exports.enabled(instance.namespace);
+         }
+       }
        
-               /**
+       /**
         * Disable debug output.
         *
-        * @return {String} namespaces
         * @api public
         */
-               function disable() {
-                       var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) {
-                               return '-' + namespace;
-                       }))).join(',');
-                       createDebug.enable('');
-                       return namespaces;
-               }
        
-               /**
+       function disable() {
+         exports.enable('');
+       }
+       
+       /**
         * Returns true if the given mode name is enabled, false otherwise.
         *
         * @param {String} name
         * @return {Boolean}
         * @api public
         */
-               function enabled(name) {
-                       if (name[name.length - 1] === '*') {
-                               return true;
-                       }
-       
-                       var i = void 0;
-                       var len = void 0;
-       
-                       for (i = 0, len = createDebug.skips.length; i < len; i++) {
-                               if (createDebug.skips[i].test(name)) {
-                                       return false;
-                               }
-                       }
-       
-                       for (i = 0, len = createDebug.names.length; i < len; i++) {
-                               if (createDebug.names[i].test(name)) {
-                                       return true;
-                               }
-                       }
-       
-                       return false;
-               }
        
-               /**
-        * Convert regexp to namespace
-        *
-        * @param {RegExp} regxep
-        * @return {String} namespace
-        * @api private
-        */
-               function toNamespace(regexp) {
-                       return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*');
-               }
+       function enabled(name) {
+         if (name[name.length - 1] === '*') {
+           return true;
+         }
+         var i, len;
+         for (i = 0, len = exports.skips.length; i < len; i++) {
+           if (exports.skips[i].test(name)) {
+             return false;
+           }
+         }
+         for (i = 0, len = exports.names.length; i < len; i++) {
+           if (exports.names[i].test(name)) {
+             return true;
+           }
+         }
+         return false;
+       }
        
-               /**
+       /**
         * Coerce `val`.
         *
         * @param {Mixed} val
         * @return {Mixed}
         * @api private
         */
-               function coerce(val) {
-                       if (val instanceof Error) {
-                               return val.stack || val.message;
-                       }
-                       return val;
-               }
-       
-               createDebug.enable(createDebug.load());
        
-               return createDebug;
+       function coerce(val) {
+         if (val instanceof Error) return val.stack || val.message;
+         return val;
        }
-       
-       module.exports = setup;
 
 /***/ }),
 /* 6 */
@@ -950,7 +926,6 @@ return /******/ (function(modules) { // webpackBootstrap
        var m = s * 60;
        var h = m * 60;
        var d = h * 24;
-       var w = d * 7;
        var y = d * 365.25;
        
        /**
@@ -972,7 +947,7 @@ return /******/ (function(modules) { // webpackBootstrap
          var type = typeof val;
          if (type === 'string' && val.length > 0) {
            return parse(val);
-         } else if (type === 'number' && isFinite(val)) {
+         } else if (type === 'number' && isNaN(val) === false) {
            return options.long ? fmtLong(val) : fmtShort(val);
          }
          throw new Error(
@@ -994,7 +969,7 @@ return /******/ (function(modules) { // webpackBootstrap
          if (str.length > 100) {
            return;
          }
-         var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
+         var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
            str
          );
          if (!match) {
@@ -1009,10 +984,6 @@ return /******/ (function(modules) { // webpackBootstrap
            case 'yr':
            case 'y':
              return n * y;
-           case 'weeks':
-           case 'week':
-           case 'w':
-             return n * w;
            case 'days':
            case 'day':
            case 'd':
@@ -1055,17 +1026,16 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        function fmtShort(ms) {
-         var msAbs = Math.abs(ms);
-         if (msAbs >= d) {
+         if (ms >= d) {
            return Math.round(ms / d) + 'd';
          }
-         if (msAbs >= h) {
+         if (ms >= h) {
            return Math.round(ms / h) + 'h';
          }
-         if (msAbs >= m) {
+         if (ms >= m) {
            return Math.round(ms / m) + 'm';
          }
-         if (msAbs >= s) {
+         if (ms >= s) {
            return Math.round(ms / s) + 's';
          }
          return ms + 'ms';
@@ -1080,29 +1050,25 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        function fmtLong(ms) {
-         var msAbs = Math.abs(ms);
-         if (msAbs >= d) {
-           return plural(ms, msAbs, d, 'day');
-         }
-         if (msAbs >= h) {
-           return plural(ms, msAbs, h, 'hour');
-         }
-         if (msAbs >= m) {
-           return plural(ms, msAbs, m, 'minute');
-         }
-         if (msAbs >= s) {
-           return plural(ms, msAbs, s, 'second');
-         }
-         return ms + ' ms';
+         return plural(ms, d, 'day') ||
+           plural(ms, h, 'hour') ||
+           plural(ms, m, 'minute') ||
+           plural(ms, s, 'second') ||
+           ms + ' ms';
        }
        
        /**
         * Pluralization helper.
         */
        
-       function plural(ms, msAbs, n, name) {
-         var isPlural = msAbs >= n * 1.5;
-         return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
+       function plural(ms, n, name) {
+         if (ms < n) {
+           return;
+         }
+         if (ms < n * 1.5) {
+           return Math.floor(ms / n) + ' ' + name;
+         }
+         return Math.ceil(ms / n) + ' ' + name + 's';
        }
 
 
@@ -1115,11 +1081,11 @@ return /******/ (function(modules) { // webpackBootstrap
         * Module dependencies.
         */
        
-       var debug = __webpack_require__(8)('socket.io-parser');
-       var Emitter = __webpack_require__(11);
-       var binary = __webpack_require__(12);
-       var isArray = __webpack_require__(13);
-       var isBuf = __webpack_require__(14);
+       var debug = __webpack_require__(3)('socket.io-parser');
+       var Emitter = __webpack_require__(8);
+       var binary = __webpack_require__(9);
+       var isArray = __webpack_require__(10);
+       var isBuf = __webpack_require__(11);
        
        /**
         * Protocol version.
@@ -1458,649 +1424,77 @@ return /******/ (function(modules) { // webpackBootstrap
            return JSON.parse(str);
          } catch(e){
            return false;
-         }
-       }
-       
-       /**
-        * Deallocates a parser's resources
-        *
-        * @api public
-        */
-       
-       Decoder.prototype.destroy = function() {
-         if (this.reconstructor) {
-           this.reconstructor.finishedReconstruction();
-         }
-       };
-       
-       /**
-        * A manager of a binary event's 'buffer sequence'. Should
-        * be constructed whenever a packet of type BINARY_EVENT is
-        * decoded.
-        *
-        * @param {Object} packet
-        * @return {BinaryReconstructor} initialized reconstructor
-        * @api private
-        */
-       
-       function BinaryReconstructor(packet) {
-         this.reconPack = packet;
-         this.buffers = [];
-       }
-       
-       /**
-        * Method to be called when binary data received from connection
-        * after a BINARY_EVENT packet.
-        *
-        * @param {Buffer | ArrayBuffer} binData - the raw binary data received
-        * @return {null | Object} returns null if more binary data is expected or
-        *   a reconstructed packet object if all buffers have been received.
-        * @api private
-        */
-       
-       BinaryReconstructor.prototype.takeBinaryData = function(binData) {
-         this.buffers.push(binData);
-         if (this.buffers.length === this.reconPack.attachments) { // done with buffer list
-           var packet = binary.reconstructPacket(this.reconPack, this.buffers);
-           this.finishedReconstruction();
-           return packet;
-         }
-         return null;
-       };
-       
-       /**
-        * Cleans up binary packet reconstruction variables.
-        *
-        * @api private
-        */
-       
-       BinaryReconstructor.prototype.finishedReconstruction = function() {
-         this.reconPack = null;
-         this.buffers = [];
-       };
-       
-       function error(msg) {
-         return {
-           type: exports.ERROR,
-           data: 'parser error: ' + msg
-         };
-       }
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       /* WEBPACK VAR INJECTION */(function(process) {'use strict';
-       
-       var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-       
-       /**
-        * This is the web browser implementation of `debug()`.
-        *
-        * Expose `debug()` as the module.
-        */
-       
-       exports = module.exports = __webpack_require__(9);
-       exports.log = log;
-       exports.formatArgs = formatArgs;
-       exports.save = save;
-       exports.load = load;
-       exports.useColors = useColors;
-       exports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();
-       
-       /**
-        * Colors.
-        */
-       
-       exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];
-       
-       /**
-        * Currently only WebKit-based Web Inspectors, Firefox >= v31,
-        * and the Firebug extension (any Firefox version) are known
-        * to support "%c" CSS customizations.
-        *
-        * TODO: add a `localStorage` variable to explicitly enable/disable colors
-        */
-       
-       function useColors() {
-         // NB: In an Electron preload script, document will be defined but not fully
-         // initialized. Since we know we're in Chrome, we'll just detect this case
-         // explicitly
-         if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
-           return true;
-         }
-       
-         // Internet Explorer and Edge do not support colors.
-         if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
-           return false;
-         }
-       
-         // is webkit? http://stackoverflow.com/a/16459606/376773
-         // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
-         return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||
-         // is firebug? http://stackoverflow.com/a/398120/376773
-         typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||
-         // is firefox >= v31?
-         // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
-         typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||
-         // double check webkit in userAgent just in case we are in a worker
-         typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
-       }
-       
-       /**
-        * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
-        */
-       
-       exports.formatters.j = function (v) {
-         try {
-           return JSON.stringify(v);
-         } catch (err) {
-           return '[UnexpectedJSONParseError]: ' + err.message;
-         }
-       };
-       
-       /**
-        * Colorize log arguments if enabled.
-        *
-        * @api public
-        */
-       
-       function formatArgs(args) {
-         var useColors = this.useColors;
-       
-         args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);
-       
-         if (!useColors) return;
-       
-         var c = 'color: ' + this.color;
-         args.splice(1, 0, c, 'color: inherit');
-       
-         // the final "%c" is somewhat tricky, because there could be other
-         // arguments passed either before or after the %c, so we need to
-         // figure out the correct index to insert the CSS into
-         var index = 0;
-         var lastC = 0;
-         args[0].replace(/%[a-zA-Z%]/g, function (match) {
-           if ('%%' === match) return;
-           index++;
-           if ('%c' === match) {
-             // we only are interested in the *last* %c
-             // (the user may have provided their own)
-             lastC = index;
-           }
-         });
-       
-         args.splice(lastC, 0, c);
-       }
-       
-       /**
-        * Invokes `console.log()` when available.
-        * No-op when `console.log` is not a "function".
-        *
-        * @api public
-        */
-       
-       function log() {
-         // this hackery is required for IE8/9, where
-         // the `console.log` function doesn't have 'apply'
-         return 'object' === (typeof console === 'undefined' ? 'undefined' : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments);
-       }
-       
-       /**
-        * Save `namespaces`.
-        *
-        * @param {String} namespaces
-        * @api private
-        */
-       
-       function save(namespaces) {
-         try {
-           if (null == namespaces) {
-             exports.storage.removeItem('debug');
-           } else {
-             exports.storage.debug = namespaces;
-           }
-         } catch (e) {}
-       }
-       
-       /**
-        * Load `namespaces`.
-        *
-        * @return {String} returns the previously persisted debug modes
-        * @api private
-        */
-       
-       function load() {
-         var r;
-         try {
-           r = exports.storage.debug;
-         } catch (e) {}
-       
-         // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
-         if (!r && typeof process !== 'undefined' && 'env' in process) {
-           r = process.env.DEBUG;
-         }
-       
-         return r;
-       }
-       
-       /**
-        * Enable namespaces listed in `localStorage.debug` initially.
-        */
-       
-       exports.enable(load());
-       
-       /**
-        * Localstorage attempts to return the localstorage.
-        *
-        * This is necessary because safari throws
-        * when a user disables cookies/localstorage
-        * and you attempt to access it.
-        *
-        * @return {LocalStorage}
-        * @api private
-        */
-       
-       function localstorage() {
-         try {
-           return window.localStorage;
-         } catch (e) {}
-       }
-       /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-       'use strict';
-       
-       /**
-        * This is the common logic for both the Node.js and web browser
-        * implementations of `debug()`.
-        *
-        * Expose `debug()` as the module.
-        */
-       
-       exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
-       exports.coerce = coerce;
-       exports.disable = disable;
-       exports.enable = enable;
-       exports.enabled = enabled;
-       exports.humanize = __webpack_require__(10);
-       
-       /**
-        * Active `debug` instances.
-        */
-       exports.instances = [];
-       
-       /**
-        * The currently active debug mode names, and names to skip.
-        */
-       
-       exports.names = [];
-       exports.skips = [];
-       
-       /**
-        * Map of special "%n" handling functions, for the debug "format" argument.
-        *
-        * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
-        */
-       
-       exports.formatters = {};
-       
-       /**
-        * Select a color.
-        * @param {String} namespace
-        * @return {Number}
-        * @api private
-        */
-       
-       function selectColor(namespace) {
-         var hash = 0,
-             i;
-       
-         for (i in namespace) {
-           hash = (hash << 5) - hash + namespace.charCodeAt(i);
-           hash |= 0; // Convert to 32bit integer
-         }
-       
-         return exports.colors[Math.abs(hash) % exports.colors.length];
-       }
-       
-       /**
-        * Create a debugger with the given `namespace`.
-        *
-        * @param {String} namespace
-        * @return {Function}
-        * @api public
-        */
-       
-       function createDebug(namespace) {
-       
-         var prevTime;
-       
-         function debug() {
-           // disabled?
-           if (!debug.enabled) return;
-       
-           var self = debug;
-       
-           // set `diff` timestamp
-           var curr = +new Date();
-           var ms = curr - (prevTime || curr);
-           self.diff = ms;
-           self.prev = prevTime;
-           self.curr = curr;
-           prevTime = curr;
-       
-           // turn the `arguments` into a proper Array
-           var args = new Array(arguments.length);
-           for (var i = 0; i < args.length; i++) {
-             args[i] = arguments[i];
-           }
-       
-           args[0] = exports.coerce(args[0]);
-       
-           if ('string' !== typeof args[0]) {
-             // anything else let's inspect with %O
-             args.unshift('%O');
-           }
-       
-           // apply any `formatters` transformations
-           var index = 0;
-           args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
-             // if we encounter an escaped % then don't increase the array index
-             if (match === '%%') return match;
-             index++;
-             var formatter = exports.formatters[format];
-             if ('function' === typeof formatter) {
-               var val = args[index];
-               match = formatter.call(self, val);
-       
-               // now we need to remove `args[index]` since it's inlined in the `format`
-               args.splice(index, 1);
-               index--;
-             }
-             return match;
-           });
-       
-           // apply env-specific formatting (colors, etc.)
-           exports.formatArgs.call(self, args);
-       
-           var logFn = debug.log || exports.log || console.log.bind(console);
-           logFn.apply(self, args);
-         }
-       
-         debug.namespace = namespace;
-         debug.enabled = exports.enabled(namespace);
-         debug.useColors = exports.useColors();
-         debug.color = selectColor(namespace);
-         debug.destroy = destroy;
-       
-         // env-specific initialization logic for debug instances
-         if ('function' === typeof exports.init) {
-           exports.init(debug);
-         }
-       
-         exports.instances.push(debug);
-       
-         return debug;
-       }
-       
-       function destroy() {
-         var index = exports.instances.indexOf(this);
-         if (index !== -1) {
-           exports.instances.splice(index, 1);
-           return true;
-         } else {
-           return false;
-         }
-       }
-       
-       /**
-        * Enables a debug mode by namespaces. This can include modes
-        * separated by a colon and wildcards.
-        *
-        * @param {String} namespaces
-        * @api public
-        */
-       
-       function enable(namespaces) {
-         exports.save(namespaces);
-       
-         exports.names = [];
-         exports.skips = [];
-       
-         var i;
-         var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
-         var len = split.length;
-       
-         for (i = 0; i < len; i++) {
-           if (!split[i]) continue; // ignore empty strings
-           namespaces = split[i].replace(/\*/g, '.*?');
-           if (namespaces[0] === '-') {
-             exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
-           } else {
-             exports.names.push(new RegExp('^' + namespaces + '$'));
-           }
-         }
-       
-         for (i = 0; i < exports.instances.length; i++) {
-           var instance = exports.instances[i];
-           instance.enabled = exports.enabled(instance.namespace);
-         }
-       }
-       
-       /**
-        * Disable debug output.
-        *
-        * @api public
-        */
-       
-       function disable() {
-         exports.enable('');
-       }
-       
-       /**
-        * Returns true if the given mode name is enabled, false otherwise.
-        *
-        * @param {String} name
-        * @return {Boolean}
-        * @api public
-        */
-       
-       function enabled(name) {
-         if (name[name.length - 1] === '*') {
-           return true;
-         }
-         var i, len;
-         for (i = 0, len = exports.skips.length; i < len; i++) {
-           if (exports.skips[i].test(name)) {
-             return false;
-           }
-         }
-         for (i = 0, len = exports.names.length; i < len; i++) {
-           if (exports.names[i].test(name)) {
-             return true;
-           }
-         }
-         return false;
-       }
-       
-       /**
-        * Coerce `val`.
-        *
-        * @param {Mixed} val
-        * @return {Mixed}
-        * @api private
-        */
-       
-       function coerce(val) {
-         if (val instanceof Error) return val.stack || val.message;
-         return val;
-       }
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports) {
-
-       /**
-        * Helpers.
-        */
-       
-       var s = 1000;
-       var m = s * 60;
-       var h = m * 60;
-       var d = h * 24;
-       var y = d * 365.25;
+         }
+       }
        
        /**
-        * Parse or format the given `val`.
-        *
-        * Options:
-        *
-        *  - `long` verbose formatting [false]
+        * Deallocates a parser's resources
         *
-        * @param {String|Number} val
-        * @param {Object} [options]
-        * @throws {Error} throw an error if val is not a non-empty string or a number
-        * @return {String|Number}
         * @api public
         */
        
-       module.exports = function(val, options) {
-         options = options || {};
-         var type = typeof val;
-         if (type === 'string' && val.length > 0) {
-           return parse(val);
-         } else if (type === 'number' && isNaN(val) === false) {
-           return options.long ? fmtLong(val) : fmtShort(val);
+       Decoder.prototype.destroy = function() {
+         if (this.reconstructor) {
+           this.reconstructor.finishedReconstruction();
          }
-         throw new Error(
-           'val is not a non-empty string or a valid number. val=' +
-             JSON.stringify(val)
-         );
        };
        
        /**
-        * Parse the given `str` and return milliseconds.
+        * A manager of a binary event's 'buffer sequence'. Should
+        * be constructed whenever a packet of type BINARY_EVENT is
+        * decoded.
         *
-        * @param {String} str
-        * @return {Number}
+        * @param {Object} packet
+        * @return {BinaryReconstructor} initialized reconstructor
         * @api private
         */
        
-       function parse(str) {
-         str = String(str);
-         if (str.length > 100) {
-           return;
-         }
-         var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
-           str
-         );
-         if (!match) {
-           return;
-         }
-         var n = parseFloat(match[1]);
-         var type = (match[2] || 'ms').toLowerCase();
-         switch (type) {
-           case 'years':
-           case 'year':
-           case 'yrs':
-           case 'yr':
-           case 'y':
-             return n * y;
-           case 'days':
-           case 'day':
-           case 'd':
-             return n * d;
-           case 'hours':
-           case 'hour':
-           case 'hrs':
-           case 'hr':
-           case 'h':
-             return n * h;
-           case 'minutes':
-           case 'minute':
-           case 'mins':
-           case 'min':
-           case 'm':
-             return n * m;
-           case 'seconds':
-           case 'second':
-           case 'secs':
-           case 'sec':
-           case 's':
-             return n * s;
-           case 'milliseconds':
-           case 'millisecond':
-           case 'msecs':
-           case 'msec':
-           case 'ms':
-             return n;
-           default:
-             return undefined;
-         }
+       function BinaryReconstructor(packet) {
+         this.reconPack = packet;
+         this.buffers = [];
        }
        
        /**
-        * Short format for `ms`.
+        * Method to be called when binary data received from connection
+        * after a BINARY_EVENT packet.
         *
-        * @param {Number} ms
-        * @return {String}
+        * @param {Buffer | ArrayBuffer} binData - the raw binary data received
+        * @return {null | Object} returns null if more binary data is expected or
+        *   a reconstructed packet object if all buffers have been received.
         * @api private
         */
        
-       function fmtShort(ms) {
-         if (ms >= d) {
-           return Math.round(ms / d) + 'd';
-         }
-         if (ms >= h) {
-           return Math.round(ms / h) + 'h';
-         }
-         if (ms >= m) {
-           return Math.round(ms / m) + 'm';
-         }
-         if (ms >= s) {
-           return Math.round(ms / s) + 's';
+       BinaryReconstructor.prototype.takeBinaryData = function(binData) {
+         this.buffers.push(binData);
+         if (this.buffers.length === this.reconPack.attachments) { // done with buffer list
+           var packet = binary.reconstructPacket(this.reconPack, this.buffers);
+           this.finishedReconstruction();
+           return packet;
          }
-         return ms + 'ms';
-       }
+         return null;
+       };
        
        /**
-        * Long format for `ms`.
+        * Cleans up binary packet reconstruction variables.
         *
-        * @param {Number} ms
-        * @return {String}
         * @api private
         */
        
-       function fmtLong(ms) {
-         return plural(ms, d, 'day') ||
-           plural(ms, h, 'hour') ||
-           plural(ms, m, 'minute') ||
-           plural(ms, s, 'second') ||
-           ms + ' ms';
-       }
-       
-       /**
-        * Pluralization helper.
-        */
+       BinaryReconstructor.prototype.finishedReconstruction = function() {
+         this.reconPack = null;
+         this.buffers = [];
+       };
        
-       function plural(ms, n, name) {
-         if (ms < n) {
-           return;
-         }
-         if (ms < n * 1.5) {
-           return Math.floor(ms / n) + ' ' + name;
-         }
-         return Math.ceil(ms / n) + ' ' + name + 's';
+       function error(msg) {
+         return {
+           type: exports.ERROR,
+           data: 'parser error: ' + msg
+         };
        }
 
 
 /***/ }),
-/* 11 */
+/* 8 */
 /***/ (function(module, exports, __webpack_require__) {
 
        
@@ -2216,6 +1610,13 @@ return /******/ (function(modules) { // webpackBootstrap
              break;
            }
          }
+       
+         // Remove event specific arrays for event types that no
+         // one is subscribed for to avoid memory leak.
+         if (callbacks.length === 0) {
+           delete this._callbacks['$' + event];
+         }
+       
          return this;
        };
        
@@ -2229,9 +1630,14 @@ return /******/ (function(modules) { // webpackBootstrap
        
        Emitter.prototype.emit = function(event){
          this._callbacks = this._callbacks || {};
-         var args = [].slice.call(arguments, 1)
+       
+         var args = new Array(arguments.length - 1)
            , callbacks = this._callbacks['$' + event];
        
+         for (var i = 1; i < arguments.length; i++) {
+           args[i - 1] = arguments[i];
+         }
+       
          if (callbacks) {
            callbacks = callbacks.slice(0);
            for (var i = 0, len = callbacks.length; i < len; ++i) {
@@ -2269,7 +1675,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 12 */
+/* 9 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /*global Blob,File*/
@@ -2278,8 +1684,8 @@ return /******/ (function(modules) { // webpackBootstrap
         * Module requirements
         */
        
-       var isArray = __webpack_require__(13);
-       var isBuf = __webpack_require__(14);
+       var isArray = __webpack_require__(10);
+       var isBuf = __webpack_require__(11);
        var toString = Object.prototype.toString;
        var withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');
        var withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');
@@ -2416,7 +1822,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 13 */
+/* 10 */
 /***/ (function(module, exports) {
 
        var toString = {}.toString;
@@ -2427,7 +1833,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 14 */
+/* 11 */
 /***/ (function(module, exports) {
 
        
@@ -2453,7 +1859,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 15 */
+/* 12 */
 /***/ (function(module, exports, __webpack_require__) {
 
        
@@ -2461,15 +1867,15 @@ return /******/ (function(modules) { // webpackBootstrap
         * Module dependencies.
         */
        
-       var eio = __webpack_require__(16);
-       var Socket = __webpack_require__(39);
-       var Emitter = __webpack_require__(11);
+       var eio = __webpack_require__(13);
+       var Socket = __webpack_require__(37);
+       var Emitter = __webpack_require__(8);
        var parser = __webpack_require__(7);
-       var on = __webpack_require__(41);
-       var bind = __webpack_require__(42);
+       var on = __webpack_require__(39);
+       var bind = __webpack_require__(40);
        var debug = __webpack_require__(3)('socket.io-client:manager');
-       var indexOf = __webpack_require__(38);
-       var Backoff = __webpack_require__(43);
+       var indexOf = __webpack_require__(36);
+       var Backoff = __webpack_require__(41);
        
        /**
         * IE6+ hasOwnProperty
@@ -2714,6 +2120,10 @@ return /******/ (function(modules) { // webpackBootstrap
            var timeout = this._timeout;
            debug('connect attempt will timeout after %d', timeout);
        
+           if (timeout === 0) {
+             openSub.destroy(); // prevents a race condition with the 'open' event
+           }
+       
            // set timer
            var timer = setTimeout(function () {
              debug('connect attempt timed out after %d', timeout);
@@ -3032,11 +2442,11 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 16 */
+/* 13 */
 /***/ (function(module, exports, __webpack_require__) {
 
        
-       module.exports = __webpack_require__(17);
+       module.exports = __webpack_require__(14);
        
        /**
         * Exports parser
@@ -3044,24 +2454,24 @@ return /******/ (function(modules) { // webpackBootstrap
         * @api public
         *
         */
-       module.exports.parser = __webpack_require__(24);
+       module.exports.parser = __webpack_require__(22);
 
 
 /***/ }),
-/* 17 */
+/* 14 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies.
         */
        
-       var transports = __webpack_require__(18);
-       var Emitter = __webpack_require__(11);
+       var transports = __webpack_require__(15);
+       var Emitter = __webpack_require__(8);
        var debug = __webpack_require__(3)('engine.io-client:socket');
-       var index = __webpack_require__(38);
-       var parser = __webpack_require__(24);
+       var index = __webpack_require__(36);
+       var parser = __webpack_require__(22);
        var parseuri = __webpack_require__(2);
-       var parseqs = __webpack_require__(32);
+       var parseqs = __webpack_require__(30);
        
        /**
         * Module exports.
@@ -3197,9 +2607,9 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        Socket.Socket = Socket;
-       Socket.Transport = __webpack_require__(23);
-       Socket.transports = __webpack_require__(18);
-       Socket.parser = __webpack_require__(24);
+       Socket.Transport = __webpack_require__(21);
+       Socket.transports = __webpack_require__(15);
+       Socket.parser = __webpack_require__(22);
        
        /**
         * Creates transport of the given type.
@@ -3802,17 +3212,17 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 18 */
+/* 15 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies
         */
        
-       var XMLHttpRequest = __webpack_require__(19);
-       var XHR = __webpack_require__(21);
-       var JSONP = __webpack_require__(35);
-       var websocket = __webpack_require__(36);
+       var XMLHttpRequest = __webpack_require__(16);
+       var XHR = __webpack_require__(19);
+       var JSONP = __webpack_require__(33);
+       var websocket = __webpack_require__(34);
        
        /**
         * Export transports.
@@ -3861,12 +3271,13 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 19 */
+/* 16 */
 /***/ (function(module, exports, __webpack_require__) {
 
        // browser shim for xmlhttprequest module
        
-       var hasCORS = __webpack_require__(20);
+       var hasCORS = __webpack_require__(17);
+       var globalThis = __webpack_require__(18);
        
        module.exports = function (opts) {
          var xdomain = opts.xdomain;
@@ -3897,14 +3308,14 @@ return /******/ (function(modules) { // webpackBootstrap
        
          if (!xdomain) {
            try {
-             return new self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
+             return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
            } catch (e) { }
          }
        };
 
 
 /***/ }),
-/* 20 */
+/* 17 */
 /***/ (function(module, exports) {
 
        
@@ -3927,7 +3338,22 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 21 */
+/* 18 */
+/***/ (function(module, exports) {
+
+       module.exports = (function () {
+         if (typeof self !== 'undefined') {
+           return self;
+         } else if (typeof window !== 'undefined') {
+           return window;
+         } else {
+           return Function('return this')(); // eslint-disable-line no-new-func
+         }
+       })();
+
+
+/***/ }),
+/* 19 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /* global attachEvent */
@@ -3936,11 +3362,12 @@ return /******/ (function(modules) { // webpackBootstrap
         * Module requirements.
         */
        
-       var XMLHttpRequest = __webpack_require__(19);
-       var Polling = __webpack_require__(22);
-       var Emitter = __webpack_require__(11);
-       var inherit = __webpack_require__(33);
+       var XMLHttpRequest = __webpack_require__(16);
+       var Polling = __webpack_require__(20);
+       var Emitter = __webpack_require__(8);
+       var inherit = __webpack_require__(31);
        var debug = __webpack_require__(3)('engine.io-client:polling-xhr');
+       var globalThis = __webpack_require__(18);
        
        /**
         * Module exports.
@@ -4335,7 +3762,7 @@ return /******/ (function(modules) { // webpackBootstrap
          if (typeof attachEvent === 'function') {
            attachEvent('onunload', unloadHandler);
          } else if (typeof addEventListener === 'function') {
-           var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';
+           var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';
            addEventListener(terminationEvent, unloadHandler, false);
          }
        }
@@ -4350,18 +3777,18 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 22 */
+/* 20 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies.
         */
        
-       var Transport = __webpack_require__(23);
-       var parseqs = __webpack_require__(32);
-       var parser = __webpack_require__(24);
-       var inherit = __webpack_require__(33);
-       var yeast = __webpack_require__(34);
+       var Transport = __webpack_require__(21);
+       var parseqs = __webpack_require__(30);
+       var parser = __webpack_require__(22);
+       var inherit = __webpack_require__(31);
+       var yeast = __webpack_require__(32);
        var debug = __webpack_require__(3)('engine.io-client:polling');
        
        /**
@@ -4375,7 +3802,7 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        var hasXHR2 = (function () {
-         var XMLHttpRequest = __webpack_require__(19);
+         var XMLHttpRequest = __webpack_require__(16);
          var xhr = new XMLHttpRequest({ xdomain: false });
          return null != xhr.responseType;
        })();
@@ -4485,7 +3912,7 @@ return /******/ (function(modules) { // webpackBootstrap
          debug('polling got data %s', data);
          var callback = function (packet, index, total) {
            // if its the first message we consider the transport open
-           if ('opening' === self.readyState) {
+           if ('opening' === self.readyState && packet.type === 'open') {
              self.onOpen();
            }
        
@@ -4601,15 +4028,15 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 23 */
+/* 21 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies.
         */
        
-       var parser = __webpack_require__(24);
-       var Emitter = __webpack_require__(11);
+       var parser = __webpack_require__(22);
+       var Emitter = __webpack_require__(8);
        
        /**
         * Module exports.
@@ -4768,22 +4195,22 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 24 */
+/* 22 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies.
         */
        
-       var keys = __webpack_require__(25);
-       var hasBinary = __webpack_require__(26);
-       var sliceBuffer = __webpack_require__(27);
-       var after = __webpack_require__(28);
-       var utf8 = __webpack_require__(29);
+       var keys = __webpack_require__(23);
+       var hasBinary = __webpack_require__(24);
+       var sliceBuffer = __webpack_require__(25);
+       var after = __webpack_require__(26);
+       var utf8 = __webpack_require__(27);
        
        var base64encoder;
        if (typeof ArrayBuffer !== 'undefined') {
-         base64encoder = __webpack_require__(30);
+         base64encoder = __webpack_require__(28);
        }
        
        /**
@@ -4841,7 +4268,7 @@ return /******/ (function(modules) { // webpackBootstrap
         * Create a blob api even for blob builder when vendor prefixes exist
         */
        
-       var Blob = __webpack_require__(31);
+       var Blob = __webpack_require__(29);
        
        /**
         * Encodes a packet.
@@ -5379,7 +4806,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 25 */
+/* 23 */
 /***/ (function(module, exports) {
 
        
@@ -5404,7 +4831,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 26 */
+/* 24 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /* global Blob File */
@@ -5413,7 +4840,7 @@ return /******/ (function(modules) { // webpackBootstrap
         * Module requirements.
         */
        
-       var isArray = __webpack_require__(13);
+       var isArray = __webpack_require__(10);
        
        var toString = Object.prototype.toString;
        var withNativeBlob = typeof Blob === 'function' ||
@@ -5474,7 +4901,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 27 */
+/* 25 */
 /***/ (function(module, exports) {
 
        /**
@@ -5509,7 +4936,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 28 */
+/* 26 */
 /***/ (function(module, exports) {
 
        module.exports = after
@@ -5543,7 +4970,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 29 */
+/* 27 */
 /***/ (function(module, exports) {
 
        /*! https://mths.be/utf8js v2.1.2 by @mathias */
@@ -5759,7 +5186,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 30 */
+/* 28 */
 /***/ (function(module, exports) {
 
        /*
@@ -5769,17 +5196,9 @@ return /******/ (function(modules) { // webpackBootstrap
         * Copyright (c) 2012 Niklas von Hertzen
         * Licensed under the MIT license.
         */
-       (function(){
+       (function(chars){
          "use strict";
        
-         var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-       
-         // Use a lookup table to find the index.
-         var lookup = new Uint8Array(256);
-         for (var i = 0; i < chars.length; i++) {
-           lookup[chars.charCodeAt(i)] = i;
-         }
-       
          exports.encode = function(arraybuffer) {
            var bytes = new Uint8Array(arraybuffer),
            i, len = bytes.length, base64 = "";
@@ -5816,10 +5235,10 @@ return /******/ (function(modules) { // webpackBootstrap
            bytes = new Uint8Array(arraybuffer);
        
            for (i = 0; i < len; i+=4) {
-             encoded1 = lookup[base64.charCodeAt(i)];
-             encoded2 = lookup[base64.charCodeAt(i+1)];
-             encoded3 = lookup[base64.charCodeAt(i+2)];
-             encoded4 = lookup[base64.charCodeAt(i+3)];
+             encoded1 = chars.indexOf(base64[i]);
+             encoded2 = chars.indexOf(base64[i+1]);
+             encoded3 = chars.indexOf(base64[i+2]);
+             encoded4 = chars.indexOf(base64[i+3]);
        
              bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
              bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
@@ -5828,11 +5247,11 @@ return /******/ (function(modules) { // webpackBootstrap
        
            return arraybuffer;
          };
-       })();
+       })("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
 
 
 /***/ }),
-/* 31 */
+/* 29 */
 /***/ (function(module, exports) {
 
        /**
@@ -5938,7 +5357,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 32 */
+/* 30 */
 /***/ (function(module, exports) {
 
        /**
@@ -5981,7 +5400,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 33 */
+/* 31 */
 /***/ (function(module, exports) {
 
        
@@ -5993,7 +5412,7 @@ return /******/ (function(modules) { // webpackBootstrap
        };
 
 /***/ }),
-/* 34 */
+/* 32 */
 /***/ (function(module, exports) {
 
        'use strict';
@@ -6067,15 +5486,16 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 35 */
+/* 33 */
 /***/ (function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(global) {/**
+       /**
         * Module requirements.
         */
        
-       var Polling = __webpack_require__(22);
-       var inherit = __webpack_require__(33);
+       var Polling = __webpack_require__(20);
+       var inherit = __webpack_require__(31);
+       var globalThis = __webpack_require__(18);
        
        /**
         * Module exports.
@@ -6103,15 +5523,6 @@ return /******/ (function(modules) { // webpackBootstrap
        function empty () { }
        
        /**
-        * Until https://github.com/tc39/proposal-global is shipped.
-        */
-       function glob () {
-         return typeof self !== 'undefined' ? self
-             : typeof window !== 'undefined' ? window
-             : typeof global !== 'undefined' ? global : {};
-       }
-       
-       /**
         * JSONP Polling constructor.
         *
         * @param {Object} opts.
@@ -6127,8 +5538,7 @@ return /******/ (function(modules) { // webpackBootstrap
          // we do this here (lazily) to avoid unneeded global pollution
          if (!callbacks) {
            // we need to consider multiple engines in the same page
-           var global = glob();
-           callbacks = global.___eio = (global.___eio || []);
+           callbacks = globalThis.___eio = (globalThis.___eio || []);
          }
        
          // callback identifier
@@ -6309,22 +5719,21 @@ return /******/ (function(modules) { // webpackBootstrap
            this.iframe.onload = complete;
          }
        };
-       
-       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
 
 /***/ }),
-/* 36 */
+/* 34 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies.
         */
        
-       var Transport = __webpack_require__(23);
-       var parser = __webpack_require__(24);
-       var parseqs = __webpack_require__(32);
-       var inherit = __webpack_require__(33);
-       var yeast = __webpack_require__(34);
+       var Transport = __webpack_require__(21);
+       var parser = __webpack_require__(22);
+       var parseqs = __webpack_require__(30);
+       var inherit = __webpack_require__(31);
+       var yeast = __webpack_require__(32);
        var debug = __webpack_require__(3)('engine.io-client:websocket');
        
        var BrowserWebSocket, NodeWebSocket;
@@ -6337,7 +5746,7 @@ return /******/ (function(modules) { // webpackBootstrap
        
        if (typeof window === 'undefined') {
          try {
-           NodeWebSocket = __webpack_require__(37);
+           NodeWebSocket = __webpack_require__(35);
          } catch (e) { }
        }
        
@@ -6410,19 +5819,23 @@ return /******/ (function(modules) { // webpackBootstrap
        
          var uri = this.uri();
          var protocols = this.protocols;
-         var opts = {
-           agent: this.agent,
-           perMessageDeflate: this.perMessageDeflate
-         };
        
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
+         var opts = {};
+       
+         if (!this.isReactNative) {
+           opts.agent = this.agent;
+           opts.perMessageDeflate = this.perMessageDeflate;
+       
+           // SSL options for Node.js client
+           opts.pfx = this.pfx;
+           opts.key = this.key;
+           opts.passphrase = this.passphrase;
+           opts.cert = this.cert;
+           opts.ca = this.ca;
+           opts.ciphers = this.ciphers;
+           opts.rejectUnauthorized = this.rejectUnauthorized;
+         }
+       
          if (this.extraHeaders) {
            opts.headers = this.extraHeaders;
          }
@@ -6614,13 +6027,13 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 37 */
+/* 35 */
 /***/ (function(module, exports) {
 
        /* (ignored) */
 
 /***/ }),
-/* 38 */
+/* 36 */
 /***/ (function(module, exports) {
 
        
@@ -6635,7 +6048,7 @@ return /******/ (function(modules) { // webpackBootstrap
        };
 
 /***/ }),
-/* 39 */
+/* 37 */
 /***/ (function(module, exports, __webpack_require__) {
 
        
@@ -6644,13 +6057,13 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        var parser = __webpack_require__(7);
-       var Emitter = __webpack_require__(11);
-       var toArray = __webpack_require__(40);
-       var on = __webpack_require__(41);
-       var bind = __webpack_require__(42);
+       var Emitter = __webpack_require__(8);
+       var toArray = __webpack_require__(38);
+       var on = __webpack_require__(39);
+       var bind = __webpack_require__(40);
        var debug = __webpack_require__(3)('socket.io-client:socket');
-       var parseqs = __webpack_require__(32);
-       var hasBin = __webpack_require__(26);
+       var parseqs = __webpack_require__(30);
+       var hasBin = __webpack_require__(24);
        
        /**
         * Module exports.
@@ -6744,7 +6157,7 @@ return /******/ (function(modules) { // webpackBootstrap
          if (this.connected) return this;
        
          this.subEvents();
-         this.io.open(); // ensure open
+         if (!this.io.reconnecting) this.io.open(); // ensure open
          if ('open' === this.io.readyState) this.onopen();
          this.emit('connecting');
          return this;
@@ -7079,7 +6492,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 40 */
+/* 38 */
 /***/ (function(module, exports) {
 
        module.exports = toArray
@@ -7098,7 +6511,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 41 */
+/* 39 */
 /***/ (function(module, exports) {
 
        
@@ -7128,7 +6541,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 42 */
+/* 40 */
 /***/ (function(module, exports) {
 
        /**
@@ -7157,7 +6570,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 43 */
+/* 41 */
 /***/ (function(module, exports) {
 
        
@@ -7251,4 +6664,4 @@ return /******/ (function(modules) { // webpackBootstrap
 /******/ ])
 });
 ;
-//# sourceMappingURL=socket.io.dev.js.map
\ No newline at end of file
+//# sourceMappingURL=socket.io.dev.js.map
index 5da5afe..e75cb33 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 8eaf0a29f3d9e985ff91","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./~/debug/src/browser.js","webpack:///./~/process/browser.js","webpack:///./~/debug/src/common.js","webpack:///./~/ms/index.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/socket.io-parser/~/debug/src/browser.js","webpack:///./~/socket.io-parser/~/debug/src/debug.js","webpack:///./~/socket.io-parser/~/ms/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///ws (ignored)","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["exports","log","formatArgs","save","load","useColors","storage","localstorage","colors","window","process","type","__nwjs","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","$1","args","namespace","module","humanize","diff","c","color","splice","index","lastC","replace","namespaces","setItem","removeItem","error","r","getItem","env","DEBUG","localStorage","require","formatters","j","v","JSON","stringify","message","setup","createDebug","debug","default","coerce","disable","enable","enabled","Object","keys","forEach","key","instances","names","skips","selectColor","hash","i","length","charCodeAt","Math","abs","prevTime","self","curr","Number","Date","ms","prev","unshift","format","formatter","val","call","logFn","apply","destroy","extend","init","push","indexOf","delimiter","newDebug","split","len","substr","instance","map","toNamespace","join","name","test","regexp","toString","substring","Error","stack","chrome","local","err","Function","prototype","arguments","e","Array","bind"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;ACrCA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;AC5FA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC1EA;AACA;AACA;AACA;AACA;AACA;;AAEA,0GAAyG,IAAI,GAAG,IAAI,SAAS,IAAI;;AAEjI;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yEAAwE;AACxE;;AAEA;AACA,iBAAgB;AAChB;;AAEA;AACA;AACA;;AAEA;AA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SA,OAArD,EAA8D;AAC7DiC,OAAIjC,QAAQmC,GAAR,CAAYC,KAAhB;AACA;;AAED,SAAOH,CAAP;AACA;;AAED;;;;;;;;;;;AAWA,UAASpC,YAAT,GAAwB;AACvB,MAAI;AACH;AACA;AACA,UAAOwC,YAAP;AACA,GAJD,CAIE,OAAOL,KAAP,EAAc;AACf;AACA;AACA;AACD;;AAEDZ,QAAO9B,OAAP,GAAiB,mBAAAgD,CAAQ,CAAR,EAAoBhD,OAApB,CAAjB;;KAEOiD,U,GAAcnB,OAAO9B,O,CAArBiD,U;;AAEP;;;;AAIAA,YAAWC,CAAX,GAAe,UAAUC,CAAV,EAAa;AAC3B,MAAI;AACH,UAAOC,KAAKC,SAAL,CAAeF,CAAf,CAAP;AACA,GAFD,CAEE,OAAOT,KAAP,EAAc;AACf,UAAO,iCAAiCA,MAAMY,OAA9C;AACA;AACD,EAND,C;;;;;;;ACjQA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA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M3C,YAAYY,KAAZ,CAAkBK,MAApC,EAA4CD,IAAI2B,GAAhD,EAAqD3B,GAArD,EAA0D;AACzD,QAAIhB,YAAYY,KAAZ,CAAkBI,CAAlB,EAAqBkC,IAArB,CAA0BD,IAA1B,CAAJ,EAAqC;AACpC,YAAO,IAAP;AACA;AACD;;AAED,UAAO,KAAP;AACA;;AAED;;;;;;;AAOA,WAASF,WAAT,CAAqBI,MAArB,EAA6B;AAC5B,UAAOA,OAAOC,QAAP,GACLC,SADK,CACK,CADL,EACQF,OAAOC,QAAP,GAAkBnC,MAAlB,GAA2B,CADnC,EAELnC,OAFK,CAEG,SAFH,EAEc,GAFd,CAAP;AAGA;;AAED;;;;;;;AAOA,WAASqB,MAAT,CAAgB4B,GAAhB,EAAqB;AACpB,OAAIA,eAAeuB,KAAnB,EAA0B;AACzB,WAAOvB,IAAIwB,KAAJ,IAAaxB,IAAIjC,OAAxB;AACA;AACD,UAAOiC,GAAP;AACA;;AAED/B,cAAYK,MAAZ,CAAmBL,YAAYpD,IAAZ,EAAnB;;AAEA,SAAOoD,WAAP;AACA;;AAED1B,QAAO9B,OAAP,GAAiBuD,KAAjB,C;;;;;;ACzQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,OAAO;AAClB,aAAY,MAAM;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B,uBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,sFAAqF;AACrF;;AAEA;AACA;AACA;AACA;AACA,MAAK,OAAO;AACZ;AACA;AACA,IAAG,qCAAqC;AACxC;AACA;AACA,MAAK;AACL;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,oBAAoB;AAChC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC9ZA;;;;;;AAMAvD,WAAU8B,OAA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CA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtJA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;AClKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC,WAAU;AACV;;AAEA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA,IAAG;AACH;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA,kCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,8BAA6B;AAC7B,IAAG;AACH,oBAAmB,iBAAiB;AACpC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC;AACxC,MAAK,yBAAyB;AAC9B,sBAAqB,gBAAgB;AACrC;AACA;AACA,MAAK,mDAAmD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5IA,kBAAiB;;AAEjB;AACA;AACA;;;;;;;;ACHA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AClBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB,2BAA2B;AAChD;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG,OAAO;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3jBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA2F;;AAE3F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA,+CAA8C,WAAW;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAqB,8BAA8B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA6C,OAAO;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA;AACA;AACA;;;;;;;AC3uBA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA,MAAK,YAAY;AACjB;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;;;;;;AChBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA,2BAA0B,iDAAiD;AAC3E;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,UAAS;AACT,4DAA2D;AAC3D;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,gIAA+H;AAC/H;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,iGAAgG;AAChG;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChaA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,iBAAiB;AACjD;AACA,EAAC;;AAED;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACpPA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,YAAW;;AAEX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+DAA8D,gBAAgB;AAC9E;;AAEA;;AAEA;;AAEA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B,qCAAqC;AAC/D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAc;AACd,MAAK;AACL,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA,+BAA8B,gBAAgB;AAC9C,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,aAAY,oBAAoB,oCAAoC;AACpE;;AAEA;;AAEA;AACA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY,YAAY;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oDAAmD;AACnD,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA,QAAO,OAAO;AACd;AACA;;AAEA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA,MAAK;;AAEL;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,EAAE;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;;;;;;;AC3lBA;AACA;AACA;AACA,aAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B,sCAAsC;;AAEhE,mBAAkB,gBAAgB;AAClC,iBAAgB,cAAc;AAC9B,qBAAoB,aAAa;;AAEjC;AACA;AACA;;AAEA;AACA;AACA,8BAA6B,SAAS;AACtC;AACA;AACA;AACA;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA,KAAI;AACJ,4BAA2B;AAC3B;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;;AAEA;AACA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;;;AClED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA,0DAAyD;AACzD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA,EAAC;;;;;;;ACnGD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,cAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAM,YAAY;;AAElB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;;AC9OA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,IAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;;;;;;ACtSA,gB;;;;;;;ACCA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA,G;;;;;;;ACRA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,mCAAmC;AACtD,MAAK;AACL,oBAAmB,qBAAqB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,+BAA+B;AAC5C;AACA;AACA;;AAEA,cAAa,4BAA4B;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB,0BAA0B;AAC3C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACrbA;;AAEA;AACA;;AAEA;;AAEA,6BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;;;;;;;;ACXA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,oBAAoB;AAC/B,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,gBAAgB;AAC3B,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"socket.io.dev.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 8eaf0a29f3d9e985ff91","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/index.js\n// module id = 0\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/url.js\n// module id = 1\n// module chunks = 0","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\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\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\nfunction log(...args) {\n\t// This hackery is required for IE8/9, where\n\t// the `console.log` function doesn't have 'apply'\n\treturn typeof console === 'object' &&\n\t\tconsole.log &&\n\t\tconsole.log(...args);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\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\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/browser.js","// 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;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 4\n// module chunks = 0","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* Active `debug` instances.\n\t*/\n\tcreateDebug.instances = [];\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.enabled = createDebug.enabled(namespace);\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = selectColor(namespace);\n\t\tdebug.destroy = destroy;\n\t\tdebug.extend = extend;\n\t\t// Debug.formatArgs = formatArgs;\n\t\t// debug.rawLog = rawLog;\n\n\t\t// env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\tcreateDebug.instances.push(debug);\n\n\t\treturn debug;\n\t}\n\n\tfunction destroy() {\n\t\tconst index = createDebug.instances.indexOf(this);\n\t\tif (index !== -1) {\n\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\tconst instance = createDebug.instances[i];\n\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/common.js","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\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' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\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 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\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  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= 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  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ms/index.js\n// module id = 6\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 7\n// module chunks = 0","/**\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  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\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  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\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' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\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  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\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;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\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-zA-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}\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 (!r && typeof process !== 'undefined' && 'env' in 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\n\n// WEBPACK FOOTER //\n// ./~/socket.io-parser/~/debug/src/browser.js","\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 = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\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, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % 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 createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\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    // turn the `arguments` into a proper Array\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.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-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 (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\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  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (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  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\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  if (name[name.length - 1] === '*') {\n    return true;\n  }\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\n\n// WEBPACK FOOTER //\n// ./~/socket.io-parser/~/debug/src/debug.js","/**\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 ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\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(\n    str\n  );\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/~/ms/index.js\n// module id = 10\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 11\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 12\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 13\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 14\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/manager.js\n// module id = 15\n// module chunks = 0","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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(JSON.parse(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 18\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('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 self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 19\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 20\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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 && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 21\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 22\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 23\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 24\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 25\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 26\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 27\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 28\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 29\n// module chunks = 0","/*\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 30\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 31\n// module chunks = 0","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 32\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 33\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 34\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('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 * Until https://github.com/tc39/proposal-global is shipped.\n */\nfunction glob () {\n  return typeof self !== 'undefined' ? self\n      : typeof window !== 'undefined' ? window\n      : typeof global !== 'undefined' ? global : {};\n}\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    var global = glob();\n    callbacks = global.___eio = (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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 35\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\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  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 36\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// ws (ignored)\n// module id = 37\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 38\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/socket.js\n// module id = 39\n// module chunks = 0","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 40\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/on.js\n// module id = 41\n// module chunks = 0","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 42\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 43\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap e653db9c121d4e4372ed","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./~/debug/src/browser.js","webpack:///./~/process/browser.js","webpack:///./~/debug/src/debug.js","webpack:///./~/ms/index.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/globalThis.browser.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///ws (ignored)","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["exports","module","require","log","formatArgs","save","load","useColors","storage","chrome","local","localstorage","colors","window","process","type","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","$1","formatters","j","v","JSON","stringify","err","message","args","namespace","humanize","diff","c","color","splice","index","lastC","replace","Function","prototype","apply","call","arguments","namespaces","removeItem","debug","e","r","env","DEBUG","enable","localStorage","createDebug","coerce","disable","enabled","instances","names","skips","selectColor","hash","i","charCodeAt","Math","abs","length","prevTime","self","curr","Date","ms","prev","Array","unshift","format","formatter","val","logFn","bind","destroy","init","push","indexOf","split","len","substr","instance","name","test","Error","stack"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;ACrCA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;AC5FA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC1EA;AACA;AACA;AACA;AACA;AACA;;AAEA,0GAAyG,IAAI,GAAG,IAAI,SAAS,IAAI;;AAEjI;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yEAAwE;AACxE;;AAEA;AACA,iBAAgB;AAChB;;AAEA;AACA;AACA;;AAEA;AA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E;AACd;;AAED;;;;;;;AAOA,UAASlD,IAAT,GAAgB;AACd,OAAImD,CAAJ;AACA,OAAI;AACFA,SAAIzD,QAAQQ,OAAR,CAAgB+C,KAApB;AACD,IAFD,CAEE,OAAMC,CAAN,EAAS,CAAE;;AAEb;AACA,OAAI,CAACC,CAAD,IAAM,OAAO3C,OAAP,KAAmB,WAAzB,IAAwC,SAASA,OAArD,EAA8D;AAC5D2C,SAAI3C,QAAQ4C,GAAR,CAAYC,KAAhB;AACD;;AAED,UAAOF,CAAP;AACD;;AAED;;;;AAIAzD,SAAQ4D,MAAR,CAAetD,MAAf;;AAEA;;;;;;;;;;;AAWA,UAASK,YAAT,GAAwB;AACtB,OAAI;AACF,YAAOE,OAAOgD,YAAd;AACD,IAFD,CAEE,OAAOL,CAAP,EAAU,CAAE;AACf,E;;;;;;;AClMD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;A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AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtJA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B,uBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,sFAAqF;AACrF;;AAEA;AACA;AACA;AACA;AACA,MAAK,OAAO;AACZ;AACA;AACA,IAAG,qCAAqC;AACxC;AACA;AACA,MAAK;AACL;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,oBAAoB;AAChC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7ZA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY;AACZ;;AAEA;AACA;;AAEA;AACA;;AAEA,kBAAiB,sBAAsB;AACvC;AACA;;AAEA;AACA;AACA,4CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;AC9KA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC,WAAU;AACV;;AAEA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA,IAAG;AACH;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA,kCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,8BAA6B;AAC7B,IAAG;AACH,oBAAmB,iBAAiB;AACpC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC;AACxC,MAAK,yBAAyB;AAC9B,sBAAqB,gBAAgB;AACrC;AACA;AACA,MAAK,mDAAmD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5IA,kBAAiB;;AAEjB;AACA;AACA;;;;;;;;ACHA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;AClBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB,2BAA2B;AAChD;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG,OAAO;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/jBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA2F;;AAE3F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA,+CAA8C,WAAW;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAqB,8BAA8B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA6C,OAAO;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA;AACA;AACA;;;;;;;AC3uBA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA,MAAK,YAAY;AACjB;AACA;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;;;;;;AChBA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH,sCAAqC;AACrC;AACA,EAAC;;;;;;;ACRD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA,2BAA0B,iDAAiD;AAC3E;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,UAAS;AACT,4DAA2D;AAC3D;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,gIAA+H;AAC/H;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,iGAAgG;AAChG;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjaA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,iBAAiB;AACjD;AACA,EAAC;;AAED;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACpPA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,YAAW;;AAEX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+DAA8D,gBAAgB;AAC9E;;AAEA;;AAEA;;AAEA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B,qCAAqC;AAC/D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAc;AACd,MAAK;AACL,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA,+BAA8B,gBAAgB;AAC9C,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,aAAY,oBAAoB,oCAAoC;AACpE;;AAEA;;AAEA;AACA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY,YAAY;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oDAAmD;AACnD,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA,QAAO,OAAO;AACd;AACA;;AAEA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA,MAAK;;AAEL;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,EAAE;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;;;;;;;AC3lBA;AACA;AACA;AACA,aAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B,sCAAsC;;AAEhE,mBAAkB,gBAAgB;AAClC,iBAAgB,cAAc;AAC9B,qBAAoB,aAAa;;AAEjC;AACA;AACA;;AAEA;AACA;AACA,8BAA6B,SAAS;AACtC;AACA;AACA;AACA;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA,KAAI;AACJ,4BAA2B;AAC3B;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;;;AC1DD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA,0DAAyD;AACzD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA,EAAC;;;;;;;ACnGD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,cAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAM,YAAY;;AAElB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAmB;;AAEnB;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACrOA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,IAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;;;;;;AC1SA,gB;;;;;;;ACCA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA,G;;;;;;;ACRA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,mCAAmC;AACtD,MAAK;AACL,oBAAmB,qBAAqB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,+BAA+B;AAC5C;AACA;AACA;;AAEA,cAAa,4BAA4B;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB,0BAA0B;AAC3C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACrbA;;AAEA;AACA;;AAEA;;AAEA,6BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;;;;;;;;ACXA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,oBAAoB;AAC/B,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,gBAAgB;AAC3B,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"socket.io.dev.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e653db9c121d4e4372ed","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/index.js\n// module id = 0\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/url.js\n// module id = 1\n// module chunks = 0","/**\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    uri.pathNames = pathNames(uri, uri['path']);\n    uri.queryKey = queryKey(uri, uri['query']);\n\n    return uri;\n};\n\nfunction pathNames(obj, path) {\n    var regx = /\\/{2,9}/g,\n        names = path.replace(regx, \"/\").split(\"/\");\n\n    if (path.substr(0, 1) == '/' || path.length === 0) {\n        names.splice(0, 1);\n    }\n    if (path.substr(path.length - 1, 1) == '/') {\n        names.splice(names.length - 1, 1);\n    }\n\n    return names;\n}\n\nfunction queryKey(uri, query) {\n    var data = {};\n\n    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n        if ($1) {\n            data[$1] = $2;\n        }\n    });\n\n    return data;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","/**\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  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\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  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\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' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\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  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\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;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\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-zA-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}\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 (!r && typeof process !== 'undefined' && 'env' in 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\n\n// WEBPACK FOOTER //\n// ./~/debug/src/browser.js","// 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;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 4\n// module chunks = 0","\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 = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\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, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % 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 createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\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    // turn the `arguments` into a proper Array\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.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-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 (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\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  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (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  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\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  if (name[name.length - 1] === '*') {\n    return true;\n  }\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\n\n// WEBPACK FOOTER //\n// ./~/debug/src/debug.js","/**\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 ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\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(\n    str\n  );\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ms/index.js\n// module id = 6\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 7\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 8\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 9\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 10\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 11\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    if (timeout === 0) {\n      openSub.destroy(); // prevents a race condition with the 'open' event\n    }\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/manager.js\n// module id = 12\n// module chunks = 0","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 13\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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(JSON.parse(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 14\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 15\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\nvar globalThis = require('./globalThis');\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 globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 16\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 17\n// module chunks = 0","module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/globalThis.browser.js\n// module id = 18\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\nvar globalThis = require('../globalThis');\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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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 && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 19\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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 && packet.type === 'open') {\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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 20\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 21\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 22\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 23\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 24\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 25\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 26\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 27\n// module chunks = 0","/*\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(chars){\n  \"use strict\";\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 = chars.indexOf(base64[i]);\n      encoded2 = chars.indexOf(base64[i+1]);\n      encoded3 = chars.indexOf(base64[i+2]);\n      encoded4 = chars.indexOf(base64[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})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 28\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 29\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 30\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 31\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 32\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\nvar globalThis = require('../globalThis');\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    callbacks = globalThis.___eio = (globalThis.___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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 33\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\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\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 34\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// ws (ignored)\n// module id = 35\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 36\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  if (!this.io.reconnecting) this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/socket.js\n// module id = 37\n// module chunks = 0","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 38\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/on.js\n// module id = 39\n// module chunks = 0","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 40\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 41\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
index 270777b..50e33f6 100644 (file)
@@ -1,9 +1,9 @@
 /*!
- * Socket.IO v2.3.0
- * (c) 2014-2019 Guillermo Rauch
+ * Socket.IO v2.4.0
+ * (c) 2014-2021 Guillermo Rauch
  * Released under the MIT License.
  */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){function r(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,r=o(t),i=r.source,u=r.id,p=r.path,h=c[u]&&p in c[u].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||h;return f?(a("ignoring socket cache for %s",i),n=s(i,e)):(c[u]||(a("new io instance for %s",i),c[u]=s(i,e)),n=c[u]),r.query&&!e.query&&(e.query=r.query),n.socket(r.path,e)}var o=n(1),i=n(7),s=n(15),a=n(3)("socket.io-client");t.exports=e=r;var c=e.managers={};e.protocol=i.protocol,e.connect=r,e.Manager=n(15),e.Socket=n(39)},function(t,e,n){function r(t,e){var n=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(i("protocol-less url %s",t),t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),i("parse %s",t),n=o(t)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";var r=n.host.indexOf(":")!==-1,s=r?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+s+":"+n.port,n.href=n.protocol+"://"+s+(e&&e.port===n.port?"":":"+n.port),n}var o=n(2),i=n(3)("socket.io-client:url");t.exports=r},function(t,e){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");o!=-1&&i!=-1&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s=n.exec(t||""),a={},c=14;c--;)a[r[c]]=s[c]||"";return o!=-1&&i!=-1&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a}},function(t,e,n){(function(r){"use strict";function o(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+t.exports.humanize(this.diff),this.useColors){var n="color: "+this.color;e.splice(1,0,n,"color: inherit");var r=0,o=0;e[0].replace(/%[a-zA-Z%]/g,function(t){"%%"!==t&&(r++,"%c"===t&&(o=r))}),e.splice(o,0,n)}}function s(){var t;return"object"===("undefined"==typeof console?"undefined":p(console))&&console.log&&(t=console).log.apply(t,arguments)}function a(t){try{t?e.storage.setItem("debug",t):e.storage.removeItem("debug")}catch(n){}}function c(){var t=void 0;try{t=e.storage.getItem("debug")}catch(n){}return!t&&"undefined"!=typeof r&&"env"in r&&(t=r.env.DEBUG),t}function u(){try{return localStorage}catch(t){}}var p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.log=s,e.formatArgs=i,e.save=a,e.load=c,e.useColors=o,e.storage=u(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.exports=n(5)(e);var h=t.exports.formatters;h.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}).call(e,n(4))},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(t){if(p===setTimeout)return setTimeout(t,0);if((p===n||!p)&&setTimeout)return p=setTimeout,setTimeout(t,0);try{return p(t,0)}catch(e){try{return p.call(null,t,0)}catch(e){return p.call(this,t,0)}}}function i(t){if(h===clearTimeout)return clearTimeout(t);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(t);try{return h(t)}catch(e){try{return h.call(null,t)}catch(e){return h.call(this,t)}}}function s(){y&&l&&(y=!1,l.length?d=l.concat(d):m=-1,d.length&&a())}function a(){if(!y){var t=o(s);y=!0;for(var e=d.length;e;){for(l=d,d=[];++m<e;)l&&l[m].run();m=-1,e=d.length}l=null,y=!1,i(t)}}function c(t,e){this.fun=t,this.array=e}function u(){}var p,h,f=t.exports={};!function(){try{p="function"==typeof setTimeout?setTimeout:n}catch(t){p=n}try{h="function"==typeof clearTimeout?clearTimeout:r}catch(t){h=r}}();var l,d=[],y=!1,m=-1;f.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];d.push(new c(t,e)),1!==d.length||y||o(a)},c.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=u,f.addListener=u,f.once=u,f.off=u,f.removeListener=u,f.removeAllListeners=u,f.emit=u,f.prependListener=u,f.prependOnceListener=u,f.listeners=function(t){return[]},f.binding=function(t){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(t){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},function(t,e,n){"use strict";function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}function o(t){function e(t){for(var e=0,n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return o.colors[Math.abs(e)%o.colors.length]}function o(t){function n(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];if(n.enabled){var s=n,a=Number(new Date),c=a-(r||a);s.diff=c,s.prev=r,s.curr=a,r=a,e[0]=o.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");var u=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,function(t,n){if("%%"===t)return t;u++;var r=o.formatters[n];if("function"==typeof r){var i=e[u];t=r.call(s,i),e.splice(u,1),u--}return t}),o.formatArgs.call(s,e);var p=s.log||o.log;p.apply(s,e)}}var r=void 0;return n.namespace=t,n.enabled=o.enabled(t),n.useColors=o.useColors(),n.color=e(t),n.destroy=i,n.extend=s,"function"==typeof o.init&&o.init(n),o.instances.push(n),n}function i(){var t=o.instances.indexOf(this);return t!==-1&&(o.instances.splice(t,1),!0)}function s(t,e){var n=o(this.namespace+("undefined"==typeof e?":":e)+t);return n.log=this.log,n}function a(t){o.save(t),o.names=[],o.skips=[];var e=void 0,n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length;for(e=0;e<r;e++)n[e]&&(t=n[e].replace(/\*/g,".*?"),"-"===t[0]?o.skips.push(new RegExp("^"+t.substr(1)+"$")):o.names.push(new RegExp("^"+t+"$")));for(e=0;e<o.instances.length;e++){var i=o.instances[e];i.enabled=o.enabled(i.namespace)}}function c(){var t=[].concat(r(o.names.map(p)),r(o.skips.map(p).map(function(t){return"-"+t}))).join(",");return o.enable(""),t}function u(t){if("*"===t[t.length-1])return!0;var e=void 0,n=void 0;for(e=0,n=o.skips.length;e<n;e++)if(o.skips[e].test(t))return!1;for(e=0,n=o.names.length;e<n;e++)if(o.names[e].test(t))return!0;return!1}function p(t){return t.toString().substring(2,t.toString().length-2).replace(/\.\*\?$/,"*")}function h(t){return t instanceof Error?t.stack||t.message:t}return o.debug=o,o["default"]=o,o.coerce=h,o.disable=c,o.enable=a,o.enabled=u,o.humanize=n(6),Object.keys(t).forEach(function(e){o[e]=t[e]}),o.instances=[],o.names=[],o.skips=[],o.formatters={},o.selectColor=e,o.enable(o.load()),o}t.exports=o},function(t,e){function n(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*h;case"weeks":case"week":case"w":return n*p;case"days":case"day":case"d":return n*u;case"hours":case"hour":case"hrs":case"hr":case"h":return n*c;case"minutes":case"minute":case"mins":case"min":case"m":return n*a;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function r(t){var e=Math.abs(t);return e>=u?Math.round(t/u)+"d":e>=c?Math.round(t/c)+"h":e>=a?Math.round(t/a)+"m":e>=s?Math.round(t/s)+"s":t+"ms"}function o(t){var e=Math.abs(t);return e>=u?i(t,e,u,"day"):e>=c?i(t,e,c,"hour"):e>=a?i(t,e,a,"minute"):e>=s?i(t,e,s,"second"):t+" ms"}function i(t,e,n,r){var o=e>=1.5*n;return Math.round(t/n)+" "+r+(o?"s":"")}var s=1e3,a=60*s,c=60*a,u=24*c,p=7*u,h=365.25*u;t.exports=function(t,e){e=e||{};var i=typeof t;if("string"===i&&t.length>0)return n(t);if("number"===i&&isFinite(t))return e["long"]?o(t):r(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){function r(){}function o(t){var n=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(n+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(n+=t.nsp+","),null!=t.id&&(n+=t.id),null!=t.data){var r=i(t.data);if(r===!1)return g;n+=r}return f("encoded %j as %s",t,n),n}function i(t){try{return JSON.stringify(t)}catch(e){return!1}}function s(t,e){function n(t){var n=d.deconstructPacket(t),r=o(n.packet),i=n.buffers;i.unshift(r),e(i)}d.removeBlobs(t,n)}function a(){this.reconstructor=null}function c(t){var n=0,r={type:Number(t.charAt(0))};if(null==e.types[r.type])return h("unknown packet type "+r.type);if(e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type){for(var o="";"-"!==t.charAt(++n)&&(o+=t.charAt(n),n!=t.length););if(o!=Number(o)||"-"!==t.charAt(n))throw new Error("Illegal attachments");r.attachments=Number(o)}if("/"===t.charAt(n+1))for(r.nsp="";++n;){var i=t.charAt(n);if(","===i)break;if(r.nsp+=i,n===t.length)break}else r.nsp="/";var s=t.charAt(n+1);if(""!==s&&Number(s)==s){for(r.id="";++n;){var i=t.charAt(n);if(null==i||Number(i)!=i){--n;break}if(r.id+=t.charAt(n),n===t.length)break}r.id=Number(r.id)}if(t.charAt(++n)){var a=u(t.substr(n)),c=a!==!1&&(r.type===e.ERROR||y(a));if(!c)return h("invalid payload");r.data=a}return f("decoded %s as %j",t,r),r}function u(t){try{return JSON.parse(t)}catch(e){return!1}}function p(t){this.reconPack=t,this.buffers=[]}function h(t){return{type:e.ERROR,data:"parser error: "+t}}var f=n(8)("socket.io-parser"),l=n(11),d=n(12),y=n(13),m=n(14);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=r,e.Decoder=a;var g=e.ERROR+'"encode error"';r.prototype.encode=function(t,n){if(f("encoding packet %j",t),e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,n);else{var r=o(t);n([r])}},l(a.prototype),a.prototype.add=function(t){var n;if("string"==typeof t)n=c(t),e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type?(this.reconstructor=new p(n),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",n)):this.emit("decoded",n);else{if(!m(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");n=this.reconstructor.takeBinaryData(t),n&&(this.reconstructor=null,this.emit("decoded",n))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},p.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=d.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},p.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,n){(function(r){"use strict";function o(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var o=0,i=0;t[0].replace(/%[a-zA-Z%]/g,function(t){"%%"!==t&&(o++,"%c"===t&&(i=o))}),t.splice(i,0,r)}}function s(){return"object"===("undefined"==typeof console?"undefined":p(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(n){}}function c(){var t;try{t=e.storage.debug}catch(n){}return!t&&"undefined"!=typeof r&&"env"in r&&(t=r.env.DEBUG),t}function u(){try{return window.localStorage}catch(t){}}var p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e=t.exports=n(9),e.log=s,e.formatArgs=i,e.save=a,e.load=c,e.useColors=o,e.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},e.enable(c())}).call(e,n(4))},function(t,e,n){"use strict";function r(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}function o(t){function n(){if(n.enabled){var t=n,r=+new Date,i=r-(o||r);t.diff=i,t.prev=o,t.curr=r,o=r;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var c=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,function(n,r){if("%%"===n)return n;c++;var o=e.formatters[r];if("function"==typeof o){var i=s[c];n=o.call(t,i),s.splice(c,1),c--}return n}),e.formatArgs.call(t,s);var u=n.log||e.log||console.log.bind(console);u.apply(t,s)}}var o;return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=r(t),n.destroy=i,"function"==typeof e.init&&e.init(n),e.instances.push(n),n}function i(){var t=e.instances.indexOf(this);return t!==-1&&(e.instances.splice(t,1),!0)}function s(t){e.save(t),e.names=[],e.skips=[];var n,r=("string"==typeof t?t:"").split(/[\s,]+/),o=r.length;for(n=0;n<o;n++)r[n]&&(t=r[n].replace(/\*/g,".*?"),"-"===t[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")));for(n=0;n<e.instances.length;n++){var i=e.instances[n];i.enabled=e.enabled(i.namespace)}}function a(){e.enable("")}function c(t){if("*"===t[t.length-1])return!0;var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1}function u(t){return t instanceof Error?t.stack||t.message:t}e=t.exports=o.debug=o["default"]=o,e.coerce=u,e.disable=a,e.enable=s,e.enabled=c,e.humanize=n(10),e.instances=[],e.names=[],e.skips=[],e.formatters={}},function(t,e){function n(t){if(t=String(t),!(t.length>100)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*p;case"days":case"day":case"d":return n*u;case"hours":case"hour":case"hrs":case"hr":case"h":return n*c;case"minutes":case"minute":case"mins":case"min":case"m":return n*a;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function r(t){return t>=u?Math.round(t/u)+"d":t>=c?Math.round(t/c)+"h":t>=a?Math.round(t/a)+"m":t>=s?Math.round(t/s)+"s":t+"ms"}function o(t){return i(t,u,"day")||i(t,c,"hour")||i(t,a,"minute")||i(t,s,"second")||t+" ms"}function i(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}var s=1e3,a=60*s,c=60*a,u=24*c,p=365.25*u;t.exports=function(t,e){e=e||{};var i=typeof t;if("string"===i&&t.length>0)return n(t);if("number"===i&&isNaN(t)===!1)return e["long"]?o(t):r(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){function r(t){if(t)return o(t)}function o(t){for(var e in r.prototype)t[e]=r.prototype[e];return t}t.exports=r,r.prototype.on=r.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},r.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var r,o=0;o<n.length;o++)if(r=n[o],r===e||r.fn===e){n.splice(o,1);break}return this},r.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),n=this._callbacks["$"+t];if(n){n=n.slice(0);for(var r=0,o=n.length;r<o;++r)n[r].apply(this,e)}return this},r.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},r.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,n){function r(t,e){if(!t)return t;if(s(t)){var n={_placeholder:!0,num:e.length};return e.push(t),n}if(i(t)){for(var o=new Array(t.length),a=0;a<t.length;a++)o[a]=r(t[a],e);return o}if("object"==typeof t&&!(t instanceof Date)){var o={};for(var c in t)o[c]=r(t[c],e);return o}return t}function o(t,e){if(!t)return t;if(t&&t._placeholder)return e[t.num];if(i(t))for(var n=0;n<t.length;n++)t[n]=o(t[n],e);else if("object"==typeof t)for(var r in t)t[r]=o(t[r],e);return t}var i=n(13),s=n(14),a=Object.prototype.toString,c="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===a.call(Blob),u="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===a.call(File);e.deconstructPacket=function(t){var e=[],n=t.data,o=t;return o.data=r(n,e),o.attachments=e.length,{packet:o,buffers:e}},e.reconstructPacket=function(t,e){return t.data=o(t.data,e),t.attachments=void 0,t},e.removeBlobs=function(t,e){function n(t,a,p){if(!t)return t;if(c&&t instanceof Blob||u&&t instanceof File){r++;var h=new FileReader;h.onload=function(){p?p[a]=this.result:o=this.result,--r||e(o)},h.readAsArrayBuffer(t)}else if(i(t))for(var f=0;f<t.length;f++)n(t[f],f,t);else if("object"==typeof t&&!s(t))for(var l in t)n(t[l],l,t)}var r=0,o=t;n(o),r||e(o)}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e){function n(t){return r&&Buffer.isBuffer(t)||o&&(t instanceof ArrayBuffer||i(t))}t.exports=n;var r="function"==typeof Buffer&&"function"==typeof Buffer.isBuffer,o="function"==typeof ArrayBuffer,i=function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer}},function(t,e,n){function r(t,e){if(!(this instanceof r))return new r(t,e);t&&"object"==typeof t&&(e=t,t=void 0),e=e||{},e.path=e.path||"/socket.io",this.nsps={},this.subs=[],this.opts=e,this.reconnection(e.reconnection!==!1),this.reconnectionAttempts(e.reconnectionAttempts||1/0),this.reconnectionDelay(e.reconnectionDelay||1e3),this.reconnectionDelayMax(e.reconnectionDelayMax||5e3),this.randomizationFactor(e.randomizationFactor||.5),this.backoff=new f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==e.timeout?2e4:e.timeout),this.readyState="closed",this.uri=t,this.connecting=[],this.lastPing=null,this.encoding=!1,this.packetBuffer=[];var n=e.parser||a;this.encoder=new n.Encoder,this.decoder=new n.Decoder,this.autoConnect=e.autoConnect!==!1,this.autoConnect&&this.open()}var o=n(16),i=n(39),s=n(11),a=n(7),c=n(41),u=n(42),p=n(3)("socket.io-client:manager"),h=n(38),f=n(43),l=Object.prototype.hasOwnProperty;t.exports=r,r.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var t in this.nsps)l.call(this.nsps,t)&&this.nsps[t].emit.apply(this.nsps[t],arguments)},r.prototype.updateSocketIds=function(){for(var t in this.nsps)l.call(this.nsps,t)&&(this.nsps[t].id=this.generateId(t))},r.prototype.generateId=function(t){return("/"===t?"":t+"#")+this.engine.id},s(r.prototype),r.prototype.reconnection=function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection},r.prototype.reconnectionAttempts=function(t){return arguments.length?(this._reconnectionAttempts=t,this):this._reconnectionAttempts},r.prototype.reconnectionDelay=function(t){return arguments.length?(this._reconnectionDelay=t,this.backoff&&this.backoff.setMin(t),this):this._reconnectionDelay},r.prototype.randomizationFactor=function(t){return arguments.length?(this._randomizationFactor=t,this.backoff&&this.backoff.setJitter(t),this):this._randomizationFactor},r.prototype.reconnectionDelayMax=function(t){return arguments.length?(this._reconnectionDelayMax=t,this.backoff&&this.backoff.setMax(t),this):this._reconnectionDelayMax},r.prototype.timeout=function(t){return arguments.length?(this._timeout=t,this):this._timeout},r.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},r.prototype.open=r.prototype.connect=function(t,e){if(p("readyState %s",this.readyState),~this.readyState.indexOf("open"))return this;p("opening %s",this.uri),this.engine=o(this.uri,this.opts);var n=this.engine,r=this;this.readyState="opening",this.skipReconnect=!1;var i=c(n,"open",function(){r.onopen(),t&&t()}),s=c(n,"error",function(e){if(p("connect_error"),r.cleanup(),r.readyState="closed",r.emitAll("connect_error",e),t){var n=new Error("Connection error");n.data=e,t(n)}else r.maybeReconnectOnOpen()});if(!1!==this._timeout){var a=this._timeout;p("connect attempt will timeout after %d",a);var u=setTimeout(function(){p("connect attempt timed out after %d",a),i.destroy(),n.close(),n.emit("error","timeout"),r.emitAll("connect_timeout",a)},a);this.subs.push({destroy:function(){clearTimeout(u)}})}return this.subs.push(i),this.subs.push(s),this},r.prototype.onopen=function(){p("open"),this.cleanup(),this.readyState="open",this.emit("open");var t=this.engine;this.subs.push(c(t,"data",u(this,"ondata"))),this.subs.push(c(t,"ping",u(this,"onping"))),this.subs.push(c(t,"pong",u(this,"onpong"))),this.subs.push(c(t,"error",u(this,"onerror"))),this.subs.push(c(t,"close",u(this,"onclose"))),this.subs.push(c(this.decoder,"decoded",u(this,"ondecoded")))},r.prototype.onping=function(){this.lastPing=new Date,this.emitAll("ping")},r.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)},r.prototype.ondata=function(t){this.decoder.add(t)},r.prototype.ondecoded=function(t){this.emit("packet",t)},r.prototype.onerror=function(t){p("error",t),this.emitAll("error",t)},r.prototype.socket=function(t,e){function n(){~h(o.connecting,r)||o.connecting.push(r)}var r=this.nsps[t];if(!r){r=new i(this,t,e),this.nsps[t]=r;var o=this;r.on("connecting",n),r.on("connect",function(){r.id=o.generateId(t)}),this.autoConnect&&n()}return r},r.prototype.destroy=function(t){var e=h(this.connecting,t);~e&&this.connecting.splice(e,1),this.connecting.length||this.close()},r.prototype.packet=function(t){p("writing packet %j",t);var e=this;t.query&&0===t.type&&(t.nsp+="?"+t.query),e.encoding?e.packetBuffer.push(t):(e.encoding=!0,this.encoder.encode(t,function(n){for(var r=0;r<n.length;r++)e.engine.write(n[r],t.options);e.encoding=!1,e.processPacketQueue()}))},r.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},r.prototype.cleanup=function(){p("cleanup");for(var t=this.subs.length,e=0;e<t;e++){var n=this.subs.shift();n.destroy()}this.packetBuffer=[],this.encoding=!1,this.lastPing=null,this.decoder.destroy()},r.prototype.close=r.prototype.disconnect=function(){p("disconnect"),this.skipReconnect=!0,this.reconnecting=!1,"opening"===this.readyState&&this.cleanup(),this.backoff.reset(),this.readyState="closed",this.engine&&this.engine.close()},r.prototype.onclose=function(t){p("onclose"),this.cleanup(),this.backoff.reset(),this.readyState="closed",this.emit("close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()},r.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var t=this;if(this.backoff.attempts>=this._reconnectionAttempts)p("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();p("will wait %dms before reconnect attempt",e),this.reconnecting=!0;var n=setTimeout(function(){t.skipReconnect||(p("attempting reconnect"),t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(p("reconnect attempt error"),t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):(p("reconnect success"),t.onreconnect())}))},e);this.subs.push({destroy:function(){clearTimeout(n)}})}},r.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,n){t.exports=n(17),t.exports.parser=n(24)},function(t,e,n){function r(t,e){return this instanceof r?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new r(t,e)}function o(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var i=n(18),s=n(11),a=n(3)("engine.io-client:socket"),c=n(38),u=n(24),p=n(2),h=n(32);t.exports=r,r.priorWebsocketSuccess=!1,s(r.prototype),r.protocol=u.protocol,r.Socket=r,r.Transport=n(23),r.transports=n(18),r.parser=n(24),r.prototype.createTransport=function(t){a('creating transport "%s"',t);var e=o(this.query);e.EIO=u.protocol,e.transport=t;var n=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var r=new i[t]({query:e,socket:this,agent:n.agent||this.agent,hostname:n.hostname||this.hostname,port:n.port||this.port,secure:n.secure||this.secure,path:n.path||this.path,forceJSONP:n.forceJSONP||this.forceJSONP,jsonp:n.jsonp||this.jsonp,forceBase64:n.forceBase64||this.forceBase64,enablesXDR:n.enablesXDR||this.enablesXDR,withCredentials:n.withCredentials||this.withCredentials,timestampRequests:n.timestampRequests||this.timestampRequests,timestampParam:n.timestampParam||this.timestampParam,policyPort:n.policyPort||this.policyPort,pfx:n.pfx||this.pfx,key:n.key||this.key,passphrase:n.passphrase||this.passphrase,cert:n.cert||this.cert,ca:n.ca||this.ca,ciphers:n.ciphers||this.ciphers,rejectUnauthorized:n.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:n.perMessageDeflate||this.perMessageDeflate,extraHeaders:n.extraHeaders||this.extraHeaders,forceNode:n.forceNode||this.forceNode,localAddress:n.localAddress||this.localAddress,requestTimeout:n.requestTimeout||this.requestTimeout,protocols:n.protocols||void 0,isReactNative:this.isReactNative});return r},r.prototype.open=function(){var t;if(this.rememberUpgrade&&r.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{
-if(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(n){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},r.prototype.setTransport=function(t){a("setting transport %s",t.name);var e=this;this.transport&&(a("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},r.prototype.probe=function(t){function e(){if(f.onlyBinaryUpgrades){var e=!this.supportsBinary&&f.transport.supportsBinary;h=h||e}h||(a('probe transport "%s" opened',t),p.send([{type:"ping",data:"probe"}]),p.once("packet",function(e){if(!h)if("pong"===e.type&&"probe"===e.data){if(a('probe transport "%s" pong',t),f.upgrading=!0,f.emit("upgrading",p),!p)return;r.priorWebsocketSuccess="websocket"===p.name,a('pausing current transport "%s"',f.transport.name),f.transport.pause(function(){h||"closed"!==f.readyState&&(a("changing transport and sending upgrade packet"),u(),f.setTransport(p),p.send([{type:"upgrade"}]),f.emit("upgrade",p),p=null,f.upgrading=!1,f.flush())})}else{a('probe transport "%s" failed',t);var n=new Error("probe error");n.transport=p.name,f.emit("upgradeError",n)}}))}function n(){h||(h=!0,u(),p.close(),p=null)}function o(e){var r=new Error("probe error: "+e);r.transport=p.name,n(),a('probe transport "%s" failed because of error: %s',t,e),f.emit("upgradeError",r)}function i(){o("transport closed")}function s(){o("socket closed")}function c(t){p&&t.name!==p.name&&(a('"%s" works - aborting "%s"',t.name,p.name),n())}function u(){p.removeListener("open",e),p.removeListener("error",o),p.removeListener("close",i),f.removeListener("close",s),f.removeListener("upgrading",c)}a('probing transport "%s"',t);var p=this.createTransport(t,{probe:1}),h=!1,f=this;r.priorWebsocketSuccess=!1,p.once("open",e),p.once("error",o),p.once("close",i),this.once("close",s),this.once("upgrading",c),p.open()},r.prototype.onOpen=function(){if(a("socket open"),this.readyState="open",r.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause){a("starting upgrade probes");for(var t=0,e=this.upgrades.length;t<e;t++)this.probe(this.upgrades[t])}},r.prototype.onPacket=function(t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(a('socket receive: type "%s", data "%s"',t.type,t.data),this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"pong":this.setPing(),this.emit("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}else a('packet received with socket readyState "%s"',this.readyState)},r.prototype.onHandshake=function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!==this.readyState&&(this.setPing(),this.removeListener("heartbeat",this.onHeartbeat),this.on("heartbeat",this.onHeartbeat))},r.prototype.onHeartbeat=function(t){clearTimeout(this.pingTimeoutTimer);var e=this;e.pingTimeoutTimer=setTimeout(function(){"closed"!==e.readyState&&e.onClose("ping timeout")},t||e.pingInterval+e.pingTimeout)},r.prototype.setPing=function(){var t=this;clearTimeout(t.pingIntervalTimer),t.pingIntervalTimer=setTimeout(function(){a("writing ping packet - expecting pong within %sms",t.pingTimeout),t.ping(),t.onHeartbeat(t.pingTimeout)},t.pingInterval)},r.prototype.ping=function(){var t=this;this.sendPacket("ping",function(){t.emit("ping")})},r.prototype.onDrain=function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()},r.prototype.flush=function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(a("flushing %d packets in socket",this.writeBuffer.length),this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))},r.prototype.write=r.prototype.send=function(t,e,n){return this.sendPacket("message",t,e,n),this},r.prototype.sendPacket=function(t,e,n,r){if("function"==typeof e&&(r=e,e=void 0),"function"==typeof n&&(r=n,n=null),"closing"!==this.readyState&&"closed"!==this.readyState){n=n||{},n.compress=!1!==n.compress;var o={type:t,data:e,options:n};this.emit("packetCreate",o),this.writeBuffer.push(o),r&&this.once("flush",r),this.flush()}},r.prototype.close=function(){function t(){r.onClose("forced close"),a("socket closing - telling transport to close"),r.transport.close()}function e(){r.removeListener("upgrade",e),r.removeListener("upgradeError",e),t()}function n(){r.once("upgrade",e),r.once("upgradeError",e)}if("opening"===this.readyState||"open"===this.readyState){this.readyState="closing";var r=this;this.writeBuffer.length?this.once("drain",function(){this.upgrading?n():t()}):this.upgrading?n():t()}return this},r.prototype.onError=function(t){a("socket error %j",t),r.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)},r.prototype.onClose=function(t,e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){a('socket close with reason: "%s"',t);var n=this;clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",t,e),n.writeBuffer=[],n.prevBufferLen=0}},r.prototype.filterUpgrades=function(t){for(var e=[],n=0,r=t.length;n<r;n++)~c(this.transports,t[n])&&e.push(t[n]);return e}},function(t,e,n){function r(t){var e,n=!1,r=!1,a=!1!==t.jsonp;if("undefined"!=typeof location){var c="https:"===location.protocol,u=location.port;u||(u=c?443:80),n=t.hostname!==location.hostname||u!==t.port,r=t.secure!==c}if(t.xdomain=n,t.xscheme=r,e=new o(t),"open"in e&&!t.forceJSONP)return new i(t);if(!a)throw new Error("JSONP disabled");return new s(t)}var o=n(19),i=n(21),s=n(35),a=n(36);e.polling=r,e.websocket=a},function(t,e,n){var r=n(20);t.exports=function(t){var e=t.xdomain,n=t.xscheme,o=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||r))return new XMLHttpRequest}catch(i){}try{if("undefined"!=typeof XDomainRequest&&!n&&o)return new XDomainRequest}catch(i){}if(!e)try{return new(self[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(i){}}},function(t,e){try{t.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(n){t.exports=!1}},function(t,e,n){function r(){}function o(t){if(c.call(this,t),this.requestTimeout=t.requestTimeout,this.extraHeaders=t.extraHeaders,"undefined"!=typeof location){var e="https:"===location.protocol,n=location.port;n||(n=e?443:80),this.xd="undefined"!=typeof location&&t.hostname!==location.hostname||n!==t.port,this.xs=t.secure!==e}}function i(t){this.method=t.method||"GET",this.uri=t.uri,this.xd=!!t.xd,this.xs=!!t.xs,this.async=!1!==t.async,this.data=void 0!==t.data?t.data:null,this.agent=t.agent,this.isBinary=t.isBinary,this.supportsBinary=t.supportsBinary,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.requestTimeout=t.requestTimeout,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.extraHeaders=t.extraHeaders,this.create()}function s(){for(var t in i.requests)i.requests.hasOwnProperty(t)&&i.requests[t].abort()}var a=n(19),c=n(22),u=n(11),p=n(33),h=n(3)("engine.io-client:polling-xhr");if(t.exports=o,t.exports.Request=i,p(o,c),o.prototype.supportsBinary=!0,o.prototype.request=function(t){return t=t||{},t.uri=this.uri(),t.xd=this.xd,t.xs=this.xs,t.agent=this.agent||!1,t.supportsBinary=this.supportsBinary,t.enablesXDR=this.enablesXDR,t.withCredentials=this.withCredentials,t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized,t.requestTimeout=this.requestTimeout,t.extraHeaders=this.extraHeaders,new i(t)},o.prototype.doWrite=function(t,e){var n="string"!=typeof t&&void 0!==t,r=this.request({method:"POST",data:t,isBinary:n}),o=this;r.on("success",e),r.on("error",function(t){o.onError("xhr post error",t)}),this.sendXhr=r},o.prototype.doPoll=function(){h("xhr poll");var t=this.request(),e=this;t.on("data",function(t){e.onData(t)}),t.on("error",function(t){e.onError("xhr poll error",t)}),this.pollXhr=t},u(i.prototype),i.prototype.create=function(){var t={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized;var e=this.xhr=new a(t),n=this;try{h("xhr open %s: %s",this.method,this.uri),e.open(this.method,this.uri,this.async);try{if(this.extraHeaders){e.setDisableHeaderCheck&&e.setDisableHeaderCheck(!0);for(var r in this.extraHeaders)this.extraHeaders.hasOwnProperty(r)&&e.setRequestHeader(r,this.extraHeaders[r])}}catch(o){}if("POST"===this.method)try{this.isBinary?e.setRequestHeader("Content-type","application/octet-stream"):e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(o){}try{e.setRequestHeader("Accept","*/*")}catch(o){}"withCredentials"in e&&(e.withCredentials=this.withCredentials),this.requestTimeout&&(e.timeout=this.requestTimeout),this.hasXDR()?(e.onload=function(){n.onLoad()},e.onerror=function(){n.onError(e.responseText)}):e.onreadystatechange=function(){if(2===e.readyState)try{var t=e.getResponseHeader("Content-Type");(n.supportsBinary&&"application/octet-stream"===t||"application/octet-stream; charset=UTF-8"===t)&&(e.responseType="arraybuffer")}catch(r){}4===e.readyState&&(200===e.status||1223===e.status?n.onLoad():setTimeout(function(){n.onError("number"==typeof e.status?e.status:0)},0))},h("xhr data %s",this.data),e.send(this.data)}catch(o){return void setTimeout(function(){n.onError(o)},0)}"undefined"!=typeof document&&(this.index=i.requestsCount++,i.requests[this.index]=this)},i.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},i.prototype.onData=function(t){this.emit("data",t),this.onSuccess()},i.prototype.onError=function(t){this.emit("error",t),this.cleanup(!0)},i.prototype.cleanup=function(t){if("undefined"!=typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=r:this.xhr.onreadystatechange=r,t)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete i.requests[this.index],this.xhr=null}},i.prototype.onLoad=function(){var t;try{var e;try{e=this.xhr.getResponseHeader("Content-Type")}catch(n){}t="application/octet-stream"===e||"application/octet-stream; charset=UTF-8"===e?this.xhr.response||this.xhr.responseText:this.xhr.responseText}catch(n){this.onError(n)}null!=t&&this.onData(t)},i.prototype.hasXDR=function(){return"undefined"!=typeof XDomainRequest&&!this.xs&&this.enablesXDR},i.prototype.abort=function(){this.cleanup()},i.requestsCount=0,i.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",s);else if("function"==typeof addEventListener){var f="onpagehide"in self?"pagehide":"unload";addEventListener(f,s,!1)}},function(t,e,n){function r(t){var e=t&&t.forceBase64;p&&!e||(this.supportsBinary=!1),o.call(this,t)}var o=n(23),i=n(32),s=n(24),a=n(33),c=n(34),u=n(3)("engine.io-client:polling");t.exports=r;var p=function(){var t=n(19),e=new t({xdomain:!1});return null!=e.responseType}();a(r,o),r.prototype.name="polling",r.prototype.doOpen=function(){this.poll()},r.prototype.pause=function(t){function e(){u("paused"),n.readyState="paused",t()}var n=this;if(this.readyState="pausing",this.polling||!this.writable){var r=0;this.polling&&(u("we are currently polling - waiting to pause"),r++,this.once("pollComplete",function(){u("pre-pause polling complete"),--r||e()})),this.writable||(u("we are currently writing - waiting to pause"),r++,this.once("drain",function(){u("pre-pause writing complete"),--r||e()}))}else e()},r.prototype.poll=function(){u("polling"),this.polling=!0,this.doPoll(),this.emit("poll")},r.prototype.onData=function(t){var e=this;u("polling got data %s",t);var n=function(t,n,r){return"opening"===e.readyState&&e.onOpen(),"close"===t.type?(e.onClose(),!1):void e.onPacket(t)};s.decodePayload(t,this.socket.binaryType,n),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState?this.poll():u('ignoring poll - transport state "%s"',this.readyState))},r.prototype.doClose=function(){function t(){u("writing close packet"),e.write([{type:"close"}])}var e=this;"open"===this.readyState?(u("transport open - closing"),t()):(u("transport not open - deferring close"),this.once("open",t))},r.prototype.write=function(t){var e=this;this.writable=!1;var n=function(){e.writable=!0,e.emit("drain")};s.encodePayload(t,this.supportsBinary,function(t){e.doWrite(t,n)})},r.prototype.uri=function(){var t=this.query||{},e=this.secure?"https":"http",n="";!1!==this.timestampRequests&&(t[this.timestampParam]=c()),this.supportsBinary||t.sid||(t.b64=1),t=i.encode(t),this.port&&("https"===e&&443!==Number(this.port)||"http"===e&&80!==Number(this.port))&&(n=":"+this.port),t.length&&(t="?"+t);var r=this.hostname.indexOf(":")!==-1;return e+"://"+(r?"["+this.hostname+"]":this.hostname)+n+this.path+t}},function(t,e,n){function r(t){this.path=t.path,this.hostname=t.hostname,this.port=t.port,this.secure=t.secure,this.query=t.query,this.timestampParam=t.timestampParam,this.timestampRequests=t.timestampRequests,this.readyState="",this.agent=t.agent||!1,this.socket=t.socket,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.forceNode=t.forceNode,this.isReactNative=t.isReactNative,this.extraHeaders=t.extraHeaders,this.localAddress=t.localAddress}var o=n(24),i=n(11);t.exports=r,i(r.prototype),r.prototype.onError=function(t,e){var n=new Error(t);return n.type="TransportError",n.description=e,this.emit("error",n),this},r.prototype.open=function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this},r.prototype.close=function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this},r.prototype.send=function(t){if("open"!==this.readyState)throw new Error("Transport not open");this.write(t)},r.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},r.prototype.onData=function(t){var e=o.decodePacket(t,this.socket.binaryType);this.onPacket(e)},r.prototype.onPacket=function(t){this.emit("packet",t)},r.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},function(t,e,n){function r(t,n){var r="b"+e.packets[t.type]+t.data.data;return n(r)}function o(t,n,r){if(!n)return e.encodeBase64Packet(t,r);var o=t.data,i=new Uint8Array(o),s=new Uint8Array(1+o.byteLength);s[0]=v[t.type];for(var a=0;a<i.length;a++)s[a+1]=i[a];return r(s.buffer)}function i(t,n,r){if(!n)return e.encodeBase64Packet(t,r);var o=new FileReader;return o.onload=function(){e.encodePacket({type:t.type,data:o.result},n,!0,r)},o.readAsArrayBuffer(t.data)}function s(t,n,r){if(!n)return e.encodeBase64Packet(t,r);if(g)return i(t,n,r);var o=new Uint8Array(1);o[0]=v[t.type];var s=new w([o.buffer,t.data]);return r(s)}function a(t){try{t=d.decode(t,{strict:!1})}catch(e){return!1}return t}function c(t,e,n){for(var r=new Array(t.length),o=l(t.length,n),i=function(t,n,o){e(n,function(e,n){r[t]=n,o(e,r)})},s=0;s<t.length;s++)i(s,t[s],o)}var u,p=n(25),h=n(26),f=n(27),l=n(28),d=n(29);"undefined"!=typeof ArrayBuffer&&(u=n(30));var y="undefined"!=typeof navigator&&/Android/i.test(navigator.userAgent),m="undefined"!=typeof navigator&&/PhantomJS/i.test(navigator.userAgent),g=y||m;e.protocol=3;var v=e.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},b=p(v),C={type:"error",data:"parser error"},w=n(31);e.encodePacket=function(t,e,n,i){"function"==typeof e&&(i=e,e=!1),"function"==typeof n&&(i=n,n=null);var a=void 0===t.data?void 0:t.data.buffer||t.data;if("undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer)return o(t,e,i);if("undefined"!=typeof w&&a instanceof w)return s(t,e,i);if(a&&a.base64)return r(t,i);var c=v[t.type];return void 0!==t.data&&(c+=n?d.encode(String(t.data),{strict:!1}):String(t.data)),i(""+c)},e.encodeBase64Packet=function(t,n){var r="b"+e.packets[t.type];if("undefined"!=typeof w&&t.data instanceof w){var o=new FileReader;return o.onload=function(){var t=o.result.split(",")[1];n(r+t)},o.readAsDataURL(t.data)}var i;try{i=String.fromCharCode.apply(null,new Uint8Array(t.data))}catch(s){for(var a=new Uint8Array(t.data),c=new Array(a.length),u=0;u<a.length;u++)c[u]=a[u];i=String.fromCharCode.apply(null,c)}return r+=btoa(i),n(r)},e.decodePacket=function(t,n,r){if(void 0===t)return C;if("string"==typeof t){if("b"===t.charAt(0))return e.decodeBase64Packet(t.substr(1),n);if(r&&(t=a(t),t===!1))return C;var o=t.charAt(0);return Number(o)==o&&b[o]?t.length>1?{type:b[o],data:t.substring(1)}:{type:b[o]}:C}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&"blob"===n&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var n=b[t.charAt(0)];if(!u)return{type:n,data:{base64:!0,data:t.substr(1)}};var r=u.decode(t.substr(1));return"blob"===e&&w&&(r=new w([r])),{type:n,data:r}},e.encodePayload=function(t,n,r){function o(t){return t.length+":"+t}function i(t,r){e.encodePacket(t,!!s&&n,!1,function(t){r(null,o(t))})}"function"==typeof n&&(r=n,n=null);var s=h(t);return n&&s?w&&!g?e.encodePayloadAsBlob(t,r):e.encodePayloadAsArrayBuffer(t,r):t.length?void c(t,i,function(t,e){return r(e.join(""))}):r("0:")},e.decodePayload=function(t,n,r){if("string"!=typeof t)return e.decodePayloadAsBinary(t,n,r);"function"==typeof n&&(r=n,n=null);var o;if(""===t)return r(C,0,1);for(var i,s,a="",c=0,u=t.length;c<u;c++){var p=t.charAt(c);if(":"===p){if(""===a||a!=(i=Number(a)))return r(C,0,1);if(s=t.substr(c+1,i),a!=s.length)return r(C,0,1);if(s.length){if(o=e.decodePacket(s,n,!1),C.type===o.type&&C.data===o.data)return r(C,0,1);var h=r(o,c+i,u);if(!1===h)return}c+=i,a=""}else a+=p}return""!==a?r(C,0,1):void 0},e.encodePayloadAsArrayBuffer=function(t,n){function r(t,n){e.encodePacket(t,!0,!0,function(t){return n(null,t)})}return t.length?void c(t,r,function(t,e){var r=e.reduce(function(t,e){var n;return n="string"==typeof e?e.length:e.byteLength,t+n.toString().length+n+2},0),o=new Uint8Array(r),i=0;return e.forEach(function(t){var e="string"==typeof t,n=t;if(e){for(var r=new Uint8Array(t.length),s=0;s<t.length;s++)r[s]=t.charCodeAt(s);n=r.buffer}e?o[i++]=0:o[i++]=1;for(var a=n.byteLength.toString(),s=0;s<a.length;s++)o[i++]=parseInt(a[s]);o[i++]=255;for(var r=new Uint8Array(n),s=0;s<r.length;s++)o[i++]=r[s]}),n(o.buffer)}):n(new ArrayBuffer(0))},e.encodePayloadAsBlob=function(t,n){function r(t,n){e.encodePacket(t,!0,!0,function(t){var e=new Uint8Array(1);if(e[0]=1,"string"==typeof t){for(var r=new Uint8Array(t.length),o=0;o<t.length;o++)r[o]=t.charCodeAt(o);t=r.buffer,e[0]=0}for(var i=t instanceof ArrayBuffer?t.byteLength:t.size,s=i.toString(),a=new Uint8Array(s.length+1),o=0;o<s.length;o++)a[o]=parseInt(s[o]);if(a[s.length]=255,w){var c=new w([e.buffer,a.buffer,t]);n(null,c)}})}c(t,r,function(t,e){return n(new w(e))})},e.decodePayloadAsBinary=function(t,n,r){"function"==typeof n&&(r=n,n=null);for(var o=t,i=[];o.byteLength>0;){for(var s=new Uint8Array(o),a=0===s[0],c="",u=1;255!==s[u];u++){if(c.length>310)return r(C,0,1);c+=s[u]}o=f(o,2+c.length),c=parseInt(c);var p=f(o,0,c);if(a)try{p=String.fromCharCode.apply(null,new Uint8Array(p))}catch(h){var l=new Uint8Array(p);p="";for(var u=0;u<l.length;u++)p+=String.fromCharCode(l[u])}i.push(p),o=f(o,c)}var d=i.length;i.forEach(function(t,o){r(e.decodePacket(t,n,!0),o,d)})}},function(t,e){t.exports=Object.keys||function(t){var e=[],n=Object.prototype.hasOwnProperty;for(var r in t)n.call(t,r)&&e.push(r);return e}},function(t,e,n){function r(t){if(!t||"object"!=typeof t)return!1;if(o(t)){for(var e=0,n=t.length;e<n;e++)if(r(t[e]))return!0;return!1}if("function"==typeof Buffer&&Buffer.isBuffer&&Buffer.isBuffer(t)||"function"==typeof ArrayBuffer&&t instanceof ArrayBuffer||s&&t instanceof Blob||a&&t instanceof File)return!0;if(t.toJSON&&"function"==typeof t.toJSON&&1===arguments.length)return r(t.toJSON(),!0);for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&r(t[i]))return!0;return!1}var o=n(13),i=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===i.call(Blob),a="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===i.call(File);t.exports=r},function(t,e){t.exports=function(t,e,n){var r=t.byteLength;if(e=e||0,n=n||r,t.slice)return t.slice(e,n);if(e<0&&(e+=r),n<0&&(n+=r),n>r&&(n=r),e>=r||e>=n||0===r)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(n-e),s=e,a=0;s<n;s++,a++)i[a]=o[s];return i.buffer}},function(t,e){function n(t,e,n){function o(t,r){if(o.count<=0)throw new Error("after called too many times");--o.count,t?(i=!0,e(t),e=n):0!==o.count||i||e(null,r)}var i=!1;return n=n||r,o.count=t,0===t?e():o}function r(){}t.exports=n},function(t,e){function n(t){for(var e,n,r=[],o=0,i=t.length;o<i;)e=t.charCodeAt(o++),e>=55296&&e<=56319&&o<i?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function r(t){for(var e,n=t.length,r=-1,o="";++r<n;)e=t[r],e>65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var n="";return 0==(4294965248&t)?n=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),n=d(t>>12&15|224),n+=i(t,6)):0==(4292870144&t)&&(n=d(t>>18&7|240),n+=i(t,12),n+=i(t,6)),n+=d(63&t|128)}function a(t,e){e=e||{};for(var r,o=!1!==e.strict,i=n(t),a=i.length,c=-1,u="";++c<a;)r=i[c],u+=s(r,o);return u}function c(){if(l>=f)throw Error("Invalid byte index");var t=255&h[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function u(t){var e,n,r,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&h[l],l++,0==(128&e))return e;if(192==(224&e)){if(n=c(),s=(31&e)<<6|n,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(n=c(),r=c(),s=(15&e)<<12|n<<6|r,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(n=c(),r=c(),i=c(),s=(7&e)<<18|n<<12|r<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function p(t,e){e=e||{};var o=!1!==e.strict;h=n(t),f=h.length,l=0;for(var i,s=[];(i=u(o))!==!1;)s.push(i);return r(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */
-var h,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:p}},function(t,e){!function(){"use strict";for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=new Uint8Array(256),r=0;r<t.length;r++)n[t.charCodeAt(r)]=r;e.encode=function(e){var n,r=new Uint8Array(e),o=r.length,i="";for(n=0;n<o;n+=3)i+=t[r[n]>>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(t){var e,r,o,i,s,a=.75*t.length,c=t.length,u=0;"="===t[t.length-1]&&(a--,"="===t[t.length-2]&&a--);var p=new ArrayBuffer(a),h=new Uint8Array(p);for(e=0;e<c;e+=4)r=n[t.charCodeAt(e)],o=n[t.charCodeAt(e+1)],i=n[t.charCodeAt(e+2)],s=n[t.charCodeAt(e+3)],h[u++]=r<<2|o>>4,h[u++]=(15&o)<<4|i>>2,h[u++]=(3&i)<<6|63&s;return p}}()},function(t,e){function n(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var n=new Uint8Array(t.byteLength);n.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=n.buffer}return e}return t})}function r(t,e){e=e||{};var r=new i;return n(t).forEach(function(t){r.append(t)}),e.type?r.getBlob(e.type):r.getBlob()}function o(t,e){return new Blob(n(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(e){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(e){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(r.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?r:void 0}()},function(t,e){e.encode=function(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e},e.decode=function(t){for(var e={},n=t.split("&"),r=0,o=n.length;r<o;r++){var i=n[r].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},function(t,e){t.exports=function(t,e){var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e){"use strict";function n(t){var e="";do e=s[t%a]+e,t=Math.floor(t/a);while(t>0);return e}function r(t){var e=0;for(p=0;p<t.length;p++)e=e*a+c[t.charAt(p)];return e}function o(){var t=n(+new Date);return t!==i?(u=0,i=t):t+"."+n(u++)}for(var i,s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),a=64,c={},u=0,p=0;p<a;p++)c[s[p]]=p;o.encode=n,o.decode=r,t.exports=o},function(t,e,n){(function(e){function r(){}function o(){return"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof e?e:{}}function i(t){if(s.call(this,t),this.query=this.query||{},!c){var e=o();c=e.___eio=e.___eio||[]}this.index=c.length;var n=this;c.push(function(t){n.onData(t)}),this.query.j=this.index,"function"==typeof addEventListener&&addEventListener("beforeunload",function(){n.script&&(n.script.onerror=r)},!1)}var s=n(22),a=n(33);t.exports=i;var c,u=/\n/g,p=/\\n/g;a(i,s),i.prototype.supportsBinary=!1,i.prototype.doClose=function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),s.prototype.doClose.call(this)},i.prototype.doPoll=function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var n=document.getElementsByTagName("script")[0];n?n.parentNode.insertBefore(e,n):(document.head||document.body).appendChild(e),this.script=e;var r="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);r&&setTimeout(function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)},100)},i.prototype.doWrite=function(t,e){function n(){r(),e()}function r(){if(o.iframe)try{o.form.removeChild(o.iframe)}catch(t){o.onError("jsonp polling iframe removal error",t)}try{var e='<iframe src="javascript:0" name="'+o.iframeId+'">';i=document.createElement(e)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),r(),t=t.replace(p,"\\\n"),this.area.value=t.replace(u,"\\n");try{this.form.submit()}catch(h){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&n()}:this.iframe.onload=n}}).call(e,function(){return this}())},function(t,e,n){function r(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(l=i),s.call(this,t)}var o,i,s=n(23),a=n(24),c=n(32),u=n(33),p=n(34),h=n(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=n(37)}catch(f){}var l=o||i;t.exports=r,u(r,s),r.prototype.name="websocket",r.prototype.supportsBinary=!0,r.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,n={agent:this.agent,perMessageDeflate:this.perMessageDeflate};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,this.extraHeaders&&(n.headers=this.extraHeaders),this.localAddress&&(n.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new l(t,e):new l(t):new l(t,e,n)}catch(r){return this.emit("error",r)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},r.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},r.prototype.write=function(t){function e(){n.emit("flush"),setTimeout(function(){n.writable=!0,n.emit("drain")},0)}var n=this;this.writable=!1;for(var r=t.length,o=0,i=r;o<i;o++)!function(t){a.encodePacket(t,n.supportsBinary,function(o){if(!n.usingBrowserWebSocket){var i={};if(t.options&&(i.compress=t.options.compress),n.perMessageDeflate){var s="string"==typeof o?Buffer.byteLength(o):o.length;s<n.perMessageDeflate.threshold&&(i.compress=!1)}}try{n.usingBrowserWebSocket?n.ws.send(o):n.ws.send(o,i)}catch(a){h("websocket closed before onclose event")}--r||e()})}(t[o])},r.prototype.onClose=function(){s.prototype.onClose.call(this)},r.prototype.doClose=function(){"undefined"!=typeof this.ws&&this.ws.close()},r.prototype.uri=function(){var t=this.query||{},e=this.secure?"wss":"ws",n="";this.port&&("wss"===e&&443!==Number(this.port)||"ws"===e&&80!==Number(this.port))&&(n=":"+this.port),this.timestampRequests&&(t[this.timestampParam]=p()),this.supportsBinary||(t.b64=1),t=c.encode(t),t.length&&(t="?"+t);var r=this.hostname.indexOf(":")!==-1;return e+"://"+(r?"["+this.hostname+"]":this.hostname)+n+this.path+t},r.prototype.check=function(){return!(!l||"__initialize"in l&&this.name===r.prototype.name)}},function(t,e){},function(t,e){var n=[].indexOf;t.exports=function(t,e){if(n)return t.indexOf(e);for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}},function(t,e,n){function r(t,e,n){this.io=t,this.nsp=e,this.json=this,this.ids=0,this.acks={},this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0,this.flags={},n&&n.query&&(this.query=n.query),this.io.autoConnect&&this.open()}var o=n(7),i=n(11),s=n(40),a=n(41),c=n(42),u=n(3)("socket.io-client:socket"),p=n(32),h=n(26);t.exports=e=r;var f={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1},l=i.prototype.emit;i(r.prototype),r.prototype.subEvents=function(){if(!this.subs){var t=this.io;this.subs=[a(t,"open",c(this,"onopen")),a(t,"packet",c(this,"onpacket")),a(t,"close",c(this,"onclose"))]}},r.prototype.open=r.prototype.connect=function(){return this.connected?this:(this.subEvents(),this.io.open(),"open"===this.io.readyState&&this.onopen(),this.emit("connecting"),this)},r.prototype.send=function(){var t=s(arguments);return t.unshift("message"),this.emit.apply(this,t),this},r.prototype.emit=function(t){if(f.hasOwnProperty(t))return l.apply(this,arguments),this;var e=s(arguments),n={type:(void 0!==this.flags.binary?this.flags.binary:h(e))?o.BINARY_EVENT:o.EVENT,data:e};return n.options={},n.options.compress=!this.flags||!1!==this.flags.compress,"function"==typeof e[e.length-1]&&(u("emitting packet with ack id %d",this.ids),this.acks[this.ids]=e.pop(),n.id=this.ids++),this.connected?this.packet(n):this.sendBuffer.push(n),this.flags={},this},r.prototype.packet=function(t){t.nsp=this.nsp,this.io.packet(t)},r.prototype.onopen=function(){if(u("transport is open - connecting"),"/"!==this.nsp)if(this.query){var t="object"==typeof this.query?p.encode(this.query):this.query;u("sending connect packet with query %s",t),this.packet({type:o.CONNECT,query:t})}else this.packet({type:o.CONNECT})},r.prototype.onclose=function(t){u("close (%s)",t),this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",t)},r.prototype.onpacket=function(t){var e=t.nsp===this.nsp,n=t.type===o.ERROR&&"/"===t.nsp;if(e||n)switch(t.type){case o.CONNECT:this.onconnect();break;case o.EVENT:this.onevent(t);break;case o.BINARY_EVENT:this.onevent(t);break;case o.ACK:this.onack(t);break;case o.BINARY_ACK:this.onack(t);break;case o.DISCONNECT:this.ondisconnect();break;case o.ERROR:this.emit("error",t.data)}},r.prototype.onevent=function(t){var e=t.data||[];u("emitting event %j",e),null!=t.id&&(u("attaching ack callback to event"),e.push(this.ack(t.id))),this.connected?l.apply(this,e):this.receiveBuffer.push(e)},r.prototype.ack=function(t){var e=this,n=!1;return function(){if(!n){n=!0;var r=s(arguments);u("sending ack %j",r),e.packet({type:h(r)?o.BINARY_ACK:o.ACK,id:t,data:r})}}},r.prototype.onack=function(t){var e=this.acks[t.id];"function"==typeof e?(u("calling ack %s with %j",t.id,t.data),e.apply(this,t.data),delete this.acks[t.id]):u("bad ack %s",t.id)},r.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},r.prototype.emitBuffered=function(){var t;for(t=0;t<this.receiveBuffer.length;t++)l.apply(this,this.receiveBuffer[t]);for(this.receiveBuffer=[],t=0;t<this.sendBuffer.length;t++)this.packet(this.sendBuffer[t]);this.sendBuffer=[]},r.prototype.ondisconnect=function(){u("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")},r.prototype.destroy=function(){if(this.subs){for(var t=0;t<this.subs.length;t++)this.subs[t].destroy();this.subs=null}this.io.destroy(this)},r.prototype.close=r.prototype.disconnect=function(){return this.connected&&(u("performing disconnect (%s)",this.nsp),this.packet({type:o.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this},r.prototype.compress=function(t){return this.flags.compress=t,this},r.prototype.binary=function(t){return this.flags.binary=t,this}},function(t,e){function n(t,e){var n=[];e=e||0;for(var r=e||0;r<t.length;r++)n[r-e]=t[r];return n}t.exports=n},function(t,e){function n(t,e,n){return t.on(e,n),{destroy:function(){t.removeListener(e,n)}}}t.exports=n},function(t,e){var n=[].slice;t.exports=function(t,e){if("string"==typeof e&&(e=t[e]),"function"!=typeof e)throw new Error("bind() requires a function");var r=n.call(arguments,2);return function(){return e.apply(t,r.concat(n.call(arguments)))}}},function(t,e){function n(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}}])});
-//# sourceMappingURL=socket.io.js.map
\ No newline at end of file
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){function r(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,r=o(t),i=r.source,p=r.id,u=r.path,h=c[p]&&u in c[p].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||h;return f?(a("ignoring socket cache for %s",i),n=s(i,e)):(c[p]||(a("new io instance for %s",i),c[p]=s(i,e)),n=c[p]),r.query&&!e.query&&(e.query=r.query),n.socket(r.path,e)}var o=n(1),i=n(7),s=n(12),a=n(3)("socket.io-client");t.exports=e=r;var c=e.managers={};e.protocol=i.protocol,e.connect=r,e.Manager=n(12),e.Socket=n(37)},function(t,e,n){function r(t,e){var n=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(i("protocol-less url %s",t),t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),i("parse %s",t),n=o(t)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";var r=n.host.indexOf(":")!==-1,s=r?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+s+":"+n.port,n.href=n.protocol+"://"+s+(e&&e.port===n.port?"":":"+n.port),n}var o=n(2),i=n(3)("socket.io-client:url");t.exports=r},function(t,e){function n(t,e){var n=/\/{2,9}/g,r=e.replace(n,"/").split("/");return"/"!=e.substr(0,1)&&0!==e.length||r.splice(0,1),"/"==e.substr(e.length-1,1)&&r.splice(r.length-1,1),r}function r(t,e){var n={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(t,e,r){e&&(n[e]=r)}),n}var o=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,i=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,s=t.indexOf("["),a=t.indexOf("]");s!=-1&&a!=-1&&(t=t.substring(0,s)+t.substring(s,a).replace(/:/g,";")+t.substring(a,t.length));for(var c=o.exec(t||""),p={},u=14;u--;)p[i[u]]=c[u]||"";return s!=-1&&a!=-1&&(p.source=e,p.host=p.host.substring(1,p.host.length-1).replace(/;/g,":"),p.authority=p.authority.replace("[","").replace("]","").replace(/;/g,":"),p.ipv6uri=!0),p.pathNames=n(p,p.path),p.queryKey=r(p,p.query),p}},function(t,e,n){(function(r){"use strict";function o(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var o=0,i=0;t[0].replace(/%[a-zA-Z%]/g,function(t){"%%"!==t&&(o++,"%c"===t&&(i=o))}),t.splice(i,0,r)}}function s(){return"object"===("undefined"==typeof console?"undefined":u(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(n){}}function c(){var t;try{t=e.storage.debug}catch(n){}return!t&&"undefined"!=typeof r&&"env"in r&&(t=r.env.DEBUG),t}function p(){try{return window.localStorage}catch(t){}}var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e=t.exports=n(5),e.log=s,e.formatArgs=i,e.save=a,e.load=c,e.useColors=o,e.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:p(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},e.enable(c())}).call(e,n(4))},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(t){if(u===setTimeout)return setTimeout(t,0);if((u===n||!u)&&setTimeout)return u=setTimeout,setTimeout(t,0);try{return u(t,0)}catch(e){try{return u.call(null,t,0)}catch(e){return u.call(this,t,0)}}}function i(t){if(h===clearTimeout)return clearTimeout(t);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(t);try{return h(t)}catch(e){try{return h.call(null,t)}catch(e){return h.call(this,t)}}}function s(){y&&l&&(y=!1,l.length?d=l.concat(d):g=-1,d.length&&a())}function a(){if(!y){var t=o(s);y=!0;for(var e=d.length;e;){for(l=d,d=[];++g<e;)l&&l[g].run();g=-1,e=d.length}l=null,y=!1,i(t)}}function c(t,e){this.fun=t,this.array=e}function p(){}var u,h,f=t.exports={};!function(){try{u="function"==typeof setTimeout?setTimeout:n}catch(t){u=n}try{h="function"==typeof clearTimeout?clearTimeout:r}catch(t){h=r}}();var l,d=[],y=!1,g=-1;f.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];d.push(new c(t,e)),1!==d.length||y||o(a)},c.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=p,f.addListener=p,f.once=p,f.off=p,f.removeListener=p,f.removeAllListeners=p,f.emit=p,f.prependListener=p,f.prependOnceListener=p,f.listeners=function(t){return[]},f.binding=function(t){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(t){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},function(t,e,n){"use strict";function r(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}function o(t){function n(){if(n.enabled){var t=n,r=+new Date,i=r-(o||r);t.diff=i,t.prev=o,t.curr=r,o=r;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var c=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,function(n,r){if("%%"===n)return n;c++;var o=e.formatters[r];if("function"==typeof o){var i=s[c];n=o.call(t,i),s.splice(c,1),c--}return n}),e.formatArgs.call(t,s);var p=n.log||e.log||console.log.bind(console);p.apply(t,s)}}var o;return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=r(t),n.destroy=i,"function"==typeof e.init&&e.init(n),e.instances.push(n),n}function i(){var t=e.instances.indexOf(this);return t!==-1&&(e.instances.splice(t,1),!0)}function s(t){e.save(t),e.names=[],e.skips=[];var n,r=("string"==typeof t?t:"").split(/[\s,]+/),o=r.length;for(n=0;n<o;n++)r[n]&&(t=r[n].replace(/\*/g,".*?"),"-"===t[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")));for(n=0;n<e.instances.length;n++){var i=e.instances[n];i.enabled=e.enabled(i.namespace)}}function a(){e.enable("")}function c(t){if("*"===t[t.length-1])return!0;var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1}function p(t){return t instanceof Error?t.stack||t.message:t}e=t.exports=o.debug=o["default"]=o,e.coerce=p,e.disable=a,e.enable=s,e.enabled=c,e.humanize=n(6),e.instances=[],e.names=[],e.skips=[],e.formatters={}},function(t,e){function n(t){if(t=String(t),!(t.length>100)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*u;case"days":case"day":case"d":return n*p;case"hours":case"hour":case"hrs":case"hr":case"h":return n*c;case"minutes":case"minute":case"mins":case"min":case"m":return n*a;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function r(t){return t>=p?Math.round(t/p)+"d":t>=c?Math.round(t/c)+"h":t>=a?Math.round(t/a)+"m":t>=s?Math.round(t/s)+"s":t+"ms"}function o(t){return i(t,p,"day")||i(t,c,"hour")||i(t,a,"minute")||i(t,s,"second")||t+" ms"}function i(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}var s=1e3,a=60*s,c=60*a,p=24*c,u=365.25*p;t.exports=function(t,e){e=e||{};var i=typeof t;if("string"===i&&t.length>0)return n(t);if("number"===i&&isNaN(t)===!1)return e["long"]?o(t):r(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){function r(){}function o(t){var n=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(n+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(n+=t.nsp+","),null!=t.id&&(n+=t.id),null!=t.data){var r=i(t.data);if(r===!1)return m;n+=r}return f("encoded %j as %s",t,n),n}function i(t){try{return JSON.stringify(t)}catch(e){return!1}}function s(t,e){function n(t){var n=d.deconstructPacket(t),r=o(n.packet),i=n.buffers;i.unshift(r),e(i)}d.removeBlobs(t,n)}function a(){this.reconstructor=null}function c(t){var n=0,r={type:Number(t.charAt(0))};if(null==e.types[r.type])return h("unknown packet type "+r.type);if(e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type){for(var o="";"-"!==t.charAt(++n)&&(o+=t.charAt(n),n!=t.length););if(o!=Number(o)||"-"!==t.charAt(n))throw new Error("Illegal attachments");r.attachments=Number(o)}if("/"===t.charAt(n+1))for(r.nsp="";++n;){var i=t.charAt(n);if(","===i)break;if(r.nsp+=i,n===t.length)break}else r.nsp="/";var s=t.charAt(n+1);if(""!==s&&Number(s)==s){for(r.id="";++n;){var i=t.charAt(n);if(null==i||Number(i)!=i){--n;break}if(r.id+=t.charAt(n),n===t.length)break}r.id=Number(r.id)}if(t.charAt(++n)){var a=p(t.substr(n)),c=a!==!1&&(r.type===e.ERROR||y(a));if(!c)return h("invalid payload");r.data=a}return f("decoded %s as %j",t,r),r}function p(t){try{return JSON.parse(t)}catch(e){return!1}}function u(t){this.reconPack=t,this.buffers=[]}function h(t){return{type:e.ERROR,data:"parser error: "+t}}var f=n(3)("socket.io-parser"),l=n(8),d=n(9),y=n(10),g=n(11);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=r,e.Decoder=a;var m=e.ERROR+'"encode error"';r.prototype.encode=function(t,n){if(f("encoding packet %j",t),e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,n);else{var r=o(t);n([r])}},l(a.prototype),a.prototype.add=function(t){var n;if("string"==typeof t)n=c(t),e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type?(this.reconstructor=new u(n),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",n)):this.emit("decoded",n);else{if(!g(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");n=this.reconstructor.takeBinaryData(t),n&&(this.reconstructor=null,this.emit("decoded",n))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},u.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=d.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},u.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,n){function r(t){if(t)return o(t)}function o(t){for(var e in r.prototype)t[e]=r.prototype[e];return t}t.exports=r,r.prototype.on=r.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},r.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var r,o=0;o<n.length;o++)if(r=n[o],r===e||r.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks["$"+t],this},r.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),n=this._callbacks["$"+t],r=1;r<arguments.length;r++)e[r-1]=arguments[r];if(n){n=n.slice(0);for(var r=0,o=n.length;r<o;++r)n[r].apply(this,e)}return this},r.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},r.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,n){function r(t,e){if(!t)return t;if(s(t)){var n={_placeholder:!0,num:e.length};return e.push(t),n}if(i(t)){for(var o=new Array(t.length),a=0;a<t.length;a++)o[a]=r(t[a],e);return o}if("object"==typeof t&&!(t instanceof Date)){var o={};for(var c in t)o[c]=r(t[c],e);return o}return t}function o(t,e){if(!t)return t;if(t&&t._placeholder)return e[t.num];if(i(t))for(var n=0;n<t.length;n++)t[n]=o(t[n],e);else if("object"==typeof t)for(var r in t)t[r]=o(t[r],e);return t}var i=n(10),s=n(11),a=Object.prototype.toString,c="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===a.call(Blob),p="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===a.call(File);e.deconstructPacket=function(t){var e=[],n=t.data,o=t;return o.data=r(n,e),o.attachments=e.length,{packet:o,buffers:e}},e.reconstructPacket=function(t,e){return t.data=o(t.data,e),t.attachments=void 0,t},e.removeBlobs=function(t,e){function n(t,a,u){if(!t)return t;if(c&&t instanceof Blob||p&&t instanceof File){r++;var h=new FileReader;h.onload=function(){u?u[a]=this.result:o=this.result,--r||e(o)},h.readAsArrayBuffer(t)}else if(i(t))for(var f=0;f<t.length;f++)n(t[f],f,t);else if("object"==typeof t&&!s(t))for(var l in t)n(t[l],l,t)}var r=0,o=t;n(o),r||e(o)}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e){function n(t){return r&&Buffer.isBuffer(t)||o&&(t instanceof ArrayBuffer||i(t))}t.exports=n;var r="function"==typeof Buffer&&"function"==typeof Buffer.isBuffer,o="function"==typeof ArrayBuffer,i=function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer}},function(t,e,n){function r(t,e){if(!(this instanceof r))return new r(t,e);t&&"object"==typeof t&&(e=t,t=void 0),e=e||{},e.path=e.path||"/socket.io",this.nsps={},this.subs=[],this.opts=e,this.reconnection(e.reconnection!==!1),this.reconnectionAttempts(e.reconnectionAttempts||1/0),this.reconnectionDelay(e.reconnectionDelay||1e3),this.reconnectionDelayMax(e.reconnectionDelayMax||5e3),this.randomizationFactor(e.randomizationFactor||.5),this.backoff=new f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==e.timeout?2e4:e.timeout),this.readyState="closed",this.uri=t,this.connecting=[],this.lastPing=null,this.encoding=!1,this.packetBuffer=[];var n=e.parser||a;this.encoder=new n.Encoder,this.decoder=new n.Decoder,this.autoConnect=e.autoConnect!==!1,this.autoConnect&&this.open()}var o=n(13),i=n(37),s=n(8),a=n(7),c=n(39),p=n(40),u=n(3)("socket.io-client:manager"),h=n(36),f=n(41),l=Object.prototype.hasOwnProperty;t.exports=r,r.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var t in this.nsps)l.call(this.nsps,t)&&this.nsps[t].emit.apply(this.nsps[t],arguments)},r.prototype.updateSocketIds=function(){for(var t in this.nsps)l.call(this.nsps,t)&&(this.nsps[t].id=this.generateId(t))},r.prototype.generateId=function(t){return("/"===t?"":t+"#")+this.engine.id},s(r.prototype),r.prototype.reconnection=function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection},r.prototype.reconnectionAttempts=function(t){return arguments.length?(this._reconnectionAttempts=t,this):this._reconnectionAttempts},r.prototype.reconnectionDelay=function(t){return arguments.length?(this._reconnectionDelay=t,this.backoff&&this.backoff.setMin(t),this):this._reconnectionDelay},r.prototype.randomizationFactor=function(t){return arguments.length?(this._randomizationFactor=t,this.backoff&&this.backoff.setJitter(t),this):this._randomizationFactor},r.prototype.reconnectionDelayMax=function(t){return arguments.length?(this._reconnectionDelayMax=t,this.backoff&&this.backoff.setMax(t),this):this._reconnectionDelayMax},r.prototype.timeout=function(t){return arguments.length?(this._timeout=t,this):this._timeout},r.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},r.prototype.open=r.prototype.connect=function(t,e){if(u("readyState %s",this.readyState),~this.readyState.indexOf("open"))return this;u("opening %s",this.uri),this.engine=o(this.uri,this.opts);var n=this.engine,r=this;this.readyState="opening",this.skipReconnect=!1;var i=c(n,"open",function(){r.onopen(),t&&t()}),s=c(n,"error",function(e){if(u("connect_error"),r.cleanup(),r.readyState="closed",r.emitAll("connect_error",e),t){var n=new Error("Connection error");n.data=e,t(n)}else r.maybeReconnectOnOpen()});if(!1!==this._timeout){var a=this._timeout;u("connect attempt will timeout after %d",a),0===a&&i.destroy();var p=setTimeout(function(){u("connect attempt timed out after %d",a),i.destroy(),n.close(),n.emit("error","timeout"),r.emitAll("connect_timeout",a)},a);this.subs.push({destroy:function(){clearTimeout(p)}})}return this.subs.push(i),this.subs.push(s),this},r.prototype.onopen=function(){u("open"),this.cleanup(),this.readyState="open",this.emit("open");var t=this.engine;this.subs.push(c(t,"data",p(this,"ondata"))),this.subs.push(c(t,"ping",p(this,"onping"))),this.subs.push(c(t,"pong",p(this,"onpong"))),this.subs.push(c(t,"error",p(this,"onerror"))),this.subs.push(c(t,"close",p(this,"onclose"))),this.subs.push(c(this.decoder,"decoded",p(this,"ondecoded")))},r.prototype.onping=function(){this.lastPing=new Date,this.emitAll("ping")},r.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)},r.prototype.ondata=function(t){this.decoder.add(t)},r.prototype.ondecoded=function(t){this.emit("packet",t)},r.prototype.onerror=function(t){u("error",t),this.emitAll("error",t)},r.prototype.socket=function(t,e){function n(){~h(o.connecting,r)||o.connecting.push(r)}var r=this.nsps[t];if(!r){r=new i(this,t,e),this.nsps[t]=r;var o=this;r.on("connecting",n),r.on("connect",function(){r.id=o.generateId(t)}),this.autoConnect&&n()}return r},r.prototype.destroy=function(t){var e=h(this.connecting,t);~e&&this.connecting.splice(e,1),this.connecting.length||this.close()},r.prototype.packet=function(t){u("writing packet %j",t);var e=this;t.query&&0===t.type&&(t.nsp+="?"+t.query),e.encoding?e.packetBuffer.push(t):(e.encoding=!0,this.encoder.encode(t,function(n){for(var r=0;r<n.length;r++)e.engine.write(n[r],t.options);e.encoding=!1,e.processPacketQueue()}))},r.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},r.prototype.cleanup=function(){u("cleanup");for(var t=this.subs.length,e=0;e<t;e++){var n=this.subs.shift();n.destroy()}this.packetBuffer=[],this.encoding=!1,this.lastPing=null,this.decoder.destroy()},r.prototype.close=r.prototype.disconnect=function(){u("disconnect"),this.skipReconnect=!0,this.reconnecting=!1,"opening"===this.readyState&&this.cleanup(),this.backoff.reset(),this.readyState="closed",this.engine&&this.engine.close()},r.prototype.onclose=function(t){u("onclose"),this.cleanup(),this.backoff.reset(),this.readyState="closed",this.emit("close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()},r.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var t=this;if(this.backoff.attempts>=this._reconnectionAttempts)u("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();u("will wait %dms before reconnect attempt",e),this.reconnecting=!0;var n=setTimeout(function(){t.skipReconnect||(u("attempting reconnect"),t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(u("reconnect attempt error"),t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):(u("reconnect success"),t.onreconnect())}))},e);this.subs.push({destroy:function(){clearTimeout(n)}})}},r.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,n){t.exports=n(14),t.exports.parser=n(22)},function(t,e,n){function r(t,e){return this instanceof r?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=u(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=u(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new r(t,e)}function o(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var i=n(15),s=n(8),a=n(3)("engine.io-client:socket"),c=n(36),p=n(22),u=n(2),h=n(30);t.exports=r,r.priorWebsocketSuccess=!1,s(r.prototype),r.protocol=p.protocol,r.Socket=r,r.Transport=n(21),r.transports=n(15),r.parser=n(22),r.prototype.createTransport=function(t){a('creating transport "%s"',t);var e=o(this.query);e.EIO=p.protocol,e.transport=t;var n=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var r=new i[t]({query:e,socket:this,agent:n.agent||this.agent,hostname:n.hostname||this.hostname,port:n.port||this.port,secure:n.secure||this.secure,path:n.path||this.path,forceJSONP:n.forceJSONP||this.forceJSONP,jsonp:n.jsonp||this.jsonp,forceBase64:n.forceBase64||this.forceBase64,enablesXDR:n.enablesXDR||this.enablesXDR,withCredentials:n.withCredentials||this.withCredentials,timestampRequests:n.timestampRequests||this.timestampRequests,timestampParam:n.timestampParam||this.timestampParam,policyPort:n.policyPort||this.policyPort,pfx:n.pfx||this.pfx,key:n.key||this.key,passphrase:n.passphrase||this.passphrase,cert:n.cert||this.cert,ca:n.ca||this.ca,ciphers:n.ciphers||this.ciphers,rejectUnauthorized:n.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:n.perMessageDeflate||this.perMessageDeflate,extraHeaders:n.extraHeaders||this.extraHeaders,forceNode:n.forceNode||this.forceNode,localAddress:n.localAddress||this.localAddress,requestTimeout:n.requestTimeout||this.requestTimeout,protocols:n.protocols||void 0,isReactNative:this.isReactNative});return r},r.prototype.open=function(){var t;if(this.rememberUpgrade&&r.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{if(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(n){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},r.prototype.setTransport=function(t){a("setting transport %s",t.name);var e=this;this.transport&&(a("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},r.prototype.probe=function(t){function e(){if(f.onlyBinaryUpgrades){var e=!this.supportsBinary&&f.transport.supportsBinary;h=h||e}h||(a('probe transport "%s" opened',t),u.send([{type:"ping",data:"probe"}]),u.once("packet",function(e){if(!h)if("pong"===e.type&&"probe"===e.data){if(a('probe transport "%s" pong',t),f.upgrading=!0,f.emit("upgrading",u),!u)return;r.priorWebsocketSuccess="websocket"===u.name,a('pausing current transport "%s"',f.transport.name),f.transport.pause(function(){h||"closed"!==f.readyState&&(a("changing transport and sending upgrade packet"),p(),f.setTransport(u),u.send([{type:"upgrade"}]),f.emit("upgrade",u),u=null,f.upgrading=!1,f.flush())})}else{a('probe transport "%s" failed',t);var n=new Error("probe error");n.transport=u.name,f.emit("upgradeError",n)}}))}function n(){h||(h=!0,p(),u.close(),u=null)}function o(e){var r=new Error("probe error: "+e);r.transport=u.name,n(),a('probe transport "%s" failed because of error: %s',t,e),f.emit("upgradeError",r)}function i(){o("transport closed")}function s(){o("socket closed")}function c(t){u&&t.name!==u.name&&(a('"%s" works - aborting "%s"',t.name,u.name),n())}function p(){u.removeListener("open",e),u.removeListener("error",o),u.removeListener("close",i),f.removeListener("close",s),f.removeListener("upgrading",c)}a('probing transport "%s"',t);var u=this.createTransport(t,{probe:1}),h=!1,f=this;r.priorWebsocketSuccess=!1,u.once("open",e),u.once("error",o),u.once("close",i),this.once("close",s),this.once("upgrading",c),u.open()},r.prototype.onOpen=function(){if(a("socket open"),this.readyState="open",r.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause){a("starting upgrade probes");for(var t=0,e=this.upgrades.length;t<e;t++)this.probe(this.upgrades[t])}},r.prototype.onPacket=function(t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(a('socket receive: type "%s", data "%s"',t.type,t.data),this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"pong":this.setPing(),this.emit("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}else a('packet received with socket readyState "%s"',this.readyState)},r.prototype.onHandshake=function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!==this.readyState&&(this.setPing(),this.removeListener("heartbeat",this.onHeartbeat),this.on("heartbeat",this.onHeartbeat))},r.prototype.onHeartbeat=function(t){clearTimeout(this.pingTimeoutTimer);var e=this;e.pingTimeoutTimer=setTimeout(function(){"closed"!==e.readyState&&e.onClose("ping timeout")},t||e.pingInterval+e.pingTimeout)},r.prototype.setPing=function(){var t=this;clearTimeout(t.pingIntervalTimer),t.pingIntervalTimer=setTimeout(function(){a("writing ping packet - expecting pong within %sms",t.pingTimeout),t.ping(),t.onHeartbeat(t.pingTimeout)},t.pingInterval)},r.prototype.ping=function(){var t=this;this.sendPacket("ping",function(){t.emit("ping")})},r.prototype.onDrain=function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()},r.prototype.flush=function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(a("flushing %d packets in socket",this.writeBuffer.length),this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))},r.prototype.write=r.prototype.send=function(t,e,n){return this.sendPacket("message",t,e,n),this},r.prototype.sendPacket=function(t,e,n,r){if("function"==typeof e&&(r=e,e=void 0),"function"==typeof n&&(r=n,n=null),"closing"!==this.readyState&&"closed"!==this.readyState){n=n||{},n.compress=!1!==n.compress;var o={type:t,data:e,options:n};this.emit("packetCreate",o),this.writeBuffer.push(o),r&&this.once("flush",r),this.flush()}},r.prototype.close=function(){function t(){r.onClose("forced close"),a("socket closing - telling transport to close"),r.transport.close()}function e(){r.removeListener("upgrade",e),r.removeListener("upgradeError",e),t()}function n(){r.once("upgrade",e),r.once("upgradeError",e)}if("opening"===this.readyState||"open"===this.readyState){this.readyState="closing";var r=this;this.writeBuffer.length?this.once("drain",function(){this.upgrading?n():t()}):this.upgrading?n():t()}return this},r.prototype.onError=function(t){a("socket error %j",t),r.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)},r.prototype.onClose=function(t,e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){a('socket close with reason: "%s"',t);var n=this;clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),
+this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",t,e),n.writeBuffer=[],n.prevBufferLen=0}},r.prototype.filterUpgrades=function(t){for(var e=[],n=0,r=t.length;n<r;n++)~c(this.transports,t[n])&&e.push(t[n]);return e}},function(t,e,n){function r(t){var e,n=!1,r=!1,a=!1!==t.jsonp;if("undefined"!=typeof location){var c="https:"===location.protocol,p=location.port;p||(p=c?443:80),n=t.hostname!==location.hostname||p!==t.port,r=t.secure!==c}if(t.xdomain=n,t.xscheme=r,e=new o(t),"open"in e&&!t.forceJSONP)return new i(t);if(!a)throw new Error("JSONP disabled");return new s(t)}var o=n(16),i=n(19),s=n(33),a=n(34);e.polling=r,e.websocket=a},function(t,e,n){var r=n(17),o=n(18);t.exports=function(t){var e=t.xdomain,n=t.xscheme,i=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||r))return new XMLHttpRequest}catch(s){}try{if("undefined"!=typeof XDomainRequest&&!n&&i)return new XDomainRequest}catch(s){}if(!e)try{return new(o[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(s){}}},function(t,e){try{t.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(n){t.exports=!1}},function(t,e){t.exports=function(){return"undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()}()},function(t,e,n){function r(){}function o(t){if(c.call(this,t),this.requestTimeout=t.requestTimeout,this.extraHeaders=t.extraHeaders,"undefined"!=typeof location){var e="https:"===location.protocol,n=location.port;n||(n=e?443:80),this.xd="undefined"!=typeof location&&t.hostname!==location.hostname||n!==t.port,this.xs=t.secure!==e}}function i(t){this.method=t.method||"GET",this.uri=t.uri,this.xd=!!t.xd,this.xs=!!t.xs,this.async=!1!==t.async,this.data=void 0!==t.data?t.data:null,this.agent=t.agent,this.isBinary=t.isBinary,this.supportsBinary=t.supportsBinary,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.requestTimeout=t.requestTimeout,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.extraHeaders=t.extraHeaders,this.create()}function s(){for(var t in i.requests)i.requests.hasOwnProperty(t)&&i.requests[t].abort()}var a=n(16),c=n(20),p=n(8),u=n(31),h=n(3)("engine.io-client:polling-xhr"),f=n(18);if(t.exports=o,t.exports.Request=i,u(o,c),o.prototype.supportsBinary=!0,o.prototype.request=function(t){return t=t||{},t.uri=this.uri(),t.xd=this.xd,t.xs=this.xs,t.agent=this.agent||!1,t.supportsBinary=this.supportsBinary,t.enablesXDR=this.enablesXDR,t.withCredentials=this.withCredentials,t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized,t.requestTimeout=this.requestTimeout,t.extraHeaders=this.extraHeaders,new i(t)},o.prototype.doWrite=function(t,e){var n="string"!=typeof t&&void 0!==t,r=this.request({method:"POST",data:t,isBinary:n}),o=this;r.on("success",e),r.on("error",function(t){o.onError("xhr post error",t)}),this.sendXhr=r},o.prototype.doPoll=function(){h("xhr poll");var t=this.request(),e=this;t.on("data",function(t){e.onData(t)}),t.on("error",function(t){e.onError("xhr poll error",t)}),this.pollXhr=t},p(i.prototype),i.prototype.create=function(){var t={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized;var e=this.xhr=new a(t),n=this;try{h("xhr open %s: %s",this.method,this.uri),e.open(this.method,this.uri,this.async);try{if(this.extraHeaders){e.setDisableHeaderCheck&&e.setDisableHeaderCheck(!0);for(var r in this.extraHeaders)this.extraHeaders.hasOwnProperty(r)&&e.setRequestHeader(r,this.extraHeaders[r])}}catch(o){}if("POST"===this.method)try{this.isBinary?e.setRequestHeader("Content-type","application/octet-stream"):e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(o){}try{e.setRequestHeader("Accept","*/*")}catch(o){}"withCredentials"in e&&(e.withCredentials=this.withCredentials),this.requestTimeout&&(e.timeout=this.requestTimeout),this.hasXDR()?(e.onload=function(){n.onLoad()},e.onerror=function(){n.onError(e.responseText)}):e.onreadystatechange=function(){if(2===e.readyState)try{var t=e.getResponseHeader("Content-Type");(n.supportsBinary&&"application/octet-stream"===t||"application/octet-stream; charset=UTF-8"===t)&&(e.responseType="arraybuffer")}catch(r){}4===e.readyState&&(200===e.status||1223===e.status?n.onLoad():setTimeout(function(){n.onError("number"==typeof e.status?e.status:0)},0))},h("xhr data %s",this.data),e.send(this.data)}catch(o){return void setTimeout(function(){n.onError(o)},0)}"undefined"!=typeof document&&(this.index=i.requestsCount++,i.requests[this.index]=this)},i.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},i.prototype.onData=function(t){this.emit("data",t),this.onSuccess()},i.prototype.onError=function(t){this.emit("error",t),this.cleanup(!0)},i.prototype.cleanup=function(t){if("undefined"!=typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=r:this.xhr.onreadystatechange=r,t)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete i.requests[this.index],this.xhr=null}},i.prototype.onLoad=function(){var t;try{var e;try{e=this.xhr.getResponseHeader("Content-Type")}catch(n){}t="application/octet-stream"===e||"application/octet-stream; charset=UTF-8"===e?this.xhr.response||this.xhr.responseText:this.xhr.responseText}catch(n){this.onError(n)}null!=t&&this.onData(t)},i.prototype.hasXDR=function(){return"undefined"!=typeof XDomainRequest&&!this.xs&&this.enablesXDR},i.prototype.abort=function(){this.cleanup()},i.requestsCount=0,i.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",s);else if("function"==typeof addEventListener){var l="onpagehide"in f?"pagehide":"unload";addEventListener(l,s,!1)}},function(t,e,n){function r(t){var e=t&&t.forceBase64;u&&!e||(this.supportsBinary=!1),o.call(this,t)}var o=n(21),i=n(30),s=n(22),a=n(31),c=n(32),p=n(3)("engine.io-client:polling");t.exports=r;var u=function(){var t=n(16),e=new t({xdomain:!1});return null!=e.responseType}();a(r,o),r.prototype.name="polling",r.prototype.doOpen=function(){this.poll()},r.prototype.pause=function(t){function e(){p("paused"),n.readyState="paused",t()}var n=this;if(this.readyState="pausing",this.polling||!this.writable){var r=0;this.polling&&(p("we are currently polling - waiting to pause"),r++,this.once("pollComplete",function(){p("pre-pause polling complete"),--r||e()})),this.writable||(p("we are currently writing - waiting to pause"),r++,this.once("drain",function(){p("pre-pause writing complete"),--r||e()}))}else e()},r.prototype.poll=function(){p("polling"),this.polling=!0,this.doPoll(),this.emit("poll")},r.prototype.onData=function(t){var e=this;p("polling got data %s",t);var n=function(t,n,r){return"opening"===e.readyState&&"open"===t.type&&e.onOpen(),"close"===t.type?(e.onClose(),!1):void e.onPacket(t)};s.decodePayload(t,this.socket.binaryType,n),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState?this.poll():p('ignoring poll - transport state "%s"',this.readyState))},r.prototype.doClose=function(){function t(){p("writing close packet"),e.write([{type:"close"}])}var e=this;"open"===this.readyState?(p("transport open - closing"),t()):(p("transport not open - deferring close"),this.once("open",t))},r.prototype.write=function(t){var e=this;this.writable=!1;var n=function(){e.writable=!0,e.emit("drain")};s.encodePayload(t,this.supportsBinary,function(t){e.doWrite(t,n)})},r.prototype.uri=function(){var t=this.query||{},e=this.secure?"https":"http",n="";!1!==this.timestampRequests&&(t[this.timestampParam]=c()),this.supportsBinary||t.sid||(t.b64=1),t=i.encode(t),this.port&&("https"===e&&443!==Number(this.port)||"http"===e&&80!==Number(this.port))&&(n=":"+this.port),t.length&&(t="?"+t);var r=this.hostname.indexOf(":")!==-1;return e+"://"+(r?"["+this.hostname+"]":this.hostname)+n+this.path+t}},function(t,e,n){function r(t){this.path=t.path,this.hostname=t.hostname,this.port=t.port,this.secure=t.secure,this.query=t.query,this.timestampParam=t.timestampParam,this.timestampRequests=t.timestampRequests,this.readyState="",this.agent=t.agent||!1,this.socket=t.socket,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.forceNode=t.forceNode,this.isReactNative=t.isReactNative,this.extraHeaders=t.extraHeaders,this.localAddress=t.localAddress}var o=n(22),i=n(8);t.exports=r,i(r.prototype),r.prototype.onError=function(t,e){var n=new Error(t);return n.type="TransportError",n.description=e,this.emit("error",n),this},r.prototype.open=function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this},r.prototype.close=function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this},r.prototype.send=function(t){if("open"!==this.readyState)throw new Error("Transport not open");this.write(t)},r.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},r.prototype.onData=function(t){var e=o.decodePacket(t,this.socket.binaryType);this.onPacket(e)},r.prototype.onPacket=function(t){this.emit("packet",t)},r.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},function(t,e,n){function r(t,n){var r="b"+e.packets[t.type]+t.data.data;return n(r)}function o(t,n,r){if(!n)return e.encodeBase64Packet(t,r);var o=t.data,i=new Uint8Array(o),s=new Uint8Array(1+o.byteLength);s[0]=v[t.type];for(var a=0;a<i.length;a++)s[a+1]=i[a];return r(s.buffer)}function i(t,n,r){if(!n)return e.encodeBase64Packet(t,r);var o=new FileReader;return o.onload=function(){e.encodePacket({type:t.type,data:o.result},n,!0,r)},o.readAsArrayBuffer(t.data)}function s(t,n,r){if(!n)return e.encodeBase64Packet(t,r);if(m)return i(t,n,r);var o=new Uint8Array(1);o[0]=v[t.type];var s=new k([o.buffer,t.data]);return r(s)}function a(t){try{t=d.decode(t,{strict:!1})}catch(e){return!1}return t}function c(t,e,n){for(var r=new Array(t.length),o=l(t.length,n),i=function(t,n,o){e(n,function(e,n){r[t]=n,o(e,r)})},s=0;s<t.length;s++)i(s,t[s],o)}var p,u=n(23),h=n(24),f=n(25),l=n(26),d=n(27);"undefined"!=typeof ArrayBuffer&&(p=n(28));var y="undefined"!=typeof navigator&&/Android/i.test(navigator.userAgent),g="undefined"!=typeof navigator&&/PhantomJS/i.test(navigator.userAgent),m=y||g;e.protocol=3;var v=e.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},b=u(v),w={type:"error",data:"parser error"},k=n(29);e.encodePacket=function(t,e,n,i){"function"==typeof e&&(i=e,e=!1),"function"==typeof n&&(i=n,n=null);var a=void 0===t.data?void 0:t.data.buffer||t.data;if("undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer)return o(t,e,i);if("undefined"!=typeof k&&a instanceof k)return s(t,e,i);if(a&&a.base64)return r(t,i);var c=v[t.type];return void 0!==t.data&&(c+=n?d.encode(String(t.data),{strict:!1}):String(t.data)),i(""+c)},e.encodeBase64Packet=function(t,n){var r="b"+e.packets[t.type];if("undefined"!=typeof k&&t.data instanceof k){var o=new FileReader;return o.onload=function(){var t=o.result.split(",")[1];n(r+t)},o.readAsDataURL(t.data)}var i;try{i=String.fromCharCode.apply(null,new Uint8Array(t.data))}catch(s){for(var a=new Uint8Array(t.data),c=new Array(a.length),p=0;p<a.length;p++)c[p]=a[p];i=String.fromCharCode.apply(null,c)}return r+=btoa(i),n(r)},e.decodePacket=function(t,n,r){if(void 0===t)return w;if("string"==typeof t){if("b"===t.charAt(0))return e.decodeBase64Packet(t.substr(1),n);if(r&&(t=a(t),t===!1))return w;var o=t.charAt(0);return Number(o)==o&&b[o]?t.length>1?{type:b[o],data:t.substring(1)}:{type:b[o]}:w}var i=new Uint8Array(t),o=i[0],s=f(t,1);return k&&"blob"===n&&(s=new k([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var n=b[t.charAt(0)];if(!p)return{type:n,data:{base64:!0,data:t.substr(1)}};var r=p.decode(t.substr(1));return"blob"===e&&k&&(r=new k([r])),{type:n,data:r}},e.encodePayload=function(t,n,r){function o(t){return t.length+":"+t}function i(t,r){e.encodePacket(t,!!s&&n,!1,function(t){r(null,o(t))})}"function"==typeof n&&(r=n,n=null);var s=h(t);return n&&s?k&&!m?e.encodePayloadAsBlob(t,r):e.encodePayloadAsArrayBuffer(t,r):t.length?void c(t,i,function(t,e){return r(e.join(""))}):r("0:")},e.decodePayload=function(t,n,r){if("string"!=typeof t)return e.decodePayloadAsBinary(t,n,r);"function"==typeof n&&(r=n,n=null);var o;if(""===t)return r(w,0,1);for(var i,s,a="",c=0,p=t.length;c<p;c++){var u=t.charAt(c);if(":"===u){if(""===a||a!=(i=Number(a)))return r(w,0,1);if(s=t.substr(c+1,i),a!=s.length)return r(w,0,1);if(s.length){if(o=e.decodePacket(s,n,!1),w.type===o.type&&w.data===o.data)return r(w,0,1);var h=r(o,c+i,p);if(!1===h)return}c+=i,a=""}else a+=u}return""!==a?r(w,0,1):void 0},e.encodePayloadAsArrayBuffer=function(t,n){function r(t,n){e.encodePacket(t,!0,!0,function(t){return n(null,t)})}return t.length?void c(t,r,function(t,e){var r=e.reduce(function(t,e){var n;return n="string"==typeof e?e.length:e.byteLength,t+n.toString().length+n+2},0),o=new Uint8Array(r),i=0;return e.forEach(function(t){var e="string"==typeof t,n=t;if(e){for(var r=new Uint8Array(t.length),s=0;s<t.length;s++)r[s]=t.charCodeAt(s);n=r.buffer}e?o[i++]=0:o[i++]=1;for(var a=n.byteLength.toString(),s=0;s<a.length;s++)o[i++]=parseInt(a[s]);o[i++]=255;for(var r=new Uint8Array(n),s=0;s<r.length;s++)o[i++]=r[s]}),n(o.buffer)}):n(new ArrayBuffer(0))},e.encodePayloadAsBlob=function(t,n){function r(t,n){e.encodePacket(t,!0,!0,function(t){var e=new Uint8Array(1);if(e[0]=1,"string"==typeof t){for(var r=new Uint8Array(t.length),o=0;o<t.length;o++)r[o]=t.charCodeAt(o);t=r.buffer,e[0]=0}for(var i=t instanceof ArrayBuffer?t.byteLength:t.size,s=i.toString(),a=new Uint8Array(s.length+1),o=0;o<s.length;o++)a[o]=parseInt(s[o]);if(a[s.length]=255,k){var c=new k([e.buffer,a.buffer,t]);n(null,c)}})}c(t,r,function(t,e){return n(new k(e))})},e.decodePayloadAsBinary=function(t,n,r){"function"==typeof n&&(r=n,n=null);for(var o=t,i=[];o.byteLength>0;){for(var s=new Uint8Array(o),a=0===s[0],c="",p=1;255!==s[p];p++){if(c.length>310)return r(w,0,1);c+=s[p]}o=f(o,2+c.length),c=parseInt(c);var u=f(o,0,c);if(a)try{u=String.fromCharCode.apply(null,new Uint8Array(u))}catch(h){var l=new Uint8Array(u);u="";for(var p=0;p<l.length;p++)u+=String.fromCharCode(l[p])}i.push(u),o=f(o,c)}var d=i.length;i.forEach(function(t,o){r(e.decodePacket(t,n,!0),o,d)})}},function(t,e){t.exports=Object.keys||function(t){var e=[],n=Object.prototype.hasOwnProperty;for(var r in t)n.call(t,r)&&e.push(r);return e}},function(t,e,n){function r(t){if(!t||"object"!=typeof t)return!1;if(o(t)){for(var e=0,n=t.length;e<n;e++)if(r(t[e]))return!0;return!1}if("function"==typeof Buffer&&Buffer.isBuffer&&Buffer.isBuffer(t)||"function"==typeof ArrayBuffer&&t instanceof ArrayBuffer||s&&t instanceof Blob||a&&t instanceof File)return!0;if(t.toJSON&&"function"==typeof t.toJSON&&1===arguments.length)return r(t.toJSON(),!0);for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&r(t[i]))return!0;return!1}var o=n(10),i=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===i.call(Blob),a="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===i.call(File);t.exports=r},function(t,e){t.exports=function(t,e,n){var r=t.byteLength;if(e=e||0,n=n||r,t.slice)return t.slice(e,n);if(e<0&&(e+=r),n<0&&(n+=r),n>r&&(n=r),e>=r||e>=n||0===r)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(n-e),s=e,a=0;s<n;s++,a++)i[a]=o[s];return i.buffer}},function(t,e){function n(t,e,n){function o(t,r){if(o.count<=0)throw new Error("after called too many times");--o.count,t?(i=!0,e(t),e=n):0!==o.count||i||e(null,r)}var i=!1;return n=n||r,o.count=t,0===t?e():o}function r(){}t.exports=n},function(t,e){function n(t){for(var e,n,r=[],o=0,i=t.length;o<i;)e=t.charCodeAt(o++),e>=55296&&e<=56319&&o<i?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function r(t){for(var e,n=t.length,r=-1,o="";++r<n;)e=t[r],e>65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var n="";return 0==(4294965248&t)?n=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),n=d(t>>12&15|224),n+=i(t,6)):0==(4292870144&t)&&(n=d(t>>18&7|240),n+=i(t,12),n+=i(t,6)),n+=d(63&t|128)}function a(t,e){e=e||{};for(var r,o=!1!==e.strict,i=n(t),a=i.length,c=-1,p="";++c<a;)r=i[c],p+=s(r,o);return p}function c(){if(l>=f)throw Error("Invalid byte index");var t=255&h[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(t){var e,n,r,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&h[l],l++,0==(128&e))return e;if(192==(224&e)){if(n=c(),s=(31&e)<<6|n,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(n=c(),r=c(),s=(15&e)<<12|n<<6|r,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(n=c(),r=c(),i=c(),s=(7&e)<<18|n<<12|r<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function u(t,e){e=e||{};var o=!1!==e.strict;h=n(t),f=h.length,l=0;for(var i,s=[];(i=p(o))!==!1;)s.push(i);return r(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */
+var h,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:u}},function(t,e){!function(t){"use strict";e.encode=function(e){var n,r=new Uint8Array(e),o=r.length,i="";for(n=0;n<o;n+=3)i+=t[r[n]>>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(e){var n,r,o,i,s,a=.75*e.length,c=e.length,p=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);var u=new ArrayBuffer(a),h=new Uint8Array(u);for(n=0;n<c;n+=4)r=t.indexOf(e[n]),o=t.indexOf(e[n+1]),i=t.indexOf(e[n+2]),s=t.indexOf(e[n+3]),h[p++]=r<<2|o>>4,h[p++]=(15&o)<<4|i>>2,h[p++]=(3&i)<<6|63&s;return u}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},function(t,e){function n(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var n=new Uint8Array(t.byteLength);n.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=n.buffer}return e}return t})}function r(t,e){e=e||{};var r=new i;return n(t).forEach(function(t){r.append(t)}),e.type?r.getBlob(e.type):r.getBlob()}function o(t,e){return new Blob(n(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(e){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(e){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(r.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?r:void 0}()},function(t,e){e.encode=function(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e},e.decode=function(t){for(var e={},n=t.split("&"),r=0,o=n.length;r<o;r++){var i=n[r].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},function(t,e){t.exports=function(t,e){var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e){"use strict";function n(t){var e="";do e=s[t%a]+e,t=Math.floor(t/a);while(t>0);return e}function r(t){var e=0;for(u=0;u<t.length;u++)e=e*a+c[t.charAt(u)];return e}function o(){var t=n(+new Date);return t!==i?(p=0,i=t):t+"."+n(p++)}for(var i,s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),a=64,c={},p=0,u=0;u<a;u++)c[s[u]]=u;o.encode=n,o.decode=r,t.exports=o},function(t,e,n){function r(){}function o(t){i.call(this,t),this.query=this.query||{},c||(c=a.___eio=a.___eio||[]),this.index=c.length;var e=this;c.push(function(t){e.onData(t)}),this.query.j=this.index,"function"==typeof addEventListener&&addEventListener("beforeunload",function(){e.script&&(e.script.onerror=r)},!1)}var i=n(20),s=n(31),a=n(18);t.exports=o;var c,p=/\n/g,u=/\\n/g;s(o,i),o.prototype.supportsBinary=!1,o.prototype.doClose=function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),i.prototype.doClose.call(this)},o.prototype.doPoll=function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var n=document.getElementsByTagName("script")[0];n?n.parentNode.insertBefore(e,n):(document.head||document.body).appendChild(e),this.script=e;var r="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);r&&setTimeout(function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)},100)},o.prototype.doWrite=function(t,e){function n(){r(),e()}function r(){if(o.iframe)try{o.form.removeChild(o.iframe)}catch(t){o.onError("jsonp polling iframe removal error",t)}try{var e='<iframe src="javascript:0" name="'+o.iframeId+'">';i=document.createElement(e)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),r(),t=t.replace(u,"\\\n"),this.area.value=t.replace(p,"\\n");try{this.form.submit()}catch(h){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&n()}:this.iframe.onload=n}},function(t,e,n){function r(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(l=i),s.call(this,t)}var o,i,s=n(21),a=n(22),c=n(30),p=n(31),u=n(32),h=n(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=n(35)}catch(f){}var l=o||i;t.exports=r,p(r,s),r.prototype.name="websocket",r.prototype.supportsBinary=!0,r.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,n={};this.isReactNative||(n.agent=this.agent,n.perMessageDeflate=this.perMessageDeflate,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),this.extraHeaders&&(n.headers=this.extraHeaders),this.localAddress&&(n.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new l(t,e):new l(t):new l(t,e,n)}catch(r){return this.emit("error",r)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},r.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},r.prototype.write=function(t){function e(){n.emit("flush"),setTimeout(function(){n.writable=!0,n.emit("drain")},0)}var n=this;this.writable=!1;for(var r=t.length,o=0,i=r;o<i;o++)!function(t){a.encodePacket(t,n.supportsBinary,function(o){if(!n.usingBrowserWebSocket){var i={};if(t.options&&(i.compress=t.options.compress),n.perMessageDeflate){var s="string"==typeof o?Buffer.byteLength(o):o.length;s<n.perMessageDeflate.threshold&&(i.compress=!1)}}try{n.usingBrowserWebSocket?n.ws.send(o):n.ws.send(o,i)}catch(a){h("websocket closed before onclose event")}--r||e()})}(t[o])},r.prototype.onClose=function(){s.prototype.onClose.call(this)},r.prototype.doClose=function(){"undefined"!=typeof this.ws&&this.ws.close()},r.prototype.uri=function(){var t=this.query||{},e=this.secure?"wss":"ws",n="";this.port&&("wss"===e&&443!==Number(this.port)||"ws"===e&&80!==Number(this.port))&&(n=":"+this.port),this.timestampRequests&&(t[this.timestampParam]=u()),this.supportsBinary||(t.b64=1),t=c.encode(t),t.length&&(t="?"+t);var r=this.hostname.indexOf(":")!==-1;return e+"://"+(r?"["+this.hostname+"]":this.hostname)+n+this.path+t},r.prototype.check=function(){return!(!l||"__initialize"in l&&this.name===r.prototype.name)}},function(t,e){},function(t,e){var n=[].indexOf;t.exports=function(t,e){if(n)return t.indexOf(e);for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}},function(t,e,n){function r(t,e,n){this.io=t,this.nsp=e,this.json=this,this.ids=0,this.acks={},this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0,this.flags={},n&&n.query&&(this.query=n.query),this.io.autoConnect&&this.open()}var o=n(7),i=n(8),s=n(38),a=n(39),c=n(40),p=n(3)("socket.io-client:socket"),u=n(30),h=n(24);t.exports=e=r;var f={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1},l=i.prototype.emit;i(r.prototype),r.prototype.subEvents=function(){if(!this.subs){var t=this.io;this.subs=[a(t,"open",c(this,"onopen")),a(t,"packet",c(this,"onpacket")),a(t,"close",c(this,"onclose"))]}},r.prototype.open=r.prototype.connect=function(){return this.connected?this:(this.subEvents(),this.io.reconnecting||this.io.open(),"open"===this.io.readyState&&this.onopen(),this.emit("connecting"),this)},r.prototype.send=function(){var t=s(arguments);return t.unshift("message"),this.emit.apply(this,t),this},r.prototype.emit=function(t){if(f.hasOwnProperty(t))return l.apply(this,arguments),this;var e=s(arguments),n={type:(void 0!==this.flags.binary?this.flags.binary:h(e))?o.BINARY_EVENT:o.EVENT,data:e};return n.options={},n.options.compress=!this.flags||!1!==this.flags.compress,"function"==typeof e[e.length-1]&&(p("emitting packet with ack id %d",this.ids),this.acks[this.ids]=e.pop(),n.id=this.ids++),this.connected?this.packet(n):this.sendBuffer.push(n),this.flags={},this},r.prototype.packet=function(t){t.nsp=this.nsp,this.io.packet(t)},r.prototype.onopen=function(){if(p("transport is open - connecting"),"/"!==this.nsp)if(this.query){var t="object"==typeof this.query?u.encode(this.query):this.query;p("sending connect packet with query %s",t),this.packet({type:o.CONNECT,query:t})}else this.packet({type:o.CONNECT})},r.prototype.onclose=function(t){p("close (%s)",t),this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",t)},r.prototype.onpacket=function(t){var e=t.nsp===this.nsp,n=t.type===o.ERROR&&"/"===t.nsp;if(e||n)switch(t.type){case o.CONNECT:this.onconnect();break;case o.EVENT:this.onevent(t);break;case o.BINARY_EVENT:this.onevent(t);break;case o.ACK:this.onack(t);break;case o.BINARY_ACK:this.onack(t);break;case o.DISCONNECT:this.ondisconnect();break;case o.ERROR:this.emit("error",t.data)}},r.prototype.onevent=function(t){var e=t.data||[];p("emitting event %j",e),null!=t.id&&(p("attaching ack callback to event"),e.push(this.ack(t.id))),this.connected?l.apply(this,e):this.receiveBuffer.push(e)},r.prototype.ack=function(t){var e=this,n=!1;return function(){if(!n){n=!0;var r=s(arguments);p("sending ack %j",r),e.packet({type:h(r)?o.BINARY_ACK:o.ACK,id:t,data:r})}}},r.prototype.onack=function(t){var e=this.acks[t.id];"function"==typeof e?(p("calling ack %s with %j",t.id,t.data),e.apply(this,t.data),delete this.acks[t.id]):p("bad ack %s",t.id)},r.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},r.prototype.emitBuffered=function(){var t;for(t=0;t<this.receiveBuffer.length;t++)l.apply(this,this.receiveBuffer[t]);for(this.receiveBuffer=[],t=0;t<this.sendBuffer.length;t++)this.packet(this.sendBuffer[t]);this.sendBuffer=[]},r.prototype.ondisconnect=function(){p("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")},r.prototype.destroy=function(){if(this.subs){for(var t=0;t<this.subs.length;t++)this.subs[t].destroy();this.subs=null}this.io.destroy(this)},r.prototype.close=r.prototype.disconnect=function(){return this.connected&&(p("performing disconnect (%s)",this.nsp),this.packet({type:o.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this},r.prototype.compress=function(t){return this.flags.compress=t,this},r.prototype.binary=function(t){return this.flags.binary=t,this}},function(t,e){function n(t,e){var n=[];e=e||0;for(var r=e||0;r<t.length;r++)n[r-e]=t[r];return n}t.exports=n},function(t,e){function n(t,e,n){return t.on(e,n),{destroy:function(){t.removeListener(e,n)}}}t.exports=n},function(t,e){var n=[].slice;t.exports=function(t,e){if("string"==typeof e&&(e=t[e]),"function"!=typeof e)throw new Error("bind() requires a function");var r=n.call(arguments,2);return function(){return e.apply(t,r.concat(n.call(arguments)))}}},function(t,e){function n(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}}])});
+//# sourceMappingURL=socket.io.js.map
index 2c9c4c8..d7c04a2 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///socket.io.js","webpack:///webpack/bootstrap 9e45fccfabd75c66dd47","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./~/debug/src/browser.js","webpack:///./~/process/browser.js","webpack:///./~/debug/src/common.js","webpack:///./~/ms/index.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/socket.io-parser/~/debug/src/browser.js","webpack:///./~/socket.io-parser/~/debug/src/debug.js","webpack:///./~/socket.io-parser/~/ms/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","lookup","uri","opts","undefined","io","parsed","url","source","path","sameNamespace","cache","nsps","newConnection","forceNew","multiplex","debug","Manager","query","socket","parser","managers","protocol","connect","Socket","loc","obj","location","host","charAt","test","parseuri","port","ipv6","indexOf","href","re","parts","str","src","b","e","substring","replace","length","exec","i","authority","ipv6uri","process","useColors","window","type","__nwjs","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","$1","formatArgs","args","namespace","humanize","diff","color","splice","index","lastC","log","_console","_typeof","apply","arguments","save","namespaces","storage","setItem","removeItem","error","load","r","getItem","env","DEBUG","localstorage","localStorage","Symbol","iterator","constructor","prototype","colors","formatters","j","v","JSON","stringify","message","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","nextTick","Array","push","title","browser","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","_toConsumableArray","arr","isArray","arr2","from","setup","selectColor","hash","charCodeAt","createDebug","Math","abs","_len","_key","enabled","self","curr","Number","Date","ms","prevTime","prev","coerce","unshift","format","formatter","val","logFn","destroy","extend","init","instances","delimiter","newDebug","enable","names","skips","split","substr","instance","disable","map","toNamespace","join","regexp","toString","stack","Object","keys","forEach","key","parse","String","n","parseFloat","y","w","d","h","s","fmtShort","msAbs","round","fmtLong","plural","isPlural","options","isFinite","Encoder","encodeAsString","BINARY_EVENT","BINARY_ACK","attachments","nsp","data","payload","tryStringify","ERROR_PACKET","encodeAsBinary","callback","writeEncoding","bloblessData","deconstruction","binary","deconstructPacket","pack","packet","buffers","removeBlobs","Decoder","reconstructor","decodeString","types","buf","next","tryParse","isPayloadValid","ERROR","BinaryReconstructor","reconPack","msg","Emitter","isBuf","CONNECT","DISCONNECT","EVENT","ACK","encode","encoding","add","base64","takeBinaryData","finishedReconstruction","binData","reconstructPacket","Function","chrome","local","err","bind","floor","ceil","isNaN","mixin","addEventListener","event","fn","_callbacks","removeEventListener","callbacks","cb","slice","hasListeners","_deconstructPacket","placeholder","_placeholder","num","newData","_reconstructPacket","withNativeBlob","Blob","withNativeFile","File","packetData","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","FileReader","onload","result","readAsArrayBuffer","withNativeBuffer","Buffer","isBuffer","withNativeArrayBuffer","ArrayBuffer","isView","buffer","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","readyState","connecting","lastPing","packetBuffer","_parser","encoder","decoder","autoConnect","open","eio","has","hasOwnProperty","emitAll","updateSocketIds","generateId","engine","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","skipReconnect","openSub","onopen","errorSub","cleanup","timer","close","onping","onpong","ondata","ondecoded","onerror","onConnecting","encodedPackets","write","processPacketQueue","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","hostname","secure","agent","parseqs","decode","upgrade","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transports","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ca","ciphers","rejectUnauthorized","forceNode","isReactNative","product","extraHeaders","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","clone","o","priorWebsocketSuccess","Transport","createTransport","EIO","transport","sid","requestTimeout","protocols","setTransport","onDrain","onPacket","onError","onClose","probe","onTransportOpen","upgradeLosesBinary","supportsBinary","failed","send","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","to","onOpen","l","onHandshake","setPing","code","filterUpgrades","onHeartbeat","ping","sendPacket","writable","compress","cleanupAndClose","waitForUpgrade","desc","filteredUpgrades","polling","xhr","xd","xs","isSSL","xdomain","xscheme","XMLHttpRequest","XHR","JSONP","websocket","hasCORS","XDomainRequest","empty","Polling","Request","method","async","isBinary","create","unloadHandler","requests","abort","inherit","request","doWrite","req","sendXhr","doPoll","onData","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","onLoad","responseText","onreadystatechange","contentType","getResponseHeader","responseType","status","requestsCount","onSuccess","fromError","response","attachEvent","terminationEvent","hasXHR2","yeast","doOpen","poll","onPause","total","decodePayload","doClose","packets","callbackfn","encodePayload","schema","b64","description","decodePacket","encodeBase64Object","encodeArrayBuffer","encodeBase64Packet","contentArray","Uint8Array","resultBuffer","byteLength","encodeBlobAsArrayBuffer","fr","encodePacket","encodeBlob","dontSendBlobs","blob","tryDecode","utf8","strict","ary","each","done","after","eachWithIndex","el","base64encoder","hasBinary","sliceBuffer","isAndroid","isPhantomJS","pong","packetslist","utf8encode","encoded","readAsDataURL","b64data","fromCharCode","typed","basic","btoa","utf8decode","decodeBase64Packet","asArray","rest","setLengthHeader","encodeOne","doneCallback","encodePayloadAsBlob","encodePayloadAsArrayBuffer","results","decodePayloadAsBinary","chr","ret","totalLength","reduce","acc","resultArray","bufferIndex","isString","ab","view","lenStr","binaryIdentifier","size","lengthAry","bufferTail","tailArray","msgLength","toJSON","arraybuffer","start","end","bytes","abv","ii","count","err_cb","proxy","bail","ucs2decode","string","value","extra","output","counter","ucs2encode","stringFromCharCode","checkScalarValue","codePoint","toUpperCase","createByte","encodeCodePoint","symbol","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","tmp","chars","encoded1","encoded2","encoded3","encoded4","bufferLength","mapArrayBufferViews","chunk","copy","set","byteOffset","BlobBuilderConstructor","bb","BlobBuilder","part","append","getBlob","BlobConstructor","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","a","blobSupportsArrayBufferView","blobBuilderSupported","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","alphabet","decoded","now","seed","global","glob","JSONPPolling","___eio","script","rNewline","rEscapedNewline","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","isUAgecko","complete","initIframe","html","iframeId","area","className","position","top","left","target","setAttribute","action","submit","WS","usingBrowserWebSocket","BrowserWebSocket","WebSocketImpl","NodeWebSocket","WebSocket","MozWebSocket","check","headers","ws","supports","addEventListeners","onmessage","ev","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","toArray","hasBin","events","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","subEvents","pop","onpacket","rootNamespaceError","onconnect","onevent","onack","ondisconnect","ack","sent","emitBuffered","list","factor","pow","rand","random","deviation"],"mappings":"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","file":"socket.io.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar url = __webpack_require__(1);\n\tvar parser = __webpack_require__(7);\n\tvar Manager = __webpack_require__(15);\n\tvar debug = __webpack_require__(3)('socket.io-client');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = lookup;\n\t\n\t/**\n\t * Managers cache.\n\t */\n\t\n\tvar cache = exports.managers = {};\n\t\n\t/**\n\t * Looks up an existing `Manager` for multiplexing.\n\t * If the user summons:\n\t *\n\t *   `io('http://localhost/a');`\n\t *   `io('http://localhost/b');`\n\t *\n\t * We reuse the existing instance based on same scheme/port/host,\n\t * and we initialize sockets for each namespace.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction lookup (uri, opts) {\n\t  if (typeof uri === 'object') {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t\n\t  opts = opts || {};\n\t\n\t  var parsed = url(uri);\n\t  var source = parsed.source;\n\t  var id = parsed.id;\n\t  var path = parsed.path;\n\t  var sameNamespace = cache[id] && path in cache[id].nsps;\n\t  var newConnection = opts.forceNew || opts['force new connection'] ||\n\t                      false === opts.multiplex || sameNamespace;\n\t\n\t  var io;\n\t\n\t  if (newConnection) {\n\t    debug('ignoring socket cache for %s', source);\n\t    io = Manager(source, opts);\n\t  } else {\n\t    if (!cache[id]) {\n\t      debug('new io instance for %s', source);\n\t      cache[id] = Manager(source, opts);\n\t    }\n\t    io = cache[id];\n\t  }\n\t  if (parsed.query && !opts.query) {\n\t    opts.query = parsed.query;\n\t  }\n\t  return io.socket(parsed.path, opts);\n\t}\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = parser.protocol;\n\t\n\t/**\n\t * `connect`.\n\t *\n\t * @param {String} uri\n\t * @api public\n\t */\n\t\n\texports.connect = lookup;\n\t\n\t/**\n\t * Expose constructors for standalone build.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Manager = __webpack_require__(15);\n\texports.Socket = __webpack_require__(39);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parseuri = __webpack_require__(2);\n\tvar debug = __webpack_require__(3)('socket.io-client:url');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = url;\n\t\n\t/**\n\t * URL parser.\n\t *\n\t * @param {String} url\n\t * @param {Object} An object meant to mimic window.location.\n\t *                 Defaults to window.location.\n\t * @api public\n\t */\n\t\n\tfunction url (uri, loc) {\n\t  var obj = uri;\n\t\n\t  // default to window.location\n\t  loc = loc || (typeof location !== 'undefined' && location);\n\t  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\t\n\t  // relative path support\n\t  if ('string' === typeof uri) {\n\t    if ('/' === uri.charAt(0)) {\n\t      if ('/' === uri.charAt(1)) {\n\t        uri = loc.protocol + uri;\n\t      } else {\n\t        uri = loc.host + uri;\n\t      }\n\t    }\n\t\n\t    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\t      debug('protocol-less url %s', uri);\n\t      if ('undefined' !== typeof loc) {\n\t        uri = loc.protocol + '//' + uri;\n\t      } else {\n\t        uri = 'https://' + uri;\n\t      }\n\t    }\n\t\n\t    // parse\n\t    debug('parse %s', uri);\n\t    obj = parseuri(uri);\n\t  }\n\t\n\t  // make sure we treat `localhost:80` and `localhost` equally\n\t  if (!obj.port) {\n\t    if (/^(http|ws)$/.test(obj.protocol)) {\n\t      obj.port = '80';\n\t    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n\t      obj.port = '443';\n\t    }\n\t  }\n\t\n\t  obj.path = obj.path || '/';\n\t\n\t  var ipv6 = obj.host.indexOf(':') !== -1;\n\t  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\t\n\t  // define unique id\n\t  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n\t  // define href\n\t  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\t\n\t  return obj;\n\t}\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Parses an URI\r\n\t *\r\n\t * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n\t * @api private\r\n\t */\r\n\t\r\n\tvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\t\r\n\tvar parts = [\r\n\t    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n\t];\r\n\t\r\n\tmodule.exports = function parseuri(str) {\r\n\t    var src = str,\r\n\t        b = str.indexOf('['),\r\n\t        e = str.indexOf(']');\r\n\t\r\n\t    if (b != -1 && e != -1) {\r\n\t        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n\t    }\r\n\t\r\n\t    var m = re.exec(str || ''),\r\n\t        uri = {},\r\n\t        i = 14;\r\n\t\r\n\t    while (i--) {\r\n\t        uri[parts[i]] = m[i] || '';\r\n\t    }\r\n\t\r\n\t    if (b != -1 && e != -1) {\r\n\t        uri.source = src;\r\n\t        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n\t        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n\t        uri.ipv6uri = true;\r\n\t    }\r\n\t\r\n\t    return uri;\r\n\t};\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/* eslint-env browser */\n\t\n\t/**\n\t * This is the web browser implementation of `debug()`.\n\t */\n\t\n\texports.log = log;\n\texports.formatArgs = formatArgs;\n\texports.save = save;\n\texports.load = load;\n\texports.useColors = useColors;\n\texports.storage = localstorage();\n\t\n\t/**\n\t * Colors.\n\t */\n\t\n\texports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n\t\n\t/**\n\t * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n\t * and the Firebug extension (any Firefox version) are known\n\t * to support \"%c\" CSS customizations.\n\t *\n\t * TODO: add a `localStorage` variable to explicitly enable/disable colors\n\t */\n\t\n\t// eslint-disable-next-line complexity\n\tfunction useColors() {\n\t\t// NB: In an Electron preload script, document will be defined but not fully\n\t\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t\t// explicitly\n\t\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t// Internet Explorer and Edge do not support colors.\n\t\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t\treturn typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\ttypeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\ttypeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\ttypeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n\t}\n\t\n\t/**\n\t * Colorize log arguments if enabled.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction formatArgs(args) {\n\t\targs[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);\n\t\n\t\tif (!this.useColors) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar c = 'color: ' + this.color;\n\t\targs.splice(1, 0, c, 'color: inherit');\n\t\n\t\t// The final \"%c\" is somewhat tricky, because there could be other\n\t\t// arguments passed either before or after the %c, so we need to\n\t\t// figure out the correct index to insert the CSS into\n\t\tvar index = 0;\n\t\tvar lastC = 0;\n\t\targs[0].replace(/%[a-zA-Z%]/g, function (match) {\n\t\t\tif (match === '%%') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tindex++;\n\t\t\tif (match === '%c') {\n\t\t\t\t// We only are interested in the *last* %c\n\t\t\t\t// (the user may have provided their own)\n\t\t\t\tlastC = index;\n\t\t\t}\n\t\t});\n\t\n\t\targs.splice(lastC, 0, c);\n\t}\n\t\n\t/**\n\t * Invokes `console.log()` when available.\n\t * No-op when `console.log` is not a \"function\".\n\t *\n\t * @api public\n\t */\n\tfunction log() {\n\t\tvar _console;\n\t\n\t\t// This hackery is required for IE8/9, where\n\t\t// the `console.log` function doesn't have 'apply'\n\t\treturn (typeof console === 'undefined' ? 'undefined' : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);\n\t}\n\t\n\t/**\n\t * Save `namespaces`.\n\t *\n\t * @param {String} namespaces\n\t * @api private\n\t */\n\tfunction save(namespaces) {\n\t\ttry {\n\t\t\tif (namespaces) {\n\t\t\t\texports.storage.setItem('debug', namespaces);\n\t\t\t} else {\n\t\t\t\texports.storage.removeItem('debug');\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Swallow\n\t\t\t// XXX (@Qix-) should we be logging these?\n\t\t}\n\t}\n\t\n\t/**\n\t * Load `namespaces`.\n\t *\n\t * @return {String} returns the previously persisted debug modes\n\t * @api private\n\t */\n\tfunction load() {\n\t\tvar r = void 0;\n\t\ttry {\n\t\t\tr = exports.storage.getItem('debug');\n\t\t} catch (error) {}\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t\n\t\n\t\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\t\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\t\tr = process.env.DEBUG;\n\t\t}\n\t\n\t\treturn r;\n\t}\n\t\n\t/**\n\t * Localstorage attempts to return the localstorage.\n\t *\n\t * This is necessary because safari throws\n\t * when a user disables cookies/localstorage\n\t * and you attempt to access it.\n\t *\n\t * @return {LocalStorage}\n\t * @api private\n\t */\n\t\n\tfunction localstorage() {\n\t\ttry {\n\t\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t\t// The Browser also has localStorage in the global context.\n\t\t\treturn localStorage;\n\t\t} catch (error) {\n\t\t\t// Swallow\n\t\t\t// XXX (@Qix-) should we be logging these?\n\t\t}\n\t}\n\t\n\tmodule.exports = __webpack_require__(5)(exports);\n\t\n\tvar formatters = module.exports.formatters;\n\t\n\t/**\n\t * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n\t */\n\t\n\tformatters.j = function (v) {\n\t\ttry {\n\t\t\treturn JSON.stringify(v);\n\t\t} catch (error) {\n\t\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t\t}\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things.  But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals.  It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t    throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t    throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t    try {\n\t        if (typeof setTimeout === 'function') {\n\t            cachedSetTimeout = setTimeout;\n\t        } else {\n\t            cachedSetTimeout = defaultSetTimout;\n\t        }\n\t    } catch (e) {\n\t        cachedSetTimeout = defaultSetTimout;\n\t    }\n\t    try {\n\t        if (typeof clearTimeout === 'function') {\n\t            cachedClearTimeout = clearTimeout;\n\t        } else {\n\t            cachedClearTimeout = defaultClearTimeout;\n\t        }\n\t    } catch (e) {\n\t        cachedClearTimeout = defaultClearTimeout;\n\t    }\n\t} ())\n\tfunction runTimeout(fun) {\n\t    if (cachedSetTimeout === setTimeout) {\n\t        //normal enviroments in sane situations\n\t        return setTimeout(fun, 0);\n\t    }\n\t    // if setTimeout wasn't available but was latter defined\n\t    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t        cachedSetTimeout = setTimeout;\n\t        return setTimeout(fun, 0);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedSetTimeout(fun, 0);\n\t    } catch(e){\n\t        try {\n\t            // 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\t            return cachedSetTimeout.call(null, fun, 0);\n\t        } catch(e){\n\t            // 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\t            return cachedSetTimeout.call(this, fun, 0);\n\t        }\n\t    }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t    if (cachedClearTimeout === clearTimeout) {\n\t        //normal enviroments in sane situations\n\t        return clearTimeout(marker);\n\t    }\n\t    // if clearTimeout wasn't available but was latter defined\n\t    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t        cachedClearTimeout = clearTimeout;\n\t        return clearTimeout(marker);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedClearTimeout(marker);\n\t    } catch (e){\n\t        try {\n\t            // 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\t            return cachedClearTimeout.call(null, marker);\n\t        } catch (e){\n\t            // 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\t            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t            return cachedClearTimeout.call(this, marker);\n\t        }\n\t    }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t    if (!draining || !currentQueue) {\n\t        return;\n\t    }\n\t    draining = false;\n\t    if (currentQueue.length) {\n\t        queue = currentQueue.concat(queue);\n\t    } else {\n\t        queueIndex = -1;\n\t    }\n\t    if (queue.length) {\n\t        drainQueue();\n\t    }\n\t}\n\t\n\tfunction drainQueue() {\n\t    if (draining) {\n\t        return;\n\t    }\n\t    var timeout = runTimeout(cleanUpNextTick);\n\t    draining = true;\n\t\n\t    var len = queue.length;\n\t    while(len) {\n\t        currentQueue = queue;\n\t        queue = [];\n\t        while (++queueIndex < len) {\n\t            if (currentQueue) {\n\t                currentQueue[queueIndex].run();\n\t            }\n\t        }\n\t        queueIndex = -1;\n\t        len = queue.length;\n\t    }\n\t    currentQueue = null;\n\t    draining = false;\n\t    runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t    var args = new Array(arguments.length - 1);\n\t    if (arguments.length > 1) {\n\t        for (var i = 1; i < arguments.length; i++) {\n\t            args[i - 1] = arguments[i];\n\t        }\n\t    }\n\t    queue.push(new Item(fun, args));\n\t    if (queue.length === 1 && !draining) {\n\t        runTimeout(drainQueue);\n\t    }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t    this.fun = fun;\n\t    this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t    this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t    throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t    throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\t/**\n\t * This is the common logic for both the Node.js and web browser\n\t * implementations of `debug()`.\n\t */\n\t\n\tfunction setup(env) {\n\t\tcreateDebug.debug = createDebug;\n\t\tcreateDebug.default = createDebug;\n\t\tcreateDebug.coerce = coerce;\n\t\tcreateDebug.disable = disable;\n\t\tcreateDebug.enable = enable;\n\t\tcreateDebug.enabled = enabled;\n\t\tcreateDebug.humanize = __webpack_require__(6);\n\t\n\t\tObject.keys(env).forEach(function (key) {\n\t\t\tcreateDebug[key] = env[key];\n\t\t});\n\t\n\t\t/**\n\t * Active `debug` instances.\n\t */\n\t\tcreateDebug.instances = [];\n\t\n\t\t/**\n\t * The currently active debug mode names, and names to skip.\n\t */\n\t\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\t\n\t\t/**\n\t * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t *\n\t * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t */\n\t\tcreateDebug.formatters = {};\n\t\n\t\t/**\n\t * Selects a color for a debug namespace\n\t * @param {String} namespace The namespace string for the for the debug instance to be colored\n\t * @return {Number|String} An ANSI color code for the given namespace\n\t * @api private\n\t */\n\t\tfunction selectColor(namespace) {\n\t\t\tvar hash = 0;\n\t\n\t\t\tfor (var i = 0; i < namespace.length; i++) {\n\t\t\t\thash = (hash << 5) - hash + namespace.charCodeAt(i);\n\t\t\t\thash |= 0; // Convert to 32bit integer\n\t\t\t}\n\t\n\t\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t\t}\n\t\tcreateDebug.selectColor = selectColor;\n\t\n\t\t/**\n\t * Create a debugger with the given `namespace`.\n\t *\n\t * @param {String} namespace\n\t * @return {Function}\n\t * @api public\n\t */\n\t\tfunction createDebug(namespace) {\n\t\t\tvar prevTime = void 0;\n\t\n\t\t\tfunction debug() {\n\t\t\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\t\t\targs[_key] = arguments[_key];\n\t\t\t\t}\n\t\n\t\t\t\t// Disabled?\n\t\t\t\tif (!debug.enabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tvar self = debug;\n\t\n\t\t\t\t// Set `diff` timestamp\n\t\t\t\tvar curr = Number(new Date());\n\t\t\t\tvar ms = curr - (prevTime || curr);\n\t\t\t\tself.diff = ms;\n\t\t\t\tself.prev = prevTime;\n\t\t\t\tself.curr = curr;\n\t\t\t\tprevTime = curr;\n\t\n\t\t\t\targs[0] = createDebug.coerce(args[0]);\n\t\n\t\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\t\targs.unshift('%O');\n\t\t\t\t}\n\t\n\t\t\t\t// Apply any `formatters` transformations\n\t\t\t\tvar index = 0;\n\t\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n\t\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\t\tif (match === '%%') {\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t}\n\t\t\t\t\tindex++;\n\t\t\t\t\tvar formatter = createDebug.formatters[format];\n\t\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\t\tvar val = args[index];\n\t\t\t\t\t\tmatch = formatter.call(self, val);\n\t\n\t\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t}\n\t\t\t\t\treturn match;\n\t\t\t\t});\n\t\n\t\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\t\tcreateDebug.formatArgs.call(self, args);\n\t\n\t\t\t\tvar logFn = self.log || createDebug.log;\n\t\t\t\tlogFn.apply(self, args);\n\t\t\t}\n\t\n\t\t\tdebug.namespace = namespace;\n\t\t\tdebug.enabled = createDebug.enabled(namespace);\n\t\t\tdebug.useColors = createDebug.useColors();\n\t\t\tdebug.color = selectColor(namespace);\n\t\t\tdebug.destroy = destroy;\n\t\t\tdebug.extend = extend;\n\t\t\t// Debug.formatArgs = formatArgs;\n\t\t\t// debug.rawLog = rawLog;\n\t\n\t\t\t// env-specific initialization logic for debug instances\n\t\t\tif (typeof createDebug.init === 'function') {\n\t\t\t\tcreateDebug.init(debug);\n\t\t\t}\n\t\n\t\t\tcreateDebug.instances.push(debug);\n\t\n\t\t\treturn debug;\n\t\t}\n\t\n\t\tfunction destroy() {\n\t\t\tvar index = createDebug.instances.indexOf(this);\n\t\t\tif (index !== -1) {\n\t\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\n\t\tfunction extend(namespace, delimiter) {\n\t\t\tvar newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\t\tnewDebug.log = this.log;\n\t\t\treturn newDebug;\n\t\t}\n\t\n\t\t/**\n\t * Enables a debug mode by namespaces. This can include modes\n\t * separated by a colon and wildcards.\n\t *\n\t * @param {String} namespaces\n\t * @api public\n\t */\n\t\tfunction enable(namespaces) {\n\t\t\tcreateDebug.save(namespaces);\n\t\n\t\t\tcreateDebug.names = [];\n\t\t\tcreateDebug.skips = [];\n\t\n\t\t\tvar i = void 0;\n\t\t\tvar split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\t\tvar len = split.length;\n\t\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tif (!split[i]) {\n\t\t\t\t\t// ignore empty strings\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\n\t\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\t\n\t\t\t\tif (namespaces[0] === '-') {\n\t\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t\t} else {\n\t\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\t\tvar instance = createDebug.instances[i];\n\t\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\n\t\t\t}\n\t\t}\n\t\n\t\t/**\n\t * Disable debug output.\n\t *\n\t * @return {String} namespaces\n\t * @api public\n\t */\n\t\tfunction disable() {\n\t\t\tvar namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) {\n\t\t\t\treturn '-' + namespace;\n\t\t\t}))).join(',');\n\t\t\tcreateDebug.enable('');\n\t\t\treturn namespaces;\n\t\t}\n\t\n\t\t/**\n\t * Returns true if the given mode name is enabled, false otherwise.\n\t *\n\t * @param {String} name\n\t * @return {Boolean}\n\t * @api public\n\t */\n\t\tfunction enabled(name) {\n\t\t\tif (name[name.length - 1] === '*') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\tvar i = void 0;\n\t\t\tvar len = void 0;\n\t\n\t\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn false;\n\t\t}\n\t\n\t\t/**\n\t * Convert regexp to namespace\n\t *\n\t * @param {RegExp} regxep\n\t * @return {String} namespace\n\t * @api private\n\t */\n\t\tfunction toNamespace(regexp) {\n\t\t\treturn regexp.toString().substring(2, regexp.toString().length - 2).replace(/\\.\\*\\?$/, '*');\n\t\t}\n\t\n\t\t/**\n\t * Coerce `val`.\n\t *\n\t * @param {Mixed} val\n\t * @return {Mixed}\n\t * @api private\n\t */\n\t\tfunction coerce(val) {\n\t\t\tif (val instanceof Error) {\n\t\t\t\treturn val.stack || val.message;\n\t\t\t}\n\t\t\treturn val;\n\t\t}\n\t\n\t\tcreateDebug.enable(createDebug.load());\n\t\n\t\treturn createDebug;\n\t}\n\t\n\tmodule.exports = setup;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Helpers.\n\t */\n\t\n\tvar s = 1000;\n\tvar m = s * 60;\n\tvar h = m * 60;\n\tvar d = h * 24;\n\tvar w = d * 7;\n\tvar y = d * 365.25;\n\t\n\t/**\n\t * Parse or format the given `val`.\n\t *\n\t * Options:\n\t *\n\t *  - `long` verbose formatting [false]\n\t *\n\t * @param {String|Number} val\n\t * @param {Object} [options]\n\t * @throws {Error} throw an error if val is not a non-empty string or a number\n\t * @return {String|Number}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(val, options) {\n\t  options = options || {};\n\t  var type = typeof val;\n\t  if (type === 'string' && val.length > 0) {\n\t    return parse(val);\n\t  } else if (type === 'number' && isFinite(val)) {\n\t    return options.long ? fmtLong(val) : fmtShort(val);\n\t  }\n\t  throw new Error(\n\t    'val is not a non-empty string or a valid number. val=' +\n\t      JSON.stringify(val)\n\t  );\n\t};\n\t\n\t/**\n\t * Parse the given `str` and return milliseconds.\n\t *\n\t * @param {String} str\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction parse(str) {\n\t  str = String(str);\n\t  if (str.length > 100) {\n\t    return;\n\t  }\n\t  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n\t    str\n\t  );\n\t  if (!match) {\n\t    return;\n\t  }\n\t  var n = parseFloat(match[1]);\n\t  var type = (match[2] || 'ms').toLowerCase();\n\t  switch (type) {\n\t    case 'years':\n\t    case 'year':\n\t    case 'yrs':\n\t    case 'yr':\n\t    case 'y':\n\t      return n * y;\n\t    case 'weeks':\n\t    case 'week':\n\t    case 'w':\n\t      return n * w;\n\t    case 'days':\n\t    case 'day':\n\t    case 'd':\n\t      return n * d;\n\t    case 'hours':\n\t    case 'hour':\n\t    case 'hrs':\n\t    case 'hr':\n\t    case 'h':\n\t      return n * h;\n\t    case 'minutes':\n\t    case 'minute':\n\t    case 'mins':\n\t    case 'min':\n\t    case 'm':\n\t      return n * m;\n\t    case 'seconds':\n\t    case 'second':\n\t    case 'secs':\n\t    case 'sec':\n\t    case 's':\n\t      return n * s;\n\t    case 'milliseconds':\n\t    case 'millisecond':\n\t    case 'msecs':\n\t    case 'msec':\n\t    case 'ms':\n\t      return n;\n\t    default:\n\t      return undefined;\n\t  }\n\t}\n\t\n\t/**\n\t * Short format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtShort(ms) {\n\t  var msAbs = Math.abs(ms);\n\t  if (msAbs >= d) {\n\t    return Math.round(ms / d) + 'd';\n\t  }\n\t  if (msAbs >= h) {\n\t    return Math.round(ms / h) + 'h';\n\t  }\n\t  if (msAbs >= m) {\n\t    return Math.round(ms / m) + 'm';\n\t  }\n\t  if (msAbs >= s) {\n\t    return Math.round(ms / s) + 's';\n\t  }\n\t  return ms + 'ms';\n\t}\n\t\n\t/**\n\t * Long format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtLong(ms) {\n\t  var msAbs = Math.abs(ms);\n\t  if (msAbs >= d) {\n\t    return plural(ms, msAbs, d, 'day');\n\t  }\n\t  if (msAbs >= h) {\n\t    return plural(ms, msAbs, h, 'hour');\n\t  }\n\t  if (msAbs >= m) {\n\t    return plural(ms, msAbs, m, 'minute');\n\t  }\n\t  if (msAbs >= s) {\n\t    return plural(ms, msAbs, s, 'second');\n\t  }\n\t  return ms + ' ms';\n\t}\n\t\n\t/**\n\t * Pluralization helper.\n\t */\n\t\n\tfunction plural(ms, msAbs, n, name) {\n\t  var isPlural = msAbs >= n * 1.5;\n\t  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n\t}\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar debug = __webpack_require__(8)('socket.io-parser');\n\tvar Emitter = __webpack_require__(11);\n\tvar binary = __webpack_require__(12);\n\tvar isArray = __webpack_require__(13);\n\tvar isBuf = __webpack_require__(14);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = 4;\n\t\n\t/**\n\t * Packet types.\n\t *\n\t * @api public\n\t */\n\t\n\texports.types = [\n\t  'CONNECT',\n\t  'DISCONNECT',\n\t  'EVENT',\n\t  'ACK',\n\t  'ERROR',\n\t  'BINARY_EVENT',\n\t  'BINARY_ACK'\n\t];\n\t\n\t/**\n\t * Packet type `connect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.CONNECT = 0;\n\t\n\t/**\n\t * Packet type `disconnect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.DISCONNECT = 1;\n\t\n\t/**\n\t * Packet type `event`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.EVENT = 2;\n\t\n\t/**\n\t * Packet type `ack`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ACK = 3;\n\t\n\t/**\n\t * Packet type `error`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ERROR = 4;\n\t\n\t/**\n\t * Packet type 'binary event'\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_EVENT = 5;\n\t\n\t/**\n\t * Packet type `binary ack`. For acks with binary arguments.\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_ACK = 6;\n\t\n\t/**\n\t * Encoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Encoder = Encoder;\n\t\n\t/**\n\t * Decoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Decoder = Decoder;\n\t\n\t/**\n\t * A socket.io Encoder instance\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Encoder() {}\n\t\n\tvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\t\n\t/**\n\t * Encode a packet as a single string if non-binary, or as a\n\t * buffer sequence, depending on packet type.\n\t *\n\t * @param {Object} obj - packet object\n\t * @param {Function} callback - function to handle encodings (likely engine.write)\n\t * @return Calls callback with Array of encodings\n\t * @api public\n\t */\n\t\n\tEncoder.prototype.encode = function(obj, callback){\n\t  debug('encoding packet %j', obj);\n\t\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    encodeAsBinary(obj, callback);\n\t  } else {\n\t    var encoding = encodeAsString(obj);\n\t    callback([encoding]);\n\t  }\n\t};\n\t\n\t/**\n\t * Encode packet as string.\n\t *\n\t * @param {Object} packet\n\t * @return {String} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsString(obj) {\n\t\n\t  // first is type\n\t  var str = '' + obj.type;\n\t\n\t  // attachments if we have them\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    str += obj.attachments + '-';\n\t  }\n\t\n\t  // if we have a namespace other than `/`\n\t  // we append it followed by a comma `,`\n\t  if (obj.nsp && '/' !== obj.nsp) {\n\t    str += obj.nsp + ',';\n\t  }\n\t\n\t  // immediately followed by the id\n\t  if (null != obj.id) {\n\t    str += obj.id;\n\t  }\n\t\n\t  // json data\n\t  if (null != obj.data) {\n\t    var payload = tryStringify(obj.data);\n\t    if (payload !== false) {\n\t      str += payload;\n\t    } else {\n\t      return ERROR_PACKET;\n\t    }\n\t  }\n\t\n\t  debug('encoded %j as %s', obj, str);\n\t  return str;\n\t}\n\t\n\tfunction tryStringify(str) {\n\t  try {\n\t    return JSON.stringify(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Encode packet as 'buffer sequence' by removing blobs, and\n\t * deconstructing packet into object with placeholders and\n\t * a list of buffers.\n\t *\n\t * @param {Object} packet\n\t * @return {Buffer} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsBinary(obj, callback) {\n\t\n\t  function writeEncoding(bloblessData) {\n\t    var deconstruction = binary.deconstructPacket(bloblessData);\n\t    var pack = encodeAsString(deconstruction.packet);\n\t    var buffers = deconstruction.buffers;\n\t\n\t    buffers.unshift(pack); // add packet info to beginning of data list\n\t    callback(buffers); // write all the buffers\n\t  }\n\t\n\t  binary.removeBlobs(obj, writeEncoding);\n\t}\n\t\n\t/**\n\t * A socket.io Decoder instance\n\t *\n\t * @return {Object} decoder\n\t * @api public\n\t */\n\t\n\tfunction Decoder() {\n\t  this.reconstructor = null;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter` with Decoder.\n\t */\n\t\n\tEmitter(Decoder.prototype);\n\t\n\t/**\n\t * Decodes an encoded packet string into packet JSON.\n\t *\n\t * @param {String} obj - encoded packet\n\t * @return {Object} packet\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.add = function(obj) {\n\t  var packet;\n\t  if (typeof obj === 'string') {\n\t    packet = decodeString(obj);\n\t    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n\t      this.reconstructor = new BinaryReconstructor(packet);\n\t\n\t      // no attachments, labeled binary but no binary data to follow\n\t      if (this.reconstructor.reconPack.attachments === 0) {\n\t        this.emit('decoded', packet);\n\t      }\n\t    } else { // non-binary full packet\n\t      this.emit('decoded', packet);\n\t    }\n\t  } else if (isBuf(obj) || obj.base64) { // raw binary data\n\t    if (!this.reconstructor) {\n\t      throw new Error('got binary data when not reconstructing a packet');\n\t    } else {\n\t      packet = this.reconstructor.takeBinaryData(obj);\n\t      if (packet) { // received final buffer\n\t        this.reconstructor = null;\n\t        this.emit('decoded', packet);\n\t      }\n\t    }\n\t  } else {\n\t    throw new Error('Unknown type: ' + obj);\n\t  }\n\t};\n\t\n\t/**\n\t * Decode a packet String (JSON data)\n\t *\n\t * @param {String} str\n\t * @return {Object} packet\n\t * @api private\n\t */\n\t\n\tfunction decodeString(str) {\n\t  var i = 0;\n\t  // look up type\n\t  var p = {\n\t    type: Number(str.charAt(0))\n\t  };\n\t\n\t  if (null == exports.types[p.type]) {\n\t    return error('unknown packet type ' + p.type);\n\t  }\n\t\n\t  // look up attachments if type binary\n\t  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n\t    var buf = '';\n\t    while (str.charAt(++i) !== '-') {\n\t      buf += str.charAt(i);\n\t      if (i == str.length) break;\n\t    }\n\t    if (buf != Number(buf) || str.charAt(i) !== '-') {\n\t      throw new Error('Illegal attachments');\n\t    }\n\t    p.attachments = Number(buf);\n\t  }\n\t\n\t  // look up namespace (if any)\n\t  if ('/' === str.charAt(i + 1)) {\n\t    p.nsp = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (',' === c) break;\n\t      p.nsp += c;\n\t      if (i === str.length) break;\n\t    }\n\t  } else {\n\t    p.nsp = '/';\n\t  }\n\t\n\t  // look up id\n\t  var next = str.charAt(i + 1);\n\t  if ('' !== next && Number(next) == next) {\n\t    p.id = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (null == c || Number(c) != c) {\n\t        --i;\n\t        break;\n\t      }\n\t      p.id += str.charAt(i);\n\t      if (i === str.length) break;\n\t    }\n\t    p.id = Number(p.id);\n\t  }\n\t\n\t  // look up json data\n\t  if (str.charAt(++i)) {\n\t    var payload = tryParse(str.substr(i));\n\t    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n\t    if (isPayloadValid) {\n\t      p.data = payload;\n\t    } else {\n\t      return error('invalid payload');\n\t    }\n\t  }\n\t\n\t  debug('decoded %s as %j', str, p);\n\t  return p;\n\t}\n\t\n\tfunction tryParse(str) {\n\t  try {\n\t    return JSON.parse(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Deallocates a parser's resources\n\t *\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.destroy = function() {\n\t  if (this.reconstructor) {\n\t    this.reconstructor.finishedReconstruction();\n\t  }\n\t};\n\t\n\t/**\n\t * A manager of a binary event's 'buffer sequence'. Should\n\t * be constructed whenever a packet of type BINARY_EVENT is\n\t * decoded.\n\t *\n\t * @param {Object} packet\n\t * @return {BinaryReconstructor} initialized reconstructor\n\t * @api private\n\t */\n\t\n\tfunction BinaryReconstructor(packet) {\n\t  this.reconPack = packet;\n\t  this.buffers = [];\n\t}\n\t\n\t/**\n\t * Method to be called when binary data received from connection\n\t * after a BINARY_EVENT packet.\n\t *\n\t * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n\t * @return {null | Object} returns null if more binary data is expected or\n\t *   a reconstructed packet object if all buffers have been received.\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n\t  this.buffers.push(binData);\n\t  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n\t    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n\t    this.finishedReconstruction();\n\t    return packet;\n\t  }\n\t  return null;\n\t};\n\t\n\t/**\n\t * Cleans up binary packet reconstruction variables.\n\t *\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.finishedReconstruction = function() {\n\t  this.reconPack = null;\n\t  this.buffers = [];\n\t};\n\t\n\tfunction error(msg) {\n\t  return {\n\t    type: exports.ERROR,\n\t    data: 'parser error: ' + msg\n\t  };\n\t}\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * This is the web browser implementation of `debug()`.\n\t *\n\t * Expose `debug()` as the module.\n\t */\n\t\n\texports = module.exports = __webpack_require__(9);\n\texports.log = log;\n\texports.formatArgs = formatArgs;\n\texports.save = save;\n\texports.load = load;\n\texports.useColors = useColors;\n\texports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();\n\t\n\t/**\n\t * Colors.\n\t */\n\t\n\texports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n\t\n\t/**\n\t * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n\t * and the Firebug extension (any Firefox version) are known\n\t * to support \"%c\" CSS customizations.\n\t *\n\t * TODO: add a `localStorage` variable to explicitly enable/disable colors\n\t */\n\t\n\tfunction useColors() {\n\t  // NB: In an Electron preload script, document will be defined but not fully\n\t  // initialized. Since we know we're in Chrome, we'll just detect this case\n\t  // explicitly\n\t  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n\t    return true;\n\t  }\n\t\n\t  // Internet Explorer and Edge do not support colors.\n\t  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t    return false;\n\t  }\n\t\n\t  // is webkit? http://stackoverflow.com/a/16459606/376773\n\t  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n\t  // is firebug? http://stackoverflow.com/a/398120/376773\n\t  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n\t  // is firefox >= v31?\n\t  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n\t  // double check webkit in userAgent just in case we are in a worker\n\t  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n\t}\n\t\n\t/**\n\t * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n\t */\n\t\n\texports.formatters.j = function (v) {\n\t  try {\n\t    return JSON.stringify(v);\n\t  } catch (err) {\n\t    return '[UnexpectedJSONParseError]: ' + err.message;\n\t  }\n\t};\n\t\n\t/**\n\t * Colorize log arguments if enabled.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction formatArgs(args) {\n\t  var useColors = this.useColors;\n\t\n\t  args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);\n\t\n\t  if (!useColors) return;\n\t\n\t  var c = 'color: ' + this.color;\n\t  args.splice(1, 0, c, 'color: inherit');\n\t\n\t  // the final \"%c\" is somewhat tricky, because there could be other\n\t  // arguments passed either before or after the %c, so we need to\n\t  // figure out the correct index to insert the CSS into\n\t  var index = 0;\n\t  var lastC = 0;\n\t  args[0].replace(/%[a-zA-Z%]/g, function (match) {\n\t    if ('%%' === match) return;\n\t    index++;\n\t    if ('%c' === match) {\n\t      // we only are interested in the *last* %c\n\t      // (the user may have provided their own)\n\t      lastC = index;\n\t    }\n\t  });\n\t\n\t  args.splice(lastC, 0, c);\n\t}\n\t\n\t/**\n\t * Invokes `console.log()` when available.\n\t * No-op when `console.log` is not a \"function\".\n\t *\n\t * @api public\n\t */\n\t\n\tfunction log() {\n\t  // this hackery is required for IE8/9, where\n\t  // the `console.log` function doesn't have 'apply'\n\t  return 'object' === (typeof console === 'undefined' ? 'undefined' : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments);\n\t}\n\t\n\t/**\n\t * Save `namespaces`.\n\t *\n\t * @param {String} namespaces\n\t * @api private\n\t */\n\t\n\tfunction save(namespaces) {\n\t  try {\n\t    if (null == namespaces) {\n\t      exports.storage.removeItem('debug');\n\t    } else {\n\t      exports.storage.debug = namespaces;\n\t    }\n\t  } catch (e) {}\n\t}\n\t\n\t/**\n\t * Load `namespaces`.\n\t *\n\t * @return {String} returns the previously persisted debug modes\n\t * @api private\n\t */\n\t\n\tfunction load() {\n\t  var r;\n\t  try {\n\t    r = exports.storage.debug;\n\t  } catch (e) {}\n\t\n\t  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\t  if (!r && typeof process !== 'undefined' && 'env' in process) {\n\t    r = process.env.DEBUG;\n\t  }\n\t\n\t  return r;\n\t}\n\t\n\t/**\n\t * Enable namespaces listed in `localStorage.debug` initially.\n\t */\n\t\n\texports.enable(load());\n\t\n\t/**\n\t * Localstorage attempts to return the localstorage.\n\t *\n\t * This is necessary because safari throws\n\t * when a user disables cookies/localstorage\n\t * and you attempt to access it.\n\t *\n\t * @return {LocalStorage}\n\t * @api private\n\t */\n\t\n\tfunction localstorage() {\n\t  try {\n\t    return window.localStorage;\n\t  } catch (e) {}\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * This is the common logic for both the Node.js and web browser\n\t * implementations of `debug()`.\n\t *\n\t * Expose `debug()` as the module.\n\t */\n\t\n\texports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\n\texports.coerce = coerce;\n\texports.disable = disable;\n\texports.enable = enable;\n\texports.enabled = enabled;\n\texports.humanize = __webpack_require__(10);\n\t\n\t/**\n\t * Active `debug` instances.\n\t */\n\texports.instances = [];\n\t\n\t/**\n\t * The currently active debug mode names, and names to skip.\n\t */\n\t\n\texports.names = [];\n\texports.skips = [];\n\t\n\t/**\n\t * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t *\n\t * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t */\n\t\n\texports.formatters = {};\n\t\n\t/**\n\t * Select a color.\n\t * @param {String} namespace\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction selectColor(namespace) {\n\t  var hash = 0,\n\t      i;\n\t\n\t  for (i in namespace) {\n\t    hash = (hash << 5) - hash + namespace.charCodeAt(i);\n\t    hash |= 0; // Convert to 32bit integer\n\t  }\n\t\n\t  return exports.colors[Math.abs(hash) % exports.colors.length];\n\t}\n\t\n\t/**\n\t * Create a debugger with the given `namespace`.\n\t *\n\t * @param {String} namespace\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tfunction createDebug(namespace) {\n\t\n\t  var prevTime;\n\t\n\t  function debug() {\n\t    // disabled?\n\t    if (!debug.enabled) return;\n\t\n\t    var self = debug;\n\t\n\t    // set `diff` timestamp\n\t    var curr = +new Date();\n\t    var ms = curr - (prevTime || curr);\n\t    self.diff = ms;\n\t    self.prev = prevTime;\n\t    self.curr = curr;\n\t    prevTime = curr;\n\t\n\t    // turn the `arguments` into a proper Array\n\t    var args = new Array(arguments.length);\n\t    for (var i = 0; i < args.length; i++) {\n\t      args[i] = arguments[i];\n\t    }\n\t\n\t    args[0] = exports.coerce(args[0]);\n\t\n\t    if ('string' !== typeof args[0]) {\n\t      // anything else let's inspect with %O\n\t      args.unshift('%O');\n\t    }\n\t\n\t    // apply any `formatters` transformations\n\t    var index = 0;\n\t    args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n\t      // if we encounter an escaped % then don't increase the array index\n\t      if (match === '%%') return match;\n\t      index++;\n\t      var formatter = exports.formatters[format];\n\t      if ('function' === typeof formatter) {\n\t        var val = args[index];\n\t        match = formatter.call(self, val);\n\t\n\t        // now we need to remove `args[index]` since it's inlined in the `format`\n\t        args.splice(index, 1);\n\t        index--;\n\t      }\n\t      return match;\n\t    });\n\t\n\t    // apply env-specific formatting (colors, etc.)\n\t    exports.formatArgs.call(self, args);\n\t\n\t    var logFn = debug.log || exports.log || console.log.bind(console);\n\t    logFn.apply(self, args);\n\t  }\n\t\n\t  debug.namespace = namespace;\n\t  debug.enabled = exports.enabled(namespace);\n\t  debug.useColors = exports.useColors();\n\t  debug.color = selectColor(namespace);\n\t  debug.destroy = destroy;\n\t\n\t  // env-specific initialization logic for debug instances\n\t  if ('function' === typeof exports.init) {\n\t    exports.init(debug);\n\t  }\n\t\n\t  exports.instances.push(debug);\n\t\n\t  return debug;\n\t}\n\t\n\tfunction destroy() {\n\t  var index = exports.instances.indexOf(this);\n\t  if (index !== -1) {\n\t    exports.instances.splice(index, 1);\n\t    return true;\n\t  } else {\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Enables a debug mode by namespaces. This can include modes\n\t * separated by a colon and wildcards.\n\t *\n\t * @param {String} namespaces\n\t * @api public\n\t */\n\t\n\tfunction enable(namespaces) {\n\t  exports.save(namespaces);\n\t\n\t  exports.names = [];\n\t  exports.skips = [];\n\t\n\t  var i;\n\t  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t  var len = split.length;\n\t\n\t  for (i = 0; i < len; i++) {\n\t    if (!split[i]) continue; // ignore empty strings\n\t    namespaces = split[i].replace(/\\*/g, '.*?');\n\t    if (namespaces[0] === '-') {\n\t      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t    } else {\n\t      exports.names.push(new RegExp('^' + namespaces + '$'));\n\t    }\n\t  }\n\t\n\t  for (i = 0; i < exports.instances.length; i++) {\n\t    var instance = exports.instances[i];\n\t    instance.enabled = exports.enabled(instance.namespace);\n\t  }\n\t}\n\t\n\t/**\n\t * Disable debug output.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction disable() {\n\t  exports.enable('');\n\t}\n\t\n\t/**\n\t * Returns true if the given mode name is enabled, false otherwise.\n\t *\n\t * @param {String} name\n\t * @return {Boolean}\n\t * @api public\n\t */\n\t\n\tfunction enabled(name) {\n\t  if (name[name.length - 1] === '*') {\n\t    return true;\n\t  }\n\t  var i, len;\n\t  for (i = 0, len = exports.skips.length; i < len; i++) {\n\t    if (exports.skips[i].test(name)) {\n\t      return false;\n\t    }\n\t  }\n\t  for (i = 0, len = exports.names.length; i < len; i++) {\n\t    if (exports.names[i].test(name)) {\n\t      return true;\n\t    }\n\t  }\n\t  return false;\n\t}\n\t\n\t/**\n\t * Coerce `val`.\n\t *\n\t * @param {Mixed} val\n\t * @return {Mixed}\n\t * @api private\n\t */\n\t\n\tfunction coerce(val) {\n\t  if (val instanceof Error) return val.stack || val.message;\n\t  return val;\n\t}\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Helpers.\n\t */\n\t\n\tvar s = 1000;\n\tvar m = s * 60;\n\tvar h = m * 60;\n\tvar d = h * 24;\n\tvar y = d * 365.25;\n\t\n\t/**\n\t * Parse or format the given `val`.\n\t *\n\t * Options:\n\t *\n\t *  - `long` verbose formatting [false]\n\t *\n\t * @param {String|Number} val\n\t * @param {Object} [options]\n\t * @throws {Error} throw an error if val is not a non-empty string or a number\n\t * @return {String|Number}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(val, options) {\n\t  options = options || {};\n\t  var type = typeof val;\n\t  if (type === 'string' && val.length > 0) {\n\t    return parse(val);\n\t  } else if (type === 'number' && isNaN(val) === false) {\n\t    return options.long ? fmtLong(val) : fmtShort(val);\n\t  }\n\t  throw new Error(\n\t    'val is not a non-empty string or a valid number. val=' +\n\t      JSON.stringify(val)\n\t  );\n\t};\n\t\n\t/**\n\t * Parse the given `str` and return milliseconds.\n\t *\n\t * @param {String} str\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction parse(str) {\n\t  str = String(str);\n\t  if (str.length > 100) {\n\t    return;\n\t  }\n\t  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n\t    str\n\t  );\n\t  if (!match) {\n\t    return;\n\t  }\n\t  var n = parseFloat(match[1]);\n\t  var type = (match[2] || 'ms').toLowerCase();\n\t  switch (type) {\n\t    case 'years':\n\t    case 'year':\n\t    case 'yrs':\n\t    case 'yr':\n\t    case 'y':\n\t      return n * y;\n\t    case 'days':\n\t    case 'day':\n\t    case 'd':\n\t      return n * d;\n\t    case 'hours':\n\t    case 'hour':\n\t    case 'hrs':\n\t    case 'hr':\n\t    case 'h':\n\t      return n * h;\n\t    case 'minutes':\n\t    case 'minute':\n\t    case 'mins':\n\t    case 'min':\n\t    case 'm':\n\t      return n * m;\n\t    case 'seconds':\n\t    case 'second':\n\t    case 'secs':\n\t    case 'sec':\n\t    case 's':\n\t      return n * s;\n\t    case 'milliseconds':\n\t    case 'millisecond':\n\t    case 'msecs':\n\t    case 'msec':\n\t    case 'ms':\n\t      return n;\n\t    default:\n\t      return undefined;\n\t  }\n\t}\n\t\n\t/**\n\t * Short format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtShort(ms) {\n\t  if (ms >= d) {\n\t    return Math.round(ms / d) + 'd';\n\t  }\n\t  if (ms >= h) {\n\t    return Math.round(ms / h) + 'h';\n\t  }\n\t  if (ms >= m) {\n\t    return Math.round(ms / m) + 'm';\n\t  }\n\t  if (ms >= s) {\n\t    return Math.round(ms / s) + 's';\n\t  }\n\t  return ms + 'ms';\n\t}\n\t\n\t/**\n\t * Long format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtLong(ms) {\n\t  return plural(ms, d, 'day') ||\n\t    plural(ms, h, 'hour') ||\n\t    plural(ms, m, 'minute') ||\n\t    plural(ms, s, 'second') ||\n\t    ms + ' ms';\n\t}\n\t\n\t/**\n\t * Pluralization helper.\n\t */\n\t\n\tfunction plural(ms, n, name) {\n\t  if (ms < n) {\n\t    return;\n\t  }\n\t  if (ms < n * 1.5) {\n\t    return Math.floor(ms / n) + ' ' + name;\n\t  }\n\t  return Math.ceil(ms / n) + ' ' + name + 's';\n\t}\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\r\n\t/**\r\n\t * Expose `Emitter`.\r\n\t */\r\n\t\r\n\tif (true) {\r\n\t  module.exports = Emitter;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialize a new `Emitter`.\r\n\t *\r\n\t * @api public\r\n\t */\r\n\t\r\n\tfunction Emitter(obj) {\r\n\t  if (obj) return mixin(obj);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Mixin the emitter properties.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\tfunction mixin(obj) {\r\n\t  for (var key in Emitter.prototype) {\r\n\t    obj[key] = Emitter.prototype[key];\r\n\t  }\r\n\t  return obj;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Listen on the given `event` with `fn`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.on =\r\n\tEmitter.prototype.addEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n\t    .push(fn);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds an `event` listener that will be invoked a single\r\n\t * time then automatically removed.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.once = function(event, fn){\r\n\t  function on() {\r\n\t    this.off(event, on);\r\n\t    fn.apply(this, arguments);\r\n\t  }\r\n\t\r\n\t  on.fn = fn;\r\n\t  this.on(event, on);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Remove the given callback for `event` or all\r\n\t * registered callbacks.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.off =\r\n\tEmitter.prototype.removeListener =\r\n\tEmitter.prototype.removeAllListeners =\r\n\tEmitter.prototype.removeEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  // all\r\n\t  if (0 == arguments.length) {\r\n\t    this._callbacks = {};\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // specific event\r\n\t  var callbacks = this._callbacks['$' + event];\r\n\t  if (!callbacks) return this;\r\n\t\r\n\t  // remove all handlers\r\n\t  if (1 == arguments.length) {\r\n\t    delete this._callbacks['$' + event];\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // remove specific handler\r\n\t  var cb;\r\n\t  for (var i = 0; i < callbacks.length; i++) {\r\n\t    cb = callbacks[i];\r\n\t    if (cb === fn || cb.fn === fn) {\r\n\t      callbacks.splice(i, 1);\r\n\t      break;\r\n\t    }\r\n\t  }\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Emit `event` with the given args.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Mixed} ...\r\n\t * @return {Emitter}\r\n\t */\r\n\t\r\n\tEmitter.prototype.emit = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  var args = [].slice.call(arguments, 1)\r\n\t    , callbacks = this._callbacks['$' + event];\r\n\t\r\n\t  if (callbacks) {\r\n\t    callbacks = callbacks.slice(0);\r\n\t    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n\t      callbacks[i].apply(this, args);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Return array of callbacks for `event`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Array}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.listeners = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  return this._callbacks['$' + event] || [];\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if this emitter has `event` handlers.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Boolean}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.hasListeners = function(event){\r\n\t  return !! this.listeners(event).length;\r\n\t};\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*global Blob,File*/\n\t\n\t/**\n\t * Module requirements\n\t */\n\t\n\tvar isArray = __webpack_require__(13);\n\tvar isBuf = __webpack_require__(14);\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\n\tvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\t\n\t/**\n\t * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n\t * Anything with blobs or files should be fed through removeBlobs before coming\n\t * here.\n\t *\n\t * @param {Object} packet - socket.io event packet\n\t * @return {Object} with deconstructed packet and list of buffers\n\t * @api public\n\t */\n\t\n\texports.deconstructPacket = function(packet) {\n\t  var buffers = [];\n\t  var packetData = packet.data;\n\t  var pack = packet;\n\t  pack.data = _deconstructPacket(packetData, buffers);\n\t  pack.attachments = buffers.length; // number of binary 'attachments'\n\t  return {packet: pack, buffers: buffers};\n\t};\n\t\n\tfunction _deconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (isBuf(data)) {\n\t    var placeholder = { _placeholder: true, num: buffers.length };\n\t    buffers.push(data);\n\t    return placeholder;\n\t  } else if (isArray(data)) {\n\t    var newData = new Array(data.length);\n\t    for (var i = 0; i < data.length; i++) {\n\t      newData[i] = _deconstructPacket(data[i], buffers);\n\t    }\n\t    return newData;\n\t  } else if (typeof data === 'object' && !(data instanceof Date)) {\n\t    var newData = {};\n\t    for (var key in data) {\n\t      newData[key] = _deconstructPacket(data[key], buffers);\n\t    }\n\t    return newData;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Reconstructs a binary packet from its placeholder packet and buffers\n\t *\n\t * @param {Object} packet - event packet with placeholders\n\t * @param {Array} buffers - binary buffers to put in placeholder positions\n\t * @return {Object} reconstructed packet\n\t * @api public\n\t */\n\t\n\texports.reconstructPacket = function(packet, buffers) {\n\t  packet.data = _reconstructPacket(packet.data, buffers);\n\t  packet.attachments = undefined; // no longer useful\n\t  return packet;\n\t};\n\t\n\tfunction _reconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (data && data._placeholder) {\n\t    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n\t  } else if (isArray(data)) {\n\t    for (var i = 0; i < data.length; i++) {\n\t      data[i] = _reconstructPacket(data[i], buffers);\n\t    }\n\t  } else if (typeof data === 'object') {\n\t    for (var key in data) {\n\t      data[key] = _reconstructPacket(data[key], buffers);\n\t    }\n\t  }\n\t\n\t  return data;\n\t}\n\t\n\t/**\n\t * Asynchronously removes Blobs or Files from data via\n\t * FileReader's readAsArrayBuffer method. Used before encoding\n\t * data as msgpack. Calls callback with the blobless data.\n\t *\n\t * @param {Object} data\n\t * @param {Function} callback\n\t * @api private\n\t */\n\t\n\texports.removeBlobs = function(data, callback) {\n\t  function _removeBlobs(obj, curKey, containingObject) {\n\t    if (!obj) return obj;\n\t\n\t    // convert any blob\n\t    if ((withNativeBlob && obj instanceof Blob) ||\n\t        (withNativeFile && obj instanceof File)) {\n\t      pendingBlobs++;\n\t\n\t      // async filereader\n\t      var fileReader = new FileReader();\n\t      fileReader.onload = function() { // this.result == arraybuffer\n\t        if (containingObject) {\n\t          containingObject[curKey] = this.result;\n\t        }\n\t        else {\n\t          bloblessData = this.result;\n\t        }\n\t\n\t        // if nothing pending its callback time\n\t        if(! --pendingBlobs) {\n\t          callback(bloblessData);\n\t        }\n\t      };\n\t\n\t      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n\t    } else if (isArray(obj)) { // handle array\n\t      for (var i = 0; i < obj.length; i++) {\n\t        _removeBlobs(obj[i], i, obj);\n\t      }\n\t    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n\t      for (var key in obj) {\n\t        _removeBlobs(obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t\n\t  var pendingBlobs = 0;\n\t  var bloblessData = data;\n\t  _removeBlobs(bloblessData);\n\t  if (!pendingBlobs) {\n\t    callback(bloblessData);\n\t  }\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = Array.isArray || function (arr) {\n\t  return toString.call(arr) == '[object Array]';\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = isBuf;\n\t\n\tvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\n\tvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\t\n\tvar isView = function (obj) {\n\t  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n\t};\n\t\n\t/**\n\t * Returns true if obj is a buffer or an arraybuffer.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction isBuf(obj) {\n\t  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n\t          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n\t}\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar eio = __webpack_require__(16);\n\tvar Socket = __webpack_require__(39);\n\tvar Emitter = __webpack_require__(11);\n\tvar parser = __webpack_require__(7);\n\tvar on = __webpack_require__(41);\n\tvar bind = __webpack_require__(42);\n\tvar debug = __webpack_require__(3)('socket.io-client:manager');\n\tvar indexOf = __webpack_require__(38);\n\tvar Backoff = __webpack_require__(43);\n\t\n\t/**\n\t * IE6+ hasOwnProperty\n\t */\n\t\n\tvar has = Object.prototype.hasOwnProperty;\n\t\n\t/**\n\t * Module exports\n\t */\n\t\n\tmodule.exports = Manager;\n\t\n\t/**\n\t * `Manager` constructor.\n\t *\n\t * @param {String} engine instance or engine uri/opts\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Manager (uri, opts) {\n\t  if (!(this instanceof Manager)) return new Manager(uri, opts);\n\t  if (uri && ('object' === typeof uri)) {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t  opts = opts || {};\n\t\n\t  opts.path = opts.path || '/socket.io';\n\t  this.nsps = {};\n\t  this.subs = [];\n\t  this.opts = opts;\n\t  this.reconnection(opts.reconnection !== false);\n\t  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n\t  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n\t  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n\t  this.randomizationFactor(opts.randomizationFactor || 0.5);\n\t  this.backoff = new Backoff({\n\t    min: this.reconnectionDelay(),\n\t    max: this.reconnectionDelayMax(),\n\t    jitter: this.randomizationFactor()\n\t  });\n\t  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n\t  this.readyState = 'closed';\n\t  this.uri = uri;\n\t  this.connecting = [];\n\t  this.lastPing = null;\n\t  this.encoding = false;\n\t  this.packetBuffer = [];\n\t  var _parser = opts.parser || parser;\n\t  this.encoder = new _parser.Encoder();\n\t  this.decoder = new _parser.Decoder();\n\t  this.autoConnect = opts.autoConnect !== false;\n\t  if (this.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Propagate given event to sockets and emit on `this`\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.emitAll = function () {\n\t  this.emit.apply(this, arguments);\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Update `socket.id` of all sockets\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.updateSocketIds = function () {\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].id = this.generateId(nsp);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * generate `socket.id` for the given `nsp`\n\t *\n\t * @param {String} nsp\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tManager.prototype.generateId = function (nsp) {\n\t  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n\t};\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Manager.prototype);\n\t\n\t/**\n\t * Sets the `reconnection` config.\n\t *\n\t * @param {Boolean} true/false if it should automatically reconnect\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnection = function (v) {\n\t  if (!arguments.length) return this._reconnection;\n\t  this._reconnection = !!v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the reconnection attempts config.\n\t *\n\t * @param {Number} max reconnection attempts before giving up\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionAttempts = function (v) {\n\t  if (!arguments.length) return this._reconnectionAttempts;\n\t  this._reconnectionAttempts = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelay = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelay;\n\t  this._reconnectionDelay = v;\n\t  this.backoff && this.backoff.setMin(v);\n\t  return this;\n\t};\n\t\n\tManager.prototype.randomizationFactor = function (v) {\n\t  if (!arguments.length) return this._randomizationFactor;\n\t  this._randomizationFactor = v;\n\t  this.backoff && this.backoff.setJitter(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the maximum delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelayMax = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelayMax;\n\t  this._reconnectionDelayMax = v;\n\t  this.backoff && this.backoff.setMax(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the connection timeout. `false` to disable\n\t *\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.timeout = function (v) {\n\t  if (!arguments.length) return this._timeout;\n\t  this._timeout = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Starts trying to reconnect if reconnection is enabled and we have not\n\t * started reconnecting yet\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.maybeReconnectOnOpen = function () {\n\t  // Only try to reconnect if it's the first time we're connecting\n\t  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n\t    // keeps reconnection from firing twice for the same reconnection loop\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Sets the current transport `socket`.\n\t *\n\t * @param {Function} optional, callback\n\t * @return {Manager} self\n\t * @api public\n\t */\n\t\n\tManager.prototype.open =\n\tManager.prototype.connect = function (fn, opts) {\n\t  debug('readyState %s', this.readyState);\n\t  if (~this.readyState.indexOf('open')) return this;\n\t\n\t  debug('opening %s', this.uri);\n\t  this.engine = eio(this.uri, this.opts);\n\t  var socket = this.engine;\n\t  var self = this;\n\t  this.readyState = 'opening';\n\t  this.skipReconnect = false;\n\t\n\t  // emit `open`\n\t  var openSub = on(socket, 'open', function () {\n\t    self.onopen();\n\t    fn && fn();\n\t  });\n\t\n\t  // emit `connect_error`\n\t  var errorSub = on(socket, 'error', function (data) {\n\t    debug('connect_error');\n\t    self.cleanup();\n\t    self.readyState = 'closed';\n\t    self.emitAll('connect_error', data);\n\t    if (fn) {\n\t      var err = new Error('Connection error');\n\t      err.data = data;\n\t      fn(err);\n\t    } else {\n\t      // Only do this if there is no fn to handle the error\n\t      self.maybeReconnectOnOpen();\n\t    }\n\t  });\n\t\n\t  // emit `connect_timeout`\n\t  if (false !== this._timeout) {\n\t    var timeout = this._timeout;\n\t    debug('connect attempt will timeout after %d', timeout);\n\t\n\t    // set timer\n\t    var timer = setTimeout(function () {\n\t      debug('connect attempt timed out after %d', timeout);\n\t      openSub.destroy();\n\t      socket.close();\n\t      socket.emit('error', 'timeout');\n\t      self.emitAll('connect_timeout', timeout);\n\t    }, timeout);\n\t\n\t    this.subs.push({\n\t      destroy: function () {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t\n\t  this.subs.push(openSub);\n\t  this.subs.push(errorSub);\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport open.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onopen = function () {\n\t  debug('open');\n\t\n\t  // clear old subs\n\t  this.cleanup();\n\t\n\t  // mark as open\n\t  this.readyState = 'open';\n\t  this.emit('open');\n\t\n\t  // add new subs\n\t  var socket = this.engine;\n\t  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n\t  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n\t  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n\t  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n\t  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n\t  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n\t};\n\t\n\t/**\n\t * Called upon a ping.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onping = function () {\n\t  this.lastPing = new Date();\n\t  this.emitAll('ping');\n\t};\n\t\n\t/**\n\t * Called upon a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onpong = function () {\n\t  this.emitAll('pong', new Date() - this.lastPing);\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondata = function (data) {\n\t  this.decoder.add(data);\n\t};\n\t\n\t/**\n\t * Called when parser fully decodes a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondecoded = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon socket error.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onerror = function (err) {\n\t  debug('error', err);\n\t  this.emitAll('error', err);\n\t};\n\t\n\t/**\n\t * Creates a new socket for the given `nsp`.\n\t *\n\t * @return {Socket}\n\t * @api public\n\t */\n\t\n\tManager.prototype.socket = function (nsp, opts) {\n\t  var socket = this.nsps[nsp];\n\t  if (!socket) {\n\t    socket = new Socket(this, nsp, opts);\n\t    this.nsps[nsp] = socket;\n\t    var self = this;\n\t    socket.on('connecting', onConnecting);\n\t    socket.on('connect', function () {\n\t      socket.id = self.generateId(nsp);\n\t    });\n\t\n\t    if (this.autoConnect) {\n\t      // manually call here since connecting event is fired before listening\n\t      onConnecting();\n\t    }\n\t  }\n\t\n\t  function onConnecting () {\n\t    if (!~indexOf(self.connecting, socket)) {\n\t      self.connecting.push(socket);\n\t    }\n\t  }\n\t\n\t  return socket;\n\t};\n\t\n\t/**\n\t * Called upon a socket close.\n\t *\n\t * @param {Socket} socket\n\t */\n\t\n\tManager.prototype.destroy = function (socket) {\n\t  var index = indexOf(this.connecting, socket);\n\t  if (~index) this.connecting.splice(index, 1);\n\t  if (this.connecting.length) return;\n\t\n\t  this.close();\n\t};\n\t\n\t/**\n\t * Writes a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tManager.prototype.packet = function (packet) {\n\t  debug('writing packet %j', packet);\n\t  var self = this;\n\t  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\t\n\t  if (!self.encoding) {\n\t    // encode, then write to engine with result\n\t    self.encoding = true;\n\t    this.encoder.encode(packet, function (encodedPackets) {\n\t      for (var i = 0; i < encodedPackets.length; i++) {\n\t        self.engine.write(encodedPackets[i], packet.options);\n\t      }\n\t      self.encoding = false;\n\t      self.processPacketQueue();\n\t    });\n\t  } else { // add packet to the queue\n\t    self.packetBuffer.push(packet);\n\t  }\n\t};\n\t\n\t/**\n\t * If packet buffer is non-empty, begins encoding the\n\t * next packet in line.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.processPacketQueue = function () {\n\t  if (this.packetBuffer.length > 0 && !this.encoding) {\n\t    var pack = this.packetBuffer.shift();\n\t    this.packet(pack);\n\t  }\n\t};\n\t\n\t/**\n\t * Clean up transport subscriptions and packet buffer.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.cleanup = function () {\n\t  debug('cleanup');\n\t\n\t  var subsLength = this.subs.length;\n\t  for (var i = 0; i < subsLength; i++) {\n\t    var sub = this.subs.shift();\n\t    sub.destroy();\n\t  }\n\t\n\t  this.packetBuffer = [];\n\t  this.encoding = false;\n\t  this.lastPing = null;\n\t\n\t  this.decoder.destroy();\n\t};\n\t\n\t/**\n\t * Close the current socket.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.close =\n\tManager.prototype.disconnect = function () {\n\t  debug('disconnect');\n\t  this.skipReconnect = true;\n\t  this.reconnecting = false;\n\t  if ('opening' === this.readyState) {\n\t    // `onclose` will not fire because\n\t    // an open event never happened\n\t    this.cleanup();\n\t  }\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  if (this.engine) this.engine.close();\n\t};\n\t\n\t/**\n\t * Called upon engine close.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onclose = function (reason) {\n\t  debug('onclose');\n\t\n\t  this.cleanup();\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  this.emit('close', reason);\n\t\n\t  if (this._reconnection && !this.skipReconnect) {\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Attempt a reconnection.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.reconnect = function () {\n\t  if (this.reconnecting || this.skipReconnect) return this;\n\t\n\t  var self = this;\n\t\n\t  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\t    debug('reconnect failed');\n\t    this.backoff.reset();\n\t    this.emitAll('reconnect_failed');\n\t    this.reconnecting = false;\n\t  } else {\n\t    var delay = this.backoff.duration();\n\t    debug('will wait %dms before reconnect attempt', delay);\n\t\n\t    this.reconnecting = true;\n\t    var timer = setTimeout(function () {\n\t      if (self.skipReconnect) return;\n\t\n\t      debug('attempting reconnect');\n\t      self.emitAll('reconnect_attempt', self.backoff.attempts);\n\t      self.emitAll('reconnecting', self.backoff.attempts);\n\t\n\t      // check again for the case socket closed in above events\n\t      if (self.skipReconnect) return;\n\t\n\t      self.open(function (err) {\n\t        if (err) {\n\t          debug('reconnect attempt error');\n\t          self.reconnecting = false;\n\t          self.reconnect();\n\t          self.emitAll('reconnect_error', err.data);\n\t        } else {\n\t          debug('reconnect success');\n\t          self.onreconnect();\n\t        }\n\t      });\n\t    }, delay);\n\t\n\t    this.subs.push({\n\t      destroy: function () {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful reconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onreconnect = function () {\n\t  var attempt = this.backoff.attempts;\n\t  this.reconnecting = false;\n\t  this.backoff.reset();\n\t  this.updateSocketIds();\n\t  this.emitAll('reconnect', attempt);\n\t};\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\tmodule.exports = __webpack_require__(17);\n\t\n\t/**\n\t * Exports parser\n\t *\n\t * @api public\n\t *\n\t */\n\tmodule.exports.parser = __webpack_require__(24);\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar transports = __webpack_require__(18);\n\tvar Emitter = __webpack_require__(11);\n\tvar debug = __webpack_require__(3)('engine.io-client:socket');\n\tvar index = __webpack_require__(38);\n\tvar parser = __webpack_require__(24);\n\tvar parseuri = __webpack_require__(2);\n\tvar parseqs = __webpack_require__(32);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Socket;\n\t\n\t/**\n\t * Socket constructor.\n\t *\n\t * @param {String|Object} uri or options\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Socket (uri, opts) {\n\t  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\t\n\t  opts = opts || {};\n\t\n\t  if (uri && 'object' === typeof uri) {\n\t    opts = uri;\n\t    uri = null;\n\t  }\n\t\n\t  if (uri) {\n\t    uri = parseuri(uri);\n\t    opts.hostname = uri.host;\n\t    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n\t    opts.port = uri.port;\n\t    if (uri.query) opts.query = uri.query;\n\t  } else if (opts.host) {\n\t    opts.hostname = parseuri(opts.host).host;\n\t  }\n\t\n\t  this.secure = null != opts.secure ? opts.secure\n\t    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\t\n\t  if (opts.hostname && !opts.port) {\n\t    // if no port is specified manually, use the protocol default\n\t    opts.port = this.secure ? '443' : '80';\n\t  }\n\t\n\t  this.agent = opts.agent || false;\n\t  this.hostname = opts.hostname ||\n\t    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n\t  this.port = opts.port || (typeof location !== 'undefined' && location.port\n\t      ? location.port\n\t      : (this.secure ? 443 : 80));\n\t  this.query = opts.query || {};\n\t  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n\t  this.upgrade = false !== opts.upgrade;\n\t  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n\t  this.forceJSONP = !!opts.forceJSONP;\n\t  this.jsonp = false !== opts.jsonp;\n\t  this.forceBase64 = !!opts.forceBase64;\n\t  this.enablesXDR = !!opts.enablesXDR;\n\t  this.withCredentials = false !== opts.withCredentials;\n\t  this.timestampParam = opts.timestampParam || 't';\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.transports = opts.transports || ['polling', 'websocket'];\n\t  this.transportOptions = opts.transportOptions || {};\n\t  this.readyState = '';\n\t  this.writeBuffer = [];\n\t  this.prevBufferLen = 0;\n\t  this.policyPort = opts.policyPort || 843;\n\t  this.rememberUpgrade = opts.rememberUpgrade || false;\n\t  this.binaryType = null;\n\t  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n\t  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\t\n\t  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n\t  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n\t    this.perMessageDeflate.threshold = 1024;\n\t  }\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx || null;\n\t  this.key = opts.key || null;\n\t  this.passphrase = opts.passphrase || null;\n\t  this.cert = opts.cert || null;\n\t  this.ca = opts.ca || null;\n\t  this.ciphers = opts.ciphers || null;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n\t  this.forceNode = !!opts.forceNode;\n\t\n\t  // detect ReactNative environment\n\t  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\t\n\t  // other options for Node.js or ReactNative client\n\t  if (typeof self === 'undefined' || this.isReactNative) {\n\t    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n\t      this.extraHeaders = opts.extraHeaders;\n\t    }\n\t\n\t    if (opts.localAddress) {\n\t      this.localAddress = opts.localAddress;\n\t    }\n\t  }\n\t\n\t  // set on handshake\n\t  this.id = null;\n\t  this.upgrades = null;\n\t  this.pingInterval = null;\n\t  this.pingTimeout = null;\n\t\n\t  // set on heartbeat\n\t  this.pingIntervalTimer = null;\n\t  this.pingTimeoutTimer = null;\n\t\n\t  this.open();\n\t}\n\t\n\tSocket.priorWebsocketSuccess = false;\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.protocol = parser.protocol; // this is an int\n\t\n\t/**\n\t * Expose deps for legacy compatibility\n\t * and standalone browser access.\n\t */\n\t\n\tSocket.Socket = Socket;\n\tSocket.Transport = __webpack_require__(23);\n\tSocket.transports = __webpack_require__(18);\n\tSocket.parser = __webpack_require__(24);\n\t\n\t/**\n\t * Creates transport of the given type.\n\t *\n\t * @param {String} transport name\n\t * @return {Transport}\n\t * @api private\n\t */\n\t\n\tSocket.prototype.createTransport = function (name) {\n\t  debug('creating transport \"%s\"', name);\n\t  var query = clone(this.query);\n\t\n\t  // append engine.io protocol identifier\n\t  query.EIO = parser.protocol;\n\t\n\t  // transport name\n\t  query.transport = name;\n\t\n\t  // per-transport options\n\t  var options = this.transportOptions[name] || {};\n\t\n\t  // session id if we already have one\n\t  if (this.id) query.sid = this.id;\n\t\n\t  var transport = new transports[name]({\n\t    query: query,\n\t    socket: this,\n\t    agent: options.agent || this.agent,\n\t    hostname: options.hostname || this.hostname,\n\t    port: options.port || this.port,\n\t    secure: options.secure || this.secure,\n\t    path: options.path || this.path,\n\t    forceJSONP: options.forceJSONP || this.forceJSONP,\n\t    jsonp: options.jsonp || this.jsonp,\n\t    forceBase64: options.forceBase64 || this.forceBase64,\n\t    enablesXDR: options.enablesXDR || this.enablesXDR,\n\t    withCredentials: options.withCredentials || this.withCredentials,\n\t    timestampRequests: options.timestampRequests || this.timestampRequests,\n\t    timestampParam: options.timestampParam || this.timestampParam,\n\t    policyPort: options.policyPort || this.policyPort,\n\t    pfx: options.pfx || this.pfx,\n\t    key: options.key || this.key,\n\t    passphrase: options.passphrase || this.passphrase,\n\t    cert: options.cert || this.cert,\n\t    ca: options.ca || this.ca,\n\t    ciphers: options.ciphers || this.ciphers,\n\t    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n\t    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n\t    extraHeaders: options.extraHeaders || this.extraHeaders,\n\t    forceNode: options.forceNode || this.forceNode,\n\t    localAddress: options.localAddress || this.localAddress,\n\t    requestTimeout: options.requestTimeout || this.requestTimeout,\n\t    protocols: options.protocols || void (0),\n\t    isReactNative: this.isReactNative\n\t  });\n\t\n\t  return transport;\n\t};\n\t\n\tfunction clone (obj) {\n\t  var o = {};\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      o[i] = obj[i];\n\t    }\n\t  }\n\t  return o;\n\t}\n\t\n\t/**\n\t * Initializes transport to use and starts probe.\n\t *\n\t * @api private\n\t */\n\tSocket.prototype.open = function () {\n\t  var transport;\n\t  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n\t    transport = 'websocket';\n\t  } else if (0 === this.transports.length) {\n\t    // Emit error on next tick so it can be listened to\n\t    var self = this;\n\t    setTimeout(function () {\n\t      self.emit('error', 'No transports available');\n\t    }, 0);\n\t    return;\n\t  } else {\n\t    transport = this.transports[0];\n\t  }\n\t  this.readyState = 'opening';\n\t\n\t  // Retry with the next transport if the transport is disabled (jsonp: false)\n\t  try {\n\t    transport = this.createTransport(transport);\n\t  } catch (e) {\n\t    this.transports.shift();\n\t    this.open();\n\t    return;\n\t  }\n\t\n\t  transport.open();\n\t  this.setTransport(transport);\n\t};\n\t\n\t/**\n\t * Sets the current transport. Disables the existing one (if any).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setTransport = function (transport) {\n\t  debug('setting transport %s', transport.name);\n\t  var self = this;\n\t\n\t  if (this.transport) {\n\t    debug('clearing existing transport %s', this.transport.name);\n\t    this.transport.removeAllListeners();\n\t  }\n\t\n\t  // set up transport\n\t  this.transport = transport;\n\t\n\t  // set up transport listeners\n\t  transport\n\t  .on('drain', function () {\n\t    self.onDrain();\n\t  })\n\t  .on('packet', function (packet) {\n\t    self.onPacket(packet);\n\t  })\n\t  .on('error', function (e) {\n\t    self.onError(e);\n\t  })\n\t  .on('close', function () {\n\t    self.onClose('transport close');\n\t  });\n\t};\n\t\n\t/**\n\t * Probes a transport.\n\t *\n\t * @param {String} transport name\n\t * @api private\n\t */\n\t\n\tSocket.prototype.probe = function (name) {\n\t  debug('probing transport \"%s\"', name);\n\t  var transport = this.createTransport(name, { probe: 1 });\n\t  var failed = false;\n\t  var self = this;\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t\n\t  function onTransportOpen () {\n\t    if (self.onlyBinaryUpgrades) {\n\t      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n\t      failed = failed || upgradeLosesBinary;\n\t    }\n\t    if (failed) return;\n\t\n\t    debug('probe transport \"%s\" opened', name);\n\t    transport.send([{ type: 'ping', data: 'probe' }]);\n\t    transport.once('packet', function (msg) {\n\t      if (failed) return;\n\t      if ('pong' === msg.type && 'probe' === msg.data) {\n\t        debug('probe transport \"%s\" pong', name);\n\t        self.upgrading = true;\n\t        self.emit('upgrading', transport);\n\t        if (!transport) return;\n\t        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\t\n\t        debug('pausing current transport \"%s\"', self.transport.name);\n\t        self.transport.pause(function () {\n\t          if (failed) return;\n\t          if ('closed' === self.readyState) return;\n\t          debug('changing transport and sending upgrade packet');\n\t\n\t          cleanup();\n\t\n\t          self.setTransport(transport);\n\t          transport.send([{ type: 'upgrade' }]);\n\t          self.emit('upgrade', transport);\n\t          transport = null;\n\t          self.upgrading = false;\n\t          self.flush();\n\t        });\n\t      } else {\n\t        debug('probe transport \"%s\" failed', name);\n\t        var err = new Error('probe error');\n\t        err.transport = transport.name;\n\t        self.emit('upgradeError', err);\n\t      }\n\t    });\n\t  }\n\t\n\t  function freezeTransport () {\n\t    if (failed) return;\n\t\n\t    // Any callback called by transport should be ignored since now\n\t    failed = true;\n\t\n\t    cleanup();\n\t\n\t    transport.close();\n\t    transport = null;\n\t  }\n\t\n\t  // Handle any error that happens while probing\n\t  function onerror (err) {\n\t    var error = new Error('probe error: ' + err);\n\t    error.transport = transport.name;\n\t\n\t    freezeTransport();\n\t\n\t    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\t\n\t    self.emit('upgradeError', error);\n\t  }\n\t\n\t  function onTransportClose () {\n\t    onerror('transport closed');\n\t  }\n\t\n\t  // When the socket is closed while we're probing\n\t  function onclose () {\n\t    onerror('socket closed');\n\t  }\n\t\n\t  // When the socket is upgraded while we're probing\n\t  function onupgrade (to) {\n\t    if (transport && to.name !== transport.name) {\n\t      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n\t      freezeTransport();\n\t    }\n\t  }\n\t\n\t  // Remove all listeners on the transport and on self\n\t  function cleanup () {\n\t    transport.removeListener('open', onTransportOpen);\n\t    transport.removeListener('error', onerror);\n\t    transport.removeListener('close', onTransportClose);\n\t    self.removeListener('close', onclose);\n\t    self.removeListener('upgrading', onupgrade);\n\t  }\n\t\n\t  transport.once('open', onTransportOpen);\n\t  transport.once('error', onerror);\n\t  transport.once('close', onTransportClose);\n\t\n\t  this.once('close', onclose);\n\t  this.once('upgrading', onupgrade);\n\t\n\t  transport.open();\n\t};\n\t\n\t/**\n\t * Called when connection is deemed open.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.onOpen = function () {\n\t  debug('socket open');\n\t  this.readyState = 'open';\n\t  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n\t  this.emit('open');\n\t  this.flush();\n\t\n\t  // we check for `readyState` in case an `open`\n\t  // listener already closed the socket\n\t  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\t    debug('starting upgrade probes');\n\t    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n\t      this.probe(this.upgrades[i]);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Handles a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onPacket = function (packet) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState ||\n\t      'closing' === this.readyState) {\n\t    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\t\n\t    this.emit('packet', packet);\n\t\n\t    // Socket is live - any packet counts\n\t    this.emit('heartbeat');\n\t\n\t    switch (packet.type) {\n\t      case 'open':\n\t        this.onHandshake(JSON.parse(packet.data));\n\t        break;\n\t\n\t      case 'pong':\n\t        this.setPing();\n\t        this.emit('pong');\n\t        break;\n\t\n\t      case 'error':\n\t        var err = new Error('server error');\n\t        err.code = packet.data;\n\t        this.onError(err);\n\t        break;\n\t\n\t      case 'message':\n\t        this.emit('data', packet.data);\n\t        this.emit('message', packet.data);\n\t        break;\n\t    }\n\t  } else {\n\t    debug('packet received with socket readyState \"%s\"', this.readyState);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon handshake completion.\n\t *\n\t * @param {Object} handshake obj\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHandshake = function (data) {\n\t  this.emit('handshake', data);\n\t  this.id = data.sid;\n\t  this.transport.query.sid = data.sid;\n\t  this.upgrades = this.filterUpgrades(data.upgrades);\n\t  this.pingInterval = data.pingInterval;\n\t  this.pingTimeout = data.pingTimeout;\n\t  this.onOpen();\n\t  // In case open handler closes socket\n\t  if ('closed' === this.readyState) return;\n\t  this.setPing();\n\t\n\t  // Prolong liveness of socket on heartbeat\n\t  this.removeListener('heartbeat', this.onHeartbeat);\n\t  this.on('heartbeat', this.onHeartbeat);\n\t};\n\t\n\t/**\n\t * Resets ping timeout.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHeartbeat = function (timeout) {\n\t  clearTimeout(this.pingTimeoutTimer);\n\t  var self = this;\n\t  self.pingTimeoutTimer = setTimeout(function () {\n\t    if ('closed' === self.readyState) return;\n\t    self.onClose('ping timeout');\n\t  }, timeout || (self.pingInterval + self.pingTimeout));\n\t};\n\t\n\t/**\n\t * Pings server every `this.pingInterval` and expects response\n\t * within `this.pingTimeout` or closes connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setPing = function () {\n\t  var self = this;\n\t  clearTimeout(self.pingIntervalTimer);\n\t  self.pingIntervalTimer = setTimeout(function () {\n\t    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n\t    self.ping();\n\t    self.onHeartbeat(self.pingTimeout);\n\t  }, self.pingInterval);\n\t};\n\t\n\t/**\n\t* Sends a ping packet.\n\t*\n\t* @api private\n\t*/\n\t\n\tSocket.prototype.ping = function () {\n\t  var self = this;\n\t  this.sendPacket('ping', function () {\n\t    self.emit('ping');\n\t  });\n\t};\n\t\n\t/**\n\t * Called on `drain` event\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onDrain = function () {\n\t  this.writeBuffer.splice(0, this.prevBufferLen);\n\t\n\t  // setting prevBufferLen = 0 is very important\n\t  // for example, when upgrading, upgrade packet is sent over,\n\t  // and a nonzero prevBufferLen could cause problems on `drain`\n\t  this.prevBufferLen = 0;\n\t\n\t  if (0 === this.writeBuffer.length) {\n\t    this.emit('drain');\n\t  } else {\n\t    this.flush();\n\t  }\n\t};\n\t\n\t/**\n\t * Flush write buffers.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.flush = function () {\n\t  if ('closed' !== this.readyState && this.transport.writable &&\n\t    !this.upgrading && this.writeBuffer.length) {\n\t    debug('flushing %d packets in socket', this.writeBuffer.length);\n\t    this.transport.send(this.writeBuffer);\n\t    // keep track of current length of writeBuffer\n\t    // splice writeBuffer and callbackBuffer on `drain`\n\t    this.prevBufferLen = this.writeBuffer.length;\n\t    this.emit('flush');\n\t  }\n\t};\n\t\n\t/**\n\t * Sends a message.\n\t *\n\t * @param {String} message.\n\t * @param {Function} callback function.\n\t * @param {Object} options.\n\t * @return {Socket} for chaining.\n\t * @api public\n\t */\n\t\n\tSocket.prototype.write =\n\tSocket.prototype.send = function (msg, options, fn) {\n\t  this.sendPacket('message', msg, options, fn);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {String} packet type.\n\t * @param {String} data.\n\t * @param {Object} options.\n\t * @param {Function} callback function.\n\t * @api private\n\t */\n\t\n\tSocket.prototype.sendPacket = function (type, data, options, fn) {\n\t  if ('function' === typeof data) {\n\t    fn = data;\n\t    data = undefined;\n\t  }\n\t\n\t  if ('function' === typeof options) {\n\t    fn = options;\n\t    options = null;\n\t  }\n\t\n\t  if ('closing' === this.readyState || 'closed' === this.readyState) {\n\t    return;\n\t  }\n\t\n\t  options = options || {};\n\t  options.compress = false !== options.compress;\n\t\n\t  var packet = {\n\t    type: type,\n\t    data: data,\n\t    options: options\n\t  };\n\t  this.emit('packetCreate', packet);\n\t  this.writeBuffer.push(packet);\n\t  if (fn) this.once('flush', fn);\n\t  this.flush();\n\t};\n\t\n\t/**\n\t * Closes the connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.readyState = 'closing';\n\t\n\t    var self = this;\n\t\n\t    if (this.writeBuffer.length) {\n\t      this.once('drain', function () {\n\t        if (this.upgrading) {\n\t          waitForUpgrade();\n\t        } else {\n\t          close();\n\t        }\n\t      });\n\t    } else if (this.upgrading) {\n\t      waitForUpgrade();\n\t    } else {\n\t      close();\n\t    }\n\t  }\n\t\n\t  function close () {\n\t    self.onClose('forced close');\n\t    debug('socket closing - telling transport to close');\n\t    self.transport.close();\n\t  }\n\t\n\t  function cleanupAndClose () {\n\t    self.removeListener('upgrade', cleanupAndClose);\n\t    self.removeListener('upgradeError', cleanupAndClose);\n\t    close();\n\t  }\n\t\n\t  function waitForUpgrade () {\n\t    // wait for upgrade to finish since we can't send packets while pausing a transport\n\t    self.once('upgrade', cleanupAndClose);\n\t    self.once('upgradeError', cleanupAndClose);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport error\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onError = function (err) {\n\t  debug('socket error %j', err);\n\t  Socket.priorWebsocketSuccess = false;\n\t  this.emit('error', err);\n\t  this.onClose('transport error', err);\n\t};\n\t\n\t/**\n\t * Called upon transport close.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onClose = function (reason, desc) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\t    debug('socket close with reason: \"%s\"', reason);\n\t    var self = this;\n\t\n\t    // clear timers\n\t    clearTimeout(this.pingIntervalTimer);\n\t    clearTimeout(this.pingTimeoutTimer);\n\t\n\t    // stop event from firing again for transport\n\t    this.transport.removeAllListeners('close');\n\t\n\t    // ensure transport won't stay open\n\t    this.transport.close();\n\t\n\t    // ignore further transport communication\n\t    this.transport.removeAllListeners();\n\t\n\t    // set ready state\n\t    this.readyState = 'closed';\n\t\n\t    // clear session id\n\t    this.id = null;\n\t\n\t    // emit close event\n\t    this.emit('close', reason, desc);\n\t\n\t    // clean buffers after, so users can still\n\t    // grab the buffers on `close` event\n\t    self.writeBuffer = [];\n\t    self.prevBufferLen = 0;\n\t  }\n\t};\n\t\n\t/**\n\t * Filters upgrades, returning only those matching client transports.\n\t *\n\t * @param {Array} server upgrades\n\t * @api private\n\t *\n\t */\n\t\n\tSocket.prototype.filterUpgrades = function (upgrades) {\n\t  var filteredUpgrades = [];\n\t  for (var i = 0, j = upgrades.length; i < j; i++) {\n\t    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n\t  }\n\t  return filteredUpgrades;\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(19);\n\tvar XHR = __webpack_require__(21);\n\tvar JSONP = __webpack_require__(35);\n\tvar websocket = __webpack_require__(36);\n\t\n\t/**\n\t * Export transports.\n\t */\n\t\n\texports.polling = polling;\n\texports.websocket = websocket;\n\t\n\t/**\n\t * Polling transport polymorphic constructor.\n\t * Decides on xhr vs jsonp based on feature detection.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction polling (opts) {\n\t  var xhr;\n\t  var xd = false;\n\t  var xs = false;\n\t  var jsonp = false !== opts.jsonp;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    xd = opts.hostname !== location.hostname || port !== opts.port;\n\t    xs = opts.secure !== isSSL;\n\t  }\n\t\n\t  opts.xdomain = xd;\n\t  opts.xscheme = xs;\n\t  xhr = new XMLHttpRequest(opts);\n\t\n\t  if ('open' in xhr && !opts.forceJSONP) {\n\t    return new XHR(opts);\n\t  } else {\n\t    if (!jsonp) throw new Error('JSONP disabled');\n\t    return new JSONP(opts);\n\t  }\n\t}\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// browser shim for xmlhttprequest module\n\t\n\tvar hasCORS = __webpack_require__(20);\n\t\n\tmodule.exports = function (opts) {\n\t  var xdomain = opts.xdomain;\n\t\n\t  // scheme must be same when usign XDomainRequest\n\t  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t  var xscheme = opts.xscheme;\n\t\n\t  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n\t  // https://github.com/Automattic/engine.io-client/pull/217\n\t  var enablesXDR = opts.enablesXDR;\n\t\n\t  // XMLHttpRequest can be disabled on IE\n\t  try {\n\t    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n\t      return new XMLHttpRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  // Use XDomainRequest for IE8 if enablesXDR is true\n\t  // because loading bar keeps flashing when using jsonp-polling\n\t  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n\t  try {\n\t    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n\t      return new XDomainRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  if (!xdomain) {\n\t    try {\n\t      return new self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n\t    } catch (e) { }\n\t  }\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t *\n\t * Logic borrowed from Modernizr:\n\t *\n\t *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n\t */\n\t\n\ttry {\n\t  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n\t    'withCredentials' in new XMLHttpRequest();\n\t} catch (err) {\n\t  // if XMLHttp support is disabled in IE then it will throw\n\t  // when trying to create\n\t  module.exports = false;\n\t}\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global attachEvent */\n\t\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(19);\n\tvar Polling = __webpack_require__(22);\n\tvar Emitter = __webpack_require__(11);\n\tvar inherit = __webpack_require__(33);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling-xhr');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = XHR;\n\tmodule.exports.Request = Request;\n\t\n\t/**\n\t * Empty function\n\t */\n\t\n\tfunction empty () {}\n\t\n\t/**\n\t * XHR Polling constructor.\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction XHR (opts) {\n\t  Polling.call(this, opts);\n\t  this.requestTimeout = opts.requestTimeout;\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n\t      port !== opts.port;\n\t    this.xs = opts.secure !== isSSL;\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(XHR, Polling);\n\t\n\t/**\n\t * XHR supports binary\n\t */\n\t\n\tXHR.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Creates a request.\n\t *\n\t * @param {String} method\n\t * @api private\n\t */\n\t\n\tXHR.prototype.request = function (opts) {\n\t  opts = opts || {};\n\t  opts.uri = this.uri();\n\t  opts.xd = this.xd;\n\t  opts.xs = this.xs;\n\t  opts.agent = this.agent || false;\n\t  opts.supportsBinary = this.supportsBinary;\n\t  opts.enablesXDR = this.enablesXDR;\n\t  opts.withCredentials = this.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  opts.requestTimeout = this.requestTimeout;\n\t\n\t  // other options for Node.js client\n\t  opts.extraHeaders = this.extraHeaders;\n\t\n\t  return new Request(opts);\n\t};\n\t\n\t/**\n\t * Sends data.\n\t *\n\t * @param {String} data to send.\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doWrite = function (data, fn) {\n\t  var isBinary = typeof data !== 'string' && data !== undefined;\n\t  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n\t  var self = this;\n\t  req.on('success', fn);\n\t  req.on('error', function (err) {\n\t    self.onError('xhr post error', err);\n\t  });\n\t  this.sendXhr = req;\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doPoll = function () {\n\t  debug('xhr poll');\n\t  var req = this.request();\n\t  var self = this;\n\t  req.on('data', function (data) {\n\t    self.onData(data);\n\t  });\n\t  req.on('error', function (err) {\n\t    self.onError('xhr poll error', err);\n\t  });\n\t  this.pollXhr = req;\n\t};\n\t\n\t/**\n\t * Request constructor\n\t *\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Request (opts) {\n\t  this.method = opts.method || 'GET';\n\t  this.uri = opts.uri;\n\t  this.xd = !!opts.xd;\n\t  this.xs = !!opts.xs;\n\t  this.async = false !== opts.async;\n\t  this.data = undefined !== opts.data ? opts.data : null;\n\t  this.agent = opts.agent;\n\t  this.isBinary = opts.isBinary;\n\t  this.supportsBinary = opts.supportsBinary;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t  this.requestTimeout = opts.requestTimeout;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  this.create();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Request.prototype);\n\t\n\t/**\n\t * Creates the XHR object and sends the request.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.create = function () {\n\t  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t\n\t  var xhr = this.xhr = new XMLHttpRequest(opts);\n\t  var self = this;\n\t\n\t  try {\n\t    debug('xhr open %s: %s', this.method, this.uri);\n\t    xhr.open(this.method, this.uri, this.async);\n\t    try {\n\t      if (this.extraHeaders) {\n\t        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n\t        for (var i in this.extraHeaders) {\n\t          if (this.extraHeaders.hasOwnProperty(i)) {\n\t            xhr.setRequestHeader(i, this.extraHeaders[i]);\n\t          }\n\t        }\n\t      }\n\t    } catch (e) {}\n\t\n\t    if ('POST' === this.method) {\n\t      try {\n\t        if (this.isBinary) {\n\t          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n\t        } else {\n\t          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n\t        }\n\t      } catch (e) {}\n\t    }\n\t\n\t    try {\n\t      xhr.setRequestHeader('Accept', '*/*');\n\t    } catch (e) {}\n\t\n\t    // ie6 check\n\t    if ('withCredentials' in xhr) {\n\t      xhr.withCredentials = this.withCredentials;\n\t    }\n\t\n\t    if (this.requestTimeout) {\n\t      xhr.timeout = this.requestTimeout;\n\t    }\n\t\n\t    if (this.hasXDR()) {\n\t      xhr.onload = function () {\n\t        self.onLoad();\n\t      };\n\t      xhr.onerror = function () {\n\t        self.onError(xhr.responseText);\n\t      };\n\t    } else {\n\t      xhr.onreadystatechange = function () {\n\t        if (xhr.readyState === 2) {\n\t          try {\n\t            var contentType = xhr.getResponseHeader('Content-Type');\n\t            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t              xhr.responseType = 'arraybuffer';\n\t            }\n\t          } catch (e) {}\n\t        }\n\t        if (4 !== xhr.readyState) return;\n\t        if (200 === xhr.status || 1223 === xhr.status) {\n\t          self.onLoad();\n\t        } else {\n\t          // make sure the `error` event handler that's user-set\n\t          // does not throw in the same tick and gets caught here\n\t          setTimeout(function () {\n\t            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n\t          }, 0);\n\t        }\n\t      };\n\t    }\n\t\n\t    debug('xhr data %s', this.data);\n\t    xhr.send(this.data);\n\t  } catch (e) {\n\t    // Need to defer since .create() is called directly fhrom the constructor\n\t    // and thus the 'error' event can only be only bound *after* this exception\n\t    // occurs.  Therefore, also, we cannot throw here at all.\n\t    setTimeout(function () {\n\t      self.onError(e);\n\t    }, 0);\n\t    return;\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    this.index = Request.requestsCount++;\n\t    Request.requests[this.index] = this;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful response.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onSuccess = function () {\n\t  this.emit('success');\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Called if we have data.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onData = function (data) {\n\t  this.emit('data', data);\n\t  this.onSuccess();\n\t};\n\t\n\t/**\n\t * Called upon error.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onError = function (err) {\n\t  this.emit('error', err);\n\t  this.cleanup(true);\n\t};\n\t\n\t/**\n\t * Cleans up house.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.cleanup = function (fromError) {\n\t  if ('undefined' === typeof this.xhr || null === this.xhr) {\n\t    return;\n\t  }\n\t  // xmlhttprequest\n\t  if (this.hasXDR()) {\n\t    this.xhr.onload = this.xhr.onerror = empty;\n\t  } else {\n\t    this.xhr.onreadystatechange = empty;\n\t  }\n\t\n\t  if (fromError) {\n\t    try {\n\t      this.xhr.abort();\n\t    } catch (e) {}\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    delete Request.requests[this.index];\n\t  }\n\t\n\t  this.xhr = null;\n\t};\n\t\n\t/**\n\t * Called upon load.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onLoad = function () {\n\t  var data;\n\t  try {\n\t    var contentType;\n\t    try {\n\t      contentType = this.xhr.getResponseHeader('Content-Type');\n\t    } catch (e) {}\n\t    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t      data = this.xhr.response || this.xhr.responseText;\n\t    } else {\n\t      data = this.xhr.responseText;\n\t    }\n\t  } catch (e) {\n\t    this.onError(e);\n\t  }\n\t  if (null != data) {\n\t    this.onData(data);\n\t  }\n\t};\n\t\n\t/**\n\t * Check if it has XDomainRequest.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.hasXDR = function () {\n\t  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n\t};\n\t\n\t/**\n\t * Aborts the request.\n\t *\n\t * @api public\n\t */\n\t\n\tRequest.prototype.abort = function () {\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Aborts pending requests when unloading the window. This is needed to prevent\n\t * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n\t * emitted.\n\t */\n\t\n\tRequest.requestsCount = 0;\n\tRequest.requests = {};\n\t\n\tif (typeof document !== 'undefined') {\n\t  if (typeof attachEvent === 'function') {\n\t    attachEvent('onunload', unloadHandler);\n\t  } else if (typeof addEventListener === 'function') {\n\t    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n\t    addEventListener(terminationEvent, unloadHandler, false);\n\t  }\n\t}\n\t\n\tfunction unloadHandler () {\n\t  for (var i in Request.requests) {\n\t    if (Request.requests.hasOwnProperty(i)) {\n\t      Request.requests[i].abort();\n\t    }\n\t  }\n\t}\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(23);\n\tvar parseqs = __webpack_require__(32);\n\tvar parser = __webpack_require__(24);\n\tvar inherit = __webpack_require__(33);\n\tvar yeast = __webpack_require__(34);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Polling;\n\t\n\t/**\n\t * Is XHR2 supported?\n\t */\n\t\n\tvar hasXHR2 = (function () {\n\t  var XMLHttpRequest = __webpack_require__(19);\n\t  var xhr = new XMLHttpRequest({ xdomain: false });\n\t  return null != xhr.responseType;\n\t})();\n\t\n\t/**\n\t * Polling interface.\n\t *\n\t * @param {Object} opts\n\t * @api private\n\t */\n\t\n\tfunction Polling (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (!hasXHR2 || forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(Polling, Transport);\n\t\n\t/**\n\t * Transport name.\n\t */\n\t\n\tPolling.prototype.name = 'polling';\n\t\n\t/**\n\t * Opens the socket (triggers polling). We write a PING message to determine\n\t * when the transport is open.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doOpen = function () {\n\t  this.poll();\n\t};\n\t\n\t/**\n\t * Pauses polling.\n\t *\n\t * @param {Function} callback upon buffers are flushed and transport is paused\n\t * @api private\n\t */\n\t\n\tPolling.prototype.pause = function (onPause) {\n\t  var self = this;\n\t\n\t  this.readyState = 'pausing';\n\t\n\t  function pause () {\n\t    debug('paused');\n\t    self.readyState = 'paused';\n\t    onPause();\n\t  }\n\t\n\t  if (this.polling || !this.writable) {\n\t    var total = 0;\n\t\n\t    if (this.polling) {\n\t      debug('we are currently polling - waiting to pause');\n\t      total++;\n\t      this.once('pollComplete', function () {\n\t        debug('pre-pause polling complete');\n\t        --total || pause();\n\t      });\n\t    }\n\t\n\t    if (!this.writable) {\n\t      debug('we are currently writing - waiting to pause');\n\t      total++;\n\t      this.once('drain', function () {\n\t        debug('pre-pause writing complete');\n\t        --total || pause();\n\t      });\n\t    }\n\t  } else {\n\t    pause();\n\t  }\n\t};\n\t\n\t/**\n\t * Starts polling cycle.\n\t *\n\t * @api public\n\t */\n\t\n\tPolling.prototype.poll = function () {\n\t  debug('polling');\n\t  this.polling = true;\n\t  this.doPoll();\n\t  this.emit('poll');\n\t};\n\t\n\t/**\n\t * Overloads onData to detect payloads.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.onData = function (data) {\n\t  var self = this;\n\t  debug('polling got data %s', data);\n\t  var callback = function (packet, index, total) {\n\t    // if its the first message we consider the transport open\n\t    if ('opening' === self.readyState) {\n\t      self.onOpen();\n\t    }\n\t\n\t    // if its a close packet, we close the ongoing requests\n\t    if ('close' === packet.type) {\n\t      self.onClose();\n\t      return false;\n\t    }\n\t\n\t    // otherwise bypass onData and handle the message\n\t    self.onPacket(packet);\n\t  };\n\t\n\t  // decode payload\n\t  parser.decodePayload(data, this.socket.binaryType, callback);\n\t\n\t  // if an event did not trigger closing\n\t  if ('closed' !== this.readyState) {\n\t    // if we got data we're not polling\n\t    this.polling = false;\n\t    this.emit('pollComplete');\n\t\n\t    if ('open' === this.readyState) {\n\t      this.poll();\n\t    } else {\n\t      debug('ignoring poll - transport state \"%s\"', this.readyState);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * For polling, send a close packet.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doClose = function () {\n\t  var self = this;\n\t\n\t  function close () {\n\t    debug('writing close packet');\n\t    self.write([{ type: 'close' }]);\n\t  }\n\t\n\t  if ('open' === this.readyState) {\n\t    debug('transport open - closing');\n\t    close();\n\t  } else {\n\t    // in case we're trying to close while\n\t    // handshaking is in progress (GH-164)\n\t    debug('transport not open - deferring close');\n\t    this.once('open', close);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes a packets payload.\n\t *\n\t * @param {Array} data packets\n\t * @param {Function} drain callback\n\t * @api private\n\t */\n\t\n\tPolling.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t  var callbackfn = function () {\n\t    self.writable = true;\n\t    self.emit('drain');\n\t  };\n\t\n\t  parser.encodePayload(packets, this.supportsBinary, function (data) {\n\t    self.doWrite(data, callbackfn);\n\t  });\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'https' : 'http';\n\t  var port = '';\n\t\n\t  // cache busting is forced\n\t  if (false !== this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  if (!this.supportsBinary && !query.sid) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n\t     ('http' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(24);\n\tvar Emitter = __webpack_require__(11);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Transport;\n\t\n\t/**\n\t * Transport abstract constructor.\n\t *\n\t * @param {Object} options.\n\t * @api private\n\t */\n\t\n\tfunction Transport (opts) {\n\t  this.path = opts.path;\n\t  this.hostname = opts.hostname;\n\t  this.port = opts.port;\n\t  this.secure = opts.secure;\n\t  this.query = opts.query;\n\t  this.timestampParam = opts.timestampParam;\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.readyState = '';\n\t  this.agent = opts.agent || false;\n\t  this.socket = opts.socket;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t  this.forceNode = opts.forceNode;\n\t\n\t  // results of ReactNative environment detection\n\t  this.isReactNative = opts.isReactNative;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t  this.localAddress = opts.localAddress;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Transport.prototype);\n\t\n\t/**\n\t * Emits an error.\n\t *\n\t * @param {String} str\n\t * @return {Transport} for chaining\n\t * @api public\n\t */\n\t\n\tTransport.prototype.onError = function (msg, desc) {\n\t  var err = new Error(msg);\n\t  err.type = 'TransportError';\n\t  err.description = desc;\n\t  this.emit('error', err);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Opens the transport.\n\t *\n\t * @api public\n\t */\n\t\n\tTransport.prototype.open = function () {\n\t  if ('closed' === this.readyState || '' === this.readyState) {\n\t    this.readyState = 'opening';\n\t    this.doOpen();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Closes the transport.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.doClose();\n\t    this.onClose();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends multiple packets.\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\tTransport.prototype.send = function (packets) {\n\t  if ('open' === this.readyState) {\n\t    this.write(packets);\n\t  } else {\n\t    throw new Error('Transport not open');\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon open\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onOpen = function () {\n\t  this.readyState = 'open';\n\t  this.writable = true;\n\t  this.emit('open');\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @param {String} data\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onData = function (data) {\n\t  var packet = parser.decodePacket(data, this.socket.binaryType);\n\t  this.onPacket(packet);\n\t};\n\t\n\t/**\n\t * Called with a decoded packet.\n\t */\n\t\n\tTransport.prototype.onPacket = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon close.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onClose = function () {\n\t  this.readyState = 'closed';\n\t  this.emit('close');\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar keys = __webpack_require__(25);\n\tvar hasBinary = __webpack_require__(26);\n\tvar sliceBuffer = __webpack_require__(27);\n\tvar after = __webpack_require__(28);\n\tvar utf8 = __webpack_require__(29);\n\t\n\tvar base64encoder;\n\tif (typeof ArrayBuffer !== 'undefined') {\n\t  base64encoder = __webpack_require__(30);\n\t}\n\t\n\t/**\n\t * Check if we are running an android browser. That requires us to use\n\t * ArrayBuffer with polling transports...\n\t *\n\t * http://ghinda.net/jpeg-blob-ajax-android/\n\t */\n\t\n\tvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Check if we are running in PhantomJS.\n\t * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n\t * https://github.com/ariya/phantomjs/issues/11395\n\t * @type boolean\n\t */\n\tvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\t\n\t/**\n\t * When true, avoids using Blobs to encode payloads.\n\t * @type boolean\n\t */\n\tvar dontSendBlobs = isAndroid || isPhantomJS;\n\t\n\t/**\n\t * Current protocol version.\n\t */\n\t\n\texports.protocol = 3;\n\t\n\t/**\n\t * Packet types.\n\t */\n\t\n\tvar packets = exports.packets = {\n\t    open:     0    // non-ws\n\t  , close:    1    // non-ws\n\t  , ping:     2\n\t  , pong:     3\n\t  , message:  4\n\t  , upgrade:  5\n\t  , noop:     6\n\t};\n\t\n\tvar packetslist = keys(packets);\n\t\n\t/**\n\t * Premade error packet.\n\t */\n\t\n\tvar err = { type: 'error', data: 'parser error' };\n\t\n\t/**\n\t * Create a blob api even for blob builder when vendor prefixes exist\n\t */\n\t\n\tvar Blob = __webpack_require__(31);\n\t\n\t/**\n\t * Encodes a packet.\n\t *\n\t *     <packet type id> [ <data> ]\n\t *\n\t * Example:\n\t *\n\t *     5hello world\n\t *     3\n\t *     4\n\t *\n\t * Binary is encoded in an identical principle\n\t *\n\t * @api private\n\t */\n\t\n\texports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = false;\n\t  }\n\t\n\t  if (typeof utf8encode === 'function') {\n\t    callback = utf8encode;\n\t    utf8encode = null;\n\t  }\n\t\n\t  var data = (packet.data === undefined)\n\t    ? undefined\n\t    : packet.data.buffer || packet.data;\n\t\n\t  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n\t    return encodeArrayBuffer(packet, supportsBinary, callback);\n\t  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n\t    return encodeBlob(packet, supportsBinary, callback);\n\t  }\n\t\n\t  // might be an object with { base64: true, data: dataAsBase64String }\n\t  if (data && data.base64) {\n\t    return encodeBase64Object(packet, callback);\n\t  }\n\t\n\t  // Sending data as a utf-8 string\n\t  var encoded = packets[packet.type];\n\t\n\t  // data fragment is optional\n\t  if (undefined !== packet.data) {\n\t    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n\t  }\n\t\n\t  return callback('' + encoded);\n\t\n\t};\n\t\n\tfunction encodeBase64Object(packet, callback) {\n\t  // packet data is an object { base64: true, data: dataAsBase64String }\n\t  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n\t  return callback(message);\n\t}\n\t\n\t/**\n\t * Encode packet helpers for binary types\n\t */\n\t\n\tfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var data = packet.data;\n\t  var contentArray = new Uint8Array(data);\n\t  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\t\n\t  resultBuffer[0] = packets[packet.type];\n\t  for (var i = 0; i < contentArray.length; i++) {\n\t    resultBuffer[i+1] = contentArray[i];\n\t  }\n\t\n\t  return callback(resultBuffer.buffer);\n\t}\n\t\n\tfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var fr = new FileReader();\n\t  fr.onload = function() {\n\t    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n\t  };\n\t  return fr.readAsArrayBuffer(packet.data);\n\t}\n\t\n\tfunction encodeBlob(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  if (dontSendBlobs) {\n\t    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n\t  }\n\t\n\t  var length = new Uint8Array(1);\n\t  length[0] = packets[packet.type];\n\t  var blob = new Blob([length.buffer, packet.data]);\n\t\n\t  return callback(blob);\n\t}\n\t\n\t/**\n\t * Encodes a packet with binary data in a base64 string\n\t *\n\t * @param {Object} packet, has `type` and `data`\n\t * @return {String} base64 encoded message\n\t */\n\t\n\texports.encodeBase64Packet = function(packet, callback) {\n\t  var message = 'b' + exports.packets[packet.type];\n\t  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n\t    var fr = new FileReader();\n\t    fr.onload = function() {\n\t      var b64 = fr.result.split(',')[1];\n\t      callback(message + b64);\n\t    };\n\t    return fr.readAsDataURL(packet.data);\n\t  }\n\t\n\t  var b64data;\n\t  try {\n\t    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n\t  } catch (e) {\n\t    // iPhone Safari doesn't let you apply with typed arrays\n\t    var typed = new Uint8Array(packet.data);\n\t    var basic = new Array(typed.length);\n\t    for (var i = 0; i < typed.length; i++) {\n\t      basic[i] = typed[i];\n\t    }\n\t    b64data = String.fromCharCode.apply(null, basic);\n\t  }\n\t  message += btoa(b64data);\n\t  return callback(message);\n\t};\n\t\n\t/**\n\t * Decodes a packet. Changes format to Blob if requested.\n\t *\n\t * @return {Object} with `type` and `data` (if any)\n\t * @api private\n\t */\n\t\n\texports.decodePacket = function (data, binaryType, utf8decode) {\n\t  if (data === undefined) {\n\t    return err;\n\t  }\n\t  // String data\n\t  if (typeof data === 'string') {\n\t    if (data.charAt(0) === 'b') {\n\t      return exports.decodeBase64Packet(data.substr(1), binaryType);\n\t    }\n\t\n\t    if (utf8decode) {\n\t      data = tryDecode(data);\n\t      if (data === false) {\n\t        return err;\n\t      }\n\t    }\n\t    var type = data.charAt(0);\n\t\n\t    if (Number(type) != type || !packetslist[type]) {\n\t      return err;\n\t    }\n\t\n\t    if (data.length > 1) {\n\t      return { type: packetslist[type], data: data.substring(1) };\n\t    } else {\n\t      return { type: packetslist[type] };\n\t    }\n\t  }\n\t\n\t  var asArray = new Uint8Array(data);\n\t  var type = asArray[0];\n\t  var rest = sliceBuffer(data, 1);\n\t  if (Blob && binaryType === 'blob') {\n\t    rest = new Blob([rest]);\n\t  }\n\t  return { type: packetslist[type], data: rest };\n\t};\n\t\n\tfunction tryDecode(data) {\n\t  try {\n\t    data = utf8.decode(data, { strict: false });\n\t  } catch (e) {\n\t    return false;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Decodes a packet encoded in a base64 string\n\t *\n\t * @param {String} base64 encoded message\n\t * @return {Object} with `type` and `data` (if any)\n\t */\n\t\n\texports.decodeBase64Packet = function(msg, binaryType) {\n\t  var type = packetslist[msg.charAt(0)];\n\t  if (!base64encoder) {\n\t    return { type: type, data: { base64: true, data: msg.substr(1) } };\n\t  }\n\t\n\t  var data = base64encoder.decode(msg.substr(1));\n\t\n\t  if (binaryType === 'blob' && Blob) {\n\t    data = new Blob([data]);\n\t  }\n\t\n\t  return { type: type, data: data };\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload).\n\t *\n\t *     <length>:data\n\t *\n\t * Example:\n\t *\n\t *     11:hello world2:hi\n\t *\n\t * If any contents are binary, they will be encoded as base64 strings. Base64\n\t * encoded strings are marked with a b before the length specifier\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\texports.encodePayload = function (packets, supportsBinary, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = null;\n\t  }\n\t\n\t  var isBinary = hasBinary(packets);\n\t\n\t  if (supportsBinary && isBinary) {\n\t    if (Blob && !dontSendBlobs) {\n\t      return exports.encodePayloadAsBlob(packets, callback);\n\t    }\n\t\n\t    return exports.encodePayloadAsArrayBuffer(packets, callback);\n\t  }\n\t\n\t  if (!packets.length) {\n\t    return callback('0:');\n\t  }\n\t\n\t  function setLengthHeader(message) {\n\t    return message.length + ':' + message;\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n\t      doneCallback(null, setLengthHeader(message));\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(results.join(''));\n\t  });\n\t};\n\t\n\t/**\n\t * Async array map using after\n\t */\n\t\n\tfunction map(ary, each, done) {\n\t  var result = new Array(ary.length);\n\t  var next = after(ary.length, done);\n\t\n\t  var eachWithIndex = function(i, el, cb) {\n\t    each(el, function(error, msg) {\n\t      result[i] = msg;\n\t      cb(error, result);\n\t    });\n\t  };\n\t\n\t  for (var i = 0; i < ary.length; i++) {\n\t    eachWithIndex(i, ary[i], next);\n\t  }\n\t}\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Possible binary contents are\n\t * decoded from their base64 representation\n\t *\n\t * @param {String} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayload = function (data, binaryType, callback) {\n\t  if (typeof data !== 'string') {\n\t    return exports.decodePayloadAsBinary(data, binaryType, callback);\n\t  }\n\t\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var packet;\n\t  if (data === '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t  var length = '', n, msg;\n\t\n\t  for (var i = 0, l = data.length; i < l; i++) {\n\t    var chr = data.charAt(i);\n\t\n\t    if (chr !== ':') {\n\t      length += chr;\n\t      continue;\n\t    }\n\t\n\t    if (length === '' || (length != (n = Number(length)))) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    msg = data.substr(i + 1, n);\n\t\n\t    if (length != msg.length) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    if (msg.length) {\n\t      packet = exports.decodePacket(msg, binaryType, false);\n\t\n\t      if (err.type === packet.type && err.data === packet.data) {\n\t        // parser error in individual packet - ignoring payload\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      var ret = callback(packet, i + n, l);\n\t      if (false === ret) return;\n\t    }\n\t\n\t    // advance cursor\n\t    i += n;\n\t    length = '';\n\t  }\n\t\n\t  if (length !== '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload) as binary.\n\t *\n\t * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n\t * 255><data>\n\t *\n\t * Example:\n\t * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n\t *\n\t * @param {Array} packets\n\t * @return {ArrayBuffer} encoded payload\n\t * @api private\n\t */\n\t\n\texports.encodePayloadAsArrayBuffer = function(packets, callback) {\n\t  if (!packets.length) {\n\t    return callback(new ArrayBuffer(0));\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(data) {\n\t      return doneCallback(null, data);\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, encodedPackets) {\n\t    var totalLength = encodedPackets.reduce(function(acc, p) {\n\t      var len;\n\t      if (typeof p === 'string'){\n\t        len = p.length;\n\t      } else {\n\t        len = p.byteLength;\n\t      }\n\t      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n\t    }, 0);\n\t\n\t    var resultArray = new Uint8Array(totalLength);\n\t\n\t    var bufferIndex = 0;\n\t    encodedPackets.forEach(function(p) {\n\t      var isString = typeof p === 'string';\n\t      var ab = p;\n\t      if (isString) {\n\t        var view = new Uint8Array(p.length);\n\t        for (var i = 0; i < p.length; i++) {\n\t          view[i] = p.charCodeAt(i);\n\t        }\n\t        ab = view.buffer;\n\t      }\n\t\n\t      if (isString) { // not true binary\n\t        resultArray[bufferIndex++] = 0;\n\t      } else { // true binary\n\t        resultArray[bufferIndex++] = 1;\n\t      }\n\t\n\t      var lenStr = ab.byteLength.toString();\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n\t      }\n\t      resultArray[bufferIndex++] = 255;\n\t\n\t      var view = new Uint8Array(ab);\n\t      for (var i = 0; i < view.length; i++) {\n\t        resultArray[bufferIndex++] = view[i];\n\t      }\n\t    });\n\t\n\t    return callback(resultArray.buffer);\n\t  });\n\t};\n\t\n\t/**\n\t * Encode as Blob\n\t */\n\t\n\texports.encodePayloadAsBlob = function(packets, callback) {\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(encoded) {\n\t      var binaryIdentifier = new Uint8Array(1);\n\t      binaryIdentifier[0] = 1;\n\t      if (typeof encoded === 'string') {\n\t        var view = new Uint8Array(encoded.length);\n\t        for (var i = 0; i < encoded.length; i++) {\n\t          view[i] = encoded.charCodeAt(i);\n\t        }\n\t        encoded = view.buffer;\n\t        binaryIdentifier[0] = 0;\n\t      }\n\t\n\t      var len = (encoded instanceof ArrayBuffer)\n\t        ? encoded.byteLength\n\t        : encoded.size;\n\t\n\t      var lenStr = len.toString();\n\t      var lengthAry = new Uint8Array(lenStr.length + 1);\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        lengthAry[i] = parseInt(lenStr[i]);\n\t      }\n\t      lengthAry[lenStr.length] = 255;\n\t\n\t      if (Blob) {\n\t        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n\t        doneCallback(null, blob);\n\t      }\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(new Blob(results));\n\t  });\n\t};\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Strings are decoded by\n\t * interpreting each byte as a key code for entries marked to start with 0. See\n\t * description of encodePayloadAsBinary\n\t *\n\t * @param {ArrayBuffer} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayloadAsBinary = function (data, binaryType, callback) {\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var bufferTail = data;\n\t  var buffers = [];\n\t\n\t  while (bufferTail.byteLength > 0) {\n\t    var tailArray = new Uint8Array(bufferTail);\n\t    var isString = tailArray[0] === 0;\n\t    var msgLength = '';\n\t\n\t    for (var i = 1; ; i++) {\n\t      if (tailArray[i] === 255) break;\n\t\n\t      // 310 = char length of Number.MAX_VALUE\n\t      if (msgLength.length > 310) {\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      msgLength += tailArray[i];\n\t    }\n\t\n\t    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n\t    msgLength = parseInt(msgLength);\n\t\n\t    var msg = sliceBuffer(bufferTail, 0, msgLength);\n\t    if (isString) {\n\t      try {\n\t        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n\t      } catch (e) {\n\t        // iPhone Safari doesn't let you apply to typed arrays\n\t        var typed = new Uint8Array(msg);\n\t        msg = '';\n\t        for (var i = 0; i < typed.length; i++) {\n\t          msg += String.fromCharCode(typed[i]);\n\t        }\n\t      }\n\t    }\n\t\n\t    buffers.push(msg);\n\t    bufferTail = sliceBuffer(bufferTail, msgLength);\n\t  }\n\t\n\t  var total = buffers.length;\n\t  buffers.forEach(function(buffer, i) {\n\t    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n\t  });\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Gets the keys for an object.\n\t *\n\t * @return {Array} keys\n\t * @api private\n\t */\n\t\n\tmodule.exports = Object.keys || function keys (obj){\n\t  var arr = [];\n\t  var has = Object.prototype.hasOwnProperty;\n\t\n\t  for (var i in obj) {\n\t    if (has.call(obj, i)) {\n\t      arr.push(i);\n\t    }\n\t  }\n\t  return arr;\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global Blob File */\n\t\n\t/*\n\t * Module requirements.\n\t */\n\t\n\tvar isArray = __webpack_require__(13);\n\t\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' ||\n\t                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\n\tvar withNativeFile = typeof File === 'function' ||\n\t                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = hasBinary;\n\t\n\t/**\n\t * Checks for binary data.\n\t *\n\t * Supports Buffer, ArrayBuffer, Blob and File.\n\t *\n\t * @param {Object} anything\n\t * @api public\n\t */\n\t\n\tfunction hasBinary (obj) {\n\t  if (!obj || typeof obj !== 'object') {\n\t    return false;\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      if (hasBinary(obj[i])) {\n\t        return true;\n\t      }\n\t    }\n\t    return false;\n\t  }\n\t\n\t  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n\t    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n\t    (withNativeBlob && obj instanceof Blob) ||\n\t    (withNativeFile && obj instanceof File)\n\t  ) {\n\t    return true;\n\t  }\n\t\n\t  // see: https://github.com/Automattic/has-binary/pull/4\n\t  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n\t    return hasBinary(obj.toJSON(), true);\n\t  }\n\t\n\t  for (var key in obj) {\n\t    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * An abstraction for slicing an arraybuffer even when\n\t * ArrayBuffer.prototype.slice is not supported\n\t *\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(arraybuffer, start, end) {\n\t  var bytes = arraybuffer.byteLength;\n\t  start = start || 0;\n\t  end = end || bytes;\n\t\n\t  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\t\n\t  if (start < 0) { start += bytes; }\n\t  if (end < 0) { end += bytes; }\n\t  if (end > bytes) { end = bytes; }\n\t\n\t  if (start >= bytes || start >= end || bytes === 0) {\n\t    return new ArrayBuffer(0);\n\t  }\n\t\n\t  var abv = new Uint8Array(arraybuffer);\n\t  var result = new Uint8Array(end - start);\n\t  for (var i = start, ii = 0; i < end; i++, ii++) {\n\t    result[ii] = abv[i];\n\t  }\n\t  return result.buffer;\n\t};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = after\n\t\n\tfunction after(count, callback, err_cb) {\n\t    var bail = false\n\t    err_cb = err_cb || noop\n\t    proxy.count = count\n\t\n\t    return (count === 0) ? callback() : proxy\n\t\n\t    function proxy(err, result) {\n\t        if (proxy.count <= 0) {\n\t            throw new Error('after called too many times')\n\t        }\n\t        --proxy.count\n\t\n\t        // after first error, rest are passed to err_cb\n\t        if (err) {\n\t            bail = true\n\t            callback(err)\n\t            // future error callbacks will go to error handler\n\t            callback = err_cb\n\t        } else if (proxy.count === 0 && !bail) {\n\t            callback(null, result)\n\t        }\n\t    }\n\t}\n\t\n\tfunction noop() {}\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\n\t/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\t\n\tvar stringFromCharCode = String.fromCharCode;\n\t\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\t\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\t\n\tfunction checkScalarValue(codePoint, strict) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tif (strict) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t\t' is not a scalar value'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\t\n\tfunction encodeCodePoint(codePoint, strict) {\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\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t}\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\t\n\tfunction utf8encode(string, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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, strict);\n\t\t}\n\t\treturn byteString;\n\t}\n\t\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\t\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\t\n\tfunction decodeSymbol(strict) {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\t\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\t\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = 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\t\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 checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\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 & 0x07) << 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\t\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\t\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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(strict)) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\t\n\tmodule.exports = {\n\t\tversion: '2.1.2',\n\t\tencode: utf8encode,\n\t\tdecode: utf8decode\n\t};\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\n\t/*\n\t * base64-arraybuffer\n\t * https://github.com/niklasvh/base64-arraybuffer\n\t *\n\t * Copyright (c) 2012 Niklas von Hertzen\n\t * Licensed under the MIT license.\n\t */\n\t(function(){\n\t  \"use strict\";\n\t\n\t  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\t\n\t  // Use a lookup table to find the index.\n\t  var lookup = new Uint8Array(256);\n\t  for (var i = 0; i < chars.length; i++) {\n\t    lookup[chars.charCodeAt(i)] = i;\n\t  }\n\t\n\t  exports.encode = function(arraybuffer) {\n\t    var bytes = new Uint8Array(arraybuffer),\n\t    i, len = bytes.length, base64 = \"\";\n\t\n\t    for (i = 0; i < len; i+=3) {\n\t      base64 += chars[bytes[i] >> 2];\n\t      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n\t      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n\t      base64 += chars[bytes[i + 2] & 63];\n\t    }\n\t\n\t    if ((len % 3) === 2) {\n\t      base64 = base64.substring(0, base64.length - 1) + \"=\";\n\t    } else if (len % 3 === 1) {\n\t      base64 = base64.substring(0, base64.length - 2) + \"==\";\n\t    }\n\t\n\t    return base64;\n\t  };\n\t\n\t  exports.decode =  function(base64) {\n\t    var bufferLength = base64.length * 0.75,\n\t    len = base64.length, i, p = 0,\n\t    encoded1, encoded2, encoded3, encoded4;\n\t\n\t    if (base64[base64.length - 1] === \"=\") {\n\t      bufferLength--;\n\t      if (base64[base64.length - 2] === \"=\") {\n\t        bufferLength--;\n\t      }\n\t    }\n\t\n\t    var arraybuffer = new ArrayBuffer(bufferLength),\n\t    bytes = new Uint8Array(arraybuffer);\n\t\n\t    for (i = 0; i < len; i+=4) {\n\t      encoded1 = lookup[base64.charCodeAt(i)];\n\t      encoded2 = lookup[base64.charCodeAt(i+1)];\n\t      encoded3 = lookup[base64.charCodeAt(i+2)];\n\t      encoded4 = lookup[base64.charCodeAt(i+3)];\n\t\n\t      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n\t      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n\t      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n\t    }\n\t\n\t    return arraybuffer;\n\t  };\n\t})();\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Create a blob builder even when vendor prefixes exist\r\n\t */\r\n\t\r\n\tvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n\t  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n\t  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n\t  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n\t  false;\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor is supported\r\n\t */\r\n\t\r\n\tvar blobSupported = (function() {\r\n\t  try {\r\n\t    var a = new Blob(['hi']);\r\n\t    return a.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor supports ArrayBufferViews\r\n\t * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n\t */\r\n\t\r\n\tvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n\t  try {\r\n\t    var b = new Blob([new Uint8Array([1,2])]);\r\n\t    return b.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if BlobBuilder is supported\r\n\t */\r\n\t\r\n\tvar blobBuilderSupported = BlobBuilder\r\n\t  && BlobBuilder.prototype.append\r\n\t  && BlobBuilder.prototype.getBlob;\r\n\t\r\n\t/**\r\n\t * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n\t * Used by BlobBuilder constructor and old browsers that didn't\r\n\t * support it in the Blob constructor.\r\n\t */\r\n\t\r\n\tfunction mapArrayBufferViews(ary) {\r\n\t  return ary.map(function(chunk) {\r\n\t    if (chunk.buffer instanceof ArrayBuffer) {\r\n\t      var buf = chunk.buffer;\r\n\t\r\n\t      // if this is a subarray, make a copy so we only\r\n\t      // include the subarray region from the underlying buffer\r\n\t      if (chunk.byteLength !== buf.byteLength) {\r\n\t        var copy = new Uint8Array(chunk.byteLength);\r\n\t        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n\t        buf = copy.buffer;\r\n\t      }\r\n\t\r\n\t      return buf;\r\n\t    }\r\n\t\r\n\t    return chunk;\r\n\t  });\r\n\t}\r\n\t\r\n\tfunction BlobBuilderConstructor(ary, options) {\r\n\t  options = options || {};\r\n\t\r\n\t  var bb = new BlobBuilder();\r\n\t  mapArrayBufferViews(ary).forEach(function(part) {\r\n\t    bb.append(part);\r\n\t  });\r\n\t\r\n\t  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n\t};\r\n\t\r\n\tfunction BlobConstructor(ary, options) {\r\n\t  return new Blob(mapArrayBufferViews(ary), options || {});\r\n\t};\r\n\t\r\n\tif (typeof Blob !== 'undefined') {\r\n\t  BlobBuilderConstructor.prototype = Blob.prototype;\r\n\t  BlobConstructor.prototype = Blob.prototype;\r\n\t}\r\n\t\r\n\tmodule.exports = (function() {\r\n\t  if (blobSupported) {\r\n\t    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n\t  } else if (blobBuilderSupported) {\r\n\t    return BlobBuilderConstructor;\r\n\t  } else {\r\n\t    return undefined;\r\n\t  }\r\n\t})();\r\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Compiles a querystring\r\n\t * Returns string representation of the object\r\n\t *\r\n\t * @param {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\texports.encode = function (obj) {\r\n\t  var str = '';\r\n\t\r\n\t  for (var i in obj) {\r\n\t    if (obj.hasOwnProperty(i)) {\r\n\t      if (str.length) str += '&';\r\n\t      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return str;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Parses a simple querystring into an object\r\n\t *\r\n\t * @param {String} qs\r\n\t * @api private\r\n\t */\r\n\t\r\n\texports.decode = function(qs){\r\n\t  var qry = {};\r\n\t  var pairs = qs.split('&');\r\n\t  for (var i = 0, l = pairs.length; i < l; i++) {\r\n\t    var pair = pairs[i].split('=');\r\n\t    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n\t  }\r\n\t  return qry;\r\n\t};\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = function(a, b){\n\t  var fn = function(){};\n\t  fn.prototype = b.prototype;\n\t  a.prototype = new fn;\n\t  a.prototype.constructor = a;\n\t};\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n\t  , length = 64\n\t  , map = {}\n\t  , seed = 0\n\t  , i = 0\n\t  , prev;\n\t\n\t/**\n\t * Return a string representing the specified number.\n\t *\n\t * @param {Number} num The number to convert.\n\t * @returns {String} The string representation of the number.\n\t * @api public\n\t */\n\tfunction encode(num) {\n\t  var encoded = '';\n\t\n\t  do {\n\t    encoded = alphabet[num % length] + encoded;\n\t    num = Math.floor(num / length);\n\t  } while (num > 0);\n\t\n\t  return encoded;\n\t}\n\t\n\t/**\n\t * Return the integer value specified by the given string.\n\t *\n\t * @param {String} str The string to convert.\n\t * @returns {Number} The integer value represented by the string.\n\t * @api public\n\t */\n\tfunction decode(str) {\n\t  var decoded = 0;\n\t\n\t  for (i = 0; i < str.length; i++) {\n\t    decoded = decoded * length + map[str.charAt(i)];\n\t  }\n\t\n\t  return decoded;\n\t}\n\t\n\t/**\n\t * Yeast: A tiny growing id generator.\n\t *\n\t * @returns {String} A unique id.\n\t * @api public\n\t */\n\tfunction yeast() {\n\t  var now = encode(+new Date());\n\t\n\t  if (now !== prev) return seed = 0, prev = now;\n\t  return now +'.'+ encode(seed++);\n\t}\n\t\n\t//\n\t// Map each character to its index.\n\t//\n\tfor (; i < length; i++) map[alphabet[i]] = i;\n\t\n\t//\n\t// Expose the `yeast`, `encode` and `decode` functions.\n\t//\n\tyeast.encode = encode;\n\tyeast.decode = decode;\n\tmodule.exports = yeast;\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Module requirements.\n\t */\n\t\n\tvar Polling = __webpack_require__(22);\n\tvar inherit = __webpack_require__(33);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = JSONPPolling;\n\t\n\t/**\n\t * Cached regular expressions.\n\t */\n\t\n\tvar rNewline = /\\n/g;\n\tvar rEscapedNewline = /\\\\n/g;\n\t\n\t/**\n\t * Global JSONP callbacks.\n\t */\n\t\n\tvar callbacks;\n\t\n\t/**\n\t * Noop.\n\t */\n\t\n\tfunction empty () { }\n\t\n\t/**\n\t * Until https://github.com/tc39/proposal-global is shipped.\n\t */\n\tfunction glob () {\n\t  return typeof self !== 'undefined' ? self\n\t      : typeof window !== 'undefined' ? window\n\t      : typeof global !== 'undefined' ? global : {};\n\t}\n\t\n\t/**\n\t * JSONP Polling constructor.\n\t *\n\t * @param {Object} opts.\n\t * @api public\n\t */\n\t\n\tfunction JSONPPolling (opts) {\n\t  Polling.call(this, opts);\n\t\n\t  this.query = this.query || {};\n\t\n\t  // define global callbacks array if not present\n\t  // we do this here (lazily) to avoid unneeded global pollution\n\t  if (!callbacks) {\n\t    // we need to consider multiple engines in the same page\n\t    var global = glob();\n\t    callbacks = global.___eio = (global.___eio || []);\n\t  }\n\t\n\t  // callback identifier\n\t  this.index = callbacks.length;\n\t\n\t  // add callback to jsonp global\n\t  var self = this;\n\t  callbacks.push(function (msg) {\n\t    self.onData(msg);\n\t  });\n\t\n\t  // append to query string\n\t  this.query.j = this.index;\n\t\n\t  // prevent spurious errors from being emitted when the window is unloaded\n\t  if (typeof addEventListener === 'function') {\n\t    addEventListener('beforeunload', function () {\n\t      if (self.script) self.script.onerror = empty;\n\t    }, false);\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(JSONPPolling, Polling);\n\t\n\t/*\n\t * JSONP only supports binary as base64 encoded strings\n\t */\n\t\n\tJSONPPolling.prototype.supportsBinary = false;\n\t\n\t/**\n\t * Closes the socket.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doClose = function () {\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  if (this.form) {\n\t    this.form.parentNode.removeChild(this.form);\n\t    this.form = null;\n\t    this.iframe = null;\n\t  }\n\t\n\t  Polling.prototype.doClose.call(this);\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doPoll = function () {\n\t  var self = this;\n\t  var script = document.createElement('script');\n\t\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  script.async = true;\n\t  script.src = this.uri();\n\t  script.onerror = function (e) {\n\t    self.onError('jsonp poll error', e);\n\t  };\n\t\n\t  var insertAt = document.getElementsByTagName('script')[0];\n\t  if (insertAt) {\n\t    insertAt.parentNode.insertBefore(script, insertAt);\n\t  } else {\n\t    (document.head || document.body).appendChild(script);\n\t  }\n\t  this.script = script;\n\t\n\t  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\t\n\t  if (isUAgecko) {\n\t    setTimeout(function () {\n\t      var iframe = document.createElement('iframe');\n\t      document.body.appendChild(iframe);\n\t      document.body.removeChild(iframe);\n\t    }, 100);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes with a hidden iframe.\n\t *\n\t * @param {String} data to send\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doWrite = function (data, fn) {\n\t  var self = this;\n\t\n\t  if (!this.form) {\n\t    var form = document.createElement('form');\n\t    var area = document.createElement('textarea');\n\t    var id = this.iframeId = 'eio_iframe_' + this.index;\n\t    var iframe;\n\t\n\t    form.className = 'socketio';\n\t    form.style.position = 'absolute';\n\t    form.style.top = '-1000px';\n\t    form.style.left = '-1000px';\n\t    form.target = id;\n\t    form.method = 'POST';\n\t    form.setAttribute('accept-charset', 'utf-8');\n\t    area.name = 'd';\n\t    form.appendChild(area);\n\t    document.body.appendChild(form);\n\t\n\t    this.form = form;\n\t    this.area = area;\n\t  }\n\t\n\t  this.form.action = this.uri();\n\t\n\t  function complete () {\n\t    initIframe();\n\t    fn();\n\t  }\n\t\n\t  function initIframe () {\n\t    if (self.iframe) {\n\t      try {\n\t        self.form.removeChild(self.iframe);\n\t      } catch (e) {\n\t        self.onError('jsonp polling iframe removal error', e);\n\t      }\n\t    }\n\t\n\t    try {\n\t      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n\t      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n\t      iframe = document.createElement(html);\n\t    } catch (e) {\n\t      iframe = document.createElement('iframe');\n\t      iframe.name = self.iframeId;\n\t      iframe.src = 'javascript:0';\n\t    }\n\t\n\t    iframe.id = self.iframeId;\n\t\n\t    self.form.appendChild(iframe);\n\t    self.iframe = iframe;\n\t  }\n\t\n\t  initIframe();\n\t\n\t  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n\t  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n\t  data = data.replace(rEscapedNewline, '\\\\\\n');\n\t  this.area.value = data.replace(rNewline, '\\\\n');\n\t\n\t  try {\n\t    this.form.submit();\n\t  } catch (e) {}\n\t\n\t  if (this.iframe.attachEvent) {\n\t    this.iframe.onreadystatechange = function () {\n\t      if (self.iframe.readyState === 'complete') {\n\t        complete();\n\t      }\n\t    };\n\t  } else {\n\t    this.iframe.onload = complete;\n\t  }\n\t};\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(23);\n\tvar parser = __webpack_require__(24);\n\tvar parseqs = __webpack_require__(32);\n\tvar inherit = __webpack_require__(33);\n\tvar yeast = __webpack_require__(34);\n\tvar debug = __webpack_require__(3)('engine.io-client:websocket');\n\t\n\tvar BrowserWebSocket, NodeWebSocket;\n\t\n\tif (typeof WebSocket !== 'undefined') {\n\t  BrowserWebSocket = WebSocket;\n\t} else if (typeof self !== 'undefined') {\n\t  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n\t}\n\t\n\tif (typeof window === 'undefined') {\n\t  try {\n\t    NodeWebSocket = __webpack_require__(37);\n\t  } catch (e) { }\n\t}\n\t\n\t/**\n\t * Get either the `WebSocket` or `MozWebSocket` globals\n\t * in the browser or try to resolve WebSocket-compatible\n\t * interface exposed by `ws` for Node-like environment.\n\t */\n\t\n\tvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = WS;\n\t\n\t/**\n\t * WebSocket transport constructor.\n\t *\n\t * @api {Object} connection options\n\t * @api public\n\t */\n\t\n\tfunction WS (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  this.perMessageDeflate = opts.perMessageDeflate;\n\t  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n\t  this.protocols = opts.protocols;\n\t  if (!this.usingBrowserWebSocket) {\n\t    WebSocketImpl = NodeWebSocket;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(WS, Transport);\n\t\n\t/**\n\t * Transport name.\n\t *\n\t * @api public\n\t */\n\t\n\tWS.prototype.name = 'websocket';\n\t\n\t/*\n\t * WebSockets support binary\n\t */\n\t\n\tWS.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Opens socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doOpen = function () {\n\t  if (!this.check()) {\n\t    // let probe timeout\n\t    return;\n\t  }\n\t\n\t  var uri = this.uri();\n\t  var protocols = this.protocols;\n\t  var opts = {\n\t    agent: this.agent,\n\t    perMessageDeflate: this.perMessageDeflate\n\t  };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  if (this.extraHeaders) {\n\t    opts.headers = this.extraHeaders;\n\t  }\n\t  if (this.localAddress) {\n\t    opts.localAddress = this.localAddress;\n\t  }\n\t\n\t  try {\n\t    this.ws =\n\t      this.usingBrowserWebSocket && !this.isReactNative\n\t        ? protocols\n\t          ? new WebSocketImpl(uri, protocols)\n\t          : new WebSocketImpl(uri)\n\t        : new WebSocketImpl(uri, protocols, opts);\n\t  } catch (err) {\n\t    return this.emit('error', err);\n\t  }\n\t\n\t  if (this.ws.binaryType === undefined) {\n\t    this.supportsBinary = false;\n\t  }\n\t\n\t  if (this.ws.supports && this.ws.supports.binary) {\n\t    this.supportsBinary = true;\n\t    this.ws.binaryType = 'nodebuffer';\n\t  } else {\n\t    this.ws.binaryType = 'arraybuffer';\n\t  }\n\t\n\t  this.addEventListeners();\n\t};\n\t\n\t/**\n\t * Adds event listeners to the socket\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.addEventListeners = function () {\n\t  var self = this;\n\t\n\t  this.ws.onopen = function () {\n\t    self.onOpen();\n\t  };\n\t  this.ws.onclose = function () {\n\t    self.onClose();\n\t  };\n\t  this.ws.onmessage = function (ev) {\n\t    self.onData(ev.data);\n\t  };\n\t  this.ws.onerror = function (e) {\n\t    self.onError('websocket error', e);\n\t  };\n\t};\n\t\n\t/**\n\t * Writes data to socket.\n\t *\n\t * @param {Array} array of packets.\n\t * @api private\n\t */\n\t\n\tWS.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t\n\t  // encodePacket efficient as it uses WS framing\n\t  // no need for encodePayload\n\t  var total = packets.length;\n\t  for (var i = 0, l = total; i < l; i++) {\n\t    (function (packet) {\n\t      parser.encodePacket(packet, self.supportsBinary, function (data) {\n\t        if (!self.usingBrowserWebSocket) {\n\t          // always create a new object (GH-437)\n\t          var opts = {};\n\t          if (packet.options) {\n\t            opts.compress = packet.options.compress;\n\t          }\n\t\n\t          if (self.perMessageDeflate) {\n\t            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n\t            if (len < self.perMessageDeflate.threshold) {\n\t              opts.compress = false;\n\t            }\n\t          }\n\t        }\n\t\n\t        // Sometimes the websocket has already been closed but the browser didn't\n\t        // have a chance of informing us about it yet, in that case send will\n\t        // throw an error\n\t        try {\n\t          if (self.usingBrowserWebSocket) {\n\t            // TypeError is thrown when passing the second argument on Safari\n\t            self.ws.send(data);\n\t          } else {\n\t            self.ws.send(data, opts);\n\t          }\n\t        } catch (e) {\n\t          debug('websocket closed before onclose event');\n\t        }\n\t\n\t        --total || done();\n\t      });\n\t    })(packets[i]);\n\t  }\n\t\n\t  function done () {\n\t    self.emit('flush');\n\t\n\t    // fake drain\n\t    // defer to next tick to allow Socket to clear writeBuffer\n\t    setTimeout(function () {\n\t      self.writable = true;\n\t      self.emit('drain');\n\t    }, 0);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon close\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.onClose = function () {\n\t  Transport.prototype.onClose.call(this);\n\t};\n\t\n\t/**\n\t * Closes socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doClose = function () {\n\t  if (typeof this.ws !== 'undefined') {\n\t    this.ws.close();\n\t  }\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'wss' : 'ws';\n\t  var port = '';\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n\t    ('ws' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // append timestamp to URI\n\t  if (this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  // communicate binary support capabilities\n\t  if (!this.supportsBinary) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\t\n\t/**\n\t * Feature detection for WebSocket.\n\t *\n\t * @return {Boolean} whether this transport is available.\n\t * @api public\n\t */\n\t\n\tWS.prototype.check = function () {\n\t  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n\t};\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\n\t/* (ignored) */\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\n\t\n\tvar indexOf = [].indexOf;\n\t\n\tmodule.exports = function(arr, obj){\n\t  if (indexOf) return arr.indexOf(obj);\n\t  for (var i = 0; i < arr.length; ++i) {\n\t    if (arr[i] === obj) return i;\n\t  }\n\t  return -1;\n\t};\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(7);\n\tvar Emitter = __webpack_require__(11);\n\tvar toArray = __webpack_require__(40);\n\tvar on = __webpack_require__(41);\n\tvar bind = __webpack_require__(42);\n\tvar debug = __webpack_require__(3)('socket.io-client:socket');\n\tvar parseqs = __webpack_require__(32);\n\tvar hasBin = __webpack_require__(26);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = Socket;\n\t\n\t/**\n\t * Internal events (blacklisted).\n\t * These events can't be emitted by the user.\n\t *\n\t * @api private\n\t */\n\t\n\tvar events = {\n\t  connect: 1,\n\t  connect_error: 1,\n\t  connect_timeout: 1,\n\t  connecting: 1,\n\t  disconnect: 1,\n\t  error: 1,\n\t  reconnect: 1,\n\t  reconnect_attempt: 1,\n\t  reconnect_failed: 1,\n\t  reconnect_error: 1,\n\t  reconnecting: 1,\n\t  ping: 1,\n\t  pong: 1\n\t};\n\t\n\t/**\n\t * Shortcut to `Emitter#emit`.\n\t */\n\t\n\tvar emit = Emitter.prototype.emit;\n\t\n\t/**\n\t * `Socket` constructor.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Socket (io, nsp, opts) {\n\t  this.io = io;\n\t  this.nsp = nsp;\n\t  this.json = this; // compat\n\t  this.ids = 0;\n\t  this.acks = {};\n\t  this.receiveBuffer = [];\n\t  this.sendBuffer = [];\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  this.flags = {};\n\t  if (opts && opts.query) {\n\t    this.query = opts.query;\n\t  }\n\t  if (this.io.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Subscribe to open, close and packet events\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.subEvents = function () {\n\t  if (this.subs) return;\n\t\n\t  var io = this.io;\n\t  this.subs = [\n\t    on(io, 'open', bind(this, 'onopen')),\n\t    on(io, 'packet', bind(this, 'onpacket')),\n\t    on(io, 'close', bind(this, 'onclose'))\n\t  ];\n\t};\n\t\n\t/**\n\t * \"Opens\" the socket.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.open =\n\tSocket.prototype.connect = function () {\n\t  if (this.connected) return this;\n\t\n\t  this.subEvents();\n\t  this.io.open(); // ensure open\n\t  if ('open' === this.io.readyState) this.onopen();\n\t  this.emit('connecting');\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a `message` event.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.send = function () {\n\t  var args = toArray(arguments);\n\t  args.unshift('message');\n\t  this.emit.apply(this, args);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Override `emit`.\n\t * If the event is in `events`, it's emitted normally.\n\t *\n\t * @param {String} event name\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.emit = function (ev) {\n\t  if (events.hasOwnProperty(ev)) {\n\t    emit.apply(this, arguments);\n\t    return this;\n\t  }\n\t\n\t  var args = toArray(arguments);\n\t  var packet = {\n\t    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n\t    data: args\n\t  };\n\t\n\t  packet.options = {};\n\t  packet.options.compress = !this.flags || false !== this.flags.compress;\n\t\n\t  // event ack callback\n\t  if ('function' === typeof args[args.length - 1]) {\n\t    debug('emitting packet with ack id %d', this.ids);\n\t    this.acks[this.ids] = args.pop();\n\t    packet.id = this.ids++;\n\t  }\n\t\n\t  if (this.connected) {\n\t    this.packet(packet);\n\t  } else {\n\t    this.sendBuffer.push(packet);\n\t  }\n\t\n\t  this.flags = {};\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.packet = function (packet) {\n\t  packet.nsp = this.nsp;\n\t  this.io.packet(packet);\n\t};\n\t\n\t/**\n\t * Called upon engine `open`.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onopen = function () {\n\t  debug('transport is open - connecting');\n\t\n\t  // write connect packet if necessary\n\t  if ('/' !== this.nsp) {\n\t    if (this.query) {\n\t      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\t      debug('sending connect packet with query %s', query);\n\t      this.packet({type: parser.CONNECT, query: query});\n\t    } else {\n\t      this.packet({type: parser.CONNECT});\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon engine `close`.\n\t *\n\t * @param {String} reason\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onclose = function (reason) {\n\t  debug('close (%s)', reason);\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  delete this.id;\n\t  this.emit('disconnect', reason);\n\t};\n\t\n\t/**\n\t * Called with socket packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onpacket = function (packet) {\n\t  var sameNamespace = packet.nsp === this.nsp;\n\t  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\t\n\t  if (!sameNamespace && !rootNamespaceError) return;\n\t\n\t  switch (packet.type) {\n\t    case parser.CONNECT:\n\t      this.onconnect();\n\t      break;\n\t\n\t    case parser.EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.BINARY_EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.BINARY_ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.DISCONNECT:\n\t      this.ondisconnect();\n\t      break;\n\t\n\t    case parser.ERROR:\n\t      this.emit('error', packet.data);\n\t      break;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon a server event.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onevent = function (packet) {\n\t  var args = packet.data || [];\n\t  debug('emitting event %j', args);\n\t\n\t  if (null != packet.id) {\n\t    debug('attaching ack callback to event');\n\t    args.push(this.ack(packet.id));\n\t  }\n\t\n\t  if (this.connected) {\n\t    emit.apply(this, args);\n\t  } else {\n\t    this.receiveBuffer.push(args);\n\t  }\n\t};\n\t\n\t/**\n\t * Produces an ack callback to emit with an event.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ack = function (id) {\n\t  var self = this;\n\t  var sent = false;\n\t  return function () {\n\t    // prevent double callbacks\n\t    if (sent) return;\n\t    sent = true;\n\t    var args = toArray(arguments);\n\t    debug('sending ack %j', args);\n\t\n\t    self.packet({\n\t      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n\t      id: id,\n\t      data: args\n\t    });\n\t  };\n\t};\n\t\n\t/**\n\t * Called upon a server acknowlegement.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onack = function (packet) {\n\t  var ack = this.acks[packet.id];\n\t  if ('function' === typeof ack) {\n\t    debug('calling ack %s with %j', packet.id, packet.data);\n\t    ack.apply(this, packet.data);\n\t    delete this.acks[packet.id];\n\t  } else {\n\t    debug('bad ack %s', packet.id);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon server connect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onconnect = function () {\n\t  this.connected = true;\n\t  this.disconnected = false;\n\t  this.emit('connect');\n\t  this.emitBuffered();\n\t};\n\t\n\t/**\n\t * Emit buffered events (received and emitted).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.emitBuffered = function () {\n\t  var i;\n\t  for (i = 0; i < this.receiveBuffer.length; i++) {\n\t    emit.apply(this, this.receiveBuffer[i]);\n\t  }\n\t  this.receiveBuffer = [];\n\t\n\t  for (i = 0; i < this.sendBuffer.length; i++) {\n\t    this.packet(this.sendBuffer[i]);\n\t  }\n\t  this.sendBuffer = [];\n\t};\n\t\n\t/**\n\t * Called upon server disconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ondisconnect = function () {\n\t  debug('server disconnect (%s)', this.nsp);\n\t  this.destroy();\n\t  this.onclose('io server disconnect');\n\t};\n\t\n\t/**\n\t * Called upon forced client/server side disconnections,\n\t * this method ensures the manager stops tracking us and\n\t * that reconnections don't get triggered for this.\n\t *\n\t * @api private.\n\t */\n\t\n\tSocket.prototype.destroy = function () {\n\t  if (this.subs) {\n\t    // clean subscriptions to avoid reconnections\n\t    for (var i = 0; i < this.subs.length; i++) {\n\t      this.subs[i].destroy();\n\t    }\n\t    this.subs = null;\n\t  }\n\t\n\t  this.io.destroy(this);\n\t};\n\t\n\t/**\n\t * Disconnects the socket manually.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.close =\n\tSocket.prototype.disconnect = function () {\n\t  if (this.connected) {\n\t    debug('performing disconnect (%s)', this.nsp);\n\t    this.packet({ type: parser.DISCONNECT });\n\t  }\n\t\n\t  // remove socket from pool\n\t  this.destroy();\n\t\n\t  if (this.connected) {\n\t    // fire events\n\t    this.onclose('io client disconnect');\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the compress flag.\n\t *\n\t * @param {Boolean} if `true`, compresses the sending data\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.compress = function (compress) {\n\t  this.flags.compress = compress;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the binary flag\n\t *\n\t * @param {Boolean} whether the emitted data contains binary\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.binary = function (binary) {\n\t  this.flags.binary = binary;\n\t  return this;\n\t};\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = toArray\n\t\n\tfunction toArray(list, index) {\n\t    var array = []\n\t\n\t    index = index || 0\n\t\n\t    for (var i = index || 0; i < list.length; i++) {\n\t        array[i - index] = list[i]\n\t    }\n\t\n\t    return array\n\t}\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = on;\n\t\n\t/**\n\t * Helper for subscriptions.\n\t *\n\t * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n\t * @param {String} event name\n\t * @param {Function} callback\n\t * @api public\n\t */\n\t\n\tfunction on (obj, ev, fn) {\n\t  obj.on(ev, fn);\n\t  return {\n\t    destroy: function () {\n\t      obj.removeListener(ev, fn);\n\t    }\n\t  };\n\t}\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Slice reference.\n\t */\n\t\n\tvar slice = [].slice;\n\t\n\t/**\n\t * Bind `obj` to `fn`.\n\t *\n\t * @param {Object} obj\n\t * @param {Function|String} fn or string\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(obj, fn){\n\t  if ('string' == typeof fn) fn = obj[fn];\n\t  if ('function' != typeof fn) throw new Error('bind() requires a function');\n\t  var args = slice.call(arguments, 2);\n\t  return function(){\n\t    return fn.apply(obj, args.concat(slice.call(arguments)));\n\t  }\n\t};\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Expose `Backoff`.\n\t */\n\t\n\tmodule.exports = Backoff;\n\t\n\t/**\n\t * Initialize backoff timer with `opts`.\n\t *\n\t * - `min` initial timeout in milliseconds [100]\n\t * - `max` max timeout [10000]\n\t * - `jitter` [0]\n\t * - `factor` [2]\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction Backoff(opts) {\n\t  opts = opts || {};\n\t  this.ms = opts.min || 100;\n\t  this.max = opts.max || 10000;\n\t  this.factor = opts.factor || 2;\n\t  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n\t  this.attempts = 0;\n\t}\n\t\n\t/**\n\t * Return the backoff duration.\n\t *\n\t * @return {Number}\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.duration = function(){\n\t  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n\t  if (this.jitter) {\n\t    var rand =  Math.random();\n\t    var deviation = Math.floor(rand * this.jitter * ms);\n\t    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n\t  }\n\t  return Math.min(ms, this.max) | 0;\n\t};\n\t\n\t/**\n\t * Reset the number of attempts.\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.reset = function(){\n\t  this.attempts = 0;\n\t};\n\t\n\t/**\n\t * Set the minimum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMin = function(min){\n\t  this.ms = min;\n\t};\n\t\n\t/**\n\t * Set the maximum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMax = function(max){\n\t  this.max = max;\n\t};\n\t\n\t/**\n\t * Set the jitter\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setJitter = function(jitter){\n\t  this.jitter = jitter;\n\t};\n\t\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// socket.io.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9e45fccfabd75c66dd47","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/index.js\n// module id = 0\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/url.js\n// module id = 1\n// module chunks = 0","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\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\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\nfunction log(...args) {\n\t// This hackery is required for IE8/9, where\n\t// the `console.log` function doesn't have 'apply'\n\treturn typeof console === 'object' &&\n\t\tconsole.log &&\n\t\tconsole.log(...args);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\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\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/browser.js","// 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;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 4\n// module chunks = 0","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* Active `debug` instances.\n\t*/\n\tcreateDebug.instances = [];\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.enabled = createDebug.enabled(namespace);\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = selectColor(namespace);\n\t\tdebug.destroy = destroy;\n\t\tdebug.extend = extend;\n\t\t// Debug.formatArgs = formatArgs;\n\t\t// debug.rawLog = rawLog;\n\n\t\t// env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\tcreateDebug.instances.push(debug);\n\n\t\treturn debug;\n\t}\n\n\tfunction destroy() {\n\t\tconst index = createDebug.instances.indexOf(this);\n\t\tif (index !== -1) {\n\t\t\tcreateDebug.instances.splice(index, 1);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < createDebug.instances.length; i++) {\n\t\t\tconst instance = createDebug.instances[i];\n\t\t\tinstance.enabled = createDebug.enabled(instance.namespace);\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n\n\n\n// WEBPACK FOOTER //\n// ./~/debug/src/common.js","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\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' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\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 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\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  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= 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  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ms/index.js\n// module id = 6\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 7\n// module chunks = 0","/**\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  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\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  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\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' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\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  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\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;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\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-zA-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}\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 (!r && typeof process !== 'undefined' && 'env' in 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\n\n// WEBPACK FOOTER //\n// ./~/socket.io-parser/~/debug/src/browser.js","\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 = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\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, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % 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 createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\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    // turn the `arguments` into a proper Array\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.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-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 (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\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  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (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  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\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  if (name[name.length - 1] === '*') {\n    return true;\n  }\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\n\n// WEBPACK FOOTER //\n// ./~/socket.io-parser/~/debug/src/debug.js","/**\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 ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\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(\n    str\n  );\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/~/ms/index.js\n// module id = 10\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 11\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 12\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 13\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 14\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/manager.js\n// module id = 15\n// module chunks = 0","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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(JSON.parse(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 18\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('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 self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 19\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 20\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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 && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 21\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 22\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 23\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 24\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 25\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 26\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 27\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 28\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 29\n// module chunks = 0","/*\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 30\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 31\n// module chunks = 0","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 32\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 33\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 34\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('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 * Until https://github.com/tc39/proposal-global is shipped.\n */\nfunction glob () {\n  return typeof self !== 'undefined' ? self\n      : typeof window !== 'undefined' ? window\n      : typeof global !== 'undefined' ? global : {};\n}\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    var global = glob();\n    callbacks = global.___eio = (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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 35\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\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  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 36\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 38\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/socket.js\n// module id = 39\n// module chunks = 0","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 40\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/on.js\n// module id = 41\n// module chunks = 0","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 42\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 43\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///socket.io.js","webpack:///webpack/bootstrap 841e359d3e4df861c732","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./~/debug/src/browser.js","webpack:///./~/process/browser.js","webpack:///./~/debug/src/debug.js","webpack:///./~/ms/index.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/globalThis.browser.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","lookup","uri","opts","undefined","io","parsed","url","source","path","sameNamespace","cache","nsps","newConnection","forceNew","multiplex","debug","Manager","query","socket","parser","managers","protocol","connect","Socket","loc","obj","location","host","charAt","test","parseuri","port","ipv6","indexOf","href","pathNames","regx","names","replace","split","substr","length","splice","queryKey","data","$0","$1","$2","re","parts","str","src","b","e","substring","exec","i","authority","ipv6uri","process","useColors","window","type","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","formatArgs","args","namespace","humanize","diff","color","index","lastC","log","_typeof","Function","prototype","apply","arguments","save","namespaces","storage","removeItem","load","r","env","DEBUG","localstorage","localStorage","Symbol","iterator","constructor","chrome","local","colors","formatters","j","v","JSON","stringify","err","message","enable","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","nextTick","Array","push","title","browser","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","selectColor","hash","charCodeAt","Math","abs","createDebug","enabled","self","curr","Date","ms","prevTime","prev","coerce","unshift","format","formatter","val","logFn","bind","destroy","init","instances","skips","instance","disable","stack","parse","String","n","parseFloat","y","d","h","s","fmtShort","round","fmtLong","plural","floor","ceil","options","isNaN","Encoder","encodeAsString","BINARY_EVENT","BINARY_ACK","attachments","nsp","payload","tryStringify","ERROR_PACKET","encodeAsBinary","callback","writeEncoding","bloblessData","deconstruction","binary","deconstructPacket","pack","packet","buffers","removeBlobs","Decoder","reconstructor","decodeString","Number","types","error","buf","next","tryParse","isPayloadValid","ERROR","isArray","BinaryReconstructor","reconPack","msg","Emitter","isBuf","CONNECT","DISCONNECT","EVENT","ACK","encode","encoding","add","base64","takeBinaryData","finishedReconstruction","binData","reconstructPacket","mixin","key","addEventListener","event","fn","_callbacks","removeEventListener","callbacks","cb","slice","hasListeners","_deconstructPacket","placeholder","_placeholder","num","newData","_reconstructPacket","toString","Object","withNativeBlob","Blob","withNativeFile","File","packetData","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","FileReader","onload","result","readAsArrayBuffer","arr","withNativeBuffer","Buffer","isBuffer","withNativeArrayBuffer","ArrayBuffer","isView","buffer","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","readyState","connecting","lastPing","packetBuffer","_parser","encoder","decoder","autoConnect","open","eio","has","hasOwnProperty","emitAll","updateSocketIds","generateId","engine","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","skipReconnect","openSub","onopen","errorSub","cleanup","timer","close","onping","onpong","ondata","ondecoded","onerror","onConnecting","encodedPackets","write","processPacketQueue","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","hostname","secure","agent","parseqs","decode","upgrade","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transports","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ca","ciphers","rejectUnauthorized","forceNode","isReactNative","product","extraHeaders","keys","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","clone","o","priorWebsocketSuccess","Transport","createTransport","EIO","transport","sid","requestTimeout","protocols","setTransport","onDrain","onPacket","onError","onClose","probe","onTransportOpen","upgradeLosesBinary","supportsBinary","failed","send","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","to","onOpen","l","onHandshake","setPing","code","filterUpgrades","onHeartbeat","ping","sendPacket","writable","compress","cleanupAndClose","waitForUpgrade","desc","filteredUpgrades","polling","xhr","xd","xs","isSSL","xdomain","xscheme","XMLHttpRequest","XHR","JSONP","websocket","hasCORS","globalThis","XDomainRequest","join","empty","Polling","Request","method","async","isBinary","create","unloadHandler","requests","abort","inherit","request","doWrite","req","sendXhr","doPoll","onData","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","onLoad","responseText","onreadystatechange","contentType","getResponseHeader","responseType","status","requestsCount","onSuccess","fromError","response","attachEvent","terminationEvent","hasXHR2","yeast","doOpen","poll","onPause","total","decodePayload","doClose","packets","callbackfn","encodePayload","schema","b64","description","decodePacket","encodeBase64Object","encodeArrayBuffer","encodeBase64Packet","contentArray","Uint8Array","resultBuffer","byteLength","encodeBlobAsArrayBuffer","fr","encodePacket","encodeBlob","dontSendBlobs","blob","tryDecode","utf8","strict","map","ary","each","done","after","eachWithIndex","el","base64encoder","hasBinary","sliceBuffer","isAndroid","isPhantomJS","pong","packetslist","utf8encode","encoded","readAsDataURL","b64data","fromCharCode","typed","basic","btoa","utf8decode","decodeBase64Packet","asArray","rest","setLengthHeader","encodeOne","doneCallback","encodePayloadAsBlob","encodePayloadAsArrayBuffer","results","decodePayloadAsBinary","chr","ret","totalLength","reduce","acc","resultArray","bufferIndex","forEach","isString","ab","view","lenStr","binaryIdentifier","size","lengthAry","bufferTail","tailArray","msgLength","toJSON","arraybuffer","start","end","bytes","abv","ii","count","err_cb","proxy","bail","ucs2decode","string","value","extra","output","counter","ucs2encode","stringFromCharCode","checkScalarValue","codePoint","toUpperCase","createByte","encodeCodePoint","symbol","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","tmp","chars","encoded1","encoded2","encoded3","encoded4","bufferLength","mapArrayBufferViews","chunk","copy","set","byteOffset","BlobBuilderConstructor","bb","BlobBuilder","part","append","getBlob","BlobConstructor","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","a","blobSupportsArrayBufferView","blobBuilderSupported","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","alphabet","decoded","now","seed","JSONPPolling","___eio","script","rNewline","rEscapedNewline","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","isUAgecko","complete","initIframe","html","iframeId","area","className","position","top","left","target","setAttribute","action","submit","WS","usingBrowserWebSocket","BrowserWebSocket","WebSocketImpl","NodeWebSocket","WebSocket","MozWebSocket","check","headers","ws","supports","addEventListeners","onmessage","ev","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","toArray","hasBin","events","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","subEvents","pop","onpacket","rootNamespaceError","onconnect","onevent","onack","ondisconnect","ack","sent","emitBuffered","list","factor","pow","rand","random","deviation"],"mappings":"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","file":"socket.io.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar url = __webpack_require__(1);\n\tvar parser = __webpack_require__(7);\n\tvar Manager = __webpack_require__(12);\n\tvar debug = __webpack_require__(3)('socket.io-client');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = lookup;\n\t\n\t/**\n\t * Managers cache.\n\t */\n\t\n\tvar cache = exports.managers = {};\n\t\n\t/**\n\t * Looks up an existing `Manager` for multiplexing.\n\t * If the user summons:\n\t *\n\t *   `io('http://localhost/a');`\n\t *   `io('http://localhost/b');`\n\t *\n\t * We reuse the existing instance based on same scheme/port/host,\n\t * and we initialize sockets for each namespace.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction lookup (uri, opts) {\n\t  if (typeof uri === 'object') {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t\n\t  opts = opts || {};\n\t\n\t  var parsed = url(uri);\n\t  var source = parsed.source;\n\t  var id = parsed.id;\n\t  var path = parsed.path;\n\t  var sameNamespace = cache[id] && path in cache[id].nsps;\n\t  var newConnection = opts.forceNew || opts['force new connection'] ||\n\t                      false === opts.multiplex || sameNamespace;\n\t\n\t  var io;\n\t\n\t  if (newConnection) {\n\t    debug('ignoring socket cache for %s', source);\n\t    io = Manager(source, opts);\n\t  } else {\n\t    if (!cache[id]) {\n\t      debug('new io instance for %s', source);\n\t      cache[id] = Manager(source, opts);\n\t    }\n\t    io = cache[id];\n\t  }\n\t  if (parsed.query && !opts.query) {\n\t    opts.query = parsed.query;\n\t  }\n\t  return io.socket(parsed.path, opts);\n\t}\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = parser.protocol;\n\t\n\t/**\n\t * `connect`.\n\t *\n\t * @param {String} uri\n\t * @api public\n\t */\n\t\n\texports.connect = lookup;\n\t\n\t/**\n\t * Expose constructors for standalone build.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Manager = __webpack_require__(12);\n\texports.Socket = __webpack_require__(37);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parseuri = __webpack_require__(2);\n\tvar debug = __webpack_require__(3)('socket.io-client:url');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = url;\n\t\n\t/**\n\t * URL parser.\n\t *\n\t * @param {String} url\n\t * @param {Object} An object meant to mimic window.location.\n\t *                 Defaults to window.location.\n\t * @api public\n\t */\n\t\n\tfunction url (uri, loc) {\n\t  var obj = uri;\n\t\n\t  // default to window.location\n\t  loc = loc || (typeof location !== 'undefined' && location);\n\t  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\t\n\t  // relative path support\n\t  if ('string' === typeof uri) {\n\t    if ('/' === uri.charAt(0)) {\n\t      if ('/' === uri.charAt(1)) {\n\t        uri = loc.protocol + uri;\n\t      } else {\n\t        uri = loc.host + uri;\n\t      }\n\t    }\n\t\n\t    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\t      debug('protocol-less url %s', uri);\n\t      if ('undefined' !== typeof loc) {\n\t        uri = loc.protocol + '//' + uri;\n\t      } else {\n\t        uri = 'https://' + uri;\n\t      }\n\t    }\n\t\n\t    // parse\n\t    debug('parse %s', uri);\n\t    obj = parseuri(uri);\n\t  }\n\t\n\t  // make sure we treat `localhost:80` and `localhost` equally\n\t  if (!obj.port) {\n\t    if (/^(http|ws)$/.test(obj.protocol)) {\n\t      obj.port = '80';\n\t    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n\t      obj.port = '443';\n\t    }\n\t  }\n\t\n\t  obj.path = obj.path || '/';\n\t\n\t  var ipv6 = obj.host.indexOf(':') !== -1;\n\t  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\t\n\t  // define unique id\n\t  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n\t  // define href\n\t  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\t\n\t  return obj;\n\t}\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Parses an URI\n\t *\n\t * @author Steven Levithan <stevenlevithan.com> (MIT license)\n\t * @api private\n\t */\n\t\n\tvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\t\n\tvar parts = [\n\t    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n\t];\n\t\n\tmodule.exports = function parseuri(str) {\n\t    var src = str,\n\t        b = str.indexOf('['),\n\t        e = str.indexOf(']');\n\t\n\t    if (b != -1 && e != -1) {\n\t        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n\t    }\n\t\n\t    var m = re.exec(str || ''),\n\t        uri = {},\n\t        i = 14;\n\t\n\t    while (i--) {\n\t        uri[parts[i]] = m[i] || '';\n\t    }\n\t\n\t    if (b != -1 && e != -1) {\n\t        uri.source = src;\n\t        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n\t        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n\t        uri.ipv6uri = true;\n\t    }\n\t\n\t    uri.pathNames = pathNames(uri, uri['path']);\n\t    uri.queryKey = queryKey(uri, uri['query']);\n\t\n\t    return uri;\n\t};\n\t\n\tfunction pathNames(obj, path) {\n\t    var regx = /\\/{2,9}/g,\n\t        names = path.replace(regx, \"/\").split(\"/\");\n\t\n\t    if (path.substr(0, 1) == '/' || path.length === 0) {\n\t        names.splice(0, 1);\n\t    }\n\t    if (path.substr(path.length - 1, 1) == '/') {\n\t        names.splice(names.length - 1, 1);\n\t    }\n\t\n\t    return names;\n\t}\n\t\n\tfunction queryKey(uri, query) {\n\t    var data = {};\n\t\n\t    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n\t        if ($1) {\n\t            data[$1] = $2;\n\t        }\n\t    });\n\t\n\t    return data;\n\t}\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * This is the web browser implementation of `debug()`.\n\t *\n\t * Expose `debug()` as the module.\n\t */\n\t\n\texports = module.exports = __webpack_require__(5);\n\texports.log = log;\n\texports.formatArgs = formatArgs;\n\texports.save = save;\n\texports.load = load;\n\texports.useColors = useColors;\n\texports.storage = 'undefined' != typeof chrome && 'undefined' != typeof chrome.storage ? chrome.storage.local : localstorage();\n\t\n\t/**\n\t * Colors.\n\t */\n\t\n\texports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n\t\n\t/**\n\t * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n\t * and the Firebug extension (any Firefox version) are known\n\t * to support \"%c\" CSS customizations.\n\t *\n\t * TODO: add a `localStorage` variable to explicitly enable/disable colors\n\t */\n\t\n\tfunction useColors() {\n\t  // NB: In an Electron preload script, document will be defined but not fully\n\t  // initialized. Since we know we're in Chrome, we'll just detect this case\n\t  // explicitly\n\t  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n\t    return true;\n\t  }\n\t\n\t  // Internet Explorer and Edge do not support colors.\n\t  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t    return false;\n\t  }\n\t\n\t  // is webkit? http://stackoverflow.com/a/16459606/376773\n\t  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t  return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance ||\n\t  // is firebug? http://stackoverflow.com/a/398120/376773\n\t  typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) ||\n\t  // is firefox >= v31?\n\t  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 ||\n\t  // double check webkit in userAgent just in case we are in a worker\n\t  typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n\t}\n\t\n\t/**\n\t * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n\t */\n\t\n\texports.formatters.j = function (v) {\n\t  try {\n\t    return JSON.stringify(v);\n\t  } catch (err) {\n\t    return '[UnexpectedJSONParseError]: ' + err.message;\n\t  }\n\t};\n\t\n\t/**\n\t * Colorize log arguments if enabled.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction formatArgs(args) {\n\t  var useColors = this.useColors;\n\t\n\t  args[0] = (useColors ? '%c' : '') + this.namespace + (useColors ? ' %c' : ' ') + args[0] + (useColors ? '%c ' : ' ') + '+' + exports.humanize(this.diff);\n\t\n\t  if (!useColors) return;\n\t\n\t  var c = 'color: ' + this.color;\n\t  args.splice(1, 0, c, 'color: inherit');\n\t\n\t  // the final \"%c\" is somewhat tricky, because there could be other\n\t  // arguments passed either before or after the %c, so we need to\n\t  // figure out the correct index to insert the CSS into\n\t  var index = 0;\n\t  var lastC = 0;\n\t  args[0].replace(/%[a-zA-Z%]/g, function (match) {\n\t    if ('%%' === match) return;\n\t    index++;\n\t    if ('%c' === match) {\n\t      // we only are interested in the *last* %c\n\t      // (the user may have provided their own)\n\t      lastC = index;\n\t    }\n\t  });\n\t\n\t  args.splice(lastC, 0, c);\n\t}\n\t\n\t/**\n\t * Invokes `console.log()` when available.\n\t * No-op when `console.log` is not a \"function\".\n\t *\n\t * @api public\n\t */\n\t\n\tfunction log() {\n\t  // this hackery is required for IE8/9, where\n\t  // the `console.log` function doesn't have 'apply'\n\t  return 'object' === (typeof console === 'undefined' ? 'undefined' : _typeof(console)) && console.log && Function.prototype.apply.call(console.log, console, arguments);\n\t}\n\t\n\t/**\n\t * Save `namespaces`.\n\t *\n\t * @param {String} namespaces\n\t * @api private\n\t */\n\t\n\tfunction save(namespaces) {\n\t  try {\n\t    if (null == namespaces) {\n\t      exports.storage.removeItem('debug');\n\t    } else {\n\t      exports.storage.debug = namespaces;\n\t    }\n\t  } catch (e) {}\n\t}\n\t\n\t/**\n\t * Load `namespaces`.\n\t *\n\t * @return {String} returns the previously persisted debug modes\n\t * @api private\n\t */\n\t\n\tfunction load() {\n\t  var r;\n\t  try {\n\t    r = exports.storage.debug;\n\t  } catch (e) {}\n\t\n\t  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\t  if (!r && typeof process !== 'undefined' && 'env' in process) {\n\t    r = process.env.DEBUG;\n\t  }\n\t\n\t  return r;\n\t}\n\t\n\t/**\n\t * Enable namespaces listed in `localStorage.debug` initially.\n\t */\n\t\n\texports.enable(load());\n\t\n\t/**\n\t * Localstorage attempts to return the localstorage.\n\t *\n\t * This is necessary because safari throws\n\t * when a user disables cookies/localstorage\n\t * and you attempt to access it.\n\t *\n\t * @return {LocalStorage}\n\t * @api private\n\t */\n\t\n\tfunction localstorage() {\n\t  try {\n\t    return window.localStorage;\n\t  } catch (e) {}\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things.  But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals.  It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t    throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t    throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t    try {\n\t        if (typeof setTimeout === 'function') {\n\t            cachedSetTimeout = setTimeout;\n\t        } else {\n\t            cachedSetTimeout = defaultSetTimout;\n\t        }\n\t    } catch (e) {\n\t        cachedSetTimeout = defaultSetTimout;\n\t    }\n\t    try {\n\t        if (typeof clearTimeout === 'function') {\n\t            cachedClearTimeout = clearTimeout;\n\t        } else {\n\t            cachedClearTimeout = defaultClearTimeout;\n\t        }\n\t    } catch (e) {\n\t        cachedClearTimeout = defaultClearTimeout;\n\t    }\n\t} ())\n\tfunction runTimeout(fun) {\n\t    if (cachedSetTimeout === setTimeout) {\n\t        //normal enviroments in sane situations\n\t        return setTimeout(fun, 0);\n\t    }\n\t    // if setTimeout wasn't available but was latter defined\n\t    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t        cachedSetTimeout = setTimeout;\n\t        return setTimeout(fun, 0);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedSetTimeout(fun, 0);\n\t    } catch(e){\n\t        try {\n\t            // 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\t            return cachedSetTimeout.call(null, fun, 0);\n\t        } catch(e){\n\t            // 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\t            return cachedSetTimeout.call(this, fun, 0);\n\t        }\n\t    }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t    if (cachedClearTimeout === clearTimeout) {\n\t        //normal enviroments in sane situations\n\t        return clearTimeout(marker);\n\t    }\n\t    // if clearTimeout wasn't available but was latter defined\n\t    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t        cachedClearTimeout = clearTimeout;\n\t        return clearTimeout(marker);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedClearTimeout(marker);\n\t    } catch (e){\n\t        try {\n\t            // 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\t            return cachedClearTimeout.call(null, marker);\n\t        } catch (e){\n\t            // 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\t            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t            return cachedClearTimeout.call(this, marker);\n\t        }\n\t    }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t    if (!draining || !currentQueue) {\n\t        return;\n\t    }\n\t    draining = false;\n\t    if (currentQueue.length) {\n\t        queue = currentQueue.concat(queue);\n\t    } else {\n\t        queueIndex = -1;\n\t    }\n\t    if (queue.length) {\n\t        drainQueue();\n\t    }\n\t}\n\t\n\tfunction drainQueue() {\n\t    if (draining) {\n\t        return;\n\t    }\n\t    var timeout = runTimeout(cleanUpNextTick);\n\t    draining = true;\n\t\n\t    var len = queue.length;\n\t    while(len) {\n\t        currentQueue = queue;\n\t        queue = [];\n\t        while (++queueIndex < len) {\n\t            if (currentQueue) {\n\t                currentQueue[queueIndex].run();\n\t            }\n\t        }\n\t        queueIndex = -1;\n\t        len = queue.length;\n\t    }\n\t    currentQueue = null;\n\t    draining = false;\n\t    runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t    var args = new Array(arguments.length - 1);\n\t    if (arguments.length > 1) {\n\t        for (var i = 1; i < arguments.length; i++) {\n\t            args[i - 1] = arguments[i];\n\t        }\n\t    }\n\t    queue.push(new Item(fun, args));\n\t    if (queue.length === 1 && !draining) {\n\t        runTimeout(drainQueue);\n\t    }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t    this.fun = fun;\n\t    this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t    this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t    throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t    throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * This is the common logic for both the Node.js and web browser\n\t * implementations of `debug()`.\n\t *\n\t * Expose `debug()` as the module.\n\t */\n\t\n\texports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\n\texports.coerce = coerce;\n\texports.disable = disable;\n\texports.enable = enable;\n\texports.enabled = enabled;\n\texports.humanize = __webpack_require__(6);\n\t\n\t/**\n\t * Active `debug` instances.\n\t */\n\texports.instances = [];\n\t\n\t/**\n\t * The currently active debug mode names, and names to skip.\n\t */\n\t\n\texports.names = [];\n\texports.skips = [];\n\t\n\t/**\n\t * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t *\n\t * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t */\n\t\n\texports.formatters = {};\n\t\n\t/**\n\t * Select a color.\n\t * @param {String} namespace\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction selectColor(namespace) {\n\t  var hash = 0,\n\t      i;\n\t\n\t  for (i in namespace) {\n\t    hash = (hash << 5) - hash + namespace.charCodeAt(i);\n\t    hash |= 0; // Convert to 32bit integer\n\t  }\n\t\n\t  return exports.colors[Math.abs(hash) % exports.colors.length];\n\t}\n\t\n\t/**\n\t * Create a debugger with the given `namespace`.\n\t *\n\t * @param {String} namespace\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tfunction createDebug(namespace) {\n\t\n\t  var prevTime;\n\t\n\t  function debug() {\n\t    // disabled?\n\t    if (!debug.enabled) return;\n\t\n\t    var self = debug;\n\t\n\t    // set `diff` timestamp\n\t    var curr = +new Date();\n\t    var ms = curr - (prevTime || curr);\n\t    self.diff = ms;\n\t    self.prev = prevTime;\n\t    self.curr = curr;\n\t    prevTime = curr;\n\t\n\t    // turn the `arguments` into a proper Array\n\t    var args = new Array(arguments.length);\n\t    for (var i = 0; i < args.length; i++) {\n\t      args[i] = arguments[i];\n\t    }\n\t\n\t    args[0] = exports.coerce(args[0]);\n\t\n\t    if ('string' !== typeof args[0]) {\n\t      // anything else let's inspect with %O\n\t      args.unshift('%O');\n\t    }\n\t\n\t    // apply any `formatters` transformations\n\t    var index = 0;\n\t    args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n\t      // if we encounter an escaped % then don't increase the array index\n\t      if (match === '%%') return match;\n\t      index++;\n\t      var formatter = exports.formatters[format];\n\t      if ('function' === typeof formatter) {\n\t        var val = args[index];\n\t        match = formatter.call(self, val);\n\t\n\t        // now we need to remove `args[index]` since it's inlined in the `format`\n\t        args.splice(index, 1);\n\t        index--;\n\t      }\n\t      return match;\n\t    });\n\t\n\t    // apply env-specific formatting (colors, etc.)\n\t    exports.formatArgs.call(self, args);\n\t\n\t    var logFn = debug.log || exports.log || console.log.bind(console);\n\t    logFn.apply(self, args);\n\t  }\n\t\n\t  debug.namespace = namespace;\n\t  debug.enabled = exports.enabled(namespace);\n\t  debug.useColors = exports.useColors();\n\t  debug.color = selectColor(namespace);\n\t  debug.destroy = destroy;\n\t\n\t  // env-specific initialization logic for debug instances\n\t  if ('function' === typeof exports.init) {\n\t    exports.init(debug);\n\t  }\n\t\n\t  exports.instances.push(debug);\n\t\n\t  return debug;\n\t}\n\t\n\tfunction destroy() {\n\t  var index = exports.instances.indexOf(this);\n\t  if (index !== -1) {\n\t    exports.instances.splice(index, 1);\n\t    return true;\n\t  } else {\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Enables a debug mode by namespaces. This can include modes\n\t * separated by a colon and wildcards.\n\t *\n\t * @param {String} namespaces\n\t * @api public\n\t */\n\t\n\tfunction enable(namespaces) {\n\t  exports.save(namespaces);\n\t\n\t  exports.names = [];\n\t  exports.skips = [];\n\t\n\t  var i;\n\t  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t  var len = split.length;\n\t\n\t  for (i = 0; i < len; i++) {\n\t    if (!split[i]) continue; // ignore empty strings\n\t    namespaces = split[i].replace(/\\*/g, '.*?');\n\t    if (namespaces[0] === '-') {\n\t      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t    } else {\n\t      exports.names.push(new RegExp('^' + namespaces + '$'));\n\t    }\n\t  }\n\t\n\t  for (i = 0; i < exports.instances.length; i++) {\n\t    var instance = exports.instances[i];\n\t    instance.enabled = exports.enabled(instance.namespace);\n\t  }\n\t}\n\t\n\t/**\n\t * Disable debug output.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction disable() {\n\t  exports.enable('');\n\t}\n\t\n\t/**\n\t * Returns true if the given mode name is enabled, false otherwise.\n\t *\n\t * @param {String} name\n\t * @return {Boolean}\n\t * @api public\n\t */\n\t\n\tfunction enabled(name) {\n\t  if (name[name.length - 1] === '*') {\n\t    return true;\n\t  }\n\t  var i, len;\n\t  for (i = 0, len = exports.skips.length; i < len; i++) {\n\t    if (exports.skips[i].test(name)) {\n\t      return false;\n\t    }\n\t  }\n\t  for (i = 0, len = exports.names.length; i < len; i++) {\n\t    if (exports.names[i].test(name)) {\n\t      return true;\n\t    }\n\t  }\n\t  return false;\n\t}\n\t\n\t/**\n\t * Coerce `val`.\n\t *\n\t * @param {Mixed} val\n\t * @return {Mixed}\n\t * @api private\n\t */\n\t\n\tfunction coerce(val) {\n\t  if (val instanceof Error) return val.stack || val.message;\n\t  return val;\n\t}\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Helpers.\n\t */\n\t\n\tvar s = 1000;\n\tvar m = s * 60;\n\tvar h = m * 60;\n\tvar d = h * 24;\n\tvar y = d * 365.25;\n\t\n\t/**\n\t * Parse or format the given `val`.\n\t *\n\t * Options:\n\t *\n\t *  - `long` verbose formatting [false]\n\t *\n\t * @param {String|Number} val\n\t * @param {Object} [options]\n\t * @throws {Error} throw an error if val is not a non-empty string or a number\n\t * @return {String|Number}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(val, options) {\n\t  options = options || {};\n\t  var type = typeof val;\n\t  if (type === 'string' && val.length > 0) {\n\t    return parse(val);\n\t  } else if (type === 'number' && isNaN(val) === false) {\n\t    return options.long ? fmtLong(val) : fmtShort(val);\n\t  }\n\t  throw new Error(\n\t    'val is not a non-empty string or a valid number. val=' +\n\t      JSON.stringify(val)\n\t  );\n\t};\n\t\n\t/**\n\t * Parse the given `str` and return milliseconds.\n\t *\n\t * @param {String} str\n\t * @return {Number}\n\t * @api private\n\t */\n\t\n\tfunction parse(str) {\n\t  str = String(str);\n\t  if (str.length > 100) {\n\t    return;\n\t  }\n\t  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n\t    str\n\t  );\n\t  if (!match) {\n\t    return;\n\t  }\n\t  var n = parseFloat(match[1]);\n\t  var type = (match[2] || 'ms').toLowerCase();\n\t  switch (type) {\n\t    case 'years':\n\t    case 'year':\n\t    case 'yrs':\n\t    case 'yr':\n\t    case 'y':\n\t      return n * y;\n\t    case 'days':\n\t    case 'day':\n\t    case 'd':\n\t      return n * d;\n\t    case 'hours':\n\t    case 'hour':\n\t    case 'hrs':\n\t    case 'hr':\n\t    case 'h':\n\t      return n * h;\n\t    case 'minutes':\n\t    case 'minute':\n\t    case 'mins':\n\t    case 'min':\n\t    case 'm':\n\t      return n * m;\n\t    case 'seconds':\n\t    case 'second':\n\t    case 'secs':\n\t    case 'sec':\n\t    case 's':\n\t      return n * s;\n\t    case 'milliseconds':\n\t    case 'millisecond':\n\t    case 'msecs':\n\t    case 'msec':\n\t    case 'ms':\n\t      return n;\n\t    default:\n\t      return undefined;\n\t  }\n\t}\n\t\n\t/**\n\t * Short format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtShort(ms) {\n\t  if (ms >= d) {\n\t    return Math.round(ms / d) + 'd';\n\t  }\n\t  if (ms >= h) {\n\t    return Math.round(ms / h) + 'h';\n\t  }\n\t  if (ms >= m) {\n\t    return Math.round(ms / m) + 'm';\n\t  }\n\t  if (ms >= s) {\n\t    return Math.round(ms / s) + 's';\n\t  }\n\t  return ms + 'ms';\n\t}\n\t\n\t/**\n\t * Long format for `ms`.\n\t *\n\t * @param {Number} ms\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tfunction fmtLong(ms) {\n\t  return plural(ms, d, 'day') ||\n\t    plural(ms, h, 'hour') ||\n\t    plural(ms, m, 'minute') ||\n\t    plural(ms, s, 'second') ||\n\t    ms + ' ms';\n\t}\n\t\n\t/**\n\t * Pluralization helper.\n\t */\n\t\n\tfunction plural(ms, n, name) {\n\t  if (ms < n) {\n\t    return;\n\t  }\n\t  if (ms < n * 1.5) {\n\t    return Math.floor(ms / n) + ' ' + name;\n\t  }\n\t  return Math.ceil(ms / n) + ' ' + name + 's';\n\t}\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar debug = __webpack_require__(3)('socket.io-parser');\n\tvar Emitter = __webpack_require__(8);\n\tvar binary = __webpack_require__(9);\n\tvar isArray = __webpack_require__(10);\n\tvar isBuf = __webpack_require__(11);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = 4;\n\t\n\t/**\n\t * Packet types.\n\t *\n\t * @api public\n\t */\n\t\n\texports.types = [\n\t  'CONNECT',\n\t  'DISCONNECT',\n\t  'EVENT',\n\t  'ACK',\n\t  'ERROR',\n\t  'BINARY_EVENT',\n\t  'BINARY_ACK'\n\t];\n\t\n\t/**\n\t * Packet type `connect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.CONNECT = 0;\n\t\n\t/**\n\t * Packet type `disconnect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.DISCONNECT = 1;\n\t\n\t/**\n\t * Packet type `event`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.EVENT = 2;\n\t\n\t/**\n\t * Packet type `ack`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ACK = 3;\n\t\n\t/**\n\t * Packet type `error`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ERROR = 4;\n\t\n\t/**\n\t * Packet type 'binary event'\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_EVENT = 5;\n\t\n\t/**\n\t * Packet type `binary ack`. For acks with binary arguments.\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_ACK = 6;\n\t\n\t/**\n\t * Encoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Encoder = Encoder;\n\t\n\t/**\n\t * Decoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Decoder = Decoder;\n\t\n\t/**\n\t * A socket.io Encoder instance\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Encoder() {}\n\t\n\tvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\t\n\t/**\n\t * Encode a packet as a single string if non-binary, or as a\n\t * buffer sequence, depending on packet type.\n\t *\n\t * @param {Object} obj - packet object\n\t * @param {Function} callback - function to handle encodings (likely engine.write)\n\t * @return Calls callback with Array of encodings\n\t * @api public\n\t */\n\t\n\tEncoder.prototype.encode = function(obj, callback){\n\t  debug('encoding packet %j', obj);\n\t\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    encodeAsBinary(obj, callback);\n\t  } else {\n\t    var encoding = encodeAsString(obj);\n\t    callback([encoding]);\n\t  }\n\t};\n\t\n\t/**\n\t * Encode packet as string.\n\t *\n\t * @param {Object} packet\n\t * @return {String} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsString(obj) {\n\t\n\t  // first is type\n\t  var str = '' + obj.type;\n\t\n\t  // attachments if we have them\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    str += obj.attachments + '-';\n\t  }\n\t\n\t  // if we have a namespace other than `/`\n\t  // we append it followed by a comma `,`\n\t  if (obj.nsp && '/' !== obj.nsp) {\n\t    str += obj.nsp + ',';\n\t  }\n\t\n\t  // immediately followed by the id\n\t  if (null != obj.id) {\n\t    str += obj.id;\n\t  }\n\t\n\t  // json data\n\t  if (null != obj.data) {\n\t    var payload = tryStringify(obj.data);\n\t    if (payload !== false) {\n\t      str += payload;\n\t    } else {\n\t      return ERROR_PACKET;\n\t    }\n\t  }\n\t\n\t  debug('encoded %j as %s', obj, str);\n\t  return str;\n\t}\n\t\n\tfunction tryStringify(str) {\n\t  try {\n\t    return JSON.stringify(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Encode packet as 'buffer sequence' by removing blobs, and\n\t * deconstructing packet into object with placeholders and\n\t * a list of buffers.\n\t *\n\t * @param {Object} packet\n\t * @return {Buffer} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsBinary(obj, callback) {\n\t\n\t  function writeEncoding(bloblessData) {\n\t    var deconstruction = binary.deconstructPacket(bloblessData);\n\t    var pack = encodeAsString(deconstruction.packet);\n\t    var buffers = deconstruction.buffers;\n\t\n\t    buffers.unshift(pack); // add packet info to beginning of data list\n\t    callback(buffers); // write all the buffers\n\t  }\n\t\n\t  binary.removeBlobs(obj, writeEncoding);\n\t}\n\t\n\t/**\n\t * A socket.io Decoder instance\n\t *\n\t * @return {Object} decoder\n\t * @api public\n\t */\n\t\n\tfunction Decoder() {\n\t  this.reconstructor = null;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter` with Decoder.\n\t */\n\t\n\tEmitter(Decoder.prototype);\n\t\n\t/**\n\t * Decodes an encoded packet string into packet JSON.\n\t *\n\t * @param {String} obj - encoded packet\n\t * @return {Object} packet\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.add = function(obj) {\n\t  var packet;\n\t  if (typeof obj === 'string') {\n\t    packet = decodeString(obj);\n\t    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n\t      this.reconstructor = new BinaryReconstructor(packet);\n\t\n\t      // no attachments, labeled binary but no binary data to follow\n\t      if (this.reconstructor.reconPack.attachments === 0) {\n\t        this.emit('decoded', packet);\n\t      }\n\t    } else { // non-binary full packet\n\t      this.emit('decoded', packet);\n\t    }\n\t  } else if (isBuf(obj) || obj.base64) { // raw binary data\n\t    if (!this.reconstructor) {\n\t      throw new Error('got binary data when not reconstructing a packet');\n\t    } else {\n\t      packet = this.reconstructor.takeBinaryData(obj);\n\t      if (packet) { // received final buffer\n\t        this.reconstructor = null;\n\t        this.emit('decoded', packet);\n\t      }\n\t    }\n\t  } else {\n\t    throw new Error('Unknown type: ' + obj);\n\t  }\n\t};\n\t\n\t/**\n\t * Decode a packet String (JSON data)\n\t *\n\t * @param {String} str\n\t * @return {Object} packet\n\t * @api private\n\t */\n\t\n\tfunction decodeString(str) {\n\t  var i = 0;\n\t  // look up type\n\t  var p = {\n\t    type: Number(str.charAt(0))\n\t  };\n\t\n\t  if (null == exports.types[p.type]) {\n\t    return error('unknown packet type ' + p.type);\n\t  }\n\t\n\t  // look up attachments if type binary\n\t  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n\t    var buf = '';\n\t    while (str.charAt(++i) !== '-') {\n\t      buf += str.charAt(i);\n\t      if (i == str.length) break;\n\t    }\n\t    if (buf != Number(buf) || str.charAt(i) !== '-') {\n\t      throw new Error('Illegal attachments');\n\t    }\n\t    p.attachments = Number(buf);\n\t  }\n\t\n\t  // look up namespace (if any)\n\t  if ('/' === str.charAt(i + 1)) {\n\t    p.nsp = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (',' === c) break;\n\t      p.nsp += c;\n\t      if (i === str.length) break;\n\t    }\n\t  } else {\n\t    p.nsp = '/';\n\t  }\n\t\n\t  // look up id\n\t  var next = str.charAt(i + 1);\n\t  if ('' !== next && Number(next) == next) {\n\t    p.id = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (null == c || Number(c) != c) {\n\t        --i;\n\t        break;\n\t      }\n\t      p.id += str.charAt(i);\n\t      if (i === str.length) break;\n\t    }\n\t    p.id = Number(p.id);\n\t  }\n\t\n\t  // look up json data\n\t  if (str.charAt(++i)) {\n\t    var payload = tryParse(str.substr(i));\n\t    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n\t    if (isPayloadValid) {\n\t      p.data = payload;\n\t    } else {\n\t      return error('invalid payload');\n\t    }\n\t  }\n\t\n\t  debug('decoded %s as %j', str, p);\n\t  return p;\n\t}\n\t\n\tfunction tryParse(str) {\n\t  try {\n\t    return JSON.parse(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Deallocates a parser's resources\n\t *\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.destroy = function() {\n\t  if (this.reconstructor) {\n\t    this.reconstructor.finishedReconstruction();\n\t  }\n\t};\n\t\n\t/**\n\t * A manager of a binary event's 'buffer sequence'. Should\n\t * be constructed whenever a packet of type BINARY_EVENT is\n\t * decoded.\n\t *\n\t * @param {Object} packet\n\t * @return {BinaryReconstructor} initialized reconstructor\n\t * @api private\n\t */\n\t\n\tfunction BinaryReconstructor(packet) {\n\t  this.reconPack = packet;\n\t  this.buffers = [];\n\t}\n\t\n\t/**\n\t * Method to be called when binary data received from connection\n\t * after a BINARY_EVENT packet.\n\t *\n\t * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n\t * @return {null | Object} returns null if more binary data is expected or\n\t *   a reconstructed packet object if all buffers have been received.\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n\t  this.buffers.push(binData);\n\t  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n\t    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n\t    this.finishedReconstruction();\n\t    return packet;\n\t  }\n\t  return null;\n\t};\n\t\n\t/**\n\t * Cleans up binary packet reconstruction variables.\n\t *\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.finishedReconstruction = function() {\n\t  this.reconPack = null;\n\t  this.buffers = [];\n\t};\n\t\n\tfunction error(msg) {\n\t  return {\n\t    type: exports.ERROR,\n\t    data: 'parser error: ' + msg\n\t  };\n\t}\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\r\n\t/**\r\n\t * Expose `Emitter`.\r\n\t */\r\n\t\r\n\tif (true) {\r\n\t  module.exports = Emitter;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialize a new `Emitter`.\r\n\t *\r\n\t * @api public\r\n\t */\r\n\t\r\n\tfunction Emitter(obj) {\r\n\t  if (obj) return mixin(obj);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Mixin the emitter properties.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\tfunction mixin(obj) {\r\n\t  for (var key in Emitter.prototype) {\r\n\t    obj[key] = Emitter.prototype[key];\r\n\t  }\r\n\t  return obj;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Listen on the given `event` with `fn`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.on =\r\n\tEmitter.prototype.addEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n\t    .push(fn);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds an `event` listener that will be invoked a single\r\n\t * time then automatically removed.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.once = function(event, fn){\r\n\t  function on() {\r\n\t    this.off(event, on);\r\n\t    fn.apply(this, arguments);\r\n\t  }\r\n\t\r\n\t  on.fn = fn;\r\n\t  this.on(event, on);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Remove the given callback for `event` or all\r\n\t * registered callbacks.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.off =\r\n\tEmitter.prototype.removeListener =\r\n\tEmitter.prototype.removeAllListeners =\r\n\tEmitter.prototype.removeEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  // all\r\n\t  if (0 == arguments.length) {\r\n\t    this._callbacks = {};\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // specific event\r\n\t  var callbacks = this._callbacks['$' + event];\r\n\t  if (!callbacks) return this;\r\n\t\r\n\t  // remove all handlers\r\n\t  if (1 == arguments.length) {\r\n\t    delete this._callbacks['$' + event];\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // remove specific handler\r\n\t  var cb;\r\n\t  for (var i = 0; i < callbacks.length; i++) {\r\n\t    cb = callbacks[i];\r\n\t    if (cb === fn || cb.fn === fn) {\r\n\t      callbacks.splice(i, 1);\r\n\t      break;\r\n\t    }\r\n\t  }\r\n\t\r\n\t  // Remove event specific arrays for event types that no\r\n\t  // one is subscribed for to avoid memory leak.\r\n\t  if (callbacks.length === 0) {\r\n\t    delete this._callbacks['$' + event];\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Emit `event` with the given args.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Mixed} ...\r\n\t * @return {Emitter}\r\n\t */\r\n\t\r\n\tEmitter.prototype.emit = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  var args = new Array(arguments.length - 1)\r\n\t    , callbacks = this._callbacks['$' + event];\r\n\t\r\n\t  for (var i = 1; i < arguments.length; i++) {\r\n\t    args[i - 1] = arguments[i];\r\n\t  }\r\n\t\r\n\t  if (callbacks) {\r\n\t    callbacks = callbacks.slice(0);\r\n\t    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n\t      callbacks[i].apply(this, args);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Return array of callbacks for `event`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Array}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.listeners = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  return this._callbacks['$' + event] || [];\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if this emitter has `event` handlers.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Boolean}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.hasListeners = function(event){\r\n\t  return !! this.listeners(event).length;\r\n\t};\r\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*global Blob,File*/\n\t\n\t/**\n\t * Module requirements\n\t */\n\t\n\tvar isArray = __webpack_require__(10);\n\tvar isBuf = __webpack_require__(11);\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\n\tvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\t\n\t/**\n\t * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n\t * Anything with blobs or files should be fed through removeBlobs before coming\n\t * here.\n\t *\n\t * @param {Object} packet - socket.io event packet\n\t * @return {Object} with deconstructed packet and list of buffers\n\t * @api public\n\t */\n\t\n\texports.deconstructPacket = function(packet) {\n\t  var buffers = [];\n\t  var packetData = packet.data;\n\t  var pack = packet;\n\t  pack.data = _deconstructPacket(packetData, buffers);\n\t  pack.attachments = buffers.length; // number of binary 'attachments'\n\t  return {packet: pack, buffers: buffers};\n\t};\n\t\n\tfunction _deconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (isBuf(data)) {\n\t    var placeholder = { _placeholder: true, num: buffers.length };\n\t    buffers.push(data);\n\t    return placeholder;\n\t  } else if (isArray(data)) {\n\t    var newData = new Array(data.length);\n\t    for (var i = 0; i < data.length; i++) {\n\t      newData[i] = _deconstructPacket(data[i], buffers);\n\t    }\n\t    return newData;\n\t  } else if (typeof data === 'object' && !(data instanceof Date)) {\n\t    var newData = {};\n\t    for (var key in data) {\n\t      newData[key] = _deconstructPacket(data[key], buffers);\n\t    }\n\t    return newData;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Reconstructs a binary packet from its placeholder packet and buffers\n\t *\n\t * @param {Object} packet - event packet with placeholders\n\t * @param {Array} buffers - binary buffers to put in placeholder positions\n\t * @return {Object} reconstructed packet\n\t * @api public\n\t */\n\t\n\texports.reconstructPacket = function(packet, buffers) {\n\t  packet.data = _reconstructPacket(packet.data, buffers);\n\t  packet.attachments = undefined; // no longer useful\n\t  return packet;\n\t};\n\t\n\tfunction _reconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (data && data._placeholder) {\n\t    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n\t  } else if (isArray(data)) {\n\t    for (var i = 0; i < data.length; i++) {\n\t      data[i] = _reconstructPacket(data[i], buffers);\n\t    }\n\t  } else if (typeof data === 'object') {\n\t    for (var key in data) {\n\t      data[key] = _reconstructPacket(data[key], buffers);\n\t    }\n\t  }\n\t\n\t  return data;\n\t}\n\t\n\t/**\n\t * Asynchronously removes Blobs or Files from data via\n\t * FileReader's readAsArrayBuffer method. Used before encoding\n\t * data as msgpack. Calls callback with the blobless data.\n\t *\n\t * @param {Object} data\n\t * @param {Function} callback\n\t * @api private\n\t */\n\t\n\texports.removeBlobs = function(data, callback) {\n\t  function _removeBlobs(obj, curKey, containingObject) {\n\t    if (!obj) return obj;\n\t\n\t    // convert any blob\n\t    if ((withNativeBlob && obj instanceof Blob) ||\n\t        (withNativeFile && obj instanceof File)) {\n\t      pendingBlobs++;\n\t\n\t      // async filereader\n\t      var fileReader = new FileReader();\n\t      fileReader.onload = function() { // this.result == arraybuffer\n\t        if (containingObject) {\n\t          containingObject[curKey] = this.result;\n\t        }\n\t        else {\n\t          bloblessData = this.result;\n\t        }\n\t\n\t        // if nothing pending its callback time\n\t        if(! --pendingBlobs) {\n\t          callback(bloblessData);\n\t        }\n\t      };\n\t\n\t      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n\t    } else if (isArray(obj)) { // handle array\n\t      for (var i = 0; i < obj.length; i++) {\n\t        _removeBlobs(obj[i], i, obj);\n\t      }\n\t    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n\t      for (var key in obj) {\n\t        _removeBlobs(obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t\n\t  var pendingBlobs = 0;\n\t  var bloblessData = data;\n\t  _removeBlobs(bloblessData);\n\t  if (!pendingBlobs) {\n\t    callback(bloblessData);\n\t  }\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = Array.isArray || function (arr) {\n\t  return toString.call(arr) == '[object Array]';\n\t};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = isBuf;\n\t\n\tvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\n\tvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\t\n\tvar isView = function (obj) {\n\t  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n\t};\n\t\n\t/**\n\t * Returns true if obj is a buffer or an arraybuffer.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction isBuf(obj) {\n\t  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n\t          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n\t}\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar eio = __webpack_require__(13);\n\tvar Socket = __webpack_require__(37);\n\tvar Emitter = __webpack_require__(8);\n\tvar parser = __webpack_require__(7);\n\tvar on = __webpack_require__(39);\n\tvar bind = __webpack_require__(40);\n\tvar debug = __webpack_require__(3)('socket.io-client:manager');\n\tvar indexOf = __webpack_require__(36);\n\tvar Backoff = __webpack_require__(41);\n\t\n\t/**\n\t * IE6+ hasOwnProperty\n\t */\n\t\n\tvar has = Object.prototype.hasOwnProperty;\n\t\n\t/**\n\t * Module exports\n\t */\n\t\n\tmodule.exports = Manager;\n\t\n\t/**\n\t * `Manager` constructor.\n\t *\n\t * @param {String} engine instance or engine uri/opts\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Manager (uri, opts) {\n\t  if (!(this instanceof Manager)) return new Manager(uri, opts);\n\t  if (uri && ('object' === typeof uri)) {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t  opts = opts || {};\n\t\n\t  opts.path = opts.path || '/socket.io';\n\t  this.nsps = {};\n\t  this.subs = [];\n\t  this.opts = opts;\n\t  this.reconnection(opts.reconnection !== false);\n\t  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n\t  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n\t  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n\t  this.randomizationFactor(opts.randomizationFactor || 0.5);\n\t  this.backoff = new Backoff({\n\t    min: this.reconnectionDelay(),\n\t    max: this.reconnectionDelayMax(),\n\t    jitter: this.randomizationFactor()\n\t  });\n\t  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n\t  this.readyState = 'closed';\n\t  this.uri = uri;\n\t  this.connecting = [];\n\t  this.lastPing = null;\n\t  this.encoding = false;\n\t  this.packetBuffer = [];\n\t  var _parser = opts.parser || parser;\n\t  this.encoder = new _parser.Encoder();\n\t  this.decoder = new _parser.Decoder();\n\t  this.autoConnect = opts.autoConnect !== false;\n\t  if (this.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Propagate given event to sockets and emit on `this`\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.emitAll = function () {\n\t  this.emit.apply(this, arguments);\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Update `socket.id` of all sockets\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.updateSocketIds = function () {\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].id = this.generateId(nsp);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * generate `socket.id` for the given `nsp`\n\t *\n\t * @param {String} nsp\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tManager.prototype.generateId = function (nsp) {\n\t  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n\t};\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Manager.prototype);\n\t\n\t/**\n\t * Sets the `reconnection` config.\n\t *\n\t * @param {Boolean} true/false if it should automatically reconnect\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnection = function (v) {\n\t  if (!arguments.length) return this._reconnection;\n\t  this._reconnection = !!v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the reconnection attempts config.\n\t *\n\t * @param {Number} max reconnection attempts before giving up\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionAttempts = function (v) {\n\t  if (!arguments.length) return this._reconnectionAttempts;\n\t  this._reconnectionAttempts = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelay = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelay;\n\t  this._reconnectionDelay = v;\n\t  this.backoff && this.backoff.setMin(v);\n\t  return this;\n\t};\n\t\n\tManager.prototype.randomizationFactor = function (v) {\n\t  if (!arguments.length) return this._randomizationFactor;\n\t  this._randomizationFactor = v;\n\t  this.backoff && this.backoff.setJitter(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the maximum delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelayMax = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelayMax;\n\t  this._reconnectionDelayMax = v;\n\t  this.backoff && this.backoff.setMax(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the connection timeout. `false` to disable\n\t *\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.timeout = function (v) {\n\t  if (!arguments.length) return this._timeout;\n\t  this._timeout = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Starts trying to reconnect if reconnection is enabled and we have not\n\t * started reconnecting yet\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.maybeReconnectOnOpen = function () {\n\t  // Only try to reconnect if it's the first time we're connecting\n\t  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n\t    // keeps reconnection from firing twice for the same reconnection loop\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Sets the current transport `socket`.\n\t *\n\t * @param {Function} optional, callback\n\t * @return {Manager} self\n\t * @api public\n\t */\n\t\n\tManager.prototype.open =\n\tManager.prototype.connect = function (fn, opts) {\n\t  debug('readyState %s', this.readyState);\n\t  if (~this.readyState.indexOf('open')) return this;\n\t\n\t  debug('opening %s', this.uri);\n\t  this.engine = eio(this.uri, this.opts);\n\t  var socket = this.engine;\n\t  var self = this;\n\t  this.readyState = 'opening';\n\t  this.skipReconnect = false;\n\t\n\t  // emit `open`\n\t  var openSub = on(socket, 'open', function () {\n\t    self.onopen();\n\t    fn && fn();\n\t  });\n\t\n\t  // emit `connect_error`\n\t  var errorSub = on(socket, 'error', function (data) {\n\t    debug('connect_error');\n\t    self.cleanup();\n\t    self.readyState = 'closed';\n\t    self.emitAll('connect_error', data);\n\t    if (fn) {\n\t      var err = new Error('Connection error');\n\t      err.data = data;\n\t      fn(err);\n\t    } else {\n\t      // Only do this if there is no fn to handle the error\n\t      self.maybeReconnectOnOpen();\n\t    }\n\t  });\n\t\n\t  // emit `connect_timeout`\n\t  if (false !== this._timeout) {\n\t    var timeout = this._timeout;\n\t    debug('connect attempt will timeout after %d', timeout);\n\t\n\t    if (timeout === 0) {\n\t      openSub.destroy(); // prevents a race condition with the 'open' event\n\t    }\n\t\n\t    // set timer\n\t    var timer = setTimeout(function () {\n\t      debug('connect attempt timed out after %d', timeout);\n\t      openSub.destroy();\n\t      socket.close();\n\t      socket.emit('error', 'timeout');\n\t      self.emitAll('connect_timeout', timeout);\n\t    }, timeout);\n\t\n\t    this.subs.push({\n\t      destroy: function () {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t\n\t  this.subs.push(openSub);\n\t  this.subs.push(errorSub);\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport open.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onopen = function () {\n\t  debug('open');\n\t\n\t  // clear old subs\n\t  this.cleanup();\n\t\n\t  // mark as open\n\t  this.readyState = 'open';\n\t  this.emit('open');\n\t\n\t  // add new subs\n\t  var socket = this.engine;\n\t  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n\t  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n\t  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n\t  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n\t  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n\t  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n\t};\n\t\n\t/**\n\t * Called upon a ping.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onping = function () {\n\t  this.lastPing = new Date();\n\t  this.emitAll('ping');\n\t};\n\t\n\t/**\n\t * Called upon a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onpong = function () {\n\t  this.emitAll('pong', new Date() - this.lastPing);\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondata = function (data) {\n\t  this.decoder.add(data);\n\t};\n\t\n\t/**\n\t * Called when parser fully decodes a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondecoded = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon socket error.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onerror = function (err) {\n\t  debug('error', err);\n\t  this.emitAll('error', err);\n\t};\n\t\n\t/**\n\t * Creates a new socket for the given `nsp`.\n\t *\n\t * @return {Socket}\n\t * @api public\n\t */\n\t\n\tManager.prototype.socket = function (nsp, opts) {\n\t  var socket = this.nsps[nsp];\n\t  if (!socket) {\n\t    socket = new Socket(this, nsp, opts);\n\t    this.nsps[nsp] = socket;\n\t    var self = this;\n\t    socket.on('connecting', onConnecting);\n\t    socket.on('connect', function () {\n\t      socket.id = self.generateId(nsp);\n\t    });\n\t\n\t    if (this.autoConnect) {\n\t      // manually call here since connecting event is fired before listening\n\t      onConnecting();\n\t    }\n\t  }\n\t\n\t  function onConnecting () {\n\t    if (!~indexOf(self.connecting, socket)) {\n\t      self.connecting.push(socket);\n\t    }\n\t  }\n\t\n\t  return socket;\n\t};\n\t\n\t/**\n\t * Called upon a socket close.\n\t *\n\t * @param {Socket} socket\n\t */\n\t\n\tManager.prototype.destroy = function (socket) {\n\t  var index = indexOf(this.connecting, socket);\n\t  if (~index) this.connecting.splice(index, 1);\n\t  if (this.connecting.length) return;\n\t\n\t  this.close();\n\t};\n\t\n\t/**\n\t * Writes a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tManager.prototype.packet = function (packet) {\n\t  debug('writing packet %j', packet);\n\t  var self = this;\n\t  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\t\n\t  if (!self.encoding) {\n\t    // encode, then write to engine with result\n\t    self.encoding = true;\n\t    this.encoder.encode(packet, function (encodedPackets) {\n\t      for (var i = 0; i < encodedPackets.length; i++) {\n\t        self.engine.write(encodedPackets[i], packet.options);\n\t      }\n\t      self.encoding = false;\n\t      self.processPacketQueue();\n\t    });\n\t  } else { // add packet to the queue\n\t    self.packetBuffer.push(packet);\n\t  }\n\t};\n\t\n\t/**\n\t * If packet buffer is non-empty, begins encoding the\n\t * next packet in line.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.processPacketQueue = function () {\n\t  if (this.packetBuffer.length > 0 && !this.encoding) {\n\t    var pack = this.packetBuffer.shift();\n\t    this.packet(pack);\n\t  }\n\t};\n\t\n\t/**\n\t * Clean up transport subscriptions and packet buffer.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.cleanup = function () {\n\t  debug('cleanup');\n\t\n\t  var subsLength = this.subs.length;\n\t  for (var i = 0; i < subsLength; i++) {\n\t    var sub = this.subs.shift();\n\t    sub.destroy();\n\t  }\n\t\n\t  this.packetBuffer = [];\n\t  this.encoding = false;\n\t  this.lastPing = null;\n\t\n\t  this.decoder.destroy();\n\t};\n\t\n\t/**\n\t * Close the current socket.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.close =\n\tManager.prototype.disconnect = function () {\n\t  debug('disconnect');\n\t  this.skipReconnect = true;\n\t  this.reconnecting = false;\n\t  if ('opening' === this.readyState) {\n\t    // `onclose` will not fire because\n\t    // an open event never happened\n\t    this.cleanup();\n\t  }\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  if (this.engine) this.engine.close();\n\t};\n\t\n\t/**\n\t * Called upon engine close.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onclose = function (reason) {\n\t  debug('onclose');\n\t\n\t  this.cleanup();\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  this.emit('close', reason);\n\t\n\t  if (this._reconnection && !this.skipReconnect) {\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Attempt a reconnection.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.reconnect = function () {\n\t  if (this.reconnecting || this.skipReconnect) return this;\n\t\n\t  var self = this;\n\t\n\t  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\t    debug('reconnect failed');\n\t    this.backoff.reset();\n\t    this.emitAll('reconnect_failed');\n\t    this.reconnecting = false;\n\t  } else {\n\t    var delay = this.backoff.duration();\n\t    debug('will wait %dms before reconnect attempt', delay);\n\t\n\t    this.reconnecting = true;\n\t    var timer = setTimeout(function () {\n\t      if (self.skipReconnect) return;\n\t\n\t      debug('attempting reconnect');\n\t      self.emitAll('reconnect_attempt', self.backoff.attempts);\n\t      self.emitAll('reconnecting', self.backoff.attempts);\n\t\n\t      // check again for the case socket closed in above events\n\t      if (self.skipReconnect) return;\n\t\n\t      self.open(function (err) {\n\t        if (err) {\n\t          debug('reconnect attempt error');\n\t          self.reconnecting = false;\n\t          self.reconnect();\n\t          self.emitAll('reconnect_error', err.data);\n\t        } else {\n\t          debug('reconnect success');\n\t          self.onreconnect();\n\t        }\n\t      });\n\t    }, delay);\n\t\n\t    this.subs.push({\n\t      destroy: function () {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful reconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onreconnect = function () {\n\t  var attempt = this.backoff.attempts;\n\t  this.reconnecting = false;\n\t  this.backoff.reset();\n\t  this.updateSocketIds();\n\t  this.emitAll('reconnect', attempt);\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\tmodule.exports = __webpack_require__(14);\n\t\n\t/**\n\t * Exports parser\n\t *\n\t * @api public\n\t *\n\t */\n\tmodule.exports.parser = __webpack_require__(22);\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar transports = __webpack_require__(15);\n\tvar Emitter = __webpack_require__(8);\n\tvar debug = __webpack_require__(3)('engine.io-client:socket');\n\tvar index = __webpack_require__(36);\n\tvar parser = __webpack_require__(22);\n\tvar parseuri = __webpack_require__(2);\n\tvar parseqs = __webpack_require__(30);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Socket;\n\t\n\t/**\n\t * Socket constructor.\n\t *\n\t * @param {String|Object} uri or options\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Socket (uri, opts) {\n\t  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\t\n\t  opts = opts || {};\n\t\n\t  if (uri && 'object' === typeof uri) {\n\t    opts = uri;\n\t    uri = null;\n\t  }\n\t\n\t  if (uri) {\n\t    uri = parseuri(uri);\n\t    opts.hostname = uri.host;\n\t    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n\t    opts.port = uri.port;\n\t    if (uri.query) opts.query = uri.query;\n\t  } else if (opts.host) {\n\t    opts.hostname = parseuri(opts.host).host;\n\t  }\n\t\n\t  this.secure = null != opts.secure ? opts.secure\n\t    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\t\n\t  if (opts.hostname && !opts.port) {\n\t    // if no port is specified manually, use the protocol default\n\t    opts.port = this.secure ? '443' : '80';\n\t  }\n\t\n\t  this.agent = opts.agent || false;\n\t  this.hostname = opts.hostname ||\n\t    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n\t  this.port = opts.port || (typeof location !== 'undefined' && location.port\n\t      ? location.port\n\t      : (this.secure ? 443 : 80));\n\t  this.query = opts.query || {};\n\t  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n\t  this.upgrade = false !== opts.upgrade;\n\t  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n\t  this.forceJSONP = !!opts.forceJSONP;\n\t  this.jsonp = false !== opts.jsonp;\n\t  this.forceBase64 = !!opts.forceBase64;\n\t  this.enablesXDR = !!opts.enablesXDR;\n\t  this.withCredentials = false !== opts.withCredentials;\n\t  this.timestampParam = opts.timestampParam || 't';\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.transports = opts.transports || ['polling', 'websocket'];\n\t  this.transportOptions = opts.transportOptions || {};\n\t  this.readyState = '';\n\t  this.writeBuffer = [];\n\t  this.prevBufferLen = 0;\n\t  this.policyPort = opts.policyPort || 843;\n\t  this.rememberUpgrade = opts.rememberUpgrade || false;\n\t  this.binaryType = null;\n\t  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n\t  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\t\n\t  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n\t  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n\t    this.perMessageDeflate.threshold = 1024;\n\t  }\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx || null;\n\t  this.key = opts.key || null;\n\t  this.passphrase = opts.passphrase || null;\n\t  this.cert = opts.cert || null;\n\t  this.ca = opts.ca || null;\n\t  this.ciphers = opts.ciphers || null;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n\t  this.forceNode = !!opts.forceNode;\n\t\n\t  // detect ReactNative environment\n\t  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\t\n\t  // other options for Node.js or ReactNative client\n\t  if (typeof self === 'undefined' || this.isReactNative) {\n\t    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n\t      this.extraHeaders = opts.extraHeaders;\n\t    }\n\t\n\t    if (opts.localAddress) {\n\t      this.localAddress = opts.localAddress;\n\t    }\n\t  }\n\t\n\t  // set on handshake\n\t  this.id = null;\n\t  this.upgrades = null;\n\t  this.pingInterval = null;\n\t  this.pingTimeout = null;\n\t\n\t  // set on heartbeat\n\t  this.pingIntervalTimer = null;\n\t  this.pingTimeoutTimer = null;\n\t\n\t  this.open();\n\t}\n\t\n\tSocket.priorWebsocketSuccess = false;\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.protocol = parser.protocol; // this is an int\n\t\n\t/**\n\t * Expose deps for legacy compatibility\n\t * and standalone browser access.\n\t */\n\t\n\tSocket.Socket = Socket;\n\tSocket.Transport = __webpack_require__(21);\n\tSocket.transports = __webpack_require__(15);\n\tSocket.parser = __webpack_require__(22);\n\t\n\t/**\n\t * Creates transport of the given type.\n\t *\n\t * @param {String} transport name\n\t * @return {Transport}\n\t * @api private\n\t */\n\t\n\tSocket.prototype.createTransport = function (name) {\n\t  debug('creating transport \"%s\"', name);\n\t  var query = clone(this.query);\n\t\n\t  // append engine.io protocol identifier\n\t  query.EIO = parser.protocol;\n\t\n\t  // transport name\n\t  query.transport = name;\n\t\n\t  // per-transport options\n\t  var options = this.transportOptions[name] || {};\n\t\n\t  // session id if we already have one\n\t  if (this.id) query.sid = this.id;\n\t\n\t  var transport = new transports[name]({\n\t    query: query,\n\t    socket: this,\n\t    agent: options.agent || this.agent,\n\t    hostname: options.hostname || this.hostname,\n\t    port: options.port || this.port,\n\t    secure: options.secure || this.secure,\n\t    path: options.path || this.path,\n\t    forceJSONP: options.forceJSONP || this.forceJSONP,\n\t    jsonp: options.jsonp || this.jsonp,\n\t    forceBase64: options.forceBase64 || this.forceBase64,\n\t    enablesXDR: options.enablesXDR || this.enablesXDR,\n\t    withCredentials: options.withCredentials || this.withCredentials,\n\t    timestampRequests: options.timestampRequests || this.timestampRequests,\n\t    timestampParam: options.timestampParam || this.timestampParam,\n\t    policyPort: options.policyPort || this.policyPort,\n\t    pfx: options.pfx || this.pfx,\n\t    key: options.key || this.key,\n\t    passphrase: options.passphrase || this.passphrase,\n\t    cert: options.cert || this.cert,\n\t    ca: options.ca || this.ca,\n\t    ciphers: options.ciphers || this.ciphers,\n\t    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n\t    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n\t    extraHeaders: options.extraHeaders || this.extraHeaders,\n\t    forceNode: options.forceNode || this.forceNode,\n\t    localAddress: options.localAddress || this.localAddress,\n\t    requestTimeout: options.requestTimeout || this.requestTimeout,\n\t    protocols: options.protocols || void (0),\n\t    isReactNative: this.isReactNative\n\t  });\n\t\n\t  return transport;\n\t};\n\t\n\tfunction clone (obj) {\n\t  var o = {};\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      o[i] = obj[i];\n\t    }\n\t  }\n\t  return o;\n\t}\n\t\n\t/**\n\t * Initializes transport to use and starts probe.\n\t *\n\t * @api private\n\t */\n\tSocket.prototype.open = function () {\n\t  var transport;\n\t  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n\t    transport = 'websocket';\n\t  } else if (0 === this.transports.length) {\n\t    // Emit error on next tick so it can be listened to\n\t    var self = this;\n\t    setTimeout(function () {\n\t      self.emit('error', 'No transports available');\n\t    }, 0);\n\t    return;\n\t  } else {\n\t    transport = this.transports[0];\n\t  }\n\t  this.readyState = 'opening';\n\t\n\t  // Retry with the next transport if the transport is disabled (jsonp: false)\n\t  try {\n\t    transport = this.createTransport(transport);\n\t  } catch (e) {\n\t    this.transports.shift();\n\t    this.open();\n\t    return;\n\t  }\n\t\n\t  transport.open();\n\t  this.setTransport(transport);\n\t};\n\t\n\t/**\n\t * Sets the current transport. Disables the existing one (if any).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setTransport = function (transport) {\n\t  debug('setting transport %s', transport.name);\n\t  var self = this;\n\t\n\t  if (this.transport) {\n\t    debug('clearing existing transport %s', this.transport.name);\n\t    this.transport.removeAllListeners();\n\t  }\n\t\n\t  // set up transport\n\t  this.transport = transport;\n\t\n\t  // set up transport listeners\n\t  transport\n\t  .on('drain', function () {\n\t    self.onDrain();\n\t  })\n\t  .on('packet', function (packet) {\n\t    self.onPacket(packet);\n\t  })\n\t  .on('error', function (e) {\n\t    self.onError(e);\n\t  })\n\t  .on('close', function () {\n\t    self.onClose('transport close');\n\t  });\n\t};\n\t\n\t/**\n\t * Probes a transport.\n\t *\n\t * @param {String} transport name\n\t * @api private\n\t */\n\t\n\tSocket.prototype.probe = function (name) {\n\t  debug('probing transport \"%s\"', name);\n\t  var transport = this.createTransport(name, { probe: 1 });\n\t  var failed = false;\n\t  var self = this;\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t\n\t  function onTransportOpen () {\n\t    if (self.onlyBinaryUpgrades) {\n\t      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n\t      failed = failed || upgradeLosesBinary;\n\t    }\n\t    if (failed) return;\n\t\n\t    debug('probe transport \"%s\" opened', name);\n\t    transport.send([{ type: 'ping', data: 'probe' }]);\n\t    transport.once('packet', function (msg) {\n\t      if (failed) return;\n\t      if ('pong' === msg.type && 'probe' === msg.data) {\n\t        debug('probe transport \"%s\" pong', name);\n\t        self.upgrading = true;\n\t        self.emit('upgrading', transport);\n\t        if (!transport) return;\n\t        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\t\n\t        debug('pausing current transport \"%s\"', self.transport.name);\n\t        self.transport.pause(function () {\n\t          if (failed) return;\n\t          if ('closed' === self.readyState) return;\n\t          debug('changing transport and sending upgrade packet');\n\t\n\t          cleanup();\n\t\n\t          self.setTransport(transport);\n\t          transport.send([{ type: 'upgrade' }]);\n\t          self.emit('upgrade', transport);\n\t          transport = null;\n\t          self.upgrading = false;\n\t          self.flush();\n\t        });\n\t      } else {\n\t        debug('probe transport \"%s\" failed', name);\n\t        var err = new Error('probe error');\n\t        err.transport = transport.name;\n\t        self.emit('upgradeError', err);\n\t      }\n\t    });\n\t  }\n\t\n\t  function freezeTransport () {\n\t    if (failed) return;\n\t\n\t    // Any callback called by transport should be ignored since now\n\t    failed = true;\n\t\n\t    cleanup();\n\t\n\t    transport.close();\n\t    transport = null;\n\t  }\n\t\n\t  // Handle any error that happens while probing\n\t  function onerror (err) {\n\t    var error = new Error('probe error: ' + err);\n\t    error.transport = transport.name;\n\t\n\t    freezeTransport();\n\t\n\t    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\t\n\t    self.emit('upgradeError', error);\n\t  }\n\t\n\t  function onTransportClose () {\n\t    onerror('transport closed');\n\t  }\n\t\n\t  // When the socket is closed while we're probing\n\t  function onclose () {\n\t    onerror('socket closed');\n\t  }\n\t\n\t  // When the socket is upgraded while we're probing\n\t  function onupgrade (to) {\n\t    if (transport && to.name !== transport.name) {\n\t      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n\t      freezeTransport();\n\t    }\n\t  }\n\t\n\t  // Remove all listeners on the transport and on self\n\t  function cleanup () {\n\t    transport.removeListener('open', onTransportOpen);\n\t    transport.removeListener('error', onerror);\n\t    transport.removeListener('close', onTransportClose);\n\t    self.removeListener('close', onclose);\n\t    self.removeListener('upgrading', onupgrade);\n\t  }\n\t\n\t  transport.once('open', onTransportOpen);\n\t  transport.once('error', onerror);\n\t  transport.once('close', onTransportClose);\n\t\n\t  this.once('close', onclose);\n\t  this.once('upgrading', onupgrade);\n\t\n\t  transport.open();\n\t};\n\t\n\t/**\n\t * Called when connection is deemed open.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.onOpen = function () {\n\t  debug('socket open');\n\t  this.readyState = 'open';\n\t  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n\t  this.emit('open');\n\t  this.flush();\n\t\n\t  // we check for `readyState` in case an `open`\n\t  // listener already closed the socket\n\t  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\t    debug('starting upgrade probes');\n\t    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n\t      this.probe(this.upgrades[i]);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Handles a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onPacket = function (packet) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState ||\n\t      'closing' === this.readyState) {\n\t    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\t\n\t    this.emit('packet', packet);\n\t\n\t    // Socket is live - any packet counts\n\t    this.emit('heartbeat');\n\t\n\t    switch (packet.type) {\n\t      case 'open':\n\t        this.onHandshake(JSON.parse(packet.data));\n\t        break;\n\t\n\t      case 'pong':\n\t        this.setPing();\n\t        this.emit('pong');\n\t        break;\n\t\n\t      case 'error':\n\t        var err = new Error('server error');\n\t        err.code = packet.data;\n\t        this.onError(err);\n\t        break;\n\t\n\t      case 'message':\n\t        this.emit('data', packet.data);\n\t        this.emit('message', packet.data);\n\t        break;\n\t    }\n\t  } else {\n\t    debug('packet received with socket readyState \"%s\"', this.readyState);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon handshake completion.\n\t *\n\t * @param {Object} handshake obj\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHandshake = function (data) {\n\t  this.emit('handshake', data);\n\t  this.id = data.sid;\n\t  this.transport.query.sid = data.sid;\n\t  this.upgrades = this.filterUpgrades(data.upgrades);\n\t  this.pingInterval = data.pingInterval;\n\t  this.pingTimeout = data.pingTimeout;\n\t  this.onOpen();\n\t  // In case open handler closes socket\n\t  if ('closed' === this.readyState) return;\n\t  this.setPing();\n\t\n\t  // Prolong liveness of socket on heartbeat\n\t  this.removeListener('heartbeat', this.onHeartbeat);\n\t  this.on('heartbeat', this.onHeartbeat);\n\t};\n\t\n\t/**\n\t * Resets ping timeout.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHeartbeat = function (timeout) {\n\t  clearTimeout(this.pingTimeoutTimer);\n\t  var self = this;\n\t  self.pingTimeoutTimer = setTimeout(function () {\n\t    if ('closed' === self.readyState) return;\n\t    self.onClose('ping timeout');\n\t  }, timeout || (self.pingInterval + self.pingTimeout));\n\t};\n\t\n\t/**\n\t * Pings server every `this.pingInterval` and expects response\n\t * within `this.pingTimeout` or closes connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setPing = function () {\n\t  var self = this;\n\t  clearTimeout(self.pingIntervalTimer);\n\t  self.pingIntervalTimer = setTimeout(function () {\n\t    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n\t    self.ping();\n\t    self.onHeartbeat(self.pingTimeout);\n\t  }, self.pingInterval);\n\t};\n\t\n\t/**\n\t* Sends a ping packet.\n\t*\n\t* @api private\n\t*/\n\t\n\tSocket.prototype.ping = function () {\n\t  var self = this;\n\t  this.sendPacket('ping', function () {\n\t    self.emit('ping');\n\t  });\n\t};\n\t\n\t/**\n\t * Called on `drain` event\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onDrain = function () {\n\t  this.writeBuffer.splice(0, this.prevBufferLen);\n\t\n\t  // setting prevBufferLen = 0 is very important\n\t  // for example, when upgrading, upgrade packet is sent over,\n\t  // and a nonzero prevBufferLen could cause problems on `drain`\n\t  this.prevBufferLen = 0;\n\t\n\t  if (0 === this.writeBuffer.length) {\n\t    this.emit('drain');\n\t  } else {\n\t    this.flush();\n\t  }\n\t};\n\t\n\t/**\n\t * Flush write buffers.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.flush = function () {\n\t  if ('closed' !== this.readyState && this.transport.writable &&\n\t    !this.upgrading && this.writeBuffer.length) {\n\t    debug('flushing %d packets in socket', this.writeBuffer.length);\n\t    this.transport.send(this.writeBuffer);\n\t    // keep track of current length of writeBuffer\n\t    // splice writeBuffer and callbackBuffer on `drain`\n\t    this.prevBufferLen = this.writeBuffer.length;\n\t    this.emit('flush');\n\t  }\n\t};\n\t\n\t/**\n\t * Sends a message.\n\t *\n\t * @param {String} message.\n\t * @param {Function} callback function.\n\t * @param {Object} options.\n\t * @return {Socket} for chaining.\n\t * @api public\n\t */\n\t\n\tSocket.prototype.write =\n\tSocket.prototype.send = function (msg, options, fn) {\n\t  this.sendPacket('message', msg, options, fn);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {String} packet type.\n\t * @param {String} data.\n\t * @param {Object} options.\n\t * @param {Function} callback function.\n\t * @api private\n\t */\n\t\n\tSocket.prototype.sendPacket = function (type, data, options, fn) {\n\t  if ('function' === typeof data) {\n\t    fn = data;\n\t    data = undefined;\n\t  }\n\t\n\t  if ('function' === typeof options) {\n\t    fn = options;\n\t    options = null;\n\t  }\n\t\n\t  if ('closing' === this.readyState || 'closed' === this.readyState) {\n\t    return;\n\t  }\n\t\n\t  options = options || {};\n\t  options.compress = false !== options.compress;\n\t\n\t  var packet = {\n\t    type: type,\n\t    data: data,\n\t    options: options\n\t  };\n\t  this.emit('packetCreate', packet);\n\t  this.writeBuffer.push(packet);\n\t  if (fn) this.once('flush', fn);\n\t  this.flush();\n\t};\n\t\n\t/**\n\t * Closes the connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.readyState = 'closing';\n\t\n\t    var self = this;\n\t\n\t    if (this.writeBuffer.length) {\n\t      this.once('drain', function () {\n\t        if (this.upgrading) {\n\t          waitForUpgrade();\n\t        } else {\n\t          close();\n\t        }\n\t      });\n\t    } else if (this.upgrading) {\n\t      waitForUpgrade();\n\t    } else {\n\t      close();\n\t    }\n\t  }\n\t\n\t  function close () {\n\t    self.onClose('forced close');\n\t    debug('socket closing - telling transport to close');\n\t    self.transport.close();\n\t  }\n\t\n\t  function cleanupAndClose () {\n\t    self.removeListener('upgrade', cleanupAndClose);\n\t    self.removeListener('upgradeError', cleanupAndClose);\n\t    close();\n\t  }\n\t\n\t  function waitForUpgrade () {\n\t    // wait for upgrade to finish since we can't send packets while pausing a transport\n\t    self.once('upgrade', cleanupAndClose);\n\t    self.once('upgradeError', cleanupAndClose);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport error\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onError = function (err) {\n\t  debug('socket error %j', err);\n\t  Socket.priorWebsocketSuccess = false;\n\t  this.emit('error', err);\n\t  this.onClose('transport error', err);\n\t};\n\t\n\t/**\n\t * Called upon transport close.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onClose = function (reason, desc) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\t    debug('socket close with reason: \"%s\"', reason);\n\t    var self = this;\n\t\n\t    // clear timers\n\t    clearTimeout(this.pingIntervalTimer);\n\t    clearTimeout(this.pingTimeoutTimer);\n\t\n\t    // stop event from firing again for transport\n\t    this.transport.removeAllListeners('close');\n\t\n\t    // ensure transport won't stay open\n\t    this.transport.close();\n\t\n\t    // ignore further transport communication\n\t    this.transport.removeAllListeners();\n\t\n\t    // set ready state\n\t    this.readyState = 'closed';\n\t\n\t    // clear session id\n\t    this.id = null;\n\t\n\t    // emit close event\n\t    this.emit('close', reason, desc);\n\t\n\t    // clean buffers after, so users can still\n\t    // grab the buffers on `close` event\n\t    self.writeBuffer = [];\n\t    self.prevBufferLen = 0;\n\t  }\n\t};\n\t\n\t/**\n\t * Filters upgrades, returning only those matching client transports.\n\t *\n\t * @param {Array} server upgrades\n\t * @api private\n\t *\n\t */\n\t\n\tSocket.prototype.filterUpgrades = function (upgrades) {\n\t  var filteredUpgrades = [];\n\t  for (var i = 0, j = upgrades.length; i < j; i++) {\n\t    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n\t  }\n\t  return filteredUpgrades;\n\t};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(16);\n\tvar XHR = __webpack_require__(19);\n\tvar JSONP = __webpack_require__(33);\n\tvar websocket = __webpack_require__(34);\n\t\n\t/**\n\t * Export transports.\n\t */\n\t\n\texports.polling = polling;\n\texports.websocket = websocket;\n\t\n\t/**\n\t * Polling transport polymorphic constructor.\n\t * Decides on xhr vs jsonp based on feature detection.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction polling (opts) {\n\t  var xhr;\n\t  var xd = false;\n\t  var xs = false;\n\t  var jsonp = false !== opts.jsonp;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    xd = opts.hostname !== location.hostname || port !== opts.port;\n\t    xs = opts.secure !== isSSL;\n\t  }\n\t\n\t  opts.xdomain = xd;\n\t  opts.xscheme = xs;\n\t  xhr = new XMLHttpRequest(opts);\n\t\n\t  if ('open' in xhr && !opts.forceJSONP) {\n\t    return new XHR(opts);\n\t  } else {\n\t    if (!jsonp) throw new Error('JSONP disabled');\n\t    return new JSONP(opts);\n\t  }\n\t}\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// browser shim for xmlhttprequest module\n\t\n\tvar hasCORS = __webpack_require__(17);\n\tvar globalThis = __webpack_require__(18);\n\t\n\tmodule.exports = function (opts) {\n\t  var xdomain = opts.xdomain;\n\t\n\t  // scheme must be same when usign XDomainRequest\n\t  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t  var xscheme = opts.xscheme;\n\t\n\t  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n\t  // https://github.com/Automattic/engine.io-client/pull/217\n\t  var enablesXDR = opts.enablesXDR;\n\t\n\t  // XMLHttpRequest can be disabled on IE\n\t  try {\n\t    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n\t      return new XMLHttpRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  // Use XDomainRequest for IE8 if enablesXDR is true\n\t  // because loading bar keeps flashing when using jsonp-polling\n\t  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n\t  try {\n\t    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n\t      return new XDomainRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  if (!xdomain) {\n\t    try {\n\t      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n\t    } catch (e) { }\n\t  }\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t *\n\t * Logic borrowed from Modernizr:\n\t *\n\t *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n\t */\n\t\n\ttry {\n\t  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n\t    'withCredentials' in new XMLHttpRequest();\n\t} catch (err) {\n\t  // if XMLHttp support is disabled in IE then it will throw\n\t  // when trying to create\n\t  module.exports = false;\n\t}\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = (function () {\n\t  if (typeof self !== 'undefined') {\n\t    return self;\n\t  } else if (typeof window !== 'undefined') {\n\t    return window;\n\t  } else {\n\t    return Function('return this')(); // eslint-disable-line no-new-func\n\t  }\n\t})();\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global attachEvent */\n\t\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(16);\n\tvar Polling = __webpack_require__(20);\n\tvar Emitter = __webpack_require__(8);\n\tvar inherit = __webpack_require__(31);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling-xhr');\n\tvar globalThis = __webpack_require__(18);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = XHR;\n\tmodule.exports.Request = Request;\n\t\n\t/**\n\t * Empty function\n\t */\n\t\n\tfunction empty () {}\n\t\n\t/**\n\t * XHR Polling constructor.\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction XHR (opts) {\n\t  Polling.call(this, opts);\n\t  this.requestTimeout = opts.requestTimeout;\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n\t      port !== opts.port;\n\t    this.xs = opts.secure !== isSSL;\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(XHR, Polling);\n\t\n\t/**\n\t * XHR supports binary\n\t */\n\t\n\tXHR.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Creates a request.\n\t *\n\t * @param {String} method\n\t * @api private\n\t */\n\t\n\tXHR.prototype.request = function (opts) {\n\t  opts = opts || {};\n\t  opts.uri = this.uri();\n\t  opts.xd = this.xd;\n\t  opts.xs = this.xs;\n\t  opts.agent = this.agent || false;\n\t  opts.supportsBinary = this.supportsBinary;\n\t  opts.enablesXDR = this.enablesXDR;\n\t  opts.withCredentials = this.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  opts.requestTimeout = this.requestTimeout;\n\t\n\t  // other options for Node.js client\n\t  opts.extraHeaders = this.extraHeaders;\n\t\n\t  return new Request(opts);\n\t};\n\t\n\t/**\n\t * Sends data.\n\t *\n\t * @param {String} data to send.\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doWrite = function (data, fn) {\n\t  var isBinary = typeof data !== 'string' && data !== undefined;\n\t  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n\t  var self = this;\n\t  req.on('success', fn);\n\t  req.on('error', function (err) {\n\t    self.onError('xhr post error', err);\n\t  });\n\t  this.sendXhr = req;\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doPoll = function () {\n\t  debug('xhr poll');\n\t  var req = this.request();\n\t  var self = this;\n\t  req.on('data', function (data) {\n\t    self.onData(data);\n\t  });\n\t  req.on('error', function (err) {\n\t    self.onError('xhr poll error', err);\n\t  });\n\t  this.pollXhr = req;\n\t};\n\t\n\t/**\n\t * Request constructor\n\t *\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Request (opts) {\n\t  this.method = opts.method || 'GET';\n\t  this.uri = opts.uri;\n\t  this.xd = !!opts.xd;\n\t  this.xs = !!opts.xs;\n\t  this.async = false !== opts.async;\n\t  this.data = undefined !== opts.data ? opts.data : null;\n\t  this.agent = opts.agent;\n\t  this.isBinary = opts.isBinary;\n\t  this.supportsBinary = opts.supportsBinary;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t  this.requestTimeout = opts.requestTimeout;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  this.create();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Request.prototype);\n\t\n\t/**\n\t * Creates the XHR object and sends the request.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.create = function () {\n\t  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t\n\t  var xhr = this.xhr = new XMLHttpRequest(opts);\n\t  var self = this;\n\t\n\t  try {\n\t    debug('xhr open %s: %s', this.method, this.uri);\n\t    xhr.open(this.method, this.uri, this.async);\n\t    try {\n\t      if (this.extraHeaders) {\n\t        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n\t        for (var i in this.extraHeaders) {\n\t          if (this.extraHeaders.hasOwnProperty(i)) {\n\t            xhr.setRequestHeader(i, this.extraHeaders[i]);\n\t          }\n\t        }\n\t      }\n\t    } catch (e) {}\n\t\n\t    if ('POST' === this.method) {\n\t      try {\n\t        if (this.isBinary) {\n\t          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n\t        } else {\n\t          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n\t        }\n\t      } catch (e) {}\n\t    }\n\t\n\t    try {\n\t      xhr.setRequestHeader('Accept', '*/*');\n\t    } catch (e) {}\n\t\n\t    // ie6 check\n\t    if ('withCredentials' in xhr) {\n\t      xhr.withCredentials = this.withCredentials;\n\t    }\n\t\n\t    if (this.requestTimeout) {\n\t      xhr.timeout = this.requestTimeout;\n\t    }\n\t\n\t    if (this.hasXDR()) {\n\t      xhr.onload = function () {\n\t        self.onLoad();\n\t      };\n\t      xhr.onerror = function () {\n\t        self.onError(xhr.responseText);\n\t      };\n\t    } else {\n\t      xhr.onreadystatechange = function () {\n\t        if (xhr.readyState === 2) {\n\t          try {\n\t            var contentType = xhr.getResponseHeader('Content-Type');\n\t            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t              xhr.responseType = 'arraybuffer';\n\t            }\n\t          } catch (e) {}\n\t        }\n\t        if (4 !== xhr.readyState) return;\n\t        if (200 === xhr.status || 1223 === xhr.status) {\n\t          self.onLoad();\n\t        } else {\n\t          // make sure the `error` event handler that's user-set\n\t          // does not throw in the same tick and gets caught here\n\t          setTimeout(function () {\n\t            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n\t          }, 0);\n\t        }\n\t      };\n\t    }\n\t\n\t    debug('xhr data %s', this.data);\n\t    xhr.send(this.data);\n\t  } catch (e) {\n\t    // Need to defer since .create() is called directly fhrom the constructor\n\t    // and thus the 'error' event can only be only bound *after* this exception\n\t    // occurs.  Therefore, also, we cannot throw here at all.\n\t    setTimeout(function () {\n\t      self.onError(e);\n\t    }, 0);\n\t    return;\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    this.index = Request.requestsCount++;\n\t    Request.requests[this.index] = this;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful response.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onSuccess = function () {\n\t  this.emit('success');\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Called if we have data.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onData = function (data) {\n\t  this.emit('data', data);\n\t  this.onSuccess();\n\t};\n\t\n\t/**\n\t * Called upon error.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onError = function (err) {\n\t  this.emit('error', err);\n\t  this.cleanup(true);\n\t};\n\t\n\t/**\n\t * Cleans up house.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.cleanup = function (fromError) {\n\t  if ('undefined' === typeof this.xhr || null === this.xhr) {\n\t    return;\n\t  }\n\t  // xmlhttprequest\n\t  if (this.hasXDR()) {\n\t    this.xhr.onload = this.xhr.onerror = empty;\n\t  } else {\n\t    this.xhr.onreadystatechange = empty;\n\t  }\n\t\n\t  if (fromError) {\n\t    try {\n\t      this.xhr.abort();\n\t    } catch (e) {}\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    delete Request.requests[this.index];\n\t  }\n\t\n\t  this.xhr = null;\n\t};\n\t\n\t/**\n\t * Called upon load.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onLoad = function () {\n\t  var data;\n\t  try {\n\t    var contentType;\n\t    try {\n\t      contentType = this.xhr.getResponseHeader('Content-Type');\n\t    } catch (e) {}\n\t    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t      data = this.xhr.response || this.xhr.responseText;\n\t    } else {\n\t      data = this.xhr.responseText;\n\t    }\n\t  } catch (e) {\n\t    this.onError(e);\n\t  }\n\t  if (null != data) {\n\t    this.onData(data);\n\t  }\n\t};\n\t\n\t/**\n\t * Check if it has XDomainRequest.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.hasXDR = function () {\n\t  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n\t};\n\t\n\t/**\n\t * Aborts the request.\n\t *\n\t * @api public\n\t */\n\t\n\tRequest.prototype.abort = function () {\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Aborts pending requests when unloading the window. This is needed to prevent\n\t * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n\t * emitted.\n\t */\n\t\n\tRequest.requestsCount = 0;\n\tRequest.requests = {};\n\t\n\tif (typeof document !== 'undefined') {\n\t  if (typeof attachEvent === 'function') {\n\t    attachEvent('onunload', unloadHandler);\n\t  } else if (typeof addEventListener === 'function') {\n\t    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n\t    addEventListener(terminationEvent, unloadHandler, false);\n\t  }\n\t}\n\t\n\tfunction unloadHandler () {\n\t  for (var i in Request.requests) {\n\t    if (Request.requests.hasOwnProperty(i)) {\n\t      Request.requests[i].abort();\n\t    }\n\t  }\n\t}\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(21);\n\tvar parseqs = __webpack_require__(30);\n\tvar parser = __webpack_require__(22);\n\tvar inherit = __webpack_require__(31);\n\tvar yeast = __webpack_require__(32);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Polling;\n\t\n\t/**\n\t * Is XHR2 supported?\n\t */\n\t\n\tvar hasXHR2 = (function () {\n\t  var XMLHttpRequest = __webpack_require__(16);\n\t  var xhr = new XMLHttpRequest({ xdomain: false });\n\t  return null != xhr.responseType;\n\t})();\n\t\n\t/**\n\t * Polling interface.\n\t *\n\t * @param {Object} opts\n\t * @api private\n\t */\n\t\n\tfunction Polling (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (!hasXHR2 || forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(Polling, Transport);\n\t\n\t/**\n\t * Transport name.\n\t */\n\t\n\tPolling.prototype.name = 'polling';\n\t\n\t/**\n\t * Opens the socket (triggers polling). We write a PING message to determine\n\t * when the transport is open.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doOpen = function () {\n\t  this.poll();\n\t};\n\t\n\t/**\n\t * Pauses polling.\n\t *\n\t * @param {Function} callback upon buffers are flushed and transport is paused\n\t * @api private\n\t */\n\t\n\tPolling.prototype.pause = function (onPause) {\n\t  var self = this;\n\t\n\t  this.readyState = 'pausing';\n\t\n\t  function pause () {\n\t    debug('paused');\n\t    self.readyState = 'paused';\n\t    onPause();\n\t  }\n\t\n\t  if (this.polling || !this.writable) {\n\t    var total = 0;\n\t\n\t    if (this.polling) {\n\t      debug('we are currently polling - waiting to pause');\n\t      total++;\n\t      this.once('pollComplete', function () {\n\t        debug('pre-pause polling complete');\n\t        --total || pause();\n\t      });\n\t    }\n\t\n\t    if (!this.writable) {\n\t      debug('we are currently writing - waiting to pause');\n\t      total++;\n\t      this.once('drain', function () {\n\t        debug('pre-pause writing complete');\n\t        --total || pause();\n\t      });\n\t    }\n\t  } else {\n\t    pause();\n\t  }\n\t};\n\t\n\t/**\n\t * Starts polling cycle.\n\t *\n\t * @api public\n\t */\n\t\n\tPolling.prototype.poll = function () {\n\t  debug('polling');\n\t  this.polling = true;\n\t  this.doPoll();\n\t  this.emit('poll');\n\t};\n\t\n\t/**\n\t * Overloads onData to detect payloads.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.onData = function (data) {\n\t  var self = this;\n\t  debug('polling got data %s', data);\n\t  var callback = function (packet, index, total) {\n\t    // if its the first message we consider the transport open\n\t    if ('opening' === self.readyState && packet.type === 'open') {\n\t      self.onOpen();\n\t    }\n\t\n\t    // if its a close packet, we close the ongoing requests\n\t    if ('close' === packet.type) {\n\t      self.onClose();\n\t      return false;\n\t    }\n\t\n\t    // otherwise bypass onData and handle the message\n\t    self.onPacket(packet);\n\t  };\n\t\n\t  // decode payload\n\t  parser.decodePayload(data, this.socket.binaryType, callback);\n\t\n\t  // if an event did not trigger closing\n\t  if ('closed' !== this.readyState) {\n\t    // if we got data we're not polling\n\t    this.polling = false;\n\t    this.emit('pollComplete');\n\t\n\t    if ('open' === this.readyState) {\n\t      this.poll();\n\t    } else {\n\t      debug('ignoring poll - transport state \"%s\"', this.readyState);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * For polling, send a close packet.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doClose = function () {\n\t  var self = this;\n\t\n\t  function close () {\n\t    debug('writing close packet');\n\t    self.write([{ type: 'close' }]);\n\t  }\n\t\n\t  if ('open' === this.readyState) {\n\t    debug('transport open - closing');\n\t    close();\n\t  } else {\n\t    // in case we're trying to close while\n\t    // handshaking is in progress (GH-164)\n\t    debug('transport not open - deferring close');\n\t    this.once('open', close);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes a packets payload.\n\t *\n\t * @param {Array} data packets\n\t * @param {Function} drain callback\n\t * @api private\n\t */\n\t\n\tPolling.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t  var callbackfn = function () {\n\t    self.writable = true;\n\t    self.emit('drain');\n\t  };\n\t\n\t  parser.encodePayload(packets, this.supportsBinary, function (data) {\n\t    self.doWrite(data, callbackfn);\n\t  });\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'https' : 'http';\n\t  var port = '';\n\t\n\t  // cache busting is forced\n\t  if (false !== this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  if (!this.supportsBinary && !query.sid) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n\t     ('http' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(22);\n\tvar Emitter = __webpack_require__(8);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Transport;\n\t\n\t/**\n\t * Transport abstract constructor.\n\t *\n\t * @param {Object} options.\n\t * @api private\n\t */\n\t\n\tfunction Transport (opts) {\n\t  this.path = opts.path;\n\t  this.hostname = opts.hostname;\n\t  this.port = opts.port;\n\t  this.secure = opts.secure;\n\t  this.query = opts.query;\n\t  this.timestampParam = opts.timestampParam;\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.readyState = '';\n\t  this.agent = opts.agent || false;\n\t  this.socket = opts.socket;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t  this.forceNode = opts.forceNode;\n\t\n\t  // results of ReactNative environment detection\n\t  this.isReactNative = opts.isReactNative;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t  this.localAddress = opts.localAddress;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Transport.prototype);\n\t\n\t/**\n\t * Emits an error.\n\t *\n\t * @param {String} str\n\t * @return {Transport} for chaining\n\t * @api public\n\t */\n\t\n\tTransport.prototype.onError = function (msg, desc) {\n\t  var err = new Error(msg);\n\t  err.type = 'TransportError';\n\t  err.description = desc;\n\t  this.emit('error', err);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Opens the transport.\n\t *\n\t * @api public\n\t */\n\t\n\tTransport.prototype.open = function () {\n\t  if ('closed' === this.readyState || '' === this.readyState) {\n\t    this.readyState = 'opening';\n\t    this.doOpen();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Closes the transport.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.doClose();\n\t    this.onClose();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends multiple packets.\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\tTransport.prototype.send = function (packets) {\n\t  if ('open' === this.readyState) {\n\t    this.write(packets);\n\t  } else {\n\t    throw new Error('Transport not open');\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon open\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onOpen = function () {\n\t  this.readyState = 'open';\n\t  this.writable = true;\n\t  this.emit('open');\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @param {String} data\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onData = function (data) {\n\t  var packet = parser.decodePacket(data, this.socket.binaryType);\n\t  this.onPacket(packet);\n\t};\n\t\n\t/**\n\t * Called with a decoded packet.\n\t */\n\t\n\tTransport.prototype.onPacket = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon close.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onClose = function () {\n\t  this.readyState = 'closed';\n\t  this.emit('close');\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar keys = __webpack_require__(23);\n\tvar hasBinary = __webpack_require__(24);\n\tvar sliceBuffer = __webpack_require__(25);\n\tvar after = __webpack_require__(26);\n\tvar utf8 = __webpack_require__(27);\n\t\n\tvar base64encoder;\n\tif (typeof ArrayBuffer !== 'undefined') {\n\t  base64encoder = __webpack_require__(28);\n\t}\n\t\n\t/**\n\t * Check if we are running an android browser. That requires us to use\n\t * ArrayBuffer with polling transports...\n\t *\n\t * http://ghinda.net/jpeg-blob-ajax-android/\n\t */\n\t\n\tvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Check if we are running in PhantomJS.\n\t * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n\t * https://github.com/ariya/phantomjs/issues/11395\n\t * @type boolean\n\t */\n\tvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\t\n\t/**\n\t * When true, avoids using Blobs to encode payloads.\n\t * @type boolean\n\t */\n\tvar dontSendBlobs = isAndroid || isPhantomJS;\n\t\n\t/**\n\t * Current protocol version.\n\t */\n\t\n\texports.protocol = 3;\n\t\n\t/**\n\t * Packet types.\n\t */\n\t\n\tvar packets = exports.packets = {\n\t    open:     0    // non-ws\n\t  , close:    1    // non-ws\n\t  , ping:     2\n\t  , pong:     3\n\t  , message:  4\n\t  , upgrade:  5\n\t  , noop:     6\n\t};\n\t\n\tvar packetslist = keys(packets);\n\t\n\t/**\n\t * Premade error packet.\n\t */\n\t\n\tvar err = { type: 'error', data: 'parser error' };\n\t\n\t/**\n\t * Create a blob api even for blob builder when vendor prefixes exist\n\t */\n\t\n\tvar Blob = __webpack_require__(29);\n\t\n\t/**\n\t * Encodes a packet.\n\t *\n\t *     <packet type id> [ <data> ]\n\t *\n\t * Example:\n\t *\n\t *     5hello world\n\t *     3\n\t *     4\n\t *\n\t * Binary is encoded in an identical principle\n\t *\n\t * @api private\n\t */\n\t\n\texports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = false;\n\t  }\n\t\n\t  if (typeof utf8encode === 'function') {\n\t    callback = utf8encode;\n\t    utf8encode = null;\n\t  }\n\t\n\t  var data = (packet.data === undefined)\n\t    ? undefined\n\t    : packet.data.buffer || packet.data;\n\t\n\t  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n\t    return encodeArrayBuffer(packet, supportsBinary, callback);\n\t  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n\t    return encodeBlob(packet, supportsBinary, callback);\n\t  }\n\t\n\t  // might be an object with { base64: true, data: dataAsBase64String }\n\t  if (data && data.base64) {\n\t    return encodeBase64Object(packet, callback);\n\t  }\n\t\n\t  // Sending data as a utf-8 string\n\t  var encoded = packets[packet.type];\n\t\n\t  // data fragment is optional\n\t  if (undefined !== packet.data) {\n\t    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n\t  }\n\t\n\t  return callback('' + encoded);\n\t\n\t};\n\t\n\tfunction encodeBase64Object(packet, callback) {\n\t  // packet data is an object { base64: true, data: dataAsBase64String }\n\t  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n\t  return callback(message);\n\t}\n\t\n\t/**\n\t * Encode packet helpers for binary types\n\t */\n\t\n\tfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var data = packet.data;\n\t  var contentArray = new Uint8Array(data);\n\t  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\t\n\t  resultBuffer[0] = packets[packet.type];\n\t  for (var i = 0; i < contentArray.length; i++) {\n\t    resultBuffer[i+1] = contentArray[i];\n\t  }\n\t\n\t  return callback(resultBuffer.buffer);\n\t}\n\t\n\tfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var fr = new FileReader();\n\t  fr.onload = function() {\n\t    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n\t  };\n\t  return fr.readAsArrayBuffer(packet.data);\n\t}\n\t\n\tfunction encodeBlob(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  if (dontSendBlobs) {\n\t    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n\t  }\n\t\n\t  var length = new Uint8Array(1);\n\t  length[0] = packets[packet.type];\n\t  var blob = new Blob([length.buffer, packet.data]);\n\t\n\t  return callback(blob);\n\t}\n\t\n\t/**\n\t * Encodes a packet with binary data in a base64 string\n\t *\n\t * @param {Object} packet, has `type` and `data`\n\t * @return {String} base64 encoded message\n\t */\n\t\n\texports.encodeBase64Packet = function(packet, callback) {\n\t  var message = 'b' + exports.packets[packet.type];\n\t  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n\t    var fr = new FileReader();\n\t    fr.onload = function() {\n\t      var b64 = fr.result.split(',')[1];\n\t      callback(message + b64);\n\t    };\n\t    return fr.readAsDataURL(packet.data);\n\t  }\n\t\n\t  var b64data;\n\t  try {\n\t    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n\t  } catch (e) {\n\t    // iPhone Safari doesn't let you apply with typed arrays\n\t    var typed = new Uint8Array(packet.data);\n\t    var basic = new Array(typed.length);\n\t    for (var i = 0; i < typed.length; i++) {\n\t      basic[i] = typed[i];\n\t    }\n\t    b64data = String.fromCharCode.apply(null, basic);\n\t  }\n\t  message += btoa(b64data);\n\t  return callback(message);\n\t};\n\t\n\t/**\n\t * Decodes a packet. Changes format to Blob if requested.\n\t *\n\t * @return {Object} with `type` and `data` (if any)\n\t * @api private\n\t */\n\t\n\texports.decodePacket = function (data, binaryType, utf8decode) {\n\t  if (data === undefined) {\n\t    return err;\n\t  }\n\t  // String data\n\t  if (typeof data === 'string') {\n\t    if (data.charAt(0) === 'b') {\n\t      return exports.decodeBase64Packet(data.substr(1), binaryType);\n\t    }\n\t\n\t    if (utf8decode) {\n\t      data = tryDecode(data);\n\t      if (data === false) {\n\t        return err;\n\t      }\n\t    }\n\t    var type = data.charAt(0);\n\t\n\t    if (Number(type) != type || !packetslist[type]) {\n\t      return err;\n\t    }\n\t\n\t    if (data.length > 1) {\n\t      return { type: packetslist[type], data: data.substring(1) };\n\t    } else {\n\t      return { type: packetslist[type] };\n\t    }\n\t  }\n\t\n\t  var asArray = new Uint8Array(data);\n\t  var type = asArray[0];\n\t  var rest = sliceBuffer(data, 1);\n\t  if (Blob && binaryType === 'blob') {\n\t    rest = new Blob([rest]);\n\t  }\n\t  return { type: packetslist[type], data: rest };\n\t};\n\t\n\tfunction tryDecode(data) {\n\t  try {\n\t    data = utf8.decode(data, { strict: false });\n\t  } catch (e) {\n\t    return false;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Decodes a packet encoded in a base64 string\n\t *\n\t * @param {String} base64 encoded message\n\t * @return {Object} with `type` and `data` (if any)\n\t */\n\t\n\texports.decodeBase64Packet = function(msg, binaryType) {\n\t  var type = packetslist[msg.charAt(0)];\n\t  if (!base64encoder) {\n\t    return { type: type, data: { base64: true, data: msg.substr(1) } };\n\t  }\n\t\n\t  var data = base64encoder.decode(msg.substr(1));\n\t\n\t  if (binaryType === 'blob' && Blob) {\n\t    data = new Blob([data]);\n\t  }\n\t\n\t  return { type: type, data: data };\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload).\n\t *\n\t *     <length>:data\n\t *\n\t * Example:\n\t *\n\t *     11:hello world2:hi\n\t *\n\t * If any contents are binary, they will be encoded as base64 strings. Base64\n\t * encoded strings are marked with a b before the length specifier\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\texports.encodePayload = function (packets, supportsBinary, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = null;\n\t  }\n\t\n\t  var isBinary = hasBinary(packets);\n\t\n\t  if (supportsBinary && isBinary) {\n\t    if (Blob && !dontSendBlobs) {\n\t      return exports.encodePayloadAsBlob(packets, callback);\n\t    }\n\t\n\t    return exports.encodePayloadAsArrayBuffer(packets, callback);\n\t  }\n\t\n\t  if (!packets.length) {\n\t    return callback('0:');\n\t  }\n\t\n\t  function setLengthHeader(message) {\n\t    return message.length + ':' + message;\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n\t      doneCallback(null, setLengthHeader(message));\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(results.join(''));\n\t  });\n\t};\n\t\n\t/**\n\t * Async array map using after\n\t */\n\t\n\tfunction map(ary, each, done) {\n\t  var result = new Array(ary.length);\n\t  var next = after(ary.length, done);\n\t\n\t  var eachWithIndex = function(i, el, cb) {\n\t    each(el, function(error, msg) {\n\t      result[i] = msg;\n\t      cb(error, result);\n\t    });\n\t  };\n\t\n\t  for (var i = 0; i < ary.length; i++) {\n\t    eachWithIndex(i, ary[i], next);\n\t  }\n\t}\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Possible binary contents are\n\t * decoded from their base64 representation\n\t *\n\t * @param {String} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayload = function (data, binaryType, callback) {\n\t  if (typeof data !== 'string') {\n\t    return exports.decodePayloadAsBinary(data, binaryType, callback);\n\t  }\n\t\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var packet;\n\t  if (data === '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t  var length = '', n, msg;\n\t\n\t  for (var i = 0, l = data.length; i < l; i++) {\n\t    var chr = data.charAt(i);\n\t\n\t    if (chr !== ':') {\n\t      length += chr;\n\t      continue;\n\t    }\n\t\n\t    if (length === '' || (length != (n = Number(length)))) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    msg = data.substr(i + 1, n);\n\t\n\t    if (length != msg.length) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    if (msg.length) {\n\t      packet = exports.decodePacket(msg, binaryType, false);\n\t\n\t      if (err.type === packet.type && err.data === packet.data) {\n\t        // parser error in individual packet - ignoring payload\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      var ret = callback(packet, i + n, l);\n\t      if (false === ret) return;\n\t    }\n\t\n\t    // advance cursor\n\t    i += n;\n\t    length = '';\n\t  }\n\t\n\t  if (length !== '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload) as binary.\n\t *\n\t * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n\t * 255><data>\n\t *\n\t * Example:\n\t * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n\t *\n\t * @param {Array} packets\n\t * @return {ArrayBuffer} encoded payload\n\t * @api private\n\t */\n\t\n\texports.encodePayloadAsArrayBuffer = function(packets, callback) {\n\t  if (!packets.length) {\n\t    return callback(new ArrayBuffer(0));\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(data) {\n\t      return doneCallback(null, data);\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, encodedPackets) {\n\t    var totalLength = encodedPackets.reduce(function(acc, p) {\n\t      var len;\n\t      if (typeof p === 'string'){\n\t        len = p.length;\n\t      } else {\n\t        len = p.byteLength;\n\t      }\n\t      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n\t    }, 0);\n\t\n\t    var resultArray = new Uint8Array(totalLength);\n\t\n\t    var bufferIndex = 0;\n\t    encodedPackets.forEach(function(p) {\n\t      var isString = typeof p === 'string';\n\t      var ab = p;\n\t      if (isString) {\n\t        var view = new Uint8Array(p.length);\n\t        for (var i = 0; i < p.length; i++) {\n\t          view[i] = p.charCodeAt(i);\n\t        }\n\t        ab = view.buffer;\n\t      }\n\t\n\t      if (isString) { // not true binary\n\t        resultArray[bufferIndex++] = 0;\n\t      } else { // true binary\n\t        resultArray[bufferIndex++] = 1;\n\t      }\n\t\n\t      var lenStr = ab.byteLength.toString();\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n\t      }\n\t      resultArray[bufferIndex++] = 255;\n\t\n\t      var view = new Uint8Array(ab);\n\t      for (var i = 0; i < view.length; i++) {\n\t        resultArray[bufferIndex++] = view[i];\n\t      }\n\t    });\n\t\n\t    return callback(resultArray.buffer);\n\t  });\n\t};\n\t\n\t/**\n\t * Encode as Blob\n\t */\n\t\n\texports.encodePayloadAsBlob = function(packets, callback) {\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(encoded) {\n\t      var binaryIdentifier = new Uint8Array(1);\n\t      binaryIdentifier[0] = 1;\n\t      if (typeof encoded === 'string') {\n\t        var view = new Uint8Array(encoded.length);\n\t        for (var i = 0; i < encoded.length; i++) {\n\t          view[i] = encoded.charCodeAt(i);\n\t        }\n\t        encoded = view.buffer;\n\t        binaryIdentifier[0] = 0;\n\t      }\n\t\n\t      var len = (encoded instanceof ArrayBuffer)\n\t        ? encoded.byteLength\n\t        : encoded.size;\n\t\n\t      var lenStr = len.toString();\n\t      var lengthAry = new Uint8Array(lenStr.length + 1);\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        lengthAry[i] = parseInt(lenStr[i]);\n\t      }\n\t      lengthAry[lenStr.length] = 255;\n\t\n\t      if (Blob) {\n\t        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n\t        doneCallback(null, blob);\n\t      }\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(new Blob(results));\n\t  });\n\t};\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Strings are decoded by\n\t * interpreting each byte as a key code for entries marked to start with 0. See\n\t * description of encodePayloadAsBinary\n\t *\n\t * @param {ArrayBuffer} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayloadAsBinary = function (data, binaryType, callback) {\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var bufferTail = data;\n\t  var buffers = [];\n\t\n\t  while (bufferTail.byteLength > 0) {\n\t    var tailArray = new Uint8Array(bufferTail);\n\t    var isString = tailArray[0] === 0;\n\t    var msgLength = '';\n\t\n\t    for (var i = 1; ; i++) {\n\t      if (tailArray[i] === 255) break;\n\t\n\t      // 310 = char length of Number.MAX_VALUE\n\t      if (msgLength.length > 310) {\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      msgLength += tailArray[i];\n\t    }\n\t\n\t    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n\t    msgLength = parseInt(msgLength);\n\t\n\t    var msg = sliceBuffer(bufferTail, 0, msgLength);\n\t    if (isString) {\n\t      try {\n\t        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n\t      } catch (e) {\n\t        // iPhone Safari doesn't let you apply to typed arrays\n\t        var typed = new Uint8Array(msg);\n\t        msg = '';\n\t        for (var i = 0; i < typed.length; i++) {\n\t          msg += String.fromCharCode(typed[i]);\n\t        }\n\t      }\n\t    }\n\t\n\t    buffers.push(msg);\n\t    bufferTail = sliceBuffer(bufferTail, msgLength);\n\t  }\n\t\n\t  var total = buffers.length;\n\t  buffers.forEach(function(buffer, i) {\n\t    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n\t  });\n\t};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Gets the keys for an object.\n\t *\n\t * @return {Array} keys\n\t * @api private\n\t */\n\t\n\tmodule.exports = Object.keys || function keys (obj){\n\t  var arr = [];\n\t  var has = Object.prototype.hasOwnProperty;\n\t\n\t  for (var i in obj) {\n\t    if (has.call(obj, i)) {\n\t      arr.push(i);\n\t    }\n\t  }\n\t  return arr;\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global Blob File */\n\t\n\t/*\n\t * Module requirements.\n\t */\n\t\n\tvar isArray = __webpack_require__(10);\n\t\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' ||\n\t                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\n\tvar withNativeFile = typeof File === 'function' ||\n\t                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = hasBinary;\n\t\n\t/**\n\t * Checks for binary data.\n\t *\n\t * Supports Buffer, ArrayBuffer, Blob and File.\n\t *\n\t * @param {Object} anything\n\t * @api public\n\t */\n\t\n\tfunction hasBinary (obj) {\n\t  if (!obj || typeof obj !== 'object') {\n\t    return false;\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      if (hasBinary(obj[i])) {\n\t        return true;\n\t      }\n\t    }\n\t    return false;\n\t  }\n\t\n\t  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n\t    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n\t    (withNativeBlob && obj instanceof Blob) ||\n\t    (withNativeFile && obj instanceof File)\n\t  ) {\n\t    return true;\n\t  }\n\t\n\t  // see: https://github.com/Automattic/has-binary/pull/4\n\t  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n\t    return hasBinary(obj.toJSON(), true);\n\t  }\n\t\n\t  for (var key in obj) {\n\t    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * An abstraction for slicing an arraybuffer even when\n\t * ArrayBuffer.prototype.slice is not supported\n\t *\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(arraybuffer, start, end) {\n\t  var bytes = arraybuffer.byteLength;\n\t  start = start || 0;\n\t  end = end || bytes;\n\t\n\t  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\t\n\t  if (start < 0) { start += bytes; }\n\t  if (end < 0) { end += bytes; }\n\t  if (end > bytes) { end = bytes; }\n\t\n\t  if (start >= bytes || start >= end || bytes === 0) {\n\t    return new ArrayBuffer(0);\n\t  }\n\t\n\t  var abv = new Uint8Array(arraybuffer);\n\t  var result = new Uint8Array(end - start);\n\t  for (var i = start, ii = 0; i < end; i++, ii++) {\n\t    result[ii] = abv[i];\n\t  }\n\t  return result.buffer;\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = after\n\t\n\tfunction after(count, callback, err_cb) {\n\t    var bail = false\n\t    err_cb = err_cb || noop\n\t    proxy.count = count\n\t\n\t    return (count === 0) ? callback() : proxy\n\t\n\t    function proxy(err, result) {\n\t        if (proxy.count <= 0) {\n\t            throw new Error('after called too many times')\n\t        }\n\t        --proxy.count\n\t\n\t        // after first error, rest are passed to err_cb\n\t        if (err) {\n\t            bail = true\n\t            callback(err)\n\t            // future error callbacks will go to error handler\n\t            callback = err_cb\n\t        } else if (proxy.count === 0 && !bail) {\n\t            callback(null, result)\n\t        }\n\t    }\n\t}\n\t\n\tfunction noop() {}\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\t\n\tvar stringFromCharCode = String.fromCharCode;\n\t\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\t\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\t\n\tfunction checkScalarValue(codePoint, strict) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tif (strict) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t\t' is not a scalar value'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\t\n\tfunction encodeCodePoint(codePoint, strict) {\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\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t}\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\t\n\tfunction utf8encode(string, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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, strict);\n\t\t}\n\t\treturn byteString;\n\t}\n\t\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\t\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\t\n\tfunction decodeSymbol(strict) {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\t\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\t\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = 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\t\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 checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\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 & 0x07) << 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\t\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\t\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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(strict)) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\t\n\tmodule.exports = {\n\t\tversion: '2.1.2',\n\t\tencode: utf8encode,\n\t\tdecode: utf8decode\n\t};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t/*\n\t * base64-arraybuffer\n\t * https://github.com/niklasvh/base64-arraybuffer\n\t *\n\t * Copyright (c) 2012 Niklas von Hertzen\n\t * Licensed under the MIT license.\n\t */\n\t(function(chars){\n\t  \"use strict\";\n\t\n\t  exports.encode = function(arraybuffer) {\n\t    var bytes = new Uint8Array(arraybuffer),\n\t    i, len = bytes.length, base64 = \"\";\n\t\n\t    for (i = 0; i < len; i+=3) {\n\t      base64 += chars[bytes[i] >> 2];\n\t      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n\t      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n\t      base64 += chars[bytes[i + 2] & 63];\n\t    }\n\t\n\t    if ((len % 3) === 2) {\n\t      base64 = base64.substring(0, base64.length - 1) + \"=\";\n\t    } else if (len % 3 === 1) {\n\t      base64 = base64.substring(0, base64.length - 2) + \"==\";\n\t    }\n\t\n\t    return base64;\n\t  };\n\t\n\t  exports.decode =  function(base64) {\n\t    var bufferLength = base64.length * 0.75,\n\t    len = base64.length, i, p = 0,\n\t    encoded1, encoded2, encoded3, encoded4;\n\t\n\t    if (base64[base64.length - 1] === \"=\") {\n\t      bufferLength--;\n\t      if (base64[base64.length - 2] === \"=\") {\n\t        bufferLength--;\n\t      }\n\t    }\n\t\n\t    var arraybuffer = new ArrayBuffer(bufferLength),\n\t    bytes = new Uint8Array(arraybuffer);\n\t\n\t    for (i = 0; i < len; i+=4) {\n\t      encoded1 = chars.indexOf(base64[i]);\n\t      encoded2 = chars.indexOf(base64[i+1]);\n\t      encoded3 = chars.indexOf(base64[i+2]);\n\t      encoded4 = chars.indexOf(base64[i+3]);\n\t\n\t      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n\t      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n\t      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n\t    }\n\t\n\t    return arraybuffer;\n\t  };\n\t})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Create a blob builder even when vendor prefixes exist\r\n\t */\r\n\t\r\n\tvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n\t  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n\t  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n\t  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n\t  false;\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor is supported\r\n\t */\r\n\t\r\n\tvar blobSupported = (function() {\r\n\t  try {\r\n\t    var a = new Blob(['hi']);\r\n\t    return a.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor supports ArrayBufferViews\r\n\t * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n\t */\r\n\t\r\n\tvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n\t  try {\r\n\t    var b = new Blob([new Uint8Array([1,2])]);\r\n\t    return b.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if BlobBuilder is supported\r\n\t */\r\n\t\r\n\tvar blobBuilderSupported = BlobBuilder\r\n\t  && BlobBuilder.prototype.append\r\n\t  && BlobBuilder.prototype.getBlob;\r\n\t\r\n\t/**\r\n\t * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n\t * Used by BlobBuilder constructor and old browsers that didn't\r\n\t * support it in the Blob constructor.\r\n\t */\r\n\t\r\n\tfunction mapArrayBufferViews(ary) {\r\n\t  return ary.map(function(chunk) {\r\n\t    if (chunk.buffer instanceof ArrayBuffer) {\r\n\t      var buf = chunk.buffer;\r\n\t\r\n\t      // if this is a subarray, make a copy so we only\r\n\t      // include the subarray region from the underlying buffer\r\n\t      if (chunk.byteLength !== buf.byteLength) {\r\n\t        var copy = new Uint8Array(chunk.byteLength);\r\n\t        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n\t        buf = copy.buffer;\r\n\t      }\r\n\t\r\n\t      return buf;\r\n\t    }\r\n\t\r\n\t    return chunk;\r\n\t  });\r\n\t}\r\n\t\r\n\tfunction BlobBuilderConstructor(ary, options) {\r\n\t  options = options || {};\r\n\t\r\n\t  var bb = new BlobBuilder();\r\n\t  mapArrayBufferViews(ary).forEach(function(part) {\r\n\t    bb.append(part);\r\n\t  });\r\n\t\r\n\t  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n\t};\r\n\t\r\n\tfunction BlobConstructor(ary, options) {\r\n\t  return new Blob(mapArrayBufferViews(ary), options || {});\r\n\t};\r\n\t\r\n\tif (typeof Blob !== 'undefined') {\r\n\t  BlobBuilderConstructor.prototype = Blob.prototype;\r\n\t  BlobConstructor.prototype = Blob.prototype;\r\n\t}\r\n\t\r\n\tmodule.exports = (function() {\r\n\t  if (blobSupported) {\r\n\t    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n\t  } else if (blobBuilderSupported) {\r\n\t    return BlobBuilderConstructor;\r\n\t  } else {\r\n\t    return undefined;\r\n\t  }\r\n\t})();\r\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Compiles a querystring\n\t * Returns string representation of the object\n\t *\n\t * @param {Object}\n\t * @api private\n\t */\n\t\n\texports.encode = function (obj) {\n\t  var str = '';\n\t\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      if (str.length) str += '&';\n\t      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n\t    }\n\t  }\n\t\n\t  return str;\n\t};\n\t\n\t/**\n\t * Parses a simple querystring into an object\n\t *\n\t * @param {String} qs\n\t * @api private\n\t */\n\t\n\texports.decode = function(qs){\n\t  var qry = {};\n\t  var pairs = qs.split('&');\n\t  for (var i = 0, l = pairs.length; i < l; i++) {\n\t    var pair = pairs[i].split('=');\n\t    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n\t  }\n\t  return qry;\n\t};\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = function(a, b){\n\t  var fn = function(){};\n\t  fn.prototype = b.prototype;\n\t  a.prototype = new fn;\n\t  a.prototype.constructor = a;\n\t};\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n\t  , length = 64\n\t  , map = {}\n\t  , seed = 0\n\t  , i = 0\n\t  , prev;\n\t\n\t/**\n\t * Return a string representing the specified number.\n\t *\n\t * @param {Number} num The number to convert.\n\t * @returns {String} The string representation of the number.\n\t * @api public\n\t */\n\tfunction encode(num) {\n\t  var encoded = '';\n\t\n\t  do {\n\t    encoded = alphabet[num % length] + encoded;\n\t    num = Math.floor(num / length);\n\t  } while (num > 0);\n\t\n\t  return encoded;\n\t}\n\t\n\t/**\n\t * Return the integer value specified by the given string.\n\t *\n\t * @param {String} str The string to convert.\n\t * @returns {Number} The integer value represented by the string.\n\t * @api public\n\t */\n\tfunction decode(str) {\n\t  var decoded = 0;\n\t\n\t  for (i = 0; i < str.length; i++) {\n\t    decoded = decoded * length + map[str.charAt(i)];\n\t  }\n\t\n\t  return decoded;\n\t}\n\t\n\t/**\n\t * Yeast: A tiny growing id generator.\n\t *\n\t * @returns {String} A unique id.\n\t * @api public\n\t */\n\tfunction yeast() {\n\t  var now = encode(+new Date());\n\t\n\t  if (now !== prev) return seed = 0, prev = now;\n\t  return now +'.'+ encode(seed++);\n\t}\n\t\n\t//\n\t// Map each character to its index.\n\t//\n\tfor (; i < length; i++) map[alphabet[i]] = i;\n\t\n\t//\n\t// Expose the `yeast`, `encode` and `decode` functions.\n\t//\n\tyeast.encode = encode;\n\tyeast.decode = decode;\n\tmodule.exports = yeast;\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar Polling = __webpack_require__(20);\n\tvar inherit = __webpack_require__(31);\n\tvar globalThis = __webpack_require__(18);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = JSONPPolling;\n\t\n\t/**\n\t * Cached regular expressions.\n\t */\n\t\n\tvar rNewline = /\\n/g;\n\tvar rEscapedNewline = /\\\\n/g;\n\t\n\t/**\n\t * Global JSONP callbacks.\n\t */\n\t\n\tvar callbacks;\n\t\n\t/**\n\t * Noop.\n\t */\n\t\n\tfunction empty () { }\n\t\n\t/**\n\t * JSONP Polling constructor.\n\t *\n\t * @param {Object} opts.\n\t * @api public\n\t */\n\t\n\tfunction JSONPPolling (opts) {\n\t  Polling.call(this, opts);\n\t\n\t  this.query = this.query || {};\n\t\n\t  // define global callbacks array if not present\n\t  // we do this here (lazily) to avoid unneeded global pollution\n\t  if (!callbacks) {\n\t    // we need to consider multiple engines in the same page\n\t    callbacks = globalThis.___eio = (globalThis.___eio || []);\n\t  }\n\t\n\t  // callback identifier\n\t  this.index = callbacks.length;\n\t\n\t  // add callback to jsonp global\n\t  var self = this;\n\t  callbacks.push(function (msg) {\n\t    self.onData(msg);\n\t  });\n\t\n\t  // append to query string\n\t  this.query.j = this.index;\n\t\n\t  // prevent spurious errors from being emitted when the window is unloaded\n\t  if (typeof addEventListener === 'function') {\n\t    addEventListener('beforeunload', function () {\n\t      if (self.script) self.script.onerror = empty;\n\t    }, false);\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(JSONPPolling, Polling);\n\t\n\t/*\n\t * JSONP only supports binary as base64 encoded strings\n\t */\n\t\n\tJSONPPolling.prototype.supportsBinary = false;\n\t\n\t/**\n\t * Closes the socket.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doClose = function () {\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  if (this.form) {\n\t    this.form.parentNode.removeChild(this.form);\n\t    this.form = null;\n\t    this.iframe = null;\n\t  }\n\t\n\t  Polling.prototype.doClose.call(this);\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doPoll = function () {\n\t  var self = this;\n\t  var script = document.createElement('script');\n\t\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  script.async = true;\n\t  script.src = this.uri();\n\t  script.onerror = function (e) {\n\t    self.onError('jsonp poll error', e);\n\t  };\n\t\n\t  var insertAt = document.getElementsByTagName('script')[0];\n\t  if (insertAt) {\n\t    insertAt.parentNode.insertBefore(script, insertAt);\n\t  } else {\n\t    (document.head || document.body).appendChild(script);\n\t  }\n\t  this.script = script;\n\t\n\t  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\t\n\t  if (isUAgecko) {\n\t    setTimeout(function () {\n\t      var iframe = document.createElement('iframe');\n\t      document.body.appendChild(iframe);\n\t      document.body.removeChild(iframe);\n\t    }, 100);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes with a hidden iframe.\n\t *\n\t * @param {String} data to send\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doWrite = function (data, fn) {\n\t  var self = this;\n\t\n\t  if (!this.form) {\n\t    var form = document.createElement('form');\n\t    var area = document.createElement('textarea');\n\t    var id = this.iframeId = 'eio_iframe_' + this.index;\n\t    var iframe;\n\t\n\t    form.className = 'socketio';\n\t    form.style.position = 'absolute';\n\t    form.style.top = '-1000px';\n\t    form.style.left = '-1000px';\n\t    form.target = id;\n\t    form.method = 'POST';\n\t    form.setAttribute('accept-charset', 'utf-8');\n\t    area.name = 'd';\n\t    form.appendChild(area);\n\t    document.body.appendChild(form);\n\t\n\t    this.form = form;\n\t    this.area = area;\n\t  }\n\t\n\t  this.form.action = this.uri();\n\t\n\t  function complete () {\n\t    initIframe();\n\t    fn();\n\t  }\n\t\n\t  function initIframe () {\n\t    if (self.iframe) {\n\t      try {\n\t        self.form.removeChild(self.iframe);\n\t      } catch (e) {\n\t        self.onError('jsonp polling iframe removal error', e);\n\t      }\n\t    }\n\t\n\t    try {\n\t      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n\t      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n\t      iframe = document.createElement(html);\n\t    } catch (e) {\n\t      iframe = document.createElement('iframe');\n\t      iframe.name = self.iframeId;\n\t      iframe.src = 'javascript:0';\n\t    }\n\t\n\t    iframe.id = self.iframeId;\n\t\n\t    self.form.appendChild(iframe);\n\t    self.iframe = iframe;\n\t  }\n\t\n\t  initIframe();\n\t\n\t  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n\t  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n\t  data = data.replace(rEscapedNewline, '\\\\\\n');\n\t  this.area.value = data.replace(rNewline, '\\\\n');\n\t\n\t  try {\n\t    this.form.submit();\n\t  } catch (e) {}\n\t\n\t  if (this.iframe.attachEvent) {\n\t    this.iframe.onreadystatechange = function () {\n\t      if (self.iframe.readyState === 'complete') {\n\t        complete();\n\t      }\n\t    };\n\t  } else {\n\t    this.iframe.onload = complete;\n\t  }\n\t};\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(21);\n\tvar parser = __webpack_require__(22);\n\tvar parseqs = __webpack_require__(30);\n\tvar inherit = __webpack_require__(31);\n\tvar yeast = __webpack_require__(32);\n\tvar debug = __webpack_require__(3)('engine.io-client:websocket');\n\t\n\tvar BrowserWebSocket, NodeWebSocket;\n\t\n\tif (typeof WebSocket !== 'undefined') {\n\t  BrowserWebSocket = WebSocket;\n\t} else if (typeof self !== 'undefined') {\n\t  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n\t}\n\t\n\tif (typeof window === 'undefined') {\n\t  try {\n\t    NodeWebSocket = __webpack_require__(35);\n\t  } catch (e) { }\n\t}\n\t\n\t/**\n\t * Get either the `WebSocket` or `MozWebSocket` globals\n\t * in the browser or try to resolve WebSocket-compatible\n\t * interface exposed by `ws` for Node-like environment.\n\t */\n\t\n\tvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = WS;\n\t\n\t/**\n\t * WebSocket transport constructor.\n\t *\n\t * @api {Object} connection options\n\t * @api public\n\t */\n\t\n\tfunction WS (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  this.perMessageDeflate = opts.perMessageDeflate;\n\t  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n\t  this.protocols = opts.protocols;\n\t  if (!this.usingBrowserWebSocket) {\n\t    WebSocketImpl = NodeWebSocket;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(WS, Transport);\n\t\n\t/**\n\t * Transport name.\n\t *\n\t * @api public\n\t */\n\t\n\tWS.prototype.name = 'websocket';\n\t\n\t/*\n\t * WebSockets support binary\n\t */\n\t\n\tWS.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Opens socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doOpen = function () {\n\t  if (!this.check()) {\n\t    // let probe timeout\n\t    return;\n\t  }\n\t\n\t  var uri = this.uri();\n\t  var protocols = this.protocols;\n\t\n\t  var opts = {};\n\t\n\t  if (!this.isReactNative) {\n\t    opts.agent = this.agent;\n\t    opts.perMessageDeflate = this.perMessageDeflate;\n\t\n\t    // SSL options for Node.js client\n\t    opts.pfx = this.pfx;\n\t    opts.key = this.key;\n\t    opts.passphrase = this.passphrase;\n\t    opts.cert = this.cert;\n\t    opts.ca = this.ca;\n\t    opts.ciphers = this.ciphers;\n\t    opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  }\n\t\n\t  if (this.extraHeaders) {\n\t    opts.headers = this.extraHeaders;\n\t  }\n\t  if (this.localAddress) {\n\t    opts.localAddress = this.localAddress;\n\t  }\n\t\n\t  try {\n\t    this.ws =\n\t      this.usingBrowserWebSocket && !this.isReactNative\n\t        ? protocols\n\t          ? new WebSocketImpl(uri, protocols)\n\t          : new WebSocketImpl(uri)\n\t        : new WebSocketImpl(uri, protocols, opts);\n\t  } catch (err) {\n\t    return this.emit('error', err);\n\t  }\n\t\n\t  if (this.ws.binaryType === undefined) {\n\t    this.supportsBinary = false;\n\t  }\n\t\n\t  if (this.ws.supports && this.ws.supports.binary) {\n\t    this.supportsBinary = true;\n\t    this.ws.binaryType = 'nodebuffer';\n\t  } else {\n\t    this.ws.binaryType = 'arraybuffer';\n\t  }\n\t\n\t  this.addEventListeners();\n\t};\n\t\n\t/**\n\t * Adds event listeners to the socket\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.addEventListeners = function () {\n\t  var self = this;\n\t\n\t  this.ws.onopen = function () {\n\t    self.onOpen();\n\t  };\n\t  this.ws.onclose = function () {\n\t    self.onClose();\n\t  };\n\t  this.ws.onmessage = function (ev) {\n\t    self.onData(ev.data);\n\t  };\n\t  this.ws.onerror = function (e) {\n\t    self.onError('websocket error', e);\n\t  };\n\t};\n\t\n\t/**\n\t * Writes data to socket.\n\t *\n\t * @param {Array} array of packets.\n\t * @api private\n\t */\n\t\n\tWS.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t\n\t  // encodePacket efficient as it uses WS framing\n\t  // no need for encodePayload\n\t  var total = packets.length;\n\t  for (var i = 0, l = total; i < l; i++) {\n\t    (function (packet) {\n\t      parser.encodePacket(packet, self.supportsBinary, function (data) {\n\t        if (!self.usingBrowserWebSocket) {\n\t          // always create a new object (GH-437)\n\t          var opts = {};\n\t          if (packet.options) {\n\t            opts.compress = packet.options.compress;\n\t          }\n\t\n\t          if (self.perMessageDeflate) {\n\t            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n\t            if (len < self.perMessageDeflate.threshold) {\n\t              opts.compress = false;\n\t            }\n\t          }\n\t        }\n\t\n\t        // Sometimes the websocket has already been closed but the browser didn't\n\t        // have a chance of informing us about it yet, in that case send will\n\t        // throw an error\n\t        try {\n\t          if (self.usingBrowserWebSocket) {\n\t            // TypeError is thrown when passing the second argument on Safari\n\t            self.ws.send(data);\n\t          } else {\n\t            self.ws.send(data, opts);\n\t          }\n\t        } catch (e) {\n\t          debug('websocket closed before onclose event');\n\t        }\n\t\n\t        --total || done();\n\t      });\n\t    })(packets[i]);\n\t  }\n\t\n\t  function done () {\n\t    self.emit('flush');\n\t\n\t    // fake drain\n\t    // defer to next tick to allow Socket to clear writeBuffer\n\t    setTimeout(function () {\n\t      self.writable = true;\n\t      self.emit('drain');\n\t    }, 0);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon close\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.onClose = function () {\n\t  Transport.prototype.onClose.call(this);\n\t};\n\t\n\t/**\n\t * Closes socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doClose = function () {\n\t  if (typeof this.ws !== 'undefined') {\n\t    this.ws.close();\n\t  }\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'wss' : 'ws';\n\t  var port = '';\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n\t    ('ws' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // append timestamp to URI\n\t  if (this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  // communicate binary support capabilities\n\t  if (!this.supportsBinary) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\t\n\t/**\n\t * Feature detection for WebSocket.\n\t *\n\t * @return {Boolean} whether this transport is available.\n\t * @api public\n\t */\n\t\n\tWS.prototype.check = function () {\n\t  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n\t};\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\n\t/* (ignored) */\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n\t\n\tvar indexOf = [].indexOf;\n\t\n\tmodule.exports = function(arr, obj){\n\t  if (indexOf) return arr.indexOf(obj);\n\t  for (var i = 0; i < arr.length; ++i) {\n\t    if (arr[i] === obj) return i;\n\t  }\n\t  return -1;\n\t};\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(7);\n\tvar Emitter = __webpack_require__(8);\n\tvar toArray = __webpack_require__(38);\n\tvar on = __webpack_require__(39);\n\tvar bind = __webpack_require__(40);\n\tvar debug = __webpack_require__(3)('socket.io-client:socket');\n\tvar parseqs = __webpack_require__(30);\n\tvar hasBin = __webpack_require__(24);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = Socket;\n\t\n\t/**\n\t * Internal events (blacklisted).\n\t * These events can't be emitted by the user.\n\t *\n\t * @api private\n\t */\n\t\n\tvar events = {\n\t  connect: 1,\n\t  connect_error: 1,\n\t  connect_timeout: 1,\n\t  connecting: 1,\n\t  disconnect: 1,\n\t  error: 1,\n\t  reconnect: 1,\n\t  reconnect_attempt: 1,\n\t  reconnect_failed: 1,\n\t  reconnect_error: 1,\n\t  reconnecting: 1,\n\t  ping: 1,\n\t  pong: 1\n\t};\n\t\n\t/**\n\t * Shortcut to `Emitter#emit`.\n\t */\n\t\n\tvar emit = Emitter.prototype.emit;\n\t\n\t/**\n\t * `Socket` constructor.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Socket (io, nsp, opts) {\n\t  this.io = io;\n\t  this.nsp = nsp;\n\t  this.json = this; // compat\n\t  this.ids = 0;\n\t  this.acks = {};\n\t  this.receiveBuffer = [];\n\t  this.sendBuffer = [];\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  this.flags = {};\n\t  if (opts && opts.query) {\n\t    this.query = opts.query;\n\t  }\n\t  if (this.io.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Subscribe to open, close and packet events\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.subEvents = function () {\n\t  if (this.subs) return;\n\t\n\t  var io = this.io;\n\t  this.subs = [\n\t    on(io, 'open', bind(this, 'onopen')),\n\t    on(io, 'packet', bind(this, 'onpacket')),\n\t    on(io, 'close', bind(this, 'onclose'))\n\t  ];\n\t};\n\t\n\t/**\n\t * \"Opens\" the socket.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.open =\n\tSocket.prototype.connect = function () {\n\t  if (this.connected) return this;\n\t\n\t  this.subEvents();\n\t  if (!this.io.reconnecting) this.io.open(); // ensure open\n\t  if ('open' === this.io.readyState) this.onopen();\n\t  this.emit('connecting');\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a `message` event.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.send = function () {\n\t  var args = toArray(arguments);\n\t  args.unshift('message');\n\t  this.emit.apply(this, args);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Override `emit`.\n\t * If the event is in `events`, it's emitted normally.\n\t *\n\t * @param {String} event name\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.emit = function (ev) {\n\t  if (events.hasOwnProperty(ev)) {\n\t    emit.apply(this, arguments);\n\t    return this;\n\t  }\n\t\n\t  var args = toArray(arguments);\n\t  var packet = {\n\t    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n\t    data: args\n\t  };\n\t\n\t  packet.options = {};\n\t  packet.options.compress = !this.flags || false !== this.flags.compress;\n\t\n\t  // event ack callback\n\t  if ('function' === typeof args[args.length - 1]) {\n\t    debug('emitting packet with ack id %d', this.ids);\n\t    this.acks[this.ids] = args.pop();\n\t    packet.id = this.ids++;\n\t  }\n\t\n\t  if (this.connected) {\n\t    this.packet(packet);\n\t  } else {\n\t    this.sendBuffer.push(packet);\n\t  }\n\t\n\t  this.flags = {};\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.packet = function (packet) {\n\t  packet.nsp = this.nsp;\n\t  this.io.packet(packet);\n\t};\n\t\n\t/**\n\t * Called upon engine `open`.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onopen = function () {\n\t  debug('transport is open - connecting');\n\t\n\t  // write connect packet if necessary\n\t  if ('/' !== this.nsp) {\n\t    if (this.query) {\n\t      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\t      debug('sending connect packet with query %s', query);\n\t      this.packet({type: parser.CONNECT, query: query});\n\t    } else {\n\t      this.packet({type: parser.CONNECT});\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon engine `close`.\n\t *\n\t * @param {String} reason\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onclose = function (reason) {\n\t  debug('close (%s)', reason);\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  delete this.id;\n\t  this.emit('disconnect', reason);\n\t};\n\t\n\t/**\n\t * Called with socket packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onpacket = function (packet) {\n\t  var sameNamespace = packet.nsp === this.nsp;\n\t  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\t\n\t  if (!sameNamespace && !rootNamespaceError) return;\n\t\n\t  switch (packet.type) {\n\t    case parser.CONNECT:\n\t      this.onconnect();\n\t      break;\n\t\n\t    case parser.EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.BINARY_EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.BINARY_ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.DISCONNECT:\n\t      this.ondisconnect();\n\t      break;\n\t\n\t    case parser.ERROR:\n\t      this.emit('error', packet.data);\n\t      break;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon a server event.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onevent = function (packet) {\n\t  var args = packet.data || [];\n\t  debug('emitting event %j', args);\n\t\n\t  if (null != packet.id) {\n\t    debug('attaching ack callback to event');\n\t    args.push(this.ack(packet.id));\n\t  }\n\t\n\t  if (this.connected) {\n\t    emit.apply(this, args);\n\t  } else {\n\t    this.receiveBuffer.push(args);\n\t  }\n\t};\n\t\n\t/**\n\t * Produces an ack callback to emit with an event.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ack = function (id) {\n\t  var self = this;\n\t  var sent = false;\n\t  return function () {\n\t    // prevent double callbacks\n\t    if (sent) return;\n\t    sent = true;\n\t    var args = toArray(arguments);\n\t    debug('sending ack %j', args);\n\t\n\t    self.packet({\n\t      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n\t      id: id,\n\t      data: args\n\t    });\n\t  };\n\t};\n\t\n\t/**\n\t * Called upon a server acknowlegement.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onack = function (packet) {\n\t  var ack = this.acks[packet.id];\n\t  if ('function' === typeof ack) {\n\t    debug('calling ack %s with %j', packet.id, packet.data);\n\t    ack.apply(this, packet.data);\n\t    delete this.acks[packet.id];\n\t  } else {\n\t    debug('bad ack %s', packet.id);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon server connect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onconnect = function () {\n\t  this.connected = true;\n\t  this.disconnected = false;\n\t  this.emit('connect');\n\t  this.emitBuffered();\n\t};\n\t\n\t/**\n\t * Emit buffered events (received and emitted).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.emitBuffered = function () {\n\t  var i;\n\t  for (i = 0; i < this.receiveBuffer.length; i++) {\n\t    emit.apply(this, this.receiveBuffer[i]);\n\t  }\n\t  this.receiveBuffer = [];\n\t\n\t  for (i = 0; i < this.sendBuffer.length; i++) {\n\t    this.packet(this.sendBuffer[i]);\n\t  }\n\t  this.sendBuffer = [];\n\t};\n\t\n\t/**\n\t * Called upon server disconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ondisconnect = function () {\n\t  debug('server disconnect (%s)', this.nsp);\n\t  this.destroy();\n\t  this.onclose('io server disconnect');\n\t};\n\t\n\t/**\n\t * Called upon forced client/server side disconnections,\n\t * this method ensures the manager stops tracking us and\n\t * that reconnections don't get triggered for this.\n\t *\n\t * @api private.\n\t */\n\t\n\tSocket.prototype.destroy = function () {\n\t  if (this.subs) {\n\t    // clean subscriptions to avoid reconnections\n\t    for (var i = 0; i < this.subs.length; i++) {\n\t      this.subs[i].destroy();\n\t    }\n\t    this.subs = null;\n\t  }\n\t\n\t  this.io.destroy(this);\n\t};\n\t\n\t/**\n\t * Disconnects the socket manually.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.close =\n\tSocket.prototype.disconnect = function () {\n\t  if (this.connected) {\n\t    debug('performing disconnect (%s)', this.nsp);\n\t    this.packet({ type: parser.DISCONNECT });\n\t  }\n\t\n\t  // remove socket from pool\n\t  this.destroy();\n\t\n\t  if (this.connected) {\n\t    // fire events\n\t    this.onclose('io client disconnect');\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the compress flag.\n\t *\n\t * @param {Boolean} if `true`, compresses the sending data\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.compress = function (compress) {\n\t  this.flags.compress = compress;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the binary flag\n\t *\n\t * @param {Boolean} whether the emitted data contains binary\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.binary = function (binary) {\n\t  this.flags.binary = binary;\n\t  return this;\n\t};\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = toArray\n\t\n\tfunction toArray(list, index) {\n\t    var array = []\n\t\n\t    index = index || 0\n\t\n\t    for (var i = index || 0; i < list.length; i++) {\n\t        array[i - index] = list[i]\n\t    }\n\t\n\t    return array\n\t}\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = on;\n\t\n\t/**\n\t * Helper for subscriptions.\n\t *\n\t * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n\t * @param {String} event name\n\t * @param {Function} callback\n\t * @api public\n\t */\n\t\n\tfunction on (obj, ev, fn) {\n\t  obj.on(ev, fn);\n\t  return {\n\t    destroy: function () {\n\t      obj.removeListener(ev, fn);\n\t    }\n\t  };\n\t}\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Slice reference.\n\t */\n\t\n\tvar slice = [].slice;\n\t\n\t/**\n\t * Bind `obj` to `fn`.\n\t *\n\t * @param {Object} obj\n\t * @param {Function|String} fn or string\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(obj, fn){\n\t  if ('string' == typeof fn) fn = obj[fn];\n\t  if ('function' != typeof fn) throw new Error('bind() requires a function');\n\t  var args = slice.call(arguments, 2);\n\t  return function(){\n\t    return fn.apply(obj, args.concat(slice.call(arguments)));\n\t  }\n\t};\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Expose `Backoff`.\n\t */\n\t\n\tmodule.exports = Backoff;\n\t\n\t/**\n\t * Initialize backoff timer with `opts`.\n\t *\n\t * - `min` initial timeout in milliseconds [100]\n\t * - `max` max timeout [10000]\n\t * - `jitter` [0]\n\t * - `factor` [2]\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction Backoff(opts) {\n\t  opts = opts || {};\n\t  this.ms = opts.min || 100;\n\t  this.max = opts.max || 10000;\n\t  this.factor = opts.factor || 2;\n\t  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n\t  this.attempts = 0;\n\t}\n\t\n\t/**\n\t * Return the backoff duration.\n\t *\n\t * @return {Number}\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.duration = function(){\n\t  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n\t  if (this.jitter) {\n\t    var rand =  Math.random();\n\t    var deviation = Math.floor(rand * this.jitter * ms);\n\t    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n\t  }\n\t  return Math.min(ms, this.max) | 0;\n\t};\n\t\n\t/**\n\t * Reset the number of attempts.\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.reset = function(){\n\t  this.attempts = 0;\n\t};\n\t\n\t/**\n\t * Set the minimum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMin = function(min){\n\t  this.ms = min;\n\t};\n\t\n\t/**\n\t * Set the maximum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMax = function(max){\n\t  this.max = max;\n\t};\n\t\n\t/**\n\t * Set the jitter\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setJitter = function(jitter){\n\t  this.jitter = jitter;\n\t};\n\t\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// socket.io.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 841e359d3e4df861c732","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n    debug('ignoring socket cache for %s', source);\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n      debug('new io instance for %s', source);\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/index.js\n// module id = 0\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n      debug('protocol-less url %s', uri);\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n    debug('parse %s', uri);\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/url.js\n// module id = 1\n// module chunks = 0","/**\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    uri.pathNames = pathNames(uri, uri['path']);\n    uri.queryKey = queryKey(uri, uri['query']);\n\n    return uri;\n};\n\nfunction pathNames(obj, path) {\n    var regx = /\\/{2,9}/g,\n        names = path.replace(regx, \"/\").split(\"/\");\n\n    if (path.substr(0, 1) == '/' || path.length === 0) {\n        names.splice(0, 1);\n    }\n    if (path.substr(path.length - 1, 1) == '/') {\n        names.splice(names.length - 1, 1);\n    }\n\n    return names;\n}\n\nfunction queryKey(uri, query) {\n    var data = {};\n\n    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n        if ($1) {\n            data[$1] = $2;\n        }\n    });\n\n    return data;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","/**\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  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\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  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\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' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\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  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\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;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\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-zA-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}\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 (!r && typeof process !== 'undefined' && 'env' in 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\n\n// WEBPACK FOOTER //\n// ./~/debug/src/browser.js","// 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;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 4\n// module chunks = 0","\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 = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\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, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % 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 createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\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    // turn the `arguments` into a proper Array\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.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-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 (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\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  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (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  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\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  if (name[name.length - 1] === '*') {\n    return true;\n  }\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\n\n// WEBPACK FOOTER //\n// ./~/debug/src/debug.js","/**\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 ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\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 > 100) {\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(\n    str\n  );\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ms/index.js\n// module id = 6\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n  debug('encoding packet %j', obj);\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n  debug('encoded %j as %s', obj, str);\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n  debug('decoded %s as %j', str, p);\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 7\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 8\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 9\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 10\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 11\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n  debug('readyState %s', this.readyState);\n  if (~this.readyState.indexOf('open')) return this;\n\n  debug('opening %s', this.uri);\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n    debug('connect_error');\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n    debug('connect attempt will timeout after %d', timeout);\n\n    if (timeout === 0) {\n      openSub.destroy(); // prevents a race condition with the 'open' event\n    }\n\n    // set timer\n    var timer = setTimeout(function () {\n      debug('connect attempt timed out after %d', timeout);\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n  debug('open');\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n  debug('error', err);\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n  debug('writing packet %j', packet);\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n  debug('cleanup');\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n  debug('disconnect');\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n  debug('onclose');\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n    debug('reconnect failed');\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n    debug('will wait %dms before reconnect attempt', delay);\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n      debug('attempting reconnect');\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n          debug('reconnect attempt error');\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n          debug('reconnect success');\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/manager.js\n// module id = 12\n// module chunks = 0","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 13\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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(JSON.parse(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 14\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 15\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\nvar globalThis = require('./globalThis');\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 globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 16\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 17\n// module chunks = 0","module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/globalThis.browser.js\n// module id = 18\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\nvar globalThis = require('../globalThis');\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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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 && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 19\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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 && packet.type === 'open') {\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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 20\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 21\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 22\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 23\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 24\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 25\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 26\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 27\n// module chunks = 0","/*\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(chars){\n  \"use strict\";\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 = chars.indexOf(base64[i]);\n      encoded2 = chars.indexOf(base64[i+1]);\n      encoded3 = chars.indexOf(base64[i+2]);\n      encoded4 = chars.indexOf(base64[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})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 28\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 29\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 30\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 31\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 32\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\nvar globalThis = require('../globalThis');\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    callbacks = globalThis.___eio = (globalThis.___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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 33\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\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\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 34\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 36\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  if (!this.io.reconnecting) this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n    debug('emitting packet with ack id %d', this.ids);\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n  debug('transport is open - connecting');\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n      debug('sending connect packet with query %s', query);\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n  debug('close (%s)', reason);\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n  debug('emitting event %j', args);\n\n  if (null != packet.id) {\n    debug('attaching ack callback to event');\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n    debug('sending ack %j', args);\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n    debug('calling ack %s with %j', packet.id, packet.data);\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n    debug('bad ack %s', packet.id);\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n  debug('server disconnect (%s)', this.nsp);\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n    debug('performing disconnect (%s)', this.nsp);\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/socket.js\n// module id = 37\n// module chunks = 0","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 38\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/on.js\n// module id = 39\n// module chunks = 0","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 40\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 41\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
index d6b3fd8..7b39f7c 100644 (file)
@@ -1,6 +1,6 @@
 /*!
- * Socket.IO v2.3.0
- * (c) 2014-2019 Guillermo Rauch
+ * Socket.IO v2.4.0
+ * (c) 2014-2021 Guillermo Rauch
  * Released under the MIT License.
  */
 (function webpackUniversalModuleDefinition(root, factory) {
@@ -154,7 +154,7 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        exports.Manager = __webpack_require__(9);
-       exports.Socket = __webpack_require__(33);
+       exports.Socket = __webpack_require__(34);
 
 /***/ }),
 /* 1 */
@@ -278,8 +278,37 @@ return /******/ (function(modules) { // webpackBootstrap
                uri.ipv6uri = true;
            }
        
+           uri.pathNames = pathNames(uri, uri['path']);
+           uri.queryKey = queryKey(uri, uri['query']);
+       
            return uri;
        };
+       
+       function pathNames(obj, path) {
+           var regx = /\/{2,9}/g,
+               names = path.replace(regx, "/").split("/");
+       
+           if (path.substr(0, 1) == '/' || path.length === 0) {
+               names.splice(0, 1);
+           }
+           if (path.substr(path.length - 1, 1) == '/') {
+               names.splice(names.length - 1, 1);
+           }
+       
+           return names;
+       }
+       
+       function queryKey(uri, query) {
+           var data = {};
+       
+           query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {
+               if ($1) {
+                   data[$1] = $2;
+               }
+           });
+       
+           return data;
+       }
 
 
 /***/ }),
@@ -830,6 +859,13 @@ return /******/ (function(modules) { // webpackBootstrap
              break;
            }
          }
+       
+         // Remove event specific arrays for event types that no
+         // one is subscribed for to avoid memory leak.
+         if (callbacks.length === 0) {
+           delete this._callbacks['$' + event];
+         }
+       
          return this;
        };
        
@@ -843,9 +879,14 @@ return /******/ (function(modules) { // webpackBootstrap
        
        Emitter.prototype.emit = function(event){
          this._callbacks = this._callbacks || {};
-         var args = [].slice.call(arguments, 1)
+       
+         var args = new Array(arguments.length - 1)
            , callbacks = this._callbacks['$' + event];
        
+         for (var i = 1; i < arguments.length; i++) {
+           args[i - 1] = arguments[i];
+         }
+       
          if (callbacks) {
            callbacks = callbacks.slice(0);
            for (var i = 0, len = callbacks.length; i < len; ++i) {
@@ -1079,14 +1120,14 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        var eio = __webpack_require__(10);
-       var Socket = __webpack_require__(33);
+       var Socket = __webpack_require__(34);
        var Emitter = __webpack_require__(5);
        var parser = __webpack_require__(4);
-       var on = __webpack_require__(35);
-       var bind = __webpack_require__(36);
+       var on = __webpack_require__(36);
+       var bind = __webpack_require__(37);
        var debug = __webpack_require__(3)('socket.io-client:manager');
-       var indexOf = __webpack_require__(32);
-       var Backoff = __webpack_require__(37);
+       var indexOf = __webpack_require__(33);
+       var Backoff = __webpack_require__(38);
        
        /**
         * IE6+ hasOwnProperty
@@ -1328,6 +1369,10 @@ return /******/ (function(modules) { // webpackBootstrap
          if (false !== this._timeout) {
            var timeout = this._timeout;
        
+           if (timeout === 0) {
+             openSub.destroy(); // prevents a race condition with the 'open' event
+           }
+       
            // set timer
            var timer = setTimeout(function () {
        
@@ -1652,7 +1697,7 @@ return /******/ (function(modules) { // webpackBootstrap
         * @api public
         *
         */
-       module.exports.parser = __webpack_require__(18);
+       module.exports.parser = __webpack_require__(19);
 
 
 /***/ }),
@@ -1666,10 +1711,10 @@ return /******/ (function(modules) { // webpackBootstrap
        var transports = __webpack_require__(12);
        var Emitter = __webpack_require__(5);
        var debug = __webpack_require__(3)('engine.io-client:socket');
-       var index = __webpack_require__(32);
-       var parser = __webpack_require__(18);
+       var index = __webpack_require__(33);
+       var parser = __webpack_require__(19);
        var parseuri = __webpack_require__(2);
-       var parseqs = __webpack_require__(26);
+       var parseqs = __webpack_require__(27);
        
        /**
         * Module exports.
@@ -1805,9 +1850,9 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        Socket.Socket = Socket;
-       Socket.Transport = __webpack_require__(17);
+       Socket.Transport = __webpack_require__(18);
        Socket.transports = __webpack_require__(12);
-       Socket.parser = __webpack_require__(18);
+       Socket.parser = __webpack_require__(19);
        
        /**
         * Creates transport of the given type.
@@ -2418,9 +2463,9 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        var XMLHttpRequest = __webpack_require__(13);
-       var XHR = __webpack_require__(15);
-       var JSONP = __webpack_require__(29);
-       var websocket = __webpack_require__(30);
+       var XHR = __webpack_require__(16);
+       var JSONP = __webpack_require__(30);
+       var websocket = __webpack_require__(31);
        
        /**
         * Export transports.
@@ -2475,6 +2520,7 @@ return /******/ (function(modules) { // webpackBootstrap
        // browser shim for xmlhttprequest module
        
        var hasCORS = __webpack_require__(14);
+       var globalThis = __webpack_require__(15);
        
        module.exports = function (opts) {
          var xdomain = opts.xdomain;
@@ -2505,7 +2551,7 @@ return /******/ (function(modules) { // webpackBootstrap
        
          if (!xdomain) {
            try {
-             return new self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
+             return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
            } catch (e) { }
          }
        };
@@ -2536,6 +2582,21 @@ return /******/ (function(modules) { // webpackBootstrap
 
 /***/ }),
 /* 15 */
+/***/ (function(module, exports) {
+
+       module.exports = (function () {
+         if (typeof self !== 'undefined') {
+           return self;
+         } else if (typeof window !== 'undefined') {
+           return window;
+         } else {
+           return Function('return this')(); // eslint-disable-line no-new-func
+         }
+       })();
+
+
+/***/ }),
+/* 16 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /* global attachEvent */
@@ -2545,10 +2606,11 @@ return /******/ (function(modules) { // webpackBootstrap
         */
        
        var XMLHttpRequest = __webpack_require__(13);
-       var Polling = __webpack_require__(16);
+       var Polling = __webpack_require__(17);
        var Emitter = __webpack_require__(5);
-       var inherit = __webpack_require__(27);
+       var inherit = __webpack_require__(28);
        var debug = __webpack_require__(3)('engine.io-client:polling-xhr');
+       var globalThis = __webpack_require__(15);
        
        /**
         * Module exports.
@@ -2943,7 +3005,7 @@ return /******/ (function(modules) { // webpackBootstrap
          if (typeof attachEvent === 'function') {
            attachEvent('onunload', unloadHandler);
          } else if (typeof addEventListener === 'function') {
-           var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';
+           var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';
            addEventListener(terminationEvent, unloadHandler, false);
          }
        }
@@ -2958,18 +3020,18 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 16 */
+/* 17 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies.
         */
        
-       var Transport = __webpack_require__(17);
-       var parseqs = __webpack_require__(26);
-       var parser = __webpack_require__(18);
-       var inherit = __webpack_require__(27);
-       var yeast = __webpack_require__(28);
+       var Transport = __webpack_require__(18);
+       var parseqs = __webpack_require__(27);
+       var parser = __webpack_require__(19);
+       var inherit = __webpack_require__(28);
+       var yeast = __webpack_require__(29);
        var debug = __webpack_require__(3)('engine.io-client:polling');
        
        /**
@@ -3093,7 +3155,7 @@ return /******/ (function(modules) { // webpackBootstrap
        
          var callback = function (packet, index, total) {
            // if its the first message we consider the transport open
-           if ('opening' === self.readyState) {
+           if ('opening' === self.readyState && packet.type === 'open') {
              self.onOpen();
            }
        
@@ -3209,14 +3271,14 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 17 */
+/* 18 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies.
         */
        
-       var parser = __webpack_require__(18);
+       var parser = __webpack_require__(19);
        var Emitter = __webpack_require__(5);
        
        /**
@@ -3376,22 +3438,22 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 18 */
+/* 19 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies.
         */
        
-       var keys = __webpack_require__(19);
-       var hasBinary = __webpack_require__(20);
-       var sliceBuffer = __webpack_require__(21);
-       var after = __webpack_require__(22);
-       var utf8 = __webpack_require__(23);
+       var keys = __webpack_require__(20);
+       var hasBinary = __webpack_require__(21);
+       var sliceBuffer = __webpack_require__(22);
+       var after = __webpack_require__(23);
+       var utf8 = __webpack_require__(24);
        
        var base64encoder;
        if (typeof ArrayBuffer !== 'undefined') {
-         base64encoder = __webpack_require__(24);
+         base64encoder = __webpack_require__(25);
        }
        
        /**
@@ -3449,7 +3511,7 @@ return /******/ (function(modules) { // webpackBootstrap
         * Create a blob api even for blob builder when vendor prefixes exist
         */
        
-       var Blob = __webpack_require__(25);
+       var Blob = __webpack_require__(26);
        
        /**
         * Encodes a packet.
@@ -3987,7 +4049,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 19 */
+/* 20 */
 /***/ (function(module, exports) {
 
        
@@ -4012,7 +4074,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 20 */
+/* 21 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /* global Blob File */
@@ -4082,7 +4144,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 21 */
+/* 22 */
 /***/ (function(module, exports) {
 
        /**
@@ -4117,7 +4179,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 22 */
+/* 23 */
 /***/ (function(module, exports) {
 
        module.exports = after
@@ -4151,7 +4213,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 23 */
+/* 24 */
 /***/ (function(module, exports) {
 
        /*! https://mths.be/utf8js v2.1.2 by @mathias */
@@ -4367,7 +4429,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 24 */
+/* 25 */
 /***/ (function(module, exports) {
 
        /*
@@ -4377,17 +4439,9 @@ return /******/ (function(modules) { // webpackBootstrap
         * Copyright (c) 2012 Niklas von Hertzen
         * Licensed under the MIT license.
         */
-       (function(){
+       (function(chars){
          "use strict";
        
-         var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-       
-         // Use a lookup table to find the index.
-         var lookup = new Uint8Array(256);
-         for (var i = 0; i < chars.length; i++) {
-           lookup[chars.charCodeAt(i)] = i;
-         }
-       
          exports.encode = function(arraybuffer) {
            var bytes = new Uint8Array(arraybuffer),
            i, len = bytes.length, base64 = "";
@@ -4424,10 +4478,10 @@ return /******/ (function(modules) { // webpackBootstrap
            bytes = new Uint8Array(arraybuffer);
        
            for (i = 0; i < len; i+=4) {
-             encoded1 = lookup[base64.charCodeAt(i)];
-             encoded2 = lookup[base64.charCodeAt(i+1)];
-             encoded3 = lookup[base64.charCodeAt(i+2)];
-             encoded4 = lookup[base64.charCodeAt(i+3)];
+             encoded1 = chars.indexOf(base64[i]);
+             encoded2 = chars.indexOf(base64[i+1]);
+             encoded3 = chars.indexOf(base64[i+2]);
+             encoded4 = chars.indexOf(base64[i+3]);
        
              bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
              bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
@@ -4436,11 +4490,11 @@ return /******/ (function(modules) { // webpackBootstrap
        
            return arraybuffer;
          };
-       })();
+       })("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
 
 
 /***/ }),
-/* 25 */
+/* 26 */
 /***/ (function(module, exports) {
 
        /**
@@ -4546,7 +4600,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 26 */
+/* 27 */
 /***/ (function(module, exports) {
 
        /**
@@ -4589,7 +4643,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 27 */
+/* 28 */
 /***/ (function(module, exports) {
 
        
@@ -4601,7 +4655,7 @@ return /******/ (function(modules) { // webpackBootstrap
        };
 
 /***/ }),
-/* 28 */
+/* 29 */
 /***/ (function(module, exports) {
 
        'use strict';
@@ -4675,15 +4729,16 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 29 */
+/* 30 */
 /***/ (function(module, exports, __webpack_require__) {
 
-       /* WEBPACK VAR INJECTION */(function(global) {/**
+       /**
         * Module requirements.
         */
        
-       var Polling = __webpack_require__(16);
-       var inherit = __webpack_require__(27);
+       var Polling = __webpack_require__(17);
+       var inherit = __webpack_require__(28);
+       var globalThis = __webpack_require__(15);
        
        /**
         * Module exports.
@@ -4711,15 +4766,6 @@ return /******/ (function(modules) { // webpackBootstrap
        function empty () { }
        
        /**
-        * Until https://github.com/tc39/proposal-global is shipped.
-        */
-       function glob () {
-         return typeof self !== 'undefined' ? self
-             : typeof window !== 'undefined' ? window
-             : typeof global !== 'undefined' ? global : {};
-       }
-       
-       /**
         * JSONP Polling constructor.
         *
         * @param {Object} opts.
@@ -4735,8 +4781,7 @@ return /******/ (function(modules) { // webpackBootstrap
          // we do this here (lazily) to avoid unneeded global pollution
          if (!callbacks) {
            // we need to consider multiple engines in the same page
-           var global = glob();
-           callbacks = global.___eio = (global.___eio || []);
+           callbacks = globalThis.___eio = (globalThis.___eio || []);
          }
        
          // callback identifier
@@ -4917,22 +4962,21 @@ return /******/ (function(modules) { // webpackBootstrap
            this.iframe.onload = complete;
          }
        };
-       
-       /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
 
 /***/ }),
-/* 30 */
+/* 31 */
 /***/ (function(module, exports, __webpack_require__) {
 
        /**
         * Module dependencies.
         */
        
-       var Transport = __webpack_require__(17);
-       var parser = __webpack_require__(18);
-       var parseqs = __webpack_require__(26);
-       var inherit = __webpack_require__(27);
-       var yeast = __webpack_require__(28);
+       var Transport = __webpack_require__(18);
+       var parser = __webpack_require__(19);
+       var parseqs = __webpack_require__(27);
+       var inherit = __webpack_require__(28);
+       var yeast = __webpack_require__(29);
        var debug = __webpack_require__(3)('engine.io-client:websocket');
        
        var BrowserWebSocket, NodeWebSocket;
@@ -4945,7 +4989,7 @@ return /******/ (function(modules) { // webpackBootstrap
        
        if (typeof window === 'undefined') {
          try {
-           NodeWebSocket = __webpack_require__(31);
+           NodeWebSocket = __webpack_require__(32);
          } catch (e) { }
        }
        
@@ -5018,19 +5062,23 @@ return /******/ (function(modules) { // webpackBootstrap
        
          var uri = this.uri();
          var protocols = this.protocols;
-         var opts = {
-           agent: this.agent,
-           perMessageDeflate: this.perMessageDeflate
-         };
        
-         // SSL options for Node.js client
-         opts.pfx = this.pfx;
-         opts.key = this.key;
-         opts.passphrase = this.passphrase;
-         opts.cert = this.cert;
-         opts.ca = this.ca;
-         opts.ciphers = this.ciphers;
-         opts.rejectUnauthorized = this.rejectUnauthorized;
+         var opts = {};
+       
+         if (!this.isReactNative) {
+           opts.agent = this.agent;
+           opts.perMessageDeflate = this.perMessageDeflate;
+       
+           // SSL options for Node.js client
+           opts.pfx = this.pfx;
+           opts.key = this.key;
+           opts.passphrase = this.passphrase;
+           opts.cert = this.cert;
+           opts.ca = this.ca;
+           opts.ciphers = this.ciphers;
+           opts.rejectUnauthorized = this.rejectUnauthorized;
+         }
+       
          if (this.extraHeaders) {
            opts.headers = this.extraHeaders;
          }
@@ -5222,13 +5270,13 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 31 */
+/* 32 */
 /***/ (function(module, exports) {
 
        /* (ignored) */
 
 /***/ }),
-/* 32 */
+/* 33 */
 /***/ (function(module, exports) {
 
        
@@ -5243,7 +5291,7 @@ return /******/ (function(modules) { // webpackBootstrap
        };
 
 /***/ }),
-/* 33 */
+/* 34 */
 /***/ (function(module, exports, __webpack_require__) {
 
        'use strict';
@@ -5256,12 +5304,12 @@ return /******/ (function(modules) { // webpackBootstrap
        
        var parser = __webpack_require__(4);
        var Emitter = __webpack_require__(5);
-       var toArray = __webpack_require__(34);
-       var on = __webpack_require__(35);
-       var bind = __webpack_require__(36);
+       var toArray = __webpack_require__(35);
+       var on = __webpack_require__(36);
+       var bind = __webpack_require__(37);
        var debug = __webpack_require__(3)('socket.io-client:socket');
-       var parseqs = __webpack_require__(26);
-       var hasBin = __webpack_require__(20);
+       var parseqs = __webpack_require__(27);
+       var hasBin = __webpack_require__(21);
        
        /**
         * Module exports.
@@ -5350,7 +5398,7 @@ return /******/ (function(modules) { // webpackBootstrap
          if (this.connected) return this;
        
          this.subEvents();
-         this.io.open(); // ensure open
+         if (!this.io.reconnecting) this.io.open(); // ensure open
          if ('open' === this.io.readyState) this.onopen();
          this.emit('connecting');
          return this;
@@ -5678,7 +5726,7 @@ return /******/ (function(modules) { // webpackBootstrap
        };
 
 /***/ }),
-/* 34 */
+/* 35 */
 /***/ (function(module, exports) {
 
        module.exports = toArray
@@ -5697,7 +5745,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 35 */
+/* 36 */
 /***/ (function(module, exports) {
 
        "use strict";
@@ -5727,7 +5775,7 @@ return /******/ (function(modules) { // webpackBootstrap
        }
 
 /***/ }),
-/* 36 */
+/* 37 */
 /***/ (function(module, exports) {
 
        /**
@@ -5756,7 +5804,7 @@ return /******/ (function(modules) { // webpackBootstrap
 
 
 /***/ }),
-/* 37 */
+/* 38 */
 /***/ (function(module, exports) {
 
        
@@ -5850,4 +5898,4 @@ return /******/ (function(modules) { // webpackBootstrap
 /******/ ])
 });
 ;
-//# sourceMappingURL=socket.io.slim.dev.js.map
\ No newline at end of file
+//# sourceMappingURL=socket.io.slim.dev.js.map
index 5082289..e55be08 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 808b2ef720f56a2d39b6","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./support/noop.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///ws (ignored)","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["url","require","parser","Manager","debug","module","exports","lookup","cache","managers","uri","opts","undefined","parsed","source","id","path","sameNamespace","nsps","newConnection","forceNew","multiplex","io","query","socket","protocol","connect","Socket","parseuri","loc","obj","location","host","charAt","test","port","ipv6","indexOf","href","eio","Emitter","on","bind","Backoff","has","Object","prototype","hasOwnProperty","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","min","max","jitter","timeout","readyState","connecting","lastPing","encoding","packetBuffer","_parser","encoder","Encoder","decoder","Decoder","autoConnect","open","emitAll","emit","apply","arguments","nsp","call","updateSocketIds","generateId","engine","v","length","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","fn","self","skipReconnect","openSub","onopen","errorSub","data","cleanup","err","Error","timer","setTimeout","destroy","close","push","clearTimeout","onping","Date","onpong","ondata","add","ondecoded","packet","onerror","onConnecting","index","splice","type","encode","encodedPackets","i","write","options","processPacketQueue","pack","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","toArray","parseqs","hasBin","events","connect_error","connect_timeout","error","reconnect_attempt","reconnect_failed","reconnect_error","ping","pong","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","subEvents","send","args","unshift","ev","binary","BINARY_EVENT","EVENT","compress","pop","CONNECT","onpacket","rootNamespaceError","ERROR","onconnect","onevent","ACK","onack","BINARY_ACK","DISCONNECT","ondisconnect","ack","sent","emitBuffered","removeListener"],"mappings":"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AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;;;AAGA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B,uBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,sFAAqF;AACrF;;AAEA;AACA;AACA;AACA;AACA,MAAK,OAAO;AACZ;AACA;AACA,IAAG,qCAAqC;AACxC;AACA;AACA,MAAK;AACL;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,oBAAoB;AAChC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7ZA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;AClKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC,WAAU;AACV;;AAEA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA,IAAG;AACH;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA,kCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,8BAA6B;AAC7B,IAAG;AACH,oBAAmB,iBAAiB;AACpC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC;AACxC,MAAK,yBAAyB;AAC9B,sBAAqB,gBAAgB;AACrC;AACA;AACA,MAAK,mDAAmD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5IA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AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA2F;;AAE3F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;;AAEA,+CAA8C,WAAW;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA,sBAAqB,8BAA8B;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;;AAEA;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8CAA6C,OAAO;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA;AACA;AACA;;;;;;;AC3uBA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA,MAAK,YAAY;AACjB;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;;;;;;AChBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA,2BAA0B,iDAAiD;AAC3E;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,UAAS;AACT,4DAA2D;AAC3D;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,gIAA+H;AAC/H;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;;AAGA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,iGAAgG;AAChG;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChaA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,iBAAiB;AACjD;AACA,EAAC;;AAED;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,kBAAiB,gBAAgB;AACjC;;AAEA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACpPA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,YAAW;;AAEX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+DAA8D,gBAAgB;AAC9E;;AAEA;;AAEA;;AAEA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B,qCAAqC;AAC/D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAc;AACd,MAAK;AACL,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA,+BAA8B,gBAAgB;AAC9C,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,aAAY,oBAAoB,oCAAoC;AACpE;;AAEA;;AAEA;AACA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY,YAAY;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oDAAmD;AACnD,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA,QAAO,OAAO;AACd;AACA;;AAEA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA,MAAK;;AAEL;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,EAAE;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;;;;;;;AC3lBA;AACA;AACA;AACA,aAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B,sCAAsC;;AAEhE,mBAAkB,gBAAgB;AAClC,iBAAgB,cAAc;AAC9B,qBAAoB,aAAa;;AAEjC;AACA;AACA;;AAEA;AACA;AACA,8BAA6B,SAAS;AACtC;AACA;AACA;AACA;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA,KAAI;AACJ,4BAA2B;AAC3B;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;;AAEA;AACA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;;;AClED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA,0DAAyD;AACzD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA,EAAC;;;;;;;ACnGD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,cAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAM,YAAY;;AAElB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;;AC9OA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,IAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;;AAET;;AAEA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;;;;;;ACtSA,gB;;;;;;;ACCA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA,G;;;;;;;;;;ACRA;;;;AAIA,KAAI3I,SAAS,mBAAAD,CAAQ,CAAR,CAAb;AACA,KAAIuC,UAAU,mBAAAvC,CAAQ,CAAR,CAAd;AACA,KAAI6I,UAAU,mBAAA7I,CA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","file":"socket.io.slim.dev.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 808b2ef720f56a2d39b6","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/index.js","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/url.js","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","\nmodule.exports = function () { return function () {}; };\n\n\n\n// WEBPACK FOOTER //\n// ./support/noop.js","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 4\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 5\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 6\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 7\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 8\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n\n  if (~this.readyState.indexOf('open')) return this;\n\n\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n\n\n    // set timer\n    var timer = setTimeout(function () {\n\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/manager.js","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 10\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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\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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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\n  var self = this;\n\n  if (this.transport) {\n\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\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\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\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n\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\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\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\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\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\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\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(JSON.parse(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\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\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\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\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\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\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 11\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 12\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('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 self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 13\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 14\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 15\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n\n      total++;\n      this.once('pollComplete', function () {\n\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n\n      total++;\n      this.once('drain', function () {\n\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\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\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\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\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n\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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 18\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 19\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 20\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 21\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 22\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 23\n// module chunks = 0","/*\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 24\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 25\n// module chunks = 0","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 26\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 27\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 28\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('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 * Until https://github.com/tc39/proposal-global is shipped.\n */\nfunction glob () {\n  return typeof self !== 'undefined' ? self\n      : typeof window !== 'undefined' ? window\n      : typeof global !== 'undefined' ? global : {};\n}\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    var global = glob();\n    callbacks = global.___eio = (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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 29\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\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  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 30\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// ws (ignored)\n// module id = 31\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 32\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n\n\n  if (null != packet.id) {\n\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/socket.js","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 34\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/on.js","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 36\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 37\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 47422d5bf02356bd34bb","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./support/noop.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/globalThis.browser.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///ws (ignored)","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["url","require","parser","Manager","debug","module","exports","lookup","cache","managers","uri","opts","undefined","parsed","source","id","path","sameNamespace","nsps","newConnection","forceNew","multiplex","io","query","socket","protocol","connect","Socket","parseuri","loc","obj","location","host","charAt","test","port","ipv6","indexOf","href","eio","Emitter","on","bind","Backoff","has","Object","prototype","hasOwnProperty","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","min","max","jitter","timeout","readyState","connecting","lastPing","encoding","packetBuffer","_parser","encoder","Encoder","decoder","Decoder","autoConnect","open","emitAll","emit","apply","arguments","nsp","call","updateSocketIds","generateId","engine","v","length","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","fn","self","skipReconnect","openSub","onopen","errorSub","data","cleanup","err","Error","destroy","timer","setTimeout","close","push","clearTimeout","onping","Date","onpong","ondata","add","ondecoded","packet","onerror","onConnecting","index","splice","type","encode","encodedPackets","i","write","options","processPacketQueue","pack","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","toArray","parseqs","hasBin","events","connect_error","connect_timeout","error","reconnect_attempt","reconnect_failed","reconnect_error","ping","pong","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","subEvents","send","args","unshift","ev","binary","BINARY_EVENT","EVENT","compress","pop","CONNECT","onpacket","rootNamespaceError","ERROR","onconnect","onevent","ACK","onack","BINARY_ACK","DISCONNECT","ondisconnect","ack","sent","emitBuffered","removeListener"],"mappings":"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AEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;;;AAGA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B,uBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,sFAAqF;AACrF;;AAEA;AACA;AACA;AACA;AACA,MAAK,OAAO;AACZ;AACA;AACA,IAAG,qCAAqC;AACxC;AACA;AACA,MAAK;AACL;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,oBAAoB;AAChC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,qBAAqB;AAChC,aAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;AACA,4DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7ZA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY;AACZ;;AAEA;AACA;;AAEA;AACA;;AAEA,kBAAiB,sBAAsB;AACvC;AACA;;AAEA;AACA;AACA,4CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;AC9KA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC,WAAU;AACV;;AAEA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA,IAAG;AACH;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA,kCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,8BAA6B;AAC7B,IAAG;AACH,oBAAmB,iBAAiB;AACpC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;AACA;AACA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AAL,CAAagF,KAAb;AACA,QAAKzD,eAAL;AACA,QAAKN,OAAL,CAAa,WAAb,EAA0BqE,OAA1B;AACD,EAND,C;;;;;;;ACzjBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA2F;;AAE3F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;;AAEA,+CAA8C,WAAW;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA,sBAAqB,8BAA8B;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;;AAEA;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8CAA6C,OAAO;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA;AACA;AACA;;;;;;;AC3uBA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG,YAAY;;AAEf;AACA;AACA;AACA,MAAK,YAAY;AACjB;AACA;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;;;;;;AChBA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH,sCAAqC;AACrC;AACA,EAAC;;;;;;;ACRD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA,2BAA0B,iDAAiD;AAC3E;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,UAAS;AACT,4DAA2D;AAC3D;AACA,QAAO;AACP;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,gIAA+H;AAC/H;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;;AAGA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,iGAAgG;AAChG;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjaA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,iBAAiB;AACjD;AACA,EAAC;;AAED;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,kBAAiB,gBAAgB;AACjC;;AAEA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACpPA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,UAAU;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AChKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,YAAW;;AAEX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA,+BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+DAA8D,gBAAgB;AAC9E;;AAEA;;AAEA;;AAEA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B,qCAAqC;AAC/D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAc;AACd,MAAK;AACL,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA,+BAA8B,gBAAgB;AAC9C,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA,aAAY,oBAAoB,oCAAoC;AACpE;;AAEA;;AAEA;AACA;AACA;;AAEA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY,YAAY;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oDAAmD;AACnD,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA,QAAO,OAAO;AACd;AACA;;AAEA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA,MAAK;;AAEL;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,EAAE;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;;;;;;;AC3lBA;AACA;AACA;AACA,aAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B,sCAAsC;;AAEhE,mBAAkB,gBAAgB;AAClC,iBAAgB,cAAc;AAC9B,qBAAoB,aAAa;;AAEjC;AACA;AACA;;AAEA;AACA;AACA,8BAA6B,SAAS;AACtC;AACA;AACA;AACA;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA,KAAI;AACJ,4BAA2B;AAC3B;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;;;AC1DD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA,0DAAyD;AACzD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA,EAAC;;;;;;;ACnGD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACNA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,cAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAM,YAAY;;AAElB;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,oBAAmB;;AAEnB;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACrOA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,IAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS,OAAO;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;;AAET;;AAEA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AA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A4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;;;;;;;;;ACXA;;;;AAIAlK,QAAOC,OAAP,GAAiBmC,EAAjB;;AAEA;;;;;;;;;AASA,UAASA,EAAT,CAAaX,GAAb,EAAkBwI,EAAlB,EAAsBtE,EAAtB,EAA0B;AACxBlE,OAAIW,EAAJ,CAAO6H,EAAP,EAAWtE,EAAX;AACA,UAAO;AACLU,cAAS,mBAAY;AACnB5E,WAAI4J,cAAJ,CAAmBpB,EAAnB,EAAuBtE,EAAvB;AACD;AAHI,IAAP;AAKD,E;;;;;;ACvBD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,gBAAgB;AAC3B,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"socket.io.slim.dev.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 47422d5bf02356bd34bb","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/index.js","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/url.js","/**\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    uri.pathNames = pathNames(uri, uri['path']);\n    uri.queryKey = queryKey(uri, uri['query']);\n\n    return uri;\n};\n\nfunction pathNames(obj, path) {\n    var regx = /\\/{2,9}/g,\n        names = path.replace(regx, \"/\").split(\"/\");\n\n    if (path.substr(0, 1) == '/' || path.length === 0) {\n        names.splice(0, 1);\n    }\n    if (path.substr(path.length - 1, 1) == '/') {\n        names.splice(names.length - 1, 1);\n    }\n\n    return names;\n}\n\nfunction queryKey(uri, query) {\n    var data = {};\n\n    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n        if ($1) {\n            data[$1] = $2;\n        }\n    });\n\n    return data;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","\nmodule.exports = function () { return function () {}; };\n\n\n\n// WEBPACK FOOTER //\n// ./support/noop.js","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 4\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 5\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 6\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 7\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 8\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n\n  if (~this.readyState.indexOf('open')) return this;\n\n\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n\n\n    if (timeout === 0) {\n      openSub.destroy(); // prevents a race condition with the 'open' event\n    }\n\n    // set timer\n    var timer = setTimeout(function () {\n\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/manager.js","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 10\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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\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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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\n  var self = this;\n\n  if (this.transport) {\n\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\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\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\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n\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\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\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\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\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\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\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(JSON.parse(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\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\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\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\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\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\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 11\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 12\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\nvar globalThis = require('./globalThis');\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 globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 13\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 14\n// module chunks = 0","module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/globalThis.browser.js\n// module id = 15\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\nvar globalThis = require('../globalThis');\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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n\n      total++;\n      this.once('pollComplete', function () {\n\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n\n      total++;\n      this.once('drain', function () {\n\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\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\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState && packet.type === 'open') {\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\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\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n\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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 18\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 19\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 20\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 21\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 22\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 23\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 24\n// module chunks = 0","/*\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(chars){\n  \"use strict\";\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 = chars.indexOf(base64[i]);\n      encoded2 = chars.indexOf(base64[i+1]);\n      encoded3 = chars.indexOf(base64[i+2]);\n      encoded4 = chars.indexOf(base64[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})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 25\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 26\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 27\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 28\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 29\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\nvar globalThis = require('../globalThis');\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    callbacks = globalThis.___eio = (globalThis.___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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 30\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\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\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 31\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// ws (ignored)\n// module id = 32\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 33\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  if (!this.io.reconnecting) this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n\n\n  if (null != packet.id) {\n\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/socket.js","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 35\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/on.js","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 37\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 38\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
index 2d89d90..52a2173 100644 (file)
@@ -1,9 +1,9 @@
 /*!
- * Socket.IO v2.3.0
- * (c) 2014-2019 Guillermo Rauch
+ * Socket.IO v2.4.0
+ * (c) 2014-2021 Guillermo Rauch
  * Released under the MIT License.
  */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function n(t,e){"object"===("undefined"==typeof t?"undefined":o(t))&&(e=t,t=void 0),e=e||{};var r,n=i(t),s=n.source,p=n.id,h=n.path,u=c[p]&&h in c[p].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||u;return f?r=a(s,e):(c[p]||(c[p]=a(s,e)),r=c[p]),n.query&&!e.query&&(e.query=n.query),r.socket(n.path,e)}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(1),s=r(4),a=r(9);r(3)("socket.io-client");t.exports=e=n;var c=e.managers={};e.protocol=s.protocol,e.connect=n,e.Manager=r(9),e.Socket=r(33)},function(t,e,r){"use strict";function n(t,e){var r=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),r=o(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var n=r.host.indexOf(":")!==-1,i=n?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+i+":"+r.port,r.href=r.protocol+"://"+i+(e&&e.port===r.port?"":":"+r.port),r}var o=r(2);r(3)("socket.io-client:url");t.exports=n},function(t,e){var r=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,n=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");o!=-1&&i!=-1&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s=r.exec(t||""),a={},c=14;c--;)a[n[c]]=s[c]||"";return o!=-1&&i!=-1&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a}},function(t,e){"use strict";t.exports=function(){return function(){}}},function(t,e,r){function n(){}function o(t){var r=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(r+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(r+=t.nsp+","),null!=t.id&&(r+=t.id),null!=t.data){var n=i(t.data);if(n===!1)return m;r+=n}return r}function i(t){try{return JSON.stringify(t)}catch(t){return!1}}function s(t,e){function r(t){var r=l.deconstructPacket(t),n=o(r.packet),i=r.buffers;i.unshift(n),e(i)}l.removeBlobs(t,r)}function a(){this.reconstructor=null}function c(t){var r=0,n={type:Number(t.charAt(0))};if(null==e.types[n.type])return u("unknown packet type "+n.type);if(e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type){for(var o="";"-"!==t.charAt(++r)&&(o+=t.charAt(r),r!=t.length););if(o!=Number(o)||"-"!==t.charAt(r))throw new Error("Illegal attachments");n.attachments=Number(o)}if("/"===t.charAt(r+1))for(n.nsp="";++r;){var i=t.charAt(r);if(","===i)break;if(n.nsp+=i,r===t.length)break}else n.nsp="/";var s=t.charAt(r+1);if(""!==s&&Number(s)==s){for(n.id="";++r;){var i=t.charAt(r);if(null==i||Number(i)!=i){--r;break}if(n.id+=t.charAt(r),r===t.length)break}n.id=Number(n.id)}if(t.charAt(++r)){var a=p(t.substr(r)),c=a!==!1&&(n.type===e.ERROR||d(a));if(!c)return u("invalid payload");n.data=a}return n}function p(t){try{return JSON.parse(t)}catch(t){return!1}}function h(t){this.reconPack=t,this.buffers=[]}function u(t){return{type:e.ERROR,data:"parser error: "+t}}var f=(r(3)("socket.io-parser"),r(5)),l=r(6),d=r(7),y=r(8);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=n,e.Decoder=a;var m=e.ERROR+'"encode error"';n.prototype.encode=function(t,r){if(e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,r);else{var n=o(t);r([n])}},f(a.prototype),a.prototype.add=function(t){var r;if("string"==typeof t)r=c(t),e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type?(this.reconstructor=new h(r),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",r)):this.emit("decoded",r);else{if(!y(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");r=this.reconstructor.takeBinaryData(t),r&&(this.reconstructor=null,this.emit("decoded",r))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},h.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=l.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},h.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,r){function n(t){if(t)return o(t)}function o(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},n.prototype.once=function(t,e){function r(){this.off(t,r),e.apply(this,arguments)}return r.fn=e,this.on(t,r),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var n,o=0;o<r.length;o++)if(n=r[o],n===e||n.fn===e){r.splice(o,1);break}return this},n.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),r=this._callbacks["$"+t];if(r){r=r.slice(0);for(var n=0,o=r.length;n<o;++n)r[n].apply(this,e)}return this},n.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},n.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,r){function n(t,e){if(!t)return t;if(s(t)){var r={_placeholder:!0,num:e.length};return e.push(t),r}if(i(t)){for(var o=new Array(t.length),a=0;a<t.length;a++)o[a]=n(t[a],e);return o}if("object"==typeof t&&!(t instanceof Date)){var o={};for(var c in t)o[c]=n(t[c],e);return o}return t}function o(t,e){if(!t)return t;if(t&&t._placeholder)return e[t.num];if(i(t))for(var r=0;r<t.length;r++)t[r]=o(t[r],e);else if("object"==typeof t)for(var n in t)t[n]=o(t[n],e);return t}var i=r(7),s=r(8),a=Object.prototype.toString,c="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===a.call(Blob),p="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===a.call(File);e.deconstructPacket=function(t){var e=[],r=t.data,o=t;return o.data=n(r,e),o.attachments=e.length,{packet:o,buffers:e}},e.reconstructPacket=function(t,e){return t.data=o(t.data,e),t.attachments=void 0,t},e.removeBlobs=function(t,e){function r(t,a,h){if(!t)return t;if(c&&t instanceof Blob||p&&t instanceof File){n++;var u=new FileReader;u.onload=function(){h?h[a]=this.result:o=this.result,--n||e(o)},u.readAsArrayBuffer(t)}else if(i(t))for(var f=0;f<t.length;f++)r(t[f],f,t);else if("object"==typeof t&&!s(t))for(var l in t)r(t[l],l,t)}var n=0,o=t;r(o),n||e(o)}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e){function r(t){return n&&Buffer.isBuffer(t)||o&&(t instanceof ArrayBuffer||i(t))}t.exports=r;var n="function"==typeof Buffer&&"function"==typeof Buffer.isBuffer,o="function"==typeof ArrayBuffer,i=function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer}},function(t,e,r){"use strict";function n(t,e){if(!(this instanceof n))return new n(t,e);t&&"object"===("undefined"==typeof t?"undefined":o(t))&&(e=t,t=void 0),e=e||{},e.path=e.path||"/socket.io",this.nsps={},this.subs=[],this.opts=e,this.reconnection(e.reconnection!==!1),this.reconnectionAttempts(e.reconnectionAttempts||1/0),this.reconnectionDelay(e.reconnectionDelay||1e3),this.reconnectionDelayMax(e.reconnectionDelayMax||5e3),this.randomizationFactor(e.randomizationFactor||.5),this.backoff=new f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==e.timeout?2e4:e.timeout),this.readyState="closed",this.uri=t,this.connecting=[],this.lastPing=null,this.encoding=!1,this.packetBuffer=[];var r=e.parser||c;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this.autoConnect=e.autoConnect!==!1,this.autoConnect&&this.open()}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(10),s=r(33),a=r(5),c=r(4),p=r(35),h=r(36),u=(r(3)("socket.io-client:manager"),r(32)),f=r(37),l=Object.prototype.hasOwnProperty;t.exports=n,n.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var t in this.nsps)l.call(this.nsps,t)&&this.nsps[t].emit.apply(this.nsps[t],arguments)},n.prototype.updateSocketIds=function(){for(var t in this.nsps)l.call(this.nsps,t)&&(this.nsps[t].id=this.generateId(t))},n.prototype.generateId=function(t){return("/"===t?"":t+"#")+this.engine.id},a(n.prototype),n.prototype.reconnection=function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection},n.prototype.reconnectionAttempts=function(t){return arguments.length?(this._reconnectionAttempts=t,this):this._reconnectionAttempts},n.prototype.reconnectionDelay=function(t){return arguments.length?(this._reconnectionDelay=t,this.backoff&&this.backoff.setMin(t),this):this._reconnectionDelay},n.prototype.randomizationFactor=function(t){return arguments.length?(this._randomizationFactor=t,this.backoff&&this.backoff.setJitter(t),this):this._randomizationFactor},n.prototype.reconnectionDelayMax=function(t){return arguments.length?(this._reconnectionDelayMax=t,this.backoff&&this.backoff.setMax(t),this):this._reconnectionDelayMax},n.prototype.timeout=function(t){return arguments.length?(this._timeout=t,this):this._timeout},n.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},n.prototype.open=n.prototype.connect=function(t,e){if(~this.readyState.indexOf("open"))return this;this.engine=i(this.uri,this.opts);var r=this.engine,n=this;this.readyState="opening",this.skipReconnect=!1;var o=p(r,"open",function(){n.onopen(),t&&t()}),s=p(r,"error",function(e){if(n.cleanup(),n.readyState="closed",n.emitAll("connect_error",e),t){var r=new Error("Connection error");r.data=e,t(r)}else n.maybeReconnectOnOpen()});if(!1!==this._timeout){var a=this._timeout,c=setTimeout(function(){o.destroy(),r.close(),r.emit("error","timeout"),n.emitAll("connect_timeout",a)},a);this.subs.push({destroy:function(){clearTimeout(c)}})}return this.subs.push(o),this.subs.push(s),this},n.prototype.onopen=function(){this.cleanup(),this.readyState="open",this.emit("open");var t=this.engine;this.subs.push(p(t,"data",h(this,"ondata"))),this.subs.push(p(t,"ping",h(this,"onping"))),this.subs.push(p(t,"pong",h(this,"onpong"))),this.subs.push(p(t,"error",h(this,"onerror"))),this.subs.push(p(t,"close",h(this,"onclose"))),this.subs.push(p(this.decoder,"decoded",h(this,"ondecoded")))},n.prototype.onping=function(){this.lastPing=new Date,this.emitAll("ping")},n.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)},n.prototype.ondata=function(t){this.decoder.add(t)},n.prototype.ondecoded=function(t){this.emit("packet",t)},n.prototype.onerror=function(t){this.emitAll("error",t)},n.prototype.socket=function(t,e){function r(){~u(o.connecting,n)||o.connecting.push(n)}var n=this.nsps[t];if(!n){n=new s(this,t,e),this.nsps[t]=n;var o=this;n.on("connecting",r),n.on("connect",function(){n.id=o.generateId(t)}),this.autoConnect&&r()}return n},n.prototype.destroy=function(t){var e=u(this.connecting,t);~e&&this.connecting.splice(e,1),this.connecting.length||this.close()},n.prototype.packet=function(t){var e=this;t.query&&0===t.type&&(t.nsp+="?"+t.query),e.encoding?e.packetBuffer.push(t):(e.encoding=!0,this.encoder.encode(t,function(r){for(var n=0;n<r.length;n++)e.engine.write(r[n],t.options);e.encoding=!1,e.processPacketQueue()}))},n.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},n.prototype.cleanup=function(){for(var t=this.subs.length,e=0;e<t;e++){var r=this.subs.shift();r.destroy()}this.packetBuffer=[],this.encoding=!1,this.lastPing=null,this.decoder.destroy()},n.prototype.close=n.prototype.disconnect=function(){this.skipReconnect=!0,this.reconnecting=!1,"opening"===this.readyState&&this.cleanup(),this.backoff.reset(),this.readyState="closed",this.engine&&this.engine.close()},n.prototype.onclose=function(t){this.cleanup(),this.backoff.reset(),this.readyState="closed",this.emit("close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()},n.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();this.reconnecting=!0;var r=setTimeout(function(){t.skipReconnect||(t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):t.onreconnect()}))},e);this.subs.push({destroy:function(){clearTimeout(r)}})}},n.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,r){t.exports=r(11),t.exports.parser=r(18)},function(t,e,r){function n(t,e){return this instanceof n?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new n(t,e)}function o(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}var i=r(12),s=r(5),a=(r(3)("engine.io-client:socket"),r(32)),c=r(18),p=r(2),h=r(26);t.exports=n,n.priorWebsocketSuccess=!1,s(n.prototype),n.protocol=c.protocol,n.Socket=n,n.Transport=r(17),n.transports=r(12),n.parser=r(18),n.prototype.createTransport=function(t){var e=o(this.query);e.EIO=c.protocol,e.transport=t;var r=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var n=new i[t]({query:e,socket:this,agent:r.agent||this.agent,hostname:r.hostname||this.hostname,port:r.port||this.port,secure:r.secure||this.secure,path:r.path||this.path,forceJSONP:r.forceJSONP||this.forceJSONP,jsonp:r.jsonp||this.jsonp,forceBase64:r.forceBase64||this.forceBase64,enablesXDR:r.enablesXDR||this.enablesXDR,withCredentials:r.withCredentials||this.withCredentials,timestampRequests:r.timestampRequests||this.timestampRequests,timestampParam:r.timestampParam||this.timestampParam,policyPort:r.policyPort||this.policyPort,pfx:r.pfx||this.pfx,key:r.key||this.key,passphrase:r.passphrase||this.passphrase,cert:r.cert||this.cert,ca:r.ca||this.ca,ciphers:r.ciphers||this.ciphers,rejectUnauthorized:r.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:r.perMessageDeflate||this.perMessageDeflate,extraHeaders:r.extraHeaders||this.extraHeaders,forceNode:r.forceNode||this.forceNode,localAddress:r.localAddress||this.localAddress,requestTimeout:r.requestTimeout||this.requestTimeout,protocols:r.protocols||void 0,isReactNative:this.isReactNative});return n},n.prototype.open=function(){var t;if(this.rememberUpgrade&&n.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{if(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},n.prototype.setTransport=function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},n.prototype.probe=function(t){function e(){if(u.onlyBinaryUpgrades){var t=!this.supportsBinary&&u.transport.supportsBinary;h=h||t}h||(p.send([{type:"ping",data:"probe"}]),p.once("packet",function(t){if(!h)if("pong"===t.type&&"probe"===t.data){if(u.upgrading=!0,u.emit("upgrading",p),!p)return;n.priorWebsocketSuccess="websocket"===p.name,u.transport.pause(function(){h||"closed"!==u.readyState&&(c(),u.setTransport(p),p.send([{type:"upgrade"}]),u.emit("upgrade",p),p=null,u.upgrading=!1,u.flush())})}else{var e=new Error("probe error");e.transport=p.name,u.emit("upgradeError",e)}}))}function r(){h||(h=!0,c(),p.close(),p=null)}function o(t){var e=new Error("probe error: "+t);e.transport=p.name,r(),u.emit("upgradeError",e)}function i(){o("transport closed")}function s(){o("socket closed")}function a(t){p&&t.name!==p.name&&r()}function c(){p.removeListener("open",e),p.removeListener("error",o),p.removeListener("close",i),u.removeListener("close",s),u.removeListener("upgrading",a)}var p=this.createTransport(t,{probe:1}),h=!1,u=this;n.priorWebsocketSuccess=!1,p.once("open",e),p.once("error",o),p.once("close",i),this.once("close",s),this.once("upgrading",a),p.open()},n.prototype.onOpen=function(){if(this.readyState="open",n.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t<e;t++)this.probe(this.upgrades[t])},n.prototype.onPacket=function(t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"pong":this.setPing(),this.emit("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}},n.prototype.onHandshake=function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!==this.readyState&&(this.setPing(),this.removeListener("heartbeat",this.onHeartbeat),this.on("heartbeat",this.onHeartbeat))},n.prototype.onHeartbeat=function(t){clearTimeout(this.pingTimeoutTimer);var e=this;e.pingTimeoutTimer=setTimeout(function(){"closed"!==e.readyState&&e.onClose("ping timeout")},t||e.pingInterval+e.pingTimeout)},n.prototype.setPing=function(){var t=this;clearTimeout(t.pingIntervalTimer),t.pingIntervalTimer=setTimeout(function(){t.ping(),t.onHeartbeat(t.pingTimeout)},t.pingInterval)},n.prototype.ping=function(){var t=this;this.sendPacket("ping",function(){t.emit("ping")})},n.prototype.onDrain=function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()},n.prototype.flush=function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))},n.prototype.write=n.prototype.send=function(t,e,r){return this.sendPacket("message",t,e,r),this},n.prototype.sendPacket=function(t,e,r,n){if("function"==typeof e&&(n=e,e=void 0),"function"==typeof r&&(n=r,r=null),"closing"!==this.readyState&&"closed"!==this.readyState){r=r||{},r.compress=!1!==r.compress;var o={type:t,data:e,options:r};this.emit("packetCreate",o),this.writeBuffer.push(o),n&&this.once("flush",n),this.flush()}},n.prototype.close=function(){function t(){n.onClose("forced close"),n.transport.close()}function e(){n.removeListener("upgrade",e),n.removeListener("upgradeError",e),t()}function r(){n.once("upgrade",e),n.once("upgradeError",e)}if("opening"===this.readyState||"open"===this.readyState){this.readyState="closing";var n=this;this.writeBuffer.length?this.once("drain",function(){this.upgrading?r():t()}):this.upgrading?r():t()}return this},n.prototype.onError=function(t){n.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)},n.prototype.onClose=function(t,e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){var r=this;clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",t,e),r.writeBuffer=[],r.prevBufferLen=0}},n.prototype.filterUpgrades=function(t){for(var e=[],r=0,n=t.length;r<n;r++)~a(this.transports,t[r])&&e.push(t[r]);return e}},function(t,e,r){function n(t){var e,r=!1,n=!1,a=!1!==t.jsonp;if("undefined"!=typeof location){var c="https:"===location.protocol,p=location.port;p||(p=c?443:80),r=t.hostname!==location.hostname||p!==t.port,n=t.secure!==c}if(t.xdomain=r,t.xscheme=n,e=new o(t),"open"in e&&!t.forceJSONP)return new i(t);if(!a)throw new Error("JSONP disabled");return new s(t)}var o=r(13),i=r(15),s=r(29),a=r(30);e.polling=n,e.websocket=a},function(t,e,r){var n=r(14);t.exports=function(t){var e=t.xdomain,r=t.xscheme,o=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||n))return new XMLHttpRequest}catch(t){}try{if("undefined"!=typeof XDomainRequest&&!r&&o)return new XDomainRequest}catch(t){}if(!e)try{return new(self[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}},function(t,e){try{t.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){t.exports=!1}},function(t,e,r){function n(){}function o(t){if(c.call(this,t),this.requestTimeout=t.requestTimeout,this.extraHeaders=t.extraHeaders,"undefined"!=typeof location){var e="https:"===location.protocol,r=location.port;r||(r=e?443:80),this.xd="undefined"!=typeof location&&t.hostname!==location.hostname||r!==t.port,this.xs=t.secure!==e}}function i(t){this.method=t.method||"GET",this.uri=t.uri,this.xd=!!t.xd,this.xs=!!t.xs,this.async=!1!==t.async,this.data=void 0!==t.data?t.data:null,this.agent=t.agent,this.isBinary=t.isBinary,this.supportsBinary=t.supportsBinary,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.requestTimeout=t.requestTimeout,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.extraHeaders=t.extraHeaders,this.create()}function s(){for(var t in i.requests)i.requests.hasOwnProperty(t)&&i.requests[t].abort()}var a=r(13),c=r(16),p=r(5),h=r(27);r(3)("engine.io-client:polling-xhr");if(t.exports=o,t.exports.Request=i,h(o,c),o.prototype.supportsBinary=!0,o.prototype.request=function(t){return t=t||{},t.uri=this.uri(),t.xd=this.xd,t.xs=this.xs,t.agent=this.agent||!1,t.supportsBinary=this.supportsBinary,t.enablesXDR=this.enablesXDR,t.withCredentials=this.withCredentials,t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized,t.requestTimeout=this.requestTimeout,t.extraHeaders=this.extraHeaders,new i(t)},o.prototype.doWrite=function(t,e){var r="string"!=typeof t&&void 0!==t,n=this.request({method:"POST",data:t,isBinary:r}),o=this;n.on("success",e),n.on("error",function(t){o.onError("xhr post error",t)}),this.sendXhr=n},o.prototype.doPoll=function(){var t=this.request(),e=this;t.on("data",function(t){e.onData(t)}),t.on("error",function(t){e.onError("xhr poll error",t)}),this.pollXhr=t},p(i.prototype),i.prototype.create=function(){var t={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized;var e=this.xhr=new a(t),r=this;try{e.open(this.method,this.uri,this.async);try{if(this.extraHeaders){e.setDisableHeaderCheck&&e.setDisableHeaderCheck(!0);for(var n in this.extraHeaders)this.extraHeaders.hasOwnProperty(n)&&e.setRequestHeader(n,this.extraHeaders[n])}}catch(t){}if("POST"===this.method)try{this.isBinary?e.setRequestHeader("Content-type","application/octet-stream"):e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{e.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in e&&(e.withCredentials=this.withCredentials),this.requestTimeout&&(e.timeout=this.requestTimeout),this.hasXDR()?(e.onload=function(){r.onLoad()},e.onerror=function(){r.onError(e.responseText)}):e.onreadystatechange=function(){if(2===e.readyState)try{var t=e.getResponseHeader("Content-Type");(r.supportsBinary&&"application/octet-stream"===t||"application/octet-stream; charset=UTF-8"===t)&&(e.responseType="arraybuffer")}catch(t){}4===e.readyState&&(200===e.status||1223===e.status?r.onLoad():setTimeout(function(){r.onError("number"==typeof e.status?e.status:0)},0))},e.send(this.data)}catch(t){return void setTimeout(function(){r.onError(t)},0)}"undefined"!=typeof document&&(this.index=i.requestsCount++,i.requests[this.index]=this)},i.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},i.prototype.onData=function(t){this.emit("data",t),this.onSuccess()},i.prototype.onError=function(t){this.emit("error",t),this.cleanup(!0)},i.prototype.cleanup=function(t){if("undefined"!=typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=n:this.xhr.onreadystatechange=n,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete i.requests[this.index],this.xhr=null}},i.prototype.onLoad=function(){var t;try{var e;try{e=this.xhr.getResponseHeader("Content-Type")}catch(t){}t="application/octet-stream"===e||"application/octet-stream; charset=UTF-8"===e?this.xhr.response||this.xhr.responseText:this.xhr.responseText}catch(t){this.onError(t)}null!=t&&this.onData(t)},i.prototype.hasXDR=function(){return"undefined"!=typeof XDomainRequest&&!this.xs&&this.enablesXDR},i.prototype.abort=function(){this.cleanup()},i.requestsCount=0,i.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",s);else if("function"==typeof addEventListener){var u="onpagehide"in self?"pagehide":"unload";addEventListener(u,s,!1)}},function(t,e,r){function n(t){var e=t&&t.forceBase64;p&&!e||(this.supportsBinary=!1),o.call(this,t)}var o=r(17),i=r(26),s=r(18),a=r(27),c=r(28);r(3)("engine.io-client:polling");t.exports=n;var p=function(){var t=r(13),e=new t({xdomain:!1});return null!=e.responseType}();a(n,o),n.prototype.name="polling",n.prototype.doOpen=function(){this.poll()},n.prototype.pause=function(t){function e(){r.readyState="paused",t()}var r=this;if(this.readyState="pausing",this.polling||!this.writable){var n=0;this.polling&&(n++,this.once("pollComplete",function(){--n||e()})),this.writable||(n++,this.once("drain",function(){--n||e()}))}else e()},n.prototype.poll=function(){this.polling=!0,this.doPoll(),this.emit("poll")},n.prototype.onData=function(t){var e=this,r=function(t,r,n){return"opening"===e.readyState&&e.onOpen(),"close"===t.type?(e.onClose(),!1):void e.onPacket(t)};s.decodePayload(t,this.socket.binaryType,r),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState&&this.poll())},n.prototype.doClose=function(){function t(){e.write([{type:"close"}])}var e=this;"open"===this.readyState?t():this.once("open",t)},n.prototype.write=function(t){var e=this;this.writable=!1;var r=function(){e.writable=!0,e.emit("drain")};s.encodePayload(t,this.supportsBinary,function(t){e.doWrite(t,r)})},n.prototype.uri=function(){var t=this.query||{},e=this.secure?"https":"http",r="";!1!==this.timestampRequests&&(t[this.timestampParam]=c()),this.supportsBinary||t.sid||(t.b64=1),t=i.encode(t),this.port&&("https"===e&&443!==Number(this.port)||"http"===e&&80!==Number(this.port))&&(r=":"+this.port),t.length&&(t="?"+t);var n=this.hostname.indexOf(":")!==-1;return e+"://"+(n?"["+this.hostname+"]":this.hostname)+r+this.path+t}},function(t,e,r){function n(t){this.path=t.path,this.hostname=t.hostname,this.port=t.port,this.secure=t.secure,this.query=t.query,this.timestampParam=t.timestampParam,this.timestampRequests=t.timestampRequests,this.readyState="",this.agent=t.agent||!1,this.socket=t.socket,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.forceNode=t.forceNode,this.isReactNative=t.isReactNative,this.extraHeaders=t.extraHeaders,this.localAddress=t.localAddress}var o=r(18),i=r(5);t.exports=n,i(n.prototype),n.prototype.onError=function(t,e){var r=new Error(t);return r.type="TransportError",r.description=e,this.emit("error",r),this},n.prototype.open=function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this},n.prototype.close=function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this},n.prototype.send=function(t){if("open"!==this.readyState)throw new Error("Transport not open");
-this.write(t)},n.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},n.prototype.onData=function(t){var e=o.decodePacket(t,this.socket.binaryType);this.onPacket(e)},n.prototype.onPacket=function(t){this.emit("packet",t)},n.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},function(t,e,r){function n(t,r){var n="b"+e.packets[t.type]+t.data.data;return r(n)}function o(t,r,n){if(!r)return e.encodeBase64Packet(t,n);var o=t.data,i=new Uint8Array(o),s=new Uint8Array(1+o.byteLength);s[0]=v[t.type];for(var a=0;a<i.length;a++)s[a+1]=i[a];return n(s.buffer)}function i(t,r,n){if(!r)return e.encodeBase64Packet(t,n);var o=new FileReader;return o.onload=function(){e.encodePacket({type:t.type,data:o.result},r,!0,n)},o.readAsArrayBuffer(t.data)}function s(t,r,n){if(!r)return e.encodeBase64Packet(t,n);if(g)return i(t,r,n);var o=new Uint8Array(1);o[0]=v[t.type];var s=new w([o.buffer,t.data]);return n(s)}function a(t){try{t=d.decode(t,{strict:!1})}catch(t){return!1}return t}function c(t,e,r){for(var n=new Array(t.length),o=l(t.length,r),i=function(t,r,o){e(r,function(e,r){n[t]=r,o(e,n)})},s=0;s<t.length;s++)i(s,t[s],o)}var p,h=r(19),u=r(20),f=r(21),l=r(22),d=r(23);"undefined"!=typeof ArrayBuffer&&(p=r(24));var y="undefined"!=typeof navigator&&/Android/i.test(navigator.userAgent),m="undefined"!=typeof navigator&&/PhantomJS/i.test(navigator.userAgent),g=y||m;e.protocol=3;var v=e.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},b=h(v),k={type:"error",data:"parser error"},w=r(25);e.encodePacket=function(t,e,r,i){"function"==typeof e&&(i=e,e=!1),"function"==typeof r&&(i=r,r=null);var a=void 0===t.data?void 0:t.data.buffer||t.data;if("undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer)return o(t,e,i);if("undefined"!=typeof w&&a instanceof w)return s(t,e,i);if(a&&a.base64)return n(t,i);var c=v[t.type];return void 0!==t.data&&(c+=r?d.encode(String(t.data),{strict:!1}):String(t.data)),i(""+c)},e.encodeBase64Packet=function(t,r){var n="b"+e.packets[t.type];if("undefined"!=typeof w&&t.data instanceof w){var o=new FileReader;return o.onload=function(){var t=o.result.split(",")[1];r(n+t)},o.readAsDataURL(t.data)}var i;try{i=String.fromCharCode.apply(null,new Uint8Array(t.data))}catch(e){for(var s=new Uint8Array(t.data),a=new Array(s.length),c=0;c<s.length;c++)a[c]=s[c];i=String.fromCharCode.apply(null,a)}return n+=btoa(i),r(n)},e.decodePacket=function(t,r,n){if(void 0===t)return k;if("string"==typeof t){if("b"===t.charAt(0))return e.decodeBase64Packet(t.substr(1),r);if(n&&(t=a(t),t===!1))return k;var o=t.charAt(0);return Number(o)==o&&b[o]?t.length>1?{type:b[o],data:t.substring(1)}:{type:b[o]}:k}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&"blob"===r&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var r=b[t.charAt(0)];if(!p)return{type:r,data:{base64:!0,data:t.substr(1)}};var n=p.decode(t.substr(1));return"blob"===e&&w&&(n=new w([n])),{type:r,data:n}},e.encodePayload=function(t,r,n){function o(t){return t.length+":"+t}function i(t,n){e.encodePacket(t,!!s&&r,!1,function(t){n(null,o(t))})}"function"==typeof r&&(n=r,r=null);var s=u(t);return r&&s?w&&!g?e.encodePayloadAsBlob(t,n):e.encodePayloadAsArrayBuffer(t,n):t.length?void c(t,i,function(t,e){return n(e.join(""))}):n("0:")},e.decodePayload=function(t,r,n){if("string"!=typeof t)return e.decodePayloadAsBinary(t,r,n);"function"==typeof r&&(n=r,r=null);var o;if(""===t)return n(k,0,1);for(var i,s,a="",c=0,p=t.length;c<p;c++){var h=t.charAt(c);if(":"===h){if(""===a||a!=(i=Number(a)))return n(k,0,1);if(s=t.substr(c+1,i),a!=s.length)return n(k,0,1);if(s.length){if(o=e.decodePacket(s,r,!1),k.type===o.type&&k.data===o.data)return n(k,0,1);var u=n(o,c+i,p);if(!1===u)return}c+=i,a=""}else a+=h}return""!==a?n(k,0,1):void 0},e.encodePayloadAsArrayBuffer=function(t,r){function n(t,r){e.encodePacket(t,!0,!0,function(t){return r(null,t)})}return t.length?void c(t,n,function(t,e){var n=e.reduce(function(t,e){var r;return r="string"==typeof e?e.length:e.byteLength,t+r.toString().length+r+2},0),o=new Uint8Array(n),i=0;return e.forEach(function(t){var e="string"==typeof t,r=t;if(e){for(var n=new Uint8Array(t.length),s=0;s<t.length;s++)n[s]=t.charCodeAt(s);r=n.buffer}e?o[i++]=0:o[i++]=1;for(var a=r.byteLength.toString(),s=0;s<a.length;s++)o[i++]=parseInt(a[s]);o[i++]=255;for(var n=new Uint8Array(r),s=0;s<n.length;s++)o[i++]=n[s]}),r(o.buffer)}):r(new ArrayBuffer(0))},e.encodePayloadAsBlob=function(t,r){function n(t,r){e.encodePacket(t,!0,!0,function(t){var e=new Uint8Array(1);if(e[0]=1,"string"==typeof t){for(var n=new Uint8Array(t.length),o=0;o<t.length;o++)n[o]=t.charCodeAt(o);t=n.buffer,e[0]=0}for(var i=t instanceof ArrayBuffer?t.byteLength:t.size,s=i.toString(),a=new Uint8Array(s.length+1),o=0;o<s.length;o++)a[o]=parseInt(s[o]);if(a[s.length]=255,w){var c=new w([e.buffer,a.buffer,t]);r(null,c)}})}c(t,n,function(t,e){return r(new w(e))})},e.decodePayloadAsBinary=function(t,r,n){"function"==typeof r&&(n=r,r=null);for(var o=t,i=[];o.byteLength>0;){for(var s=new Uint8Array(o),a=0===s[0],c="",p=1;255!==s[p];p++){if(c.length>310)return n(k,0,1);c+=s[p]}o=f(o,2+c.length),c=parseInt(c);var h=f(o,0,c);if(a)try{h=String.fromCharCode.apply(null,new Uint8Array(h))}catch(t){var u=new Uint8Array(h);h="";for(var p=0;p<u.length;p++)h+=String.fromCharCode(u[p])}i.push(h),o=f(o,c)}var l=i.length;i.forEach(function(t,o){n(e.decodePacket(t,r,!0),o,l)})}},function(t,e){t.exports=Object.keys||function(t){var e=[],r=Object.prototype.hasOwnProperty;for(var n in t)r.call(t,n)&&e.push(n);return e}},function(t,e,r){function n(t){if(!t||"object"!=typeof t)return!1;if(o(t)){for(var e=0,r=t.length;e<r;e++)if(n(t[e]))return!0;return!1}if("function"==typeof Buffer&&Buffer.isBuffer&&Buffer.isBuffer(t)||"function"==typeof ArrayBuffer&&t instanceof ArrayBuffer||s&&t instanceof Blob||a&&t instanceof File)return!0;if(t.toJSON&&"function"==typeof t.toJSON&&1===arguments.length)return n(t.toJSON(),!0);for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&n(t[i]))return!0;return!1}var o=r(7),i=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===i.call(Blob),a="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===i.call(File);t.exports=n},function(t,e){t.exports=function(t,e,r){var n=t.byteLength;if(e=e||0,r=r||n,t.slice)return t.slice(e,r);if(e<0&&(e+=n),r<0&&(r+=n),r>n&&(r=n),e>=n||e>=r||0===n)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(r-e),s=e,a=0;s<r;s++,a++)i[a]=o[s];return i.buffer}},function(t,e){function r(t,e,r){function o(t,n){if(o.count<=0)throw new Error("after called too many times");--o.count,t?(i=!0,e(t),e=r):0!==o.count||i||e(null,n)}var i=!1;return r=r||n,o.count=t,0===t?e():o}function n(){}t.exports=r},function(t,e){function r(t){for(var e,r,n=[],o=0,i=t.length;o<i;)e=t.charCodeAt(o++),e>=55296&&e<=56319&&o<i?(r=t.charCodeAt(o++),56320==(64512&r)?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),o--)):n.push(e);return n}function n(t){for(var e,r=t.length,n=-1,o="";++n<r;)e=t[n],e>65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var r="";return 0==(4294965248&t)?r=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),r=d(t>>12&15|224),r+=i(t,6)):0==(4292870144&t)&&(r=d(t>>18&7|240),r+=i(t,12),r+=i(t,6)),r+=d(63&t|128)}function a(t,e){e=e||{};for(var n,o=!1!==e.strict,i=r(t),a=i.length,c=-1,p="";++c<a;)n=i[c],p+=s(n,o);return p}function c(){if(l>=f)throw Error("Invalid byte index");var t=255&u[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(t){var e,r,n,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&u[l],l++,0==(128&e))return e;if(192==(224&e)){if(r=c(),s=(31&e)<<6|r,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(r=c(),n=c(),s=(15&e)<<12|r<<6|n,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(r=c(),n=c(),i=c(),s=(7&e)<<18|r<<12|n<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function h(t,e){e=e||{};var o=!1!==e.strict;u=r(t),f=u.length,l=0;for(var i,s=[];(i=p(o))!==!1;)s.push(i);return n(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */
-var u,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:h}},function(t,e){!function(){"use strict";for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=new Uint8Array(256),n=0;n<t.length;n++)r[t.charCodeAt(n)]=n;e.encode=function(e){var r,n=new Uint8Array(e),o=n.length,i="";for(r=0;r<o;r+=3)i+=t[n[r]>>2],i+=t[(3&n[r])<<4|n[r+1]>>4],i+=t[(15&n[r+1])<<2|n[r+2]>>6],i+=t[63&n[r+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(t){var e,n,o,i,s,a=.75*t.length,c=t.length,p=0;"="===t[t.length-1]&&(a--,"="===t[t.length-2]&&a--);var h=new ArrayBuffer(a),u=new Uint8Array(h);for(e=0;e<c;e+=4)n=r[t.charCodeAt(e)],o=r[t.charCodeAt(e+1)],i=r[t.charCodeAt(e+2)],s=r[t.charCodeAt(e+3)],u[p++]=n<<2|o>>4,u[p++]=(15&o)<<4|i>>2,u[p++]=(3&i)<<6|63&s;return h}}()},function(t,e){function r(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var r=new Uint8Array(t.byteLength);r.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=r.buffer}return e}return t})}function n(t,e){e=e||{};var n=new i;return r(t).forEach(function(t){n.append(t)}),e.type?n.getBlob(e.type):n.getBlob()}function o(t,e){return new Blob(r(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(t){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(t){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(n.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?n:void 0}()},function(t,e){e.encode=function(t){var e="";for(var r in t)t.hasOwnProperty(r)&&(e.length&&(e+="&"),e+=encodeURIComponent(r)+"="+encodeURIComponent(t[r]));return e},e.decode=function(t){for(var e={},r=t.split("&"),n=0,o=r.length;n<o;n++){var i=r[n].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},function(t,e){t.exports=function(t,e){var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e){"use strict";function r(t){var e="";do e=s[t%a]+e,t=Math.floor(t/a);while(t>0);return e}function n(t){var e=0;for(h=0;h<t.length;h++)e=e*a+c[t.charAt(h)];return e}function o(){var t=r(+new Date);return t!==i?(p=0,i=t):t+"."+r(p++)}for(var i,s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),a=64,c={},p=0,h=0;h<a;h++)c[s[h]]=h;o.encode=r,o.decode=n,t.exports=o},function(t,e,r){(function(e){function n(){}function o(){return"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof e?e:{}}function i(t){if(s.call(this,t),this.query=this.query||{},!c){var e=o();c=e.___eio=e.___eio||[]}this.index=c.length;var r=this;c.push(function(t){r.onData(t)}),this.query.j=this.index,"function"==typeof addEventListener&&addEventListener("beforeunload",function(){r.script&&(r.script.onerror=n)},!1)}var s=r(16),a=r(27);t.exports=i;var c,p=/\n/g,h=/\\n/g;a(i,s),i.prototype.supportsBinary=!1,i.prototype.doClose=function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),s.prototype.doClose.call(this)},i.prototype.doPoll=function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var r=document.getElementsByTagName("script")[0];r?r.parentNode.insertBefore(e,r):(document.head||document.body).appendChild(e),this.script=e;var n="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);n&&setTimeout(function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)},100)},i.prototype.doWrite=function(t,e){function r(){n(),e()}function n(){if(o.iframe)try{o.form.removeChild(o.iframe)}catch(t){o.onError("jsonp polling iframe removal error",t)}try{var t='<iframe src="javascript:0" name="'+o.iframeId+'">';i=document.createElement(t)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),n(),t=t.replace(h,"\\\n"),this.area.value=t.replace(p,"\\n");try{this.form.submit()}catch(t){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&r()}:this.iframe.onload=r}}).call(e,function(){return this}())},function(t,e,r){function n(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(u=i),s.call(this,t)}var o,i,s=r(17),a=r(18),c=r(26),p=r(27),h=r(28);r(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=r(31)}catch(t){}var u=o||i;t.exports=n,p(n,s),n.prototype.name="websocket",n.prototype.supportsBinary=!0,n.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,r={agent:this.agent,perMessageDeflate:this.perMessageDeflate};r.pfx=this.pfx,r.key=this.key,r.passphrase=this.passphrase,r.cert=this.cert,r.ca=this.ca,r.ciphers=this.ciphers,r.rejectUnauthorized=this.rejectUnauthorized,this.extraHeaders&&(r.headers=this.extraHeaders),this.localAddress&&(r.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new u(t,e):new u(t):new u(t,e,r)}catch(t){return this.emit("error",t)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},n.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},n.prototype.write=function(t){function e(){r.emit("flush"),setTimeout(function(){r.writable=!0,r.emit("drain")},0)}var r=this;this.writable=!1;for(var n=t.length,o=0,i=n;o<i;o++)!function(t){a.encodePacket(t,r.supportsBinary,function(o){if(!r.usingBrowserWebSocket){var i={};if(t.options&&(i.compress=t.options.compress),r.perMessageDeflate){var s="string"==typeof o?Buffer.byteLength(o):o.length;s<r.perMessageDeflate.threshold&&(i.compress=!1)}}try{r.usingBrowserWebSocket?r.ws.send(o):r.ws.send(o,i)}catch(t){}--n||e()})}(t[o])},n.prototype.onClose=function(){s.prototype.onClose.call(this)},n.prototype.doClose=function(){"undefined"!=typeof this.ws&&this.ws.close()},n.prototype.uri=function(){var t=this.query||{},e=this.secure?"wss":"ws",r="";this.port&&("wss"===e&&443!==Number(this.port)||"ws"===e&&80!==Number(this.port))&&(r=":"+this.port),this.timestampRequests&&(t[this.timestampParam]=h()),this.supportsBinary||(t.b64=1),t=c.encode(t),t.length&&(t="?"+t);var n=this.hostname.indexOf(":")!==-1;return e+"://"+(n?"["+this.hostname+"]":this.hostname)+r+this.path+t},n.prototype.check=function(){return!(!u||"__initialize"in u&&this.name===n.prototype.name)}},function(t,e){},function(t,e){var r=[].indexOf;t.exports=function(t,e){if(r)return t.indexOf(e);for(var n=0;n<t.length;++n)if(t[n]===e)return n;return-1}},function(t,e,r){"use strict";function n(t,e,r){this.io=t,this.nsp=e,this.json=this,this.ids=0,this.acks={},this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0,this.flags={},r&&r.query&&(this.query=r.query),this.io.autoConnect&&this.open()}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(4),s=r(5),a=r(34),c=r(35),p=r(36),h=(r(3)("socket.io-client:socket"),r(26)),u=r(20);t.exports=e=n;var f={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1},l=s.prototype.emit;s(n.prototype),n.prototype.subEvents=function(){if(!this.subs){var t=this.io;this.subs=[c(t,"open",p(this,"onopen")),c(t,"packet",p(this,"onpacket")),c(t,"close",p(this,"onclose"))]}},n.prototype.open=n.prototype.connect=function(){return this.connected?this:(this.subEvents(),this.io.open(),"open"===this.io.readyState&&this.onopen(),this.emit("connecting"),this)},n.prototype.send=function(){var t=a(arguments);return t.unshift("message"),this.emit.apply(this,t),this},n.prototype.emit=function(t){if(f.hasOwnProperty(t))return l.apply(this,arguments),this;var e=a(arguments),r={type:(void 0!==this.flags.binary?this.flags.binary:u(e))?i.BINARY_EVENT:i.EVENT,data:e};return r.options={},r.options.compress=!this.flags||!1!==this.flags.compress,"function"==typeof e[e.length-1]&&(this.acks[this.ids]=e.pop(),r.id=this.ids++),this.connected?this.packet(r):this.sendBuffer.push(r),this.flags={},this},n.prototype.packet=function(t){t.nsp=this.nsp,this.io.packet(t)},n.prototype.onopen=function(){if("/"!==this.nsp)if(this.query){var t="object"===o(this.query)?h.encode(this.query):this.query;this.packet({type:i.CONNECT,query:t})}else this.packet({type:i.CONNECT})},n.prototype.onclose=function(t){this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",t)},n.prototype.onpacket=function(t){var e=t.nsp===this.nsp,r=t.type===i.ERROR&&"/"===t.nsp;if(e||r)switch(t.type){case i.CONNECT:this.onconnect();break;case i.EVENT:this.onevent(t);break;case i.BINARY_EVENT:this.onevent(t);break;case i.ACK:this.onack(t);break;case i.BINARY_ACK:this.onack(t);break;case i.DISCONNECT:this.ondisconnect();break;case i.ERROR:this.emit("error",t.data)}},n.prototype.onevent=function(t){var e=t.data||[];null!=t.id&&e.push(this.ack(t.id)),this.connected?l.apply(this,e):this.receiveBuffer.push(e)},n.prototype.ack=function(t){var e=this,r=!1;return function(){if(!r){r=!0;var n=a(arguments);e.packet({type:u(n)?i.BINARY_ACK:i.ACK,id:t,data:n})}}},n.prototype.onack=function(t){var e=this.acks[t.id];"function"==typeof e&&(e.apply(this,t.data),delete this.acks[t.id])},n.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},n.prototype.emitBuffered=function(){var t;for(t=0;t<this.receiveBuffer.length;t++)l.apply(this,this.receiveBuffer[t]);for(this.receiveBuffer=[],t=0;t<this.sendBuffer.length;t++)this.packet(this.sendBuffer[t]);this.sendBuffer=[]},n.prototype.ondisconnect=function(){this.destroy(),this.onclose("io server disconnect")},n.prototype.destroy=function(){if(this.subs){for(var t=0;t<this.subs.length;t++)this.subs[t].destroy();this.subs=null}this.io.destroy(this)},n.prototype.close=n.prototype.disconnect=function(){return this.connected&&this.packet({type:i.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this},n.prototype.compress=function(t){return this.flags.compress=t,this},n.prototype.binary=function(t){return this.flags.binary=t,this}},function(t,e){function r(t,e){var r=[];e=e||0;for(var n=e||0;n<t.length;n++)r[n-e]=t[n];return r}t.exports=r},function(t,e){"use strict";function r(t,e,r){return t.on(e,r),{destroy:function(){t.removeListener(e,r)}}}t.exports=r},function(t,e){var r=[].slice;t.exports=function(t,e){if("string"==typeof e&&(e=t[e]),"function"!=typeof e)throw new Error("bind() requires a function");var n=r.call(arguments,2);return function(){return e.apply(t,n.concat(r.call(arguments)))}}},function(t,e){function r(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=r,r.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),r=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-r:t+r}return 0|Math.min(t,this.max)},r.prototype.reset=function(){this.attempts=0},r.prototype.setMin=function(t){this.ms=t},r.prototype.setMax=function(t){this.max=t},r.prototype.setJitter=function(t){this.jitter=t}}])});
-//# sourceMappingURL=socket.io.slim.js.map
\ No newline at end of file
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function n(t,e){"object"===("undefined"==typeof t?"undefined":o(t))&&(e=t,t=void 0),e=e||{};var r,n=i(t),s=n.source,p=n.id,h=n.path,u=c[p]&&h in c[p].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||u;return f?r=a(s,e):(c[p]||(c[p]=a(s,e)),r=c[p]),n.query&&!e.query&&(e.query=n.query),r.socket(n.path,e)}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(1),s=r(4),a=r(9);r(3)("socket.io-client");t.exports=e=n;var c=e.managers={};e.protocol=s.protocol,e.connect=n,e.Manager=r(9),e.Socket=r(34)},function(t,e,r){"use strict";function n(t,e){var r=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),r=o(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var n=r.host.indexOf(":")!==-1,i=n?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+i+":"+r.port,r.href=r.protocol+"://"+i+(e&&e.port===r.port?"":":"+r.port),r}var o=r(2);r(3)("socket.io-client:url");t.exports=n},function(t,e){function r(t,e){var r=/\/{2,9}/g,n=e.replace(r,"/").split("/");return"/"!=e.substr(0,1)&&0!==e.length||n.splice(0,1),"/"==e.substr(e.length-1,1)&&n.splice(n.length-1,1),n}function n(t,e){var r={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(t,e,n){e&&(r[e]=n)}),r}var o=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,i=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,s=t.indexOf("["),a=t.indexOf("]");s!=-1&&a!=-1&&(t=t.substring(0,s)+t.substring(s,a).replace(/:/g,";")+t.substring(a,t.length));for(var c=o.exec(t||""),p={},h=14;h--;)p[i[h]]=c[h]||"";return s!=-1&&a!=-1&&(p.source=e,p.host=p.host.substring(1,p.host.length-1).replace(/;/g,":"),p.authority=p.authority.replace("[","").replace("]","").replace(/;/g,":"),p.ipv6uri=!0),p.pathNames=r(p,p.path),p.queryKey=n(p,p.query),p}},function(t,e){"use strict";t.exports=function(){return function(){}}},function(t,e,r){function n(){}function o(t){var r=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(r+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(r+=t.nsp+","),null!=t.id&&(r+=t.id),null!=t.data){var n=i(t.data);if(n===!1)return m;r+=n}return r}function i(t){try{return JSON.stringify(t)}catch(t){return!1}}function s(t,e){function r(t){var r=l.deconstructPacket(t),n=o(r.packet),i=r.buffers;i.unshift(n),e(i)}l.removeBlobs(t,r)}function a(){this.reconstructor=null}function c(t){var r=0,n={type:Number(t.charAt(0))};if(null==e.types[n.type])return u("unknown packet type "+n.type);if(e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type){for(var o="";"-"!==t.charAt(++r)&&(o+=t.charAt(r),r!=t.length););if(o!=Number(o)||"-"!==t.charAt(r))throw new Error("Illegal attachments");n.attachments=Number(o)}if("/"===t.charAt(r+1))for(n.nsp="";++r;){var i=t.charAt(r);if(","===i)break;if(n.nsp+=i,r===t.length)break}else n.nsp="/";var s=t.charAt(r+1);if(""!==s&&Number(s)==s){for(n.id="";++r;){var i=t.charAt(r);if(null==i||Number(i)!=i){--r;break}if(n.id+=t.charAt(r),r===t.length)break}n.id=Number(n.id)}if(t.charAt(++r)){var a=p(t.substr(r)),c=a!==!1&&(n.type===e.ERROR||d(a));if(!c)return u("invalid payload");n.data=a}return n}function p(t){try{return JSON.parse(t)}catch(t){return!1}}function h(t){this.reconPack=t,this.buffers=[]}function u(t){return{type:e.ERROR,data:"parser error: "+t}}var f=(r(3)("socket.io-parser"),r(5)),l=r(6),d=r(7),y=r(8);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=n,e.Decoder=a;var m=e.ERROR+'"encode error"';n.prototype.encode=function(t,r){if(e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,r);else{var n=o(t);r([n])}},f(a.prototype),a.prototype.add=function(t){var r;if("string"==typeof t)r=c(t),e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type?(this.reconstructor=new h(r),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",r)):this.emit("decoded",r);else{if(!y(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");r=this.reconstructor.takeBinaryData(t),r&&(this.reconstructor=null,this.emit("decoded",r))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},h.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=l.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},h.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,r){function n(t){if(t)return o(t)}function o(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},n.prototype.once=function(t,e){function r(){this.off(t,r),e.apply(this,arguments)}return r.fn=e,this.on(t,r),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var n,o=0;o<r.length;o++)if(n=r[o],n===e||n.fn===e){r.splice(o,1);break}return 0===r.length&&delete this._callbacks["$"+t],this},n.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),r=this._callbacks["$"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(r){r=r.slice(0);for(var n=0,o=r.length;n<o;++n)r[n].apply(this,e)}return this},n.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},n.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,r){function n(t,e){if(!t)return t;if(s(t)){var r={_placeholder:!0,num:e.length};return e.push(t),r}if(i(t)){for(var o=new Array(t.length),a=0;a<t.length;a++)o[a]=n(t[a],e);return o}if("object"==typeof t&&!(t instanceof Date)){var o={};for(var c in t)o[c]=n(t[c],e);return o}return t}function o(t,e){if(!t)return t;if(t&&t._placeholder)return e[t.num];if(i(t))for(var r=0;r<t.length;r++)t[r]=o(t[r],e);else if("object"==typeof t)for(var n in t)t[n]=o(t[n],e);return t}var i=r(7),s=r(8),a=Object.prototype.toString,c="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===a.call(Blob),p="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===a.call(File);e.deconstructPacket=function(t){var e=[],r=t.data,o=t;return o.data=n(r,e),o.attachments=e.length,{packet:o,buffers:e}},e.reconstructPacket=function(t,e){return t.data=o(t.data,e),t.attachments=void 0,t},e.removeBlobs=function(t,e){function r(t,a,h){if(!t)return t;if(c&&t instanceof Blob||p&&t instanceof File){n++;var u=new FileReader;u.onload=function(){h?h[a]=this.result:o=this.result,--n||e(o)},u.readAsArrayBuffer(t)}else if(i(t))for(var f=0;f<t.length;f++)r(t[f],f,t);else if("object"==typeof t&&!s(t))for(var l in t)r(t[l],l,t)}var n=0,o=t;r(o),n||e(o)}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e){function r(t){return n&&Buffer.isBuffer(t)||o&&(t instanceof ArrayBuffer||i(t))}t.exports=r;var n="function"==typeof Buffer&&"function"==typeof Buffer.isBuffer,o="function"==typeof ArrayBuffer,i=function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer}},function(t,e,r){"use strict";function n(t,e){if(!(this instanceof n))return new n(t,e);t&&"object"===("undefined"==typeof t?"undefined":o(t))&&(e=t,t=void 0),e=e||{},e.path=e.path||"/socket.io",this.nsps={},this.subs=[],this.opts=e,this.reconnection(e.reconnection!==!1),this.reconnectionAttempts(e.reconnectionAttempts||1/0),this.reconnectionDelay(e.reconnectionDelay||1e3),this.reconnectionDelayMax(e.reconnectionDelayMax||5e3),this.randomizationFactor(e.randomizationFactor||.5),this.backoff=new f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==e.timeout?2e4:e.timeout),this.readyState="closed",this.uri=t,this.connecting=[],this.lastPing=null,this.encoding=!1,this.packetBuffer=[];var r=e.parser||c;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this.autoConnect=e.autoConnect!==!1,this.autoConnect&&this.open()}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(10),s=r(34),a=r(5),c=r(4),p=r(36),h=r(37),u=(r(3)("socket.io-client:manager"),r(33)),f=r(38),l=Object.prototype.hasOwnProperty;t.exports=n,n.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var t in this.nsps)l.call(this.nsps,t)&&this.nsps[t].emit.apply(this.nsps[t],arguments)},n.prototype.updateSocketIds=function(){for(var t in this.nsps)l.call(this.nsps,t)&&(this.nsps[t].id=this.generateId(t))},n.prototype.generateId=function(t){return("/"===t?"":t+"#")+this.engine.id},a(n.prototype),n.prototype.reconnection=function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection},n.prototype.reconnectionAttempts=function(t){return arguments.length?(this._reconnectionAttempts=t,this):this._reconnectionAttempts},n.prototype.reconnectionDelay=function(t){return arguments.length?(this._reconnectionDelay=t,this.backoff&&this.backoff.setMin(t),this):this._reconnectionDelay},n.prototype.randomizationFactor=function(t){return arguments.length?(this._randomizationFactor=t,this.backoff&&this.backoff.setJitter(t),this):this._randomizationFactor},n.prototype.reconnectionDelayMax=function(t){return arguments.length?(this._reconnectionDelayMax=t,this.backoff&&this.backoff.setMax(t),this):this._reconnectionDelayMax},n.prototype.timeout=function(t){return arguments.length?(this._timeout=t,this):this._timeout},n.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},n.prototype.open=n.prototype.connect=function(t,e){if(~this.readyState.indexOf("open"))return this;this.engine=i(this.uri,this.opts);var r=this.engine,n=this;this.readyState="opening",this.skipReconnect=!1;var o=p(r,"open",function(){n.onopen(),t&&t()}),s=p(r,"error",function(e){if(n.cleanup(),n.readyState="closed",n.emitAll("connect_error",e),t){var r=new Error("Connection error");r.data=e,t(r)}else n.maybeReconnectOnOpen()});if(!1!==this._timeout){var a=this._timeout;0===a&&o.destroy();var c=setTimeout(function(){o.destroy(),r.close(),r.emit("error","timeout"),n.emitAll("connect_timeout",a)},a);this.subs.push({destroy:function(){clearTimeout(c)}})}return this.subs.push(o),this.subs.push(s),this},n.prototype.onopen=function(){this.cleanup(),this.readyState="open",this.emit("open");var t=this.engine;this.subs.push(p(t,"data",h(this,"ondata"))),this.subs.push(p(t,"ping",h(this,"onping"))),this.subs.push(p(t,"pong",h(this,"onpong"))),this.subs.push(p(t,"error",h(this,"onerror"))),this.subs.push(p(t,"close",h(this,"onclose"))),this.subs.push(p(this.decoder,"decoded",h(this,"ondecoded")))},n.prototype.onping=function(){this.lastPing=new Date,this.emitAll("ping")},n.prototype.onpong=function(){this.emitAll("pong",new Date-this.lastPing)},n.prototype.ondata=function(t){this.decoder.add(t)},n.prototype.ondecoded=function(t){this.emit("packet",t)},n.prototype.onerror=function(t){this.emitAll("error",t)},n.prototype.socket=function(t,e){function r(){~u(o.connecting,n)||o.connecting.push(n)}var n=this.nsps[t];if(!n){n=new s(this,t,e),this.nsps[t]=n;var o=this;n.on("connecting",r),n.on("connect",function(){n.id=o.generateId(t)}),this.autoConnect&&r()}return n},n.prototype.destroy=function(t){var e=u(this.connecting,t);~e&&this.connecting.splice(e,1),this.connecting.length||this.close()},n.prototype.packet=function(t){var e=this;t.query&&0===t.type&&(t.nsp+="?"+t.query),e.encoding?e.packetBuffer.push(t):(e.encoding=!0,this.encoder.encode(t,function(r){for(var n=0;n<r.length;n++)e.engine.write(r[n],t.options);e.encoding=!1,e.processPacketQueue()}))},n.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},n.prototype.cleanup=function(){for(var t=this.subs.length,e=0;e<t;e++){var r=this.subs.shift();r.destroy()}this.packetBuffer=[],this.encoding=!1,this.lastPing=null,this.decoder.destroy()},n.prototype.close=n.prototype.disconnect=function(){this.skipReconnect=!0,this.reconnecting=!1,"opening"===this.readyState&&this.cleanup(),this.backoff.reset(),this.readyState="closed",this.engine&&this.engine.close()},n.prototype.onclose=function(t){this.cleanup(),this.backoff.reset(),this.readyState="closed",this.emit("close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()},n.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();this.reconnecting=!0;var r=setTimeout(function(){t.skipReconnect||(t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):t.onreconnect()}))},e);this.subs.push({destroy:function(){clearTimeout(r)}})}},n.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,r){t.exports=r(11),t.exports.parser=r(19)},function(t,e,r){function n(t,e){return this instanceof n?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new n(t,e)}function o(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}var i=r(12),s=r(5),a=(r(3)("engine.io-client:socket"),r(33)),c=r(19),p=r(2),h=r(27);t.exports=n,n.priorWebsocketSuccess=!1,s(n.prototype),n.protocol=c.protocol,n.Socket=n,n.Transport=r(18),n.transports=r(12),n.parser=r(19),n.prototype.createTransport=function(t){var e=o(this.query);e.EIO=c.protocol,e.transport=t;var r=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var n=new i[t]({query:e,socket:this,agent:r.agent||this.agent,hostname:r.hostname||this.hostname,port:r.port||this.port,secure:r.secure||this.secure,path:r.path||this.path,forceJSONP:r.forceJSONP||this.forceJSONP,jsonp:r.jsonp||this.jsonp,forceBase64:r.forceBase64||this.forceBase64,enablesXDR:r.enablesXDR||this.enablesXDR,withCredentials:r.withCredentials||this.withCredentials,timestampRequests:r.timestampRequests||this.timestampRequests,timestampParam:r.timestampParam||this.timestampParam,policyPort:r.policyPort||this.policyPort,pfx:r.pfx||this.pfx,key:r.key||this.key,passphrase:r.passphrase||this.passphrase,cert:r.cert||this.cert,ca:r.ca||this.ca,ciphers:r.ciphers||this.ciphers,rejectUnauthorized:r.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:r.perMessageDeflate||this.perMessageDeflate,extraHeaders:r.extraHeaders||this.extraHeaders,forceNode:r.forceNode||this.forceNode,localAddress:r.localAddress||this.localAddress,requestTimeout:r.requestTimeout||this.requestTimeout,protocols:r.protocols||void 0,isReactNative:this.isReactNative});return n},n.prototype.open=function(){var t;if(this.rememberUpgrade&&n.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{if(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},n.prototype.setTransport=function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},n.prototype.probe=function(t){function e(){if(u.onlyBinaryUpgrades){var t=!this.supportsBinary&&u.transport.supportsBinary;h=h||t}h||(p.send([{type:"ping",data:"probe"}]),p.once("packet",function(t){if(!h)if("pong"===t.type&&"probe"===t.data){if(u.upgrading=!0,u.emit("upgrading",p),!p)return;n.priorWebsocketSuccess="websocket"===p.name,u.transport.pause(function(){h||"closed"!==u.readyState&&(c(),u.setTransport(p),p.send([{type:"upgrade"}]),u.emit("upgrade",p),p=null,u.upgrading=!1,u.flush())})}else{var e=new Error("probe error");e.transport=p.name,u.emit("upgradeError",e)}}))}function r(){h||(h=!0,c(),p.close(),p=null)}function o(t){var e=new Error("probe error: "+t);e.transport=p.name,r(),u.emit("upgradeError",e)}function i(){o("transport closed")}function s(){o("socket closed")}function a(t){p&&t.name!==p.name&&r()}function c(){p.removeListener("open",e),p.removeListener("error",o),p.removeListener("close",i),u.removeListener("close",s),u.removeListener("upgrading",a)}var p=this.createTransport(t,{probe:1}),h=!1,u=this;n.priorWebsocketSuccess=!1,p.once("open",e),p.once("error",o),p.once("close",i),this.once("close",s),this.once("upgrading",a),p.open()},n.prototype.onOpen=function(){if(this.readyState="open",n.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t<e;t++)this.probe(this.upgrades[t])},n.prototype.onPacket=function(t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"pong":this.setPing(),this.emit("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}},n.prototype.onHandshake=function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!==this.readyState&&(this.setPing(),this.removeListener("heartbeat",this.onHeartbeat),this.on("heartbeat",this.onHeartbeat))},n.prototype.onHeartbeat=function(t){clearTimeout(this.pingTimeoutTimer);var e=this;e.pingTimeoutTimer=setTimeout(function(){"closed"!==e.readyState&&e.onClose("ping timeout")},t||e.pingInterval+e.pingTimeout)},n.prototype.setPing=function(){var t=this;clearTimeout(t.pingIntervalTimer),t.pingIntervalTimer=setTimeout(function(){t.ping(),t.onHeartbeat(t.pingTimeout)},t.pingInterval)},n.prototype.ping=function(){var t=this;this.sendPacket("ping",function(){t.emit("ping")})},n.prototype.onDrain=function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()},n.prototype.flush=function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))},n.prototype.write=n.prototype.send=function(t,e,r){return this.sendPacket("message",t,e,r),this},n.prototype.sendPacket=function(t,e,r,n){if("function"==typeof e&&(n=e,e=void 0),"function"==typeof r&&(n=r,r=null),"closing"!==this.readyState&&"closed"!==this.readyState){r=r||{},r.compress=!1!==r.compress;var o={type:t,data:e,options:r};this.emit("packetCreate",o),this.writeBuffer.push(o),n&&this.once("flush",n),this.flush()}},n.prototype.close=function(){function t(){n.onClose("forced close"),n.transport.close()}function e(){n.removeListener("upgrade",e),n.removeListener("upgradeError",e),t()}function r(){n.once("upgrade",e),n.once("upgradeError",e)}if("opening"===this.readyState||"open"===this.readyState){this.readyState="closing";var n=this;this.writeBuffer.length?this.once("drain",function(){this.upgrading?r():t()}):this.upgrading?r():t()}return this},n.prototype.onError=function(t){n.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)},n.prototype.onClose=function(t,e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){var r=this;clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",t,e),r.writeBuffer=[],r.prevBufferLen=0}},n.prototype.filterUpgrades=function(t){for(var e=[],r=0,n=t.length;r<n;r++)~a(this.transports,t[r])&&e.push(t[r]);return e}},function(t,e,r){function n(t){var e,r=!1,n=!1,a=!1!==t.jsonp;if("undefined"!=typeof location){var c="https:"===location.protocol,p=location.port;p||(p=c?443:80),r=t.hostname!==location.hostname||p!==t.port,n=t.secure!==c}if(t.xdomain=r,t.xscheme=n,e=new o(t),"open"in e&&!t.forceJSONP)return new i(t);if(!a)throw new Error("JSONP disabled");return new s(t)}var o=r(13),i=r(16),s=r(30),a=r(31);e.polling=n,e.websocket=a},function(t,e,r){var n=r(14),o=r(15);t.exports=function(t){var e=t.xdomain,r=t.xscheme,i=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||n))return new XMLHttpRequest}catch(t){}try{if("undefined"!=typeof XDomainRequest&&!r&&i)return new XDomainRequest}catch(t){}if(!e)try{return new(o[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}},function(t,e){try{t.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){t.exports=!1}},function(t,e){t.exports=function(){return"undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()}()},function(t,e,r){function n(){}function o(t){if(c.call(this,t),this.requestTimeout=t.requestTimeout,this.extraHeaders=t.extraHeaders,"undefined"!=typeof location){var e="https:"===location.protocol,r=location.port;r||(r=e?443:80),this.xd="undefined"!=typeof location&&t.hostname!==location.hostname||r!==t.port,this.xs=t.secure!==e}}function i(t){this.method=t.method||"GET",this.uri=t.uri,this.xd=!!t.xd,this.xs=!!t.xs,this.async=!1!==t.async,this.data=void 0!==t.data?t.data:null,this.agent=t.agent,this.isBinary=t.isBinary,this.supportsBinary=t.supportsBinary,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.requestTimeout=t.requestTimeout,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.extraHeaders=t.extraHeaders,this.create()}function s(){for(var t in i.requests)i.requests.hasOwnProperty(t)&&i.requests[t].abort()}var a=r(13),c=r(17),p=r(5),h=r(28),u=(r(3)("engine.io-client:polling-xhr"),r(15));if(t.exports=o,t.exports.Request=i,h(o,c),o.prototype.supportsBinary=!0,o.prototype.request=function(t){return t=t||{},t.uri=this.uri(),t.xd=this.xd,t.xs=this.xs,t.agent=this.agent||!1,t.supportsBinary=this.supportsBinary,t.enablesXDR=this.enablesXDR,t.withCredentials=this.withCredentials,t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized,t.requestTimeout=this.requestTimeout,t.extraHeaders=this.extraHeaders,new i(t)},o.prototype.doWrite=function(t,e){var r="string"!=typeof t&&void 0!==t,n=this.request({method:"POST",data:t,isBinary:r}),o=this;n.on("success",e),n.on("error",function(t){o.onError("xhr post error",t)}),this.sendXhr=n},o.prototype.doPoll=function(){var t=this.request(),e=this;t.on("data",function(t){e.onData(t)}),t.on("error",function(t){e.onError("xhr poll error",t)}),this.pollXhr=t},p(i.prototype),i.prototype.create=function(){var t={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized;var e=this.xhr=new a(t),r=this;try{e.open(this.method,this.uri,this.async);try{if(this.extraHeaders){e.setDisableHeaderCheck&&e.setDisableHeaderCheck(!0);for(var n in this.extraHeaders)this.extraHeaders.hasOwnProperty(n)&&e.setRequestHeader(n,this.extraHeaders[n])}}catch(t){}if("POST"===this.method)try{this.isBinary?e.setRequestHeader("Content-type","application/octet-stream"):e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{e.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in e&&(e.withCredentials=this.withCredentials),this.requestTimeout&&(e.timeout=this.requestTimeout),this.hasXDR()?(e.onload=function(){r.onLoad()},e.onerror=function(){r.onError(e.responseText)}):e.onreadystatechange=function(){if(2===e.readyState)try{var t=e.getResponseHeader("Content-Type");(r.supportsBinary&&"application/octet-stream"===t||"application/octet-stream; charset=UTF-8"===t)&&(e.responseType="arraybuffer")}catch(t){}4===e.readyState&&(200===e.status||1223===e.status?r.onLoad():setTimeout(function(){r.onError("number"==typeof e.status?e.status:0)},0))},e.send(this.data)}catch(t){return void setTimeout(function(){r.onError(t)},0)}"undefined"!=typeof document&&(this.index=i.requestsCount++,i.requests[this.index]=this)},i.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},i.prototype.onData=function(t){this.emit("data",t),this.onSuccess()},i.prototype.onError=function(t){this.emit("error",t),this.cleanup(!0)},i.prototype.cleanup=function(t){if("undefined"!=typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=n:this.xhr.onreadystatechange=n,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete i.requests[this.index],this.xhr=null}},i.prototype.onLoad=function(){var t;try{var e;try{e=this.xhr.getResponseHeader("Content-Type")}catch(t){}t="application/octet-stream"===e||"application/octet-stream; charset=UTF-8"===e?this.xhr.response||this.xhr.responseText:this.xhr.responseText}catch(t){this.onError(t)}null!=t&&this.onData(t)},i.prototype.hasXDR=function(){return"undefined"!=typeof XDomainRequest&&!this.xs&&this.enablesXDR},i.prototype.abort=function(){this.cleanup()},i.requestsCount=0,i.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",s);else if("function"==typeof addEventListener){var f="onpagehide"in u?"pagehide":"unload";addEventListener(f,s,!1)}},function(t,e,r){function n(t){var e=t&&t.forceBase64;p&&!e||(this.supportsBinary=!1),o.call(this,t)}var o=r(18),i=r(27),s=r(19),a=r(28),c=r(29);r(3)("engine.io-client:polling");t.exports=n;var p=function(){var t=r(13),e=new t({xdomain:!1});return null!=e.responseType}();a(n,o),n.prototype.name="polling",n.prototype.doOpen=function(){this.poll()},n.prototype.pause=function(t){function e(){r.readyState="paused",t()}var r=this;if(this.readyState="pausing",this.polling||!this.writable){var n=0;this.polling&&(n++,this.once("pollComplete",function(){--n||e()})),this.writable||(n++,this.once("drain",function(){--n||e()}))}else e()},n.prototype.poll=function(){this.polling=!0,this.doPoll(),this.emit("poll")},n.prototype.onData=function(t){var e=this,r=function(t,r,n){return"opening"===e.readyState&&"open"===t.type&&e.onOpen(),"close"===t.type?(e.onClose(),!1):void e.onPacket(t)};s.decodePayload(t,this.socket.binaryType,r),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState&&this.poll())},n.prototype.doClose=function(){function t(){e.write([{type:"close"}])}var e=this;"open"===this.readyState?t():this.once("open",t)},n.prototype.write=function(t){var e=this;this.writable=!1;var r=function(){e.writable=!0,e.emit("drain")};s.encodePayload(t,this.supportsBinary,function(t){e.doWrite(t,r)})},n.prototype.uri=function(){var t=this.query||{},e=this.secure?"https":"http",r="";!1!==this.timestampRequests&&(t[this.timestampParam]=c()),this.supportsBinary||t.sid||(t.b64=1),t=i.encode(t),this.port&&("https"===e&&443!==Number(this.port)||"http"===e&&80!==Number(this.port))&&(r=":"+this.port),t.length&&(t="?"+t);var n=this.hostname.indexOf(":")!==-1;return e+"://"+(n?"["+this.hostname+"]":this.hostname)+r+this.path+t}},function(t,e,r){function n(t){this.path=t.path,this.hostname=t.hostname,this.port=t.port,this.secure=t.secure,this.query=t.query,this.timestampParam=t.timestampParam,this.timestampRequests=t.timestampRequests,this.readyState="",this.agent=t.agent||!1,this.socket=t.socket,this.enablesXDR=t.enablesXDR,this.withCredentials=t.withCredentials,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.forceNode=t.forceNode,
+this.isReactNative=t.isReactNative,this.extraHeaders=t.extraHeaders,this.localAddress=t.localAddress}var o=r(19),i=r(5);t.exports=n,i(n.prototype),n.prototype.onError=function(t,e){var r=new Error(t);return r.type="TransportError",r.description=e,this.emit("error",r),this},n.prototype.open=function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this},n.prototype.close=function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this},n.prototype.send=function(t){if("open"!==this.readyState)throw new Error("Transport not open");this.write(t)},n.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},n.prototype.onData=function(t){var e=o.decodePacket(t,this.socket.binaryType);this.onPacket(e)},n.prototype.onPacket=function(t){this.emit("packet",t)},n.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},function(t,e,r){function n(t,r){var n="b"+e.packets[t.type]+t.data.data;return r(n)}function o(t,r,n){if(!r)return e.encodeBase64Packet(t,n);var o=t.data,i=new Uint8Array(o),s=new Uint8Array(1+o.byteLength);s[0]=v[t.type];for(var a=0;a<i.length;a++)s[a+1]=i[a];return n(s.buffer)}function i(t,r,n){if(!r)return e.encodeBase64Packet(t,n);var o=new FileReader;return o.onload=function(){e.encodePacket({type:t.type,data:o.result},r,!0,n)},o.readAsArrayBuffer(t.data)}function s(t,r,n){if(!r)return e.encodeBase64Packet(t,n);if(g)return i(t,r,n);var o=new Uint8Array(1);o[0]=v[t.type];var s=new w([o.buffer,t.data]);return n(s)}function a(t){try{t=d.decode(t,{strict:!1})}catch(t){return!1}return t}function c(t,e,r){for(var n=new Array(t.length),o=l(t.length,r),i=function(t,r,o){e(r,function(e,r){n[t]=r,o(e,n)})},s=0;s<t.length;s++)i(s,t[s],o)}var p,h=r(20),u=r(21),f=r(22),l=r(23),d=r(24);"undefined"!=typeof ArrayBuffer&&(p=r(25));var y="undefined"!=typeof navigator&&/Android/i.test(navigator.userAgent),m="undefined"!=typeof navigator&&/PhantomJS/i.test(navigator.userAgent),g=y||m;e.protocol=3;var v=e.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},b=h(v),k={type:"error",data:"parser error"},w=r(26);e.encodePacket=function(t,e,r,i){"function"==typeof e&&(i=e,e=!1),"function"==typeof r&&(i=r,r=null);var a=void 0===t.data?void 0:t.data.buffer||t.data;if("undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer)return o(t,e,i);if("undefined"!=typeof w&&a instanceof w)return s(t,e,i);if(a&&a.base64)return n(t,i);var c=v[t.type];return void 0!==t.data&&(c+=r?d.encode(String(t.data),{strict:!1}):String(t.data)),i(""+c)},e.encodeBase64Packet=function(t,r){var n="b"+e.packets[t.type];if("undefined"!=typeof w&&t.data instanceof w){var o=new FileReader;return o.onload=function(){var t=o.result.split(",")[1];r(n+t)},o.readAsDataURL(t.data)}var i;try{i=String.fromCharCode.apply(null,new Uint8Array(t.data))}catch(e){for(var s=new Uint8Array(t.data),a=new Array(s.length),c=0;c<s.length;c++)a[c]=s[c];i=String.fromCharCode.apply(null,a)}return n+=btoa(i),r(n)},e.decodePacket=function(t,r,n){if(void 0===t)return k;if("string"==typeof t){if("b"===t.charAt(0))return e.decodeBase64Packet(t.substr(1),r);if(n&&(t=a(t),t===!1))return k;var o=t.charAt(0);return Number(o)==o&&b[o]?t.length>1?{type:b[o],data:t.substring(1)}:{type:b[o]}:k}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&"blob"===r&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var r=b[t.charAt(0)];if(!p)return{type:r,data:{base64:!0,data:t.substr(1)}};var n=p.decode(t.substr(1));return"blob"===e&&w&&(n=new w([n])),{type:r,data:n}},e.encodePayload=function(t,r,n){function o(t){return t.length+":"+t}function i(t,n){e.encodePacket(t,!!s&&r,!1,function(t){n(null,o(t))})}"function"==typeof r&&(n=r,r=null);var s=u(t);return r&&s?w&&!g?e.encodePayloadAsBlob(t,n):e.encodePayloadAsArrayBuffer(t,n):t.length?void c(t,i,function(t,e){return n(e.join(""))}):n("0:")},e.decodePayload=function(t,r,n){if("string"!=typeof t)return e.decodePayloadAsBinary(t,r,n);"function"==typeof r&&(n=r,r=null);var o;if(""===t)return n(k,0,1);for(var i,s,a="",c=0,p=t.length;c<p;c++){var h=t.charAt(c);if(":"===h){if(""===a||a!=(i=Number(a)))return n(k,0,1);if(s=t.substr(c+1,i),a!=s.length)return n(k,0,1);if(s.length){if(o=e.decodePacket(s,r,!1),k.type===o.type&&k.data===o.data)return n(k,0,1);var u=n(o,c+i,p);if(!1===u)return}c+=i,a=""}else a+=h}return""!==a?n(k,0,1):void 0},e.encodePayloadAsArrayBuffer=function(t,r){function n(t,r){e.encodePacket(t,!0,!0,function(t){return r(null,t)})}return t.length?void c(t,n,function(t,e){var n=e.reduce(function(t,e){var r;return r="string"==typeof e?e.length:e.byteLength,t+r.toString().length+r+2},0),o=new Uint8Array(n),i=0;return e.forEach(function(t){var e="string"==typeof t,r=t;if(e){for(var n=new Uint8Array(t.length),s=0;s<t.length;s++)n[s]=t.charCodeAt(s);r=n.buffer}e?o[i++]=0:o[i++]=1;for(var a=r.byteLength.toString(),s=0;s<a.length;s++)o[i++]=parseInt(a[s]);o[i++]=255;for(var n=new Uint8Array(r),s=0;s<n.length;s++)o[i++]=n[s]}),r(o.buffer)}):r(new ArrayBuffer(0))},e.encodePayloadAsBlob=function(t,r){function n(t,r){e.encodePacket(t,!0,!0,function(t){var e=new Uint8Array(1);if(e[0]=1,"string"==typeof t){for(var n=new Uint8Array(t.length),o=0;o<t.length;o++)n[o]=t.charCodeAt(o);t=n.buffer,e[0]=0}for(var i=t instanceof ArrayBuffer?t.byteLength:t.size,s=i.toString(),a=new Uint8Array(s.length+1),o=0;o<s.length;o++)a[o]=parseInt(s[o]);if(a[s.length]=255,w){var c=new w([e.buffer,a.buffer,t]);r(null,c)}})}c(t,n,function(t,e){return r(new w(e))})},e.decodePayloadAsBinary=function(t,r,n){"function"==typeof r&&(n=r,r=null);for(var o=t,i=[];o.byteLength>0;){for(var s=new Uint8Array(o),a=0===s[0],c="",p=1;255!==s[p];p++){if(c.length>310)return n(k,0,1);c+=s[p]}o=f(o,2+c.length),c=parseInt(c);var h=f(o,0,c);if(a)try{h=String.fromCharCode.apply(null,new Uint8Array(h))}catch(t){var u=new Uint8Array(h);h="";for(var p=0;p<u.length;p++)h+=String.fromCharCode(u[p])}i.push(h),o=f(o,c)}var l=i.length;i.forEach(function(t,o){n(e.decodePacket(t,r,!0),o,l)})}},function(t,e){t.exports=Object.keys||function(t){var e=[],r=Object.prototype.hasOwnProperty;for(var n in t)r.call(t,n)&&e.push(n);return e}},function(t,e,r){function n(t){if(!t||"object"!=typeof t)return!1;if(o(t)){for(var e=0,r=t.length;e<r;e++)if(n(t[e]))return!0;return!1}if("function"==typeof Buffer&&Buffer.isBuffer&&Buffer.isBuffer(t)||"function"==typeof ArrayBuffer&&t instanceof ArrayBuffer||s&&t instanceof Blob||a&&t instanceof File)return!0;if(t.toJSON&&"function"==typeof t.toJSON&&1===arguments.length)return n(t.toJSON(),!0);for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&n(t[i]))return!0;return!1}var o=r(7),i=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===i.call(Blob),a="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===i.call(File);t.exports=n},function(t,e){t.exports=function(t,e,r){var n=t.byteLength;if(e=e||0,r=r||n,t.slice)return t.slice(e,r);if(e<0&&(e+=n),r<0&&(r+=n),r>n&&(r=n),e>=n||e>=r||0===n)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(r-e),s=e,a=0;s<r;s++,a++)i[a]=o[s];return i.buffer}},function(t,e){function r(t,e,r){function o(t,n){if(o.count<=0)throw new Error("after called too many times");--o.count,t?(i=!0,e(t),e=r):0!==o.count||i||e(null,n)}var i=!1;return r=r||n,o.count=t,0===t?e():o}function n(){}t.exports=r},function(t,e){function r(t){for(var e,r,n=[],o=0,i=t.length;o<i;)e=t.charCodeAt(o++),e>=55296&&e<=56319&&o<i?(r=t.charCodeAt(o++),56320==(64512&r)?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),o--)):n.push(e);return n}function n(t){for(var e,r=t.length,n=-1,o="";++n<r;)e=t[n],e>65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var r="";return 0==(4294965248&t)?r=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),r=d(t>>12&15|224),r+=i(t,6)):0==(4292870144&t)&&(r=d(t>>18&7|240),r+=i(t,12),r+=i(t,6)),r+=d(63&t|128)}function a(t,e){e=e||{};for(var n,o=!1!==e.strict,i=r(t),a=i.length,c=-1,p="";++c<a;)n=i[c],p+=s(n,o);return p}function c(){if(l>=f)throw Error("Invalid byte index");var t=255&u[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(t){var e,r,n,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&u[l],l++,0==(128&e))return e;if(192==(224&e)){if(r=c(),s=(31&e)<<6|r,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(r=c(),n=c(),s=(15&e)<<12|r<<6|n,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(r=c(),n=c(),i=c(),s=(7&e)<<18|r<<12|n<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function h(t,e){e=e||{};var o=!1!==e.strict;u=r(t),f=u.length,l=0;for(var i,s=[];(i=p(o))!==!1;)s.push(i);return n(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */
+var u,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:h}},function(t,e){!function(t){"use strict";e.encode=function(e){var r,n=new Uint8Array(e),o=n.length,i="";for(r=0;r<o;r+=3)i+=t[n[r]>>2],i+=t[(3&n[r])<<4|n[r+1]>>4],i+=t[(15&n[r+1])<<2|n[r+2]>>6],i+=t[63&n[r+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(e){var r,n,o,i,s,a=.75*e.length,c=e.length,p=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);var h=new ArrayBuffer(a),u=new Uint8Array(h);for(r=0;r<c;r+=4)n=t.indexOf(e[r]),o=t.indexOf(e[r+1]),i=t.indexOf(e[r+2]),s=t.indexOf(e[r+3]),u[p++]=n<<2|o>>4,u[p++]=(15&o)<<4|i>>2,u[p++]=(3&i)<<6|63&s;return h}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},function(t,e){function r(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var r=new Uint8Array(t.byteLength);r.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=r.buffer}return e}return t})}function n(t,e){e=e||{};var n=new i;return r(t).forEach(function(t){n.append(t)}),e.type?n.getBlob(e.type):n.getBlob()}function o(t,e){return new Blob(r(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(t){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(t){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(n.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?n:void 0}()},function(t,e){e.encode=function(t){var e="";for(var r in t)t.hasOwnProperty(r)&&(e.length&&(e+="&"),e+=encodeURIComponent(r)+"="+encodeURIComponent(t[r]));return e},e.decode=function(t){for(var e={},r=t.split("&"),n=0,o=r.length;n<o;n++){var i=r[n].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},function(t,e){t.exports=function(t,e){var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e){"use strict";function r(t){var e="";do e=s[t%a]+e,t=Math.floor(t/a);while(t>0);return e}function n(t){var e=0;for(h=0;h<t.length;h++)e=e*a+c[t.charAt(h)];return e}function o(){var t=r(+new Date);return t!==i?(p=0,i=t):t+"."+r(p++)}for(var i,s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),a=64,c={},p=0,h=0;h<a;h++)c[s[h]]=h;o.encode=r,o.decode=n,t.exports=o},function(t,e,r){function n(){}function o(t){i.call(this,t),this.query=this.query||{},c||(c=a.___eio=a.___eio||[]),this.index=c.length;var e=this;c.push(function(t){e.onData(t)}),this.query.j=this.index,"function"==typeof addEventListener&&addEventListener("beforeunload",function(){e.script&&(e.script.onerror=n)},!1)}var i=r(17),s=r(28),a=r(15);t.exports=o;var c,p=/\n/g,h=/\\n/g;s(o,i),o.prototype.supportsBinary=!1,o.prototype.doClose=function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),i.prototype.doClose.call(this)},o.prototype.doPoll=function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var r=document.getElementsByTagName("script")[0];r?r.parentNode.insertBefore(e,r):(document.head||document.body).appendChild(e),this.script=e;var n="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);n&&setTimeout(function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)},100)},o.prototype.doWrite=function(t,e){function r(){n(),e()}function n(){if(o.iframe)try{o.form.removeChild(o.iframe)}catch(t){o.onError("jsonp polling iframe removal error",t)}try{var t='<iframe src="javascript:0" name="'+o.iframeId+'">';i=document.createElement(t)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),n(),t=t.replace(h,"\\\n"),this.area.value=t.replace(p,"\\n");try{this.form.submit()}catch(t){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&r()}:this.iframe.onload=r}},function(t,e,r){function n(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(u=i),s.call(this,t)}var o,i,s=r(18),a=r(19),c=r(27),p=r(28),h=r(29);r(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=r(32)}catch(t){}var u=o||i;t.exports=n,p(n,s),n.prototype.name="websocket",n.prototype.supportsBinary=!0,n.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,r={};this.isReactNative||(r.agent=this.agent,r.perMessageDeflate=this.perMessageDeflate,r.pfx=this.pfx,r.key=this.key,r.passphrase=this.passphrase,r.cert=this.cert,r.ca=this.ca,r.ciphers=this.ciphers,r.rejectUnauthorized=this.rejectUnauthorized),this.extraHeaders&&(r.headers=this.extraHeaders),this.localAddress&&(r.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new u(t,e):new u(t):new u(t,e,r)}catch(t){return this.emit("error",t)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},n.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},n.prototype.write=function(t){function e(){r.emit("flush"),setTimeout(function(){r.writable=!0,r.emit("drain")},0)}var r=this;this.writable=!1;for(var n=t.length,o=0,i=n;o<i;o++)!function(t){a.encodePacket(t,r.supportsBinary,function(o){if(!r.usingBrowserWebSocket){var i={};if(t.options&&(i.compress=t.options.compress),r.perMessageDeflate){var s="string"==typeof o?Buffer.byteLength(o):o.length;s<r.perMessageDeflate.threshold&&(i.compress=!1)}}try{r.usingBrowserWebSocket?r.ws.send(o):r.ws.send(o,i)}catch(t){}--n||e()})}(t[o])},n.prototype.onClose=function(){s.prototype.onClose.call(this)},n.prototype.doClose=function(){"undefined"!=typeof this.ws&&this.ws.close()},n.prototype.uri=function(){var t=this.query||{},e=this.secure?"wss":"ws",r="";this.port&&("wss"===e&&443!==Number(this.port)||"ws"===e&&80!==Number(this.port))&&(r=":"+this.port),this.timestampRequests&&(t[this.timestampParam]=h()),this.supportsBinary||(t.b64=1),t=c.encode(t),t.length&&(t="?"+t);var n=this.hostname.indexOf(":")!==-1;return e+"://"+(n?"["+this.hostname+"]":this.hostname)+r+this.path+t},n.prototype.check=function(){return!(!u||"__initialize"in u&&this.name===n.prototype.name)}},function(t,e){},function(t,e){var r=[].indexOf;t.exports=function(t,e){if(r)return t.indexOf(e);for(var n=0;n<t.length;++n)if(t[n]===e)return n;return-1}},function(t,e,r){"use strict";function n(t,e,r){this.io=t,this.nsp=e,this.json=this,this.ids=0,this.acks={},this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0,this.flags={},r&&r.query&&(this.query=r.query),this.io.autoConnect&&this.open()}var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=r(4),s=r(5),a=r(35),c=r(36),p=r(37),h=(r(3)("socket.io-client:socket"),r(27)),u=r(21);t.exports=e=n;var f={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1},l=s.prototype.emit;s(n.prototype),n.prototype.subEvents=function(){if(!this.subs){var t=this.io;this.subs=[c(t,"open",p(this,"onopen")),c(t,"packet",p(this,"onpacket")),c(t,"close",p(this,"onclose"))]}},n.prototype.open=n.prototype.connect=function(){return this.connected?this:(this.subEvents(),this.io.reconnecting||this.io.open(),"open"===this.io.readyState&&this.onopen(),this.emit("connecting"),this)},n.prototype.send=function(){var t=a(arguments);return t.unshift("message"),this.emit.apply(this,t),this},n.prototype.emit=function(t){if(f.hasOwnProperty(t))return l.apply(this,arguments),this;var e=a(arguments),r={type:(void 0!==this.flags.binary?this.flags.binary:u(e))?i.BINARY_EVENT:i.EVENT,data:e};return r.options={},r.options.compress=!this.flags||!1!==this.flags.compress,"function"==typeof e[e.length-1]&&(this.acks[this.ids]=e.pop(),r.id=this.ids++),this.connected?this.packet(r):this.sendBuffer.push(r),this.flags={},this},n.prototype.packet=function(t){t.nsp=this.nsp,this.io.packet(t)},n.prototype.onopen=function(){if("/"!==this.nsp)if(this.query){var t="object"===o(this.query)?h.encode(this.query):this.query;this.packet({type:i.CONNECT,query:t})}else this.packet({type:i.CONNECT})},n.prototype.onclose=function(t){this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",t)},n.prototype.onpacket=function(t){var e=t.nsp===this.nsp,r=t.type===i.ERROR&&"/"===t.nsp;if(e||r)switch(t.type){case i.CONNECT:this.onconnect();break;case i.EVENT:this.onevent(t);break;case i.BINARY_EVENT:this.onevent(t);break;case i.ACK:this.onack(t);break;case i.BINARY_ACK:this.onack(t);break;case i.DISCONNECT:this.ondisconnect();break;case i.ERROR:this.emit("error",t.data)}},n.prototype.onevent=function(t){var e=t.data||[];null!=t.id&&e.push(this.ack(t.id)),this.connected?l.apply(this,e):this.receiveBuffer.push(e)},n.prototype.ack=function(t){var e=this,r=!1;return function(){if(!r){r=!0;var n=a(arguments);e.packet({type:u(n)?i.BINARY_ACK:i.ACK,id:t,data:n})}}},n.prototype.onack=function(t){var e=this.acks[t.id];"function"==typeof e&&(e.apply(this,t.data),delete this.acks[t.id])},n.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},n.prototype.emitBuffered=function(){var t;for(t=0;t<this.receiveBuffer.length;t++)l.apply(this,this.receiveBuffer[t]);for(this.receiveBuffer=[],t=0;t<this.sendBuffer.length;t++)this.packet(this.sendBuffer[t]);this.sendBuffer=[]},n.prototype.ondisconnect=function(){this.destroy(),this.onclose("io server disconnect")},n.prototype.destroy=function(){if(this.subs){for(var t=0;t<this.subs.length;t++)this.subs[t].destroy();this.subs=null}this.io.destroy(this)},n.prototype.close=n.prototype.disconnect=function(){return this.connected&&this.packet({type:i.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this},n.prototype.compress=function(t){return this.flags.compress=t,this},n.prototype.binary=function(t){return this.flags.binary=t,this}},function(t,e){function r(t,e){var r=[];e=e||0;for(var n=e||0;n<t.length;n++)r[n-e]=t[n];return r}t.exports=r},function(t,e){"use strict";function r(t,e,r){return t.on(e,r),{destroy:function(){t.removeListener(e,r)}}}t.exports=r},function(t,e){var r=[].slice;t.exports=function(t,e){if("string"==typeof e&&(e=t[e]),"function"!=typeof e)throw new Error("bind() requires a function");var n=r.call(arguments,2);return function(){return e.apply(t,n.concat(r.call(arguments)))}}},function(t,e){function r(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=r,r.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),r=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-r:t+r}return 0|Math.min(t,this.max)},r.prototype.reset=function(){this.attempts=0},r.prototype.setMin=function(t){this.ms=t},r.prototype.setMax=function(t){this.max=t},r.prototype.setJitter=function(t){this.jitter=t}}])});
+//# sourceMappingURL=socket.io.slim.js.map
index 40a6606..848cee8 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///socket.io.slim.js","webpack:///webpack/bootstrap 31c6c79423e11e145ab4","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./support/noop.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","lookup","uri","opts","_typeof","undefined","io","parsed","url","source","path","sameNamespace","cache","nsps","newConnection","forceNew","multiplex","Manager","query","socket","Symbol","iterator","obj","constructor","prototype","parser","managers","protocol","connect","Socket","loc","location","host","charAt","test","parseuri","port","ipv6","indexOf","href","re","parts","str","src","b","e","substring","replace","length","exec","i","authority","ipv6uri","Encoder","encodeAsString","type","BINARY_EVENT","BINARY_ACK","attachments","nsp","data","payload","tryStringify","ERROR_PACKET","JSON","stringify","encodeAsBinary","callback","writeEncoding","bloblessData","deconstruction","binary","deconstructPacket","pack","packet","buffers","unshift","removeBlobs","Decoder","reconstructor","decodeString","Number","types","error","buf","Error","next","tryParse","substr","isPayloadValid","ERROR","isArray","parse","BinaryReconstructor","reconPack","msg","Emitter","isBuf","CONNECT","DISCONNECT","EVENT","ACK","encode","encoding","add","emit","base64","takeBinaryData","destroy","finishedReconstruction","binData","push","reconstructPacket","mixin","key","on","addEventListener","event","fn","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","splice","args","slice","len","listeners","hasListeners","_deconstructPacket","placeholder","_placeholder","num","newData","Array","Date","_reconstructPacket","toString","Object","withNativeBlob","Blob","withNativeFile","File","packetData","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","FileReader","onload","result","readAsArrayBuffer","arr","withNativeBuffer","Buffer","isBuffer","withNativeArrayBuffer","ArrayBuffer","isView","buffer","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","timeout","readyState","connecting","lastPing","packetBuffer","_parser","encoder","decoder","autoConnect","open","eio","bind","has","hasOwnProperty","emitAll","updateSocketIds","generateId","engine","v","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","self","skipReconnect","openSub","onopen","errorSub","cleanup","err","timer","setTimeout","close","clearTimeout","onping","onpong","ondata","ondecoded","onerror","onConnecting","index","encodedPackets","write","options","processPacketQueue","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","hostname","secure","agent","parseqs","decode","upgrade","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transports","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ca","ciphers","rejectUnauthorized","forceNode","isReactNative","navigator","product","toLowerCase","extraHeaders","keys","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","clone","o","priorWebsocketSuccess","Transport","createTransport","name","EIO","transport","sid","requestTimeout","protocols","setTransport","onDrain","onPacket","onError","onClose","probe","onTransportOpen","upgradeLosesBinary","supportsBinary","failed","send","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","to","onOpen","l","onHandshake","setPing","code","filterUpgrades","onHeartbeat","ping","sendPacket","writable","compress","cleanupAndClose","waitForUpgrade","desc","filteredUpgrades","j","polling","xhr","xd","xs","isSSL","xdomain","xscheme","XMLHttpRequest","XHR","JSONP","websocket","hasCORS","XDomainRequest","concat","join","empty","Polling","Request","method","async","isBinary","create","unloadHandler","requests","abort","inherit","request","doWrite","req","sendXhr","doPoll","onData","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","onLoad","responseText","onreadystatechange","contentType","getResponseHeader","responseType","status","document","requestsCount","onSuccess","fromError","response","attachEvent","terminationEvent","hasXHR2","yeast","doOpen","poll","onPause","total","decodePayload","doClose","packets","callbackfn","encodePayload","schema","b64","description","decodePacket","encodeBase64Object","message","encodeArrayBuffer","encodeBase64Packet","contentArray","Uint8Array","resultBuffer","byteLength","encodeBlobAsArrayBuffer","fr","encodePacket","encodeBlob","dontSendBlobs","blob","tryDecode","utf8","strict","map","ary","each","done","after","eachWithIndex","el","base64encoder","hasBinary","sliceBuffer","isAndroid","userAgent","isPhantomJS","pong","noop","packetslist","utf8encode","encoded","String","split","readAsDataURL","b64data","fromCharCode","typed","basic","btoa","utf8decode","decodeBase64Packet","asArray","rest","setLengthHeader","encodeOne","doneCallback","encodePayloadAsBlob","encodePayloadAsArrayBuffer","results","decodePayloadAsBinary","n","chr","ret","totalLength","reduce","acc","resultArray","bufferIndex","forEach","isString","ab","view","charCodeAt","lenStr","parseInt","binaryIdentifier","size","lengthAry","bufferTail","tailArray","msgLength","toJSON","arraybuffer","start","end","bytes","abv","ii","count","err_cb","proxy","bail","ucs2decode","string","value","extra","output","counter","ucs2encode","array","stringFromCharCode","checkScalarValue","codePoint","toUpperCase","createByte","encodeCodePoint","symbol","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","tmp","version","chars","encoded1","encoded2","encoded3","encoded4","bufferLength","mapArrayBufferViews","chunk","copy","set","byteOffset","BlobBuilderConstructor","bb","BlobBuilder","part","append","getBlob","BlobConstructor","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","a","blobSupportsArrayBufferView","blobBuilderSupported","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","alphabet","Math","floor","decoded","now","prev","seed","global","glob","window","JSONPPolling","___eio","script","rNewline","rEscapedNewline","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","isUAgecko","complete","initIframe","html","iframeId","area","className","style","position","top","left","target","setAttribute","action","submit","WS","usingBrowserWebSocket","BrowserWebSocket","WebSocketImpl","NodeWebSocket","WebSocket","MozWebSocket","check","headers","ws","supports","addEventListeners","onmessage","ev","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","toArray","hasBin","events","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","subEvents","pop","onpacket","rootNamespaceError","onconnect","onevent","onack","ondisconnect","ack","sent","emitBuffered","list","ms","factor","pow","rand","random","deviation"],"mappings":"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","file":"socket.io.slim.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar url = __webpack_require__(1);\n\tvar parser = __webpack_require__(4);\n\tvar Manager = __webpack_require__(9);\n\tvar debug = __webpack_require__(3)('socket.io-client');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = lookup;\n\t\n\t/**\n\t * Managers cache.\n\t */\n\t\n\tvar cache = exports.managers = {};\n\t\n\t/**\n\t * Looks up an existing `Manager` for multiplexing.\n\t * If the user summons:\n\t *\n\t *   `io('http://localhost/a');`\n\t *   `io('http://localhost/b');`\n\t *\n\t * We reuse the existing instance based on same scheme/port/host,\n\t * and we initialize sockets for each namespace.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction lookup(uri, opts) {\n\t  if ((typeof uri === 'undefined' ? 'undefined' : _typeof(uri)) === 'object') {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t\n\t  opts = opts || {};\n\t\n\t  var parsed = url(uri);\n\t  var source = parsed.source;\n\t  var id = parsed.id;\n\t  var path = parsed.path;\n\t  var sameNamespace = cache[id] && path in cache[id].nsps;\n\t  var newConnection = opts.forceNew || opts['force new connection'] || false === opts.multiplex || sameNamespace;\n\t\n\t  var io;\n\t\n\t  if (newConnection) {\n\t\n\t    io = Manager(source, opts);\n\t  } else {\n\t    if (!cache[id]) {\n\t\n\t      cache[id] = Manager(source, opts);\n\t    }\n\t    io = cache[id];\n\t  }\n\t  if (parsed.query && !opts.query) {\n\t    opts.query = parsed.query;\n\t  }\n\t  return io.socket(parsed.path, opts);\n\t}\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = parser.protocol;\n\t\n\t/**\n\t * `connect`.\n\t *\n\t * @param {String} uri\n\t * @api public\n\t */\n\t\n\texports.connect = lookup;\n\t\n\t/**\n\t * Expose constructors for standalone build.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Manager = __webpack_require__(9);\n\texports.Socket = __webpack_require__(33);\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parseuri = __webpack_require__(2);\n\tvar debug = __webpack_require__(3)('socket.io-client:url');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = url;\n\t\n\t/**\n\t * URL parser.\n\t *\n\t * @param {String} url\n\t * @param {Object} An object meant to mimic window.location.\n\t *                 Defaults to window.location.\n\t * @api public\n\t */\n\t\n\tfunction url(uri, loc) {\n\t  var obj = uri;\n\t\n\t  // default to window.location\n\t  loc = loc || typeof location !== 'undefined' && location;\n\t  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\t\n\t  // relative path support\n\t  if ('string' === typeof uri) {\n\t    if ('/' === uri.charAt(0)) {\n\t      if ('/' === uri.charAt(1)) {\n\t        uri = loc.protocol + uri;\n\t      } else {\n\t        uri = loc.host + uri;\n\t      }\n\t    }\n\t\n\t    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\t\n\t      if ('undefined' !== typeof loc) {\n\t        uri = loc.protocol + '//' + uri;\n\t      } else {\n\t        uri = 'https://' + uri;\n\t      }\n\t    }\n\t\n\t    // parse\n\t\n\t    obj = parseuri(uri);\n\t  }\n\t\n\t  // make sure we treat `localhost:80` and `localhost` equally\n\t  if (!obj.port) {\n\t    if (/^(http|ws)$/.test(obj.protocol)) {\n\t      obj.port = '80';\n\t    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n\t      obj.port = '443';\n\t    }\n\t  }\n\t\n\t  obj.path = obj.path || '/';\n\t\n\t  var ipv6 = obj.host.indexOf(':') !== -1;\n\t  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\t\n\t  // define unique id\n\t  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n\t  // define href\n\t  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : ':' + obj.port);\n\t\n\t  return obj;\n\t}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Parses an URI\r\n\t *\r\n\t * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n\t * @api private\r\n\t */\r\n\t\r\n\tvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\t\r\n\tvar parts = [\r\n\t    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n\t];\r\n\t\r\n\tmodule.exports = function parseuri(str) {\r\n\t    var src = str,\r\n\t        b = str.indexOf('['),\r\n\t        e = str.indexOf(']');\r\n\t\r\n\t    if (b != -1 && e != -1) {\r\n\t        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n\t    }\r\n\t\r\n\t    var m = re.exec(str || ''),\r\n\t        uri = {},\r\n\t        i = 14;\r\n\t\r\n\t    while (i--) {\r\n\t        uri[parts[i]] = m[i] || '';\r\n\t    }\r\n\t\r\n\t    if (b != -1 && e != -1) {\r\n\t        uri.source = src;\r\n\t        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n\t        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n\t        uri.ipv6uri = true;\r\n\t    }\r\n\t\r\n\t    return uri;\r\n\t};\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = function () {\n\t  return function () {};\n\t};\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar debug = __webpack_require__(3)('socket.io-parser');\n\tvar Emitter = __webpack_require__(5);\n\tvar binary = __webpack_require__(6);\n\tvar isArray = __webpack_require__(7);\n\tvar isBuf = __webpack_require__(8);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = 4;\n\t\n\t/**\n\t * Packet types.\n\t *\n\t * @api public\n\t */\n\t\n\texports.types = [\n\t  'CONNECT',\n\t  'DISCONNECT',\n\t  'EVENT',\n\t  'ACK',\n\t  'ERROR',\n\t  'BINARY_EVENT',\n\t  'BINARY_ACK'\n\t];\n\t\n\t/**\n\t * Packet type `connect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.CONNECT = 0;\n\t\n\t/**\n\t * Packet type `disconnect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.DISCONNECT = 1;\n\t\n\t/**\n\t * Packet type `event`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.EVENT = 2;\n\t\n\t/**\n\t * Packet type `ack`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ACK = 3;\n\t\n\t/**\n\t * Packet type `error`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ERROR = 4;\n\t\n\t/**\n\t * Packet type 'binary event'\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_EVENT = 5;\n\t\n\t/**\n\t * Packet type `binary ack`. For acks with binary arguments.\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_ACK = 6;\n\t\n\t/**\n\t * Encoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Encoder = Encoder;\n\t\n\t/**\n\t * Decoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Decoder = Decoder;\n\t\n\t/**\n\t * A socket.io Encoder instance\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Encoder() {}\n\t\n\tvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\t\n\t/**\n\t * Encode a packet as a single string if non-binary, or as a\n\t * buffer sequence, depending on packet type.\n\t *\n\t * @param {Object} obj - packet object\n\t * @param {Function} callback - function to handle encodings (likely engine.write)\n\t * @return Calls callback with Array of encodings\n\t * @api public\n\t */\n\t\n\tEncoder.prototype.encode = function(obj, callback){\n\t\n\t\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    encodeAsBinary(obj, callback);\n\t  } else {\n\t    var encoding = encodeAsString(obj);\n\t    callback([encoding]);\n\t  }\n\t};\n\t\n\t/**\n\t * Encode packet as string.\n\t *\n\t * @param {Object} packet\n\t * @return {String} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsString(obj) {\n\t\n\t  // first is type\n\t  var str = '' + obj.type;\n\t\n\t  // attachments if we have them\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    str += obj.attachments + '-';\n\t  }\n\t\n\t  // if we have a namespace other than `/`\n\t  // we append it followed by a comma `,`\n\t  if (obj.nsp && '/' !== obj.nsp) {\n\t    str += obj.nsp + ',';\n\t  }\n\t\n\t  // immediately followed by the id\n\t  if (null != obj.id) {\n\t    str += obj.id;\n\t  }\n\t\n\t  // json data\n\t  if (null != obj.data) {\n\t    var payload = tryStringify(obj.data);\n\t    if (payload !== false) {\n\t      str += payload;\n\t    } else {\n\t      return ERROR_PACKET;\n\t    }\n\t  }\n\t\n\t\n\t  return str;\n\t}\n\t\n\tfunction tryStringify(str) {\n\t  try {\n\t    return JSON.stringify(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Encode packet as 'buffer sequence' by removing blobs, and\n\t * deconstructing packet into object with placeholders and\n\t * a list of buffers.\n\t *\n\t * @param {Object} packet\n\t * @return {Buffer} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsBinary(obj, callback) {\n\t\n\t  function writeEncoding(bloblessData) {\n\t    var deconstruction = binary.deconstructPacket(bloblessData);\n\t    var pack = encodeAsString(deconstruction.packet);\n\t    var buffers = deconstruction.buffers;\n\t\n\t    buffers.unshift(pack); // add packet info to beginning of data list\n\t    callback(buffers); // write all the buffers\n\t  }\n\t\n\t  binary.removeBlobs(obj, writeEncoding);\n\t}\n\t\n\t/**\n\t * A socket.io Decoder instance\n\t *\n\t * @return {Object} decoder\n\t * @api public\n\t */\n\t\n\tfunction Decoder() {\n\t  this.reconstructor = null;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter` with Decoder.\n\t */\n\t\n\tEmitter(Decoder.prototype);\n\t\n\t/**\n\t * Decodes an encoded packet string into packet JSON.\n\t *\n\t * @param {String} obj - encoded packet\n\t * @return {Object} packet\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.add = function(obj) {\n\t  var packet;\n\t  if (typeof obj === 'string') {\n\t    packet = decodeString(obj);\n\t    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n\t      this.reconstructor = new BinaryReconstructor(packet);\n\t\n\t      // no attachments, labeled binary but no binary data to follow\n\t      if (this.reconstructor.reconPack.attachments === 0) {\n\t        this.emit('decoded', packet);\n\t      }\n\t    } else { // non-binary full packet\n\t      this.emit('decoded', packet);\n\t    }\n\t  } else if (isBuf(obj) || obj.base64) { // raw binary data\n\t    if (!this.reconstructor) {\n\t      throw new Error('got binary data when not reconstructing a packet');\n\t    } else {\n\t      packet = this.reconstructor.takeBinaryData(obj);\n\t      if (packet) { // received final buffer\n\t        this.reconstructor = null;\n\t        this.emit('decoded', packet);\n\t      }\n\t    }\n\t  } else {\n\t    throw new Error('Unknown type: ' + obj);\n\t  }\n\t};\n\t\n\t/**\n\t * Decode a packet String (JSON data)\n\t *\n\t * @param {String} str\n\t * @return {Object} packet\n\t * @api private\n\t */\n\t\n\tfunction decodeString(str) {\n\t  var i = 0;\n\t  // look up type\n\t  var p = {\n\t    type: Number(str.charAt(0))\n\t  };\n\t\n\t  if (null == exports.types[p.type]) {\n\t    return error('unknown packet type ' + p.type);\n\t  }\n\t\n\t  // look up attachments if type binary\n\t  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n\t    var buf = '';\n\t    while (str.charAt(++i) !== '-') {\n\t      buf += str.charAt(i);\n\t      if (i == str.length) break;\n\t    }\n\t    if (buf != Number(buf) || str.charAt(i) !== '-') {\n\t      throw new Error('Illegal attachments');\n\t    }\n\t    p.attachments = Number(buf);\n\t  }\n\t\n\t  // look up namespace (if any)\n\t  if ('/' === str.charAt(i + 1)) {\n\t    p.nsp = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (',' === c) break;\n\t      p.nsp += c;\n\t      if (i === str.length) break;\n\t    }\n\t  } else {\n\t    p.nsp = '/';\n\t  }\n\t\n\t  // look up id\n\t  var next = str.charAt(i + 1);\n\t  if ('' !== next && Number(next) == next) {\n\t    p.id = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (null == c || Number(c) != c) {\n\t        --i;\n\t        break;\n\t      }\n\t      p.id += str.charAt(i);\n\t      if (i === str.length) break;\n\t    }\n\t    p.id = Number(p.id);\n\t  }\n\t\n\t  // look up json data\n\t  if (str.charAt(++i)) {\n\t    var payload = tryParse(str.substr(i));\n\t    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n\t    if (isPayloadValid) {\n\t      p.data = payload;\n\t    } else {\n\t      return error('invalid payload');\n\t    }\n\t  }\n\t\n\t\n\t  return p;\n\t}\n\t\n\tfunction tryParse(str) {\n\t  try {\n\t    return JSON.parse(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Deallocates a parser's resources\n\t *\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.destroy = function() {\n\t  if (this.reconstructor) {\n\t    this.reconstructor.finishedReconstruction();\n\t  }\n\t};\n\t\n\t/**\n\t * A manager of a binary event's 'buffer sequence'. Should\n\t * be constructed whenever a packet of type BINARY_EVENT is\n\t * decoded.\n\t *\n\t * @param {Object} packet\n\t * @return {BinaryReconstructor} initialized reconstructor\n\t * @api private\n\t */\n\t\n\tfunction BinaryReconstructor(packet) {\n\t  this.reconPack = packet;\n\t  this.buffers = [];\n\t}\n\t\n\t/**\n\t * Method to be called when binary data received from connection\n\t * after a BINARY_EVENT packet.\n\t *\n\t * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n\t * @return {null | Object} returns null if more binary data is expected or\n\t *   a reconstructed packet object if all buffers have been received.\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n\t  this.buffers.push(binData);\n\t  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n\t    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n\t    this.finishedReconstruction();\n\t    return packet;\n\t  }\n\t  return null;\n\t};\n\t\n\t/**\n\t * Cleans up binary packet reconstruction variables.\n\t *\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.finishedReconstruction = function() {\n\t  this.reconPack = null;\n\t  this.buffers = [];\n\t};\n\t\n\tfunction error(msg) {\n\t  return {\n\t    type: exports.ERROR,\n\t    data: 'parser error: ' + msg\n\t  };\n\t}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\r\n\t/**\r\n\t * Expose `Emitter`.\r\n\t */\r\n\t\r\n\tif (true) {\r\n\t  module.exports = Emitter;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialize a new `Emitter`.\r\n\t *\r\n\t * @api public\r\n\t */\r\n\t\r\n\tfunction Emitter(obj) {\r\n\t  if (obj) return mixin(obj);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Mixin the emitter properties.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\tfunction mixin(obj) {\r\n\t  for (var key in Emitter.prototype) {\r\n\t    obj[key] = Emitter.prototype[key];\r\n\t  }\r\n\t  return obj;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Listen on the given `event` with `fn`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.on =\r\n\tEmitter.prototype.addEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n\t    .push(fn);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds an `event` listener that will be invoked a single\r\n\t * time then automatically removed.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.once = function(event, fn){\r\n\t  function on() {\r\n\t    this.off(event, on);\r\n\t    fn.apply(this, arguments);\r\n\t  }\r\n\t\r\n\t  on.fn = fn;\r\n\t  this.on(event, on);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Remove the given callback for `event` or all\r\n\t * registered callbacks.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.off =\r\n\tEmitter.prototype.removeListener =\r\n\tEmitter.prototype.removeAllListeners =\r\n\tEmitter.prototype.removeEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  // all\r\n\t  if (0 == arguments.length) {\r\n\t    this._callbacks = {};\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // specific event\r\n\t  var callbacks = this._callbacks['$' + event];\r\n\t  if (!callbacks) return this;\r\n\t\r\n\t  // remove all handlers\r\n\t  if (1 == arguments.length) {\r\n\t    delete this._callbacks['$' + event];\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // remove specific handler\r\n\t  var cb;\r\n\t  for (var i = 0; i < callbacks.length; i++) {\r\n\t    cb = callbacks[i];\r\n\t    if (cb === fn || cb.fn === fn) {\r\n\t      callbacks.splice(i, 1);\r\n\t      break;\r\n\t    }\r\n\t  }\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Emit `event` with the given args.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Mixed} ...\r\n\t * @return {Emitter}\r\n\t */\r\n\t\r\n\tEmitter.prototype.emit = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  var args = [].slice.call(arguments, 1)\r\n\t    , callbacks = this._callbacks['$' + event];\r\n\t\r\n\t  if (callbacks) {\r\n\t    callbacks = callbacks.slice(0);\r\n\t    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n\t      callbacks[i].apply(this, args);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Return array of callbacks for `event`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Array}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.listeners = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  return this._callbacks['$' + event] || [];\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if this emitter has `event` handlers.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Boolean}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.hasListeners = function(event){\r\n\t  return !! this.listeners(event).length;\r\n\t};\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*global Blob,File*/\n\t\n\t/**\n\t * Module requirements\n\t */\n\t\n\tvar isArray = __webpack_require__(7);\n\tvar isBuf = __webpack_require__(8);\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\n\tvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\t\n\t/**\n\t * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n\t * Anything with blobs or files should be fed through removeBlobs before coming\n\t * here.\n\t *\n\t * @param {Object} packet - socket.io event packet\n\t * @return {Object} with deconstructed packet and list of buffers\n\t * @api public\n\t */\n\t\n\texports.deconstructPacket = function(packet) {\n\t  var buffers = [];\n\t  var packetData = packet.data;\n\t  var pack = packet;\n\t  pack.data = _deconstructPacket(packetData, buffers);\n\t  pack.attachments = buffers.length; // number of binary 'attachments'\n\t  return {packet: pack, buffers: buffers};\n\t};\n\t\n\tfunction _deconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (isBuf(data)) {\n\t    var placeholder = { _placeholder: true, num: buffers.length };\n\t    buffers.push(data);\n\t    return placeholder;\n\t  } else if (isArray(data)) {\n\t    var newData = new Array(data.length);\n\t    for (var i = 0; i < data.length; i++) {\n\t      newData[i] = _deconstructPacket(data[i], buffers);\n\t    }\n\t    return newData;\n\t  } else if (typeof data === 'object' && !(data instanceof Date)) {\n\t    var newData = {};\n\t    for (var key in data) {\n\t      newData[key] = _deconstructPacket(data[key], buffers);\n\t    }\n\t    return newData;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Reconstructs a binary packet from its placeholder packet and buffers\n\t *\n\t * @param {Object} packet - event packet with placeholders\n\t * @param {Array} buffers - binary buffers to put in placeholder positions\n\t * @return {Object} reconstructed packet\n\t * @api public\n\t */\n\t\n\texports.reconstructPacket = function(packet, buffers) {\n\t  packet.data = _reconstructPacket(packet.data, buffers);\n\t  packet.attachments = undefined; // no longer useful\n\t  return packet;\n\t};\n\t\n\tfunction _reconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (data && data._placeholder) {\n\t    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n\t  } else if (isArray(data)) {\n\t    for (var i = 0; i < data.length; i++) {\n\t      data[i] = _reconstructPacket(data[i], buffers);\n\t    }\n\t  } else if (typeof data === 'object') {\n\t    for (var key in data) {\n\t      data[key] = _reconstructPacket(data[key], buffers);\n\t    }\n\t  }\n\t\n\t  return data;\n\t}\n\t\n\t/**\n\t * Asynchronously removes Blobs or Files from data via\n\t * FileReader's readAsArrayBuffer method. Used before encoding\n\t * data as msgpack. Calls callback with the blobless data.\n\t *\n\t * @param {Object} data\n\t * @param {Function} callback\n\t * @api private\n\t */\n\t\n\texports.removeBlobs = function(data, callback) {\n\t  function _removeBlobs(obj, curKey, containingObject) {\n\t    if (!obj) return obj;\n\t\n\t    // convert any blob\n\t    if ((withNativeBlob && obj instanceof Blob) ||\n\t        (withNativeFile && obj instanceof File)) {\n\t      pendingBlobs++;\n\t\n\t      // async filereader\n\t      var fileReader = new FileReader();\n\t      fileReader.onload = function() { // this.result == arraybuffer\n\t        if (containingObject) {\n\t          containingObject[curKey] = this.result;\n\t        }\n\t        else {\n\t          bloblessData = this.result;\n\t        }\n\t\n\t        // if nothing pending its callback time\n\t        if(! --pendingBlobs) {\n\t          callback(bloblessData);\n\t        }\n\t      };\n\t\n\t      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n\t    } else if (isArray(obj)) { // handle array\n\t      for (var i = 0; i < obj.length; i++) {\n\t        _removeBlobs(obj[i], i, obj);\n\t      }\n\t    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n\t      for (var key in obj) {\n\t        _removeBlobs(obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t\n\t  var pendingBlobs = 0;\n\t  var bloblessData = data;\n\t  _removeBlobs(bloblessData);\n\t  if (!pendingBlobs) {\n\t    callback(bloblessData);\n\t  }\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = Array.isArray || function (arr) {\n\t  return toString.call(arr) == '[object Array]';\n\t};\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = isBuf;\n\t\n\tvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\n\tvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\t\n\tvar isView = function (obj) {\n\t  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n\t};\n\t\n\t/**\n\t * Returns true if obj is a buffer or an arraybuffer.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction isBuf(obj) {\n\t  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n\t          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n\t}\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar eio = __webpack_require__(10);\n\tvar Socket = __webpack_require__(33);\n\tvar Emitter = __webpack_require__(5);\n\tvar parser = __webpack_require__(4);\n\tvar on = __webpack_require__(35);\n\tvar bind = __webpack_require__(36);\n\tvar debug = __webpack_require__(3)('socket.io-client:manager');\n\tvar indexOf = __webpack_require__(32);\n\tvar Backoff = __webpack_require__(37);\n\t\n\t/**\n\t * IE6+ hasOwnProperty\n\t */\n\t\n\tvar has = Object.prototype.hasOwnProperty;\n\t\n\t/**\n\t * Module exports\n\t */\n\t\n\tmodule.exports = Manager;\n\t\n\t/**\n\t * `Manager` constructor.\n\t *\n\t * @param {String} engine instance or engine uri/opts\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Manager(uri, opts) {\n\t  if (!(this instanceof Manager)) return new Manager(uri, opts);\n\t  if (uri && 'object' === (typeof uri === 'undefined' ? 'undefined' : _typeof(uri))) {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t  opts = opts || {};\n\t\n\t  opts.path = opts.path || '/socket.io';\n\t  this.nsps = {};\n\t  this.subs = [];\n\t  this.opts = opts;\n\t  this.reconnection(opts.reconnection !== false);\n\t  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n\t  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n\t  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n\t  this.randomizationFactor(opts.randomizationFactor || 0.5);\n\t  this.backoff = new Backoff({\n\t    min: this.reconnectionDelay(),\n\t    max: this.reconnectionDelayMax(),\n\t    jitter: this.randomizationFactor()\n\t  });\n\t  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n\t  this.readyState = 'closed';\n\t  this.uri = uri;\n\t  this.connecting = [];\n\t  this.lastPing = null;\n\t  this.encoding = false;\n\t  this.packetBuffer = [];\n\t  var _parser = opts.parser || parser;\n\t  this.encoder = new _parser.Encoder();\n\t  this.decoder = new _parser.Decoder();\n\t  this.autoConnect = opts.autoConnect !== false;\n\t  if (this.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Propagate given event to sockets and emit on `this`\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.emitAll = function () {\n\t  this.emit.apply(this, arguments);\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Update `socket.id` of all sockets\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.updateSocketIds = function () {\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].id = this.generateId(nsp);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * generate `socket.id` for the given `nsp`\n\t *\n\t * @param {String} nsp\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tManager.prototype.generateId = function (nsp) {\n\t  return (nsp === '/' ? '' : nsp + '#') + this.engine.id;\n\t};\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Manager.prototype);\n\t\n\t/**\n\t * Sets the `reconnection` config.\n\t *\n\t * @param {Boolean} true/false if it should automatically reconnect\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnection = function (v) {\n\t  if (!arguments.length) return this._reconnection;\n\t  this._reconnection = !!v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the reconnection attempts config.\n\t *\n\t * @param {Number} max reconnection attempts before giving up\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionAttempts = function (v) {\n\t  if (!arguments.length) return this._reconnectionAttempts;\n\t  this._reconnectionAttempts = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelay = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelay;\n\t  this._reconnectionDelay = v;\n\t  this.backoff && this.backoff.setMin(v);\n\t  return this;\n\t};\n\t\n\tManager.prototype.randomizationFactor = function (v) {\n\t  if (!arguments.length) return this._randomizationFactor;\n\t  this._randomizationFactor = v;\n\t  this.backoff && this.backoff.setJitter(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the maximum delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelayMax = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelayMax;\n\t  this._reconnectionDelayMax = v;\n\t  this.backoff && this.backoff.setMax(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the connection timeout. `false` to disable\n\t *\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.timeout = function (v) {\n\t  if (!arguments.length) return this._timeout;\n\t  this._timeout = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Starts trying to reconnect if reconnection is enabled and we have not\n\t * started reconnecting yet\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.maybeReconnectOnOpen = function () {\n\t  // Only try to reconnect if it's the first time we're connecting\n\t  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n\t    // keeps reconnection from firing twice for the same reconnection loop\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Sets the current transport `socket`.\n\t *\n\t * @param {Function} optional, callback\n\t * @return {Manager} self\n\t * @api public\n\t */\n\t\n\tManager.prototype.open = Manager.prototype.connect = function (fn, opts) {\n\t\n\t  if (~this.readyState.indexOf('open')) return this;\n\t\n\t  this.engine = eio(this.uri, this.opts);\n\t  var socket = this.engine;\n\t  var self = this;\n\t  this.readyState = 'opening';\n\t  this.skipReconnect = false;\n\t\n\t  // emit `open`\n\t  var openSub = on(socket, 'open', function () {\n\t    self.onopen();\n\t    fn && fn();\n\t  });\n\t\n\t  // emit `connect_error`\n\t  var errorSub = on(socket, 'error', function (data) {\n\t\n\t    self.cleanup();\n\t    self.readyState = 'closed';\n\t    self.emitAll('connect_error', data);\n\t    if (fn) {\n\t      var err = new Error('Connection error');\n\t      err.data = data;\n\t      fn(err);\n\t    } else {\n\t      // Only do this if there is no fn to handle the error\n\t      self.maybeReconnectOnOpen();\n\t    }\n\t  });\n\t\n\t  // emit `connect_timeout`\n\t  if (false !== this._timeout) {\n\t    var timeout = this._timeout;\n\t\n\t    // set timer\n\t    var timer = setTimeout(function () {\n\t\n\t      openSub.destroy();\n\t      socket.close();\n\t      socket.emit('error', 'timeout');\n\t      self.emitAll('connect_timeout', timeout);\n\t    }, timeout);\n\t\n\t    this.subs.push({\n\t      destroy: function destroy() {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t\n\t  this.subs.push(openSub);\n\t  this.subs.push(errorSub);\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport open.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onopen = function () {\n\t\n\t  // clear old subs\n\t  this.cleanup();\n\t\n\t  // mark as open\n\t  this.readyState = 'open';\n\t  this.emit('open');\n\t\n\t  // add new subs\n\t  var socket = this.engine;\n\t  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n\t  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n\t  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n\t  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n\t  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n\t  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n\t};\n\t\n\t/**\n\t * Called upon a ping.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onping = function () {\n\t  this.lastPing = new Date();\n\t  this.emitAll('ping');\n\t};\n\t\n\t/**\n\t * Called upon a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onpong = function () {\n\t  this.emitAll('pong', new Date() - this.lastPing);\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondata = function (data) {\n\t  this.decoder.add(data);\n\t};\n\t\n\t/**\n\t * Called when parser fully decodes a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondecoded = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon socket error.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onerror = function (err) {\n\t\n\t  this.emitAll('error', err);\n\t};\n\t\n\t/**\n\t * Creates a new socket for the given `nsp`.\n\t *\n\t * @return {Socket}\n\t * @api public\n\t */\n\t\n\tManager.prototype.socket = function (nsp, opts) {\n\t  var socket = this.nsps[nsp];\n\t  if (!socket) {\n\t    socket = new Socket(this, nsp, opts);\n\t    this.nsps[nsp] = socket;\n\t    var self = this;\n\t    socket.on('connecting', onConnecting);\n\t    socket.on('connect', function () {\n\t      socket.id = self.generateId(nsp);\n\t    });\n\t\n\t    if (this.autoConnect) {\n\t      // manually call here since connecting event is fired before listening\n\t      onConnecting();\n\t    }\n\t  }\n\t\n\t  function onConnecting() {\n\t    if (!~indexOf(self.connecting, socket)) {\n\t      self.connecting.push(socket);\n\t    }\n\t  }\n\t\n\t  return socket;\n\t};\n\t\n\t/**\n\t * Called upon a socket close.\n\t *\n\t * @param {Socket} socket\n\t */\n\t\n\tManager.prototype.destroy = function (socket) {\n\t  var index = indexOf(this.connecting, socket);\n\t  if (~index) this.connecting.splice(index, 1);\n\t  if (this.connecting.length) return;\n\t\n\t  this.close();\n\t};\n\t\n\t/**\n\t * Writes a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tManager.prototype.packet = function (packet) {\n\t\n\t  var self = this;\n\t  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\t\n\t  if (!self.encoding) {\n\t    // encode, then write to engine with result\n\t    self.encoding = true;\n\t    this.encoder.encode(packet, function (encodedPackets) {\n\t      for (var i = 0; i < encodedPackets.length; i++) {\n\t        self.engine.write(encodedPackets[i], packet.options);\n\t      }\n\t      self.encoding = false;\n\t      self.processPacketQueue();\n\t    });\n\t  } else {\n\t    // add packet to the queue\n\t    self.packetBuffer.push(packet);\n\t  }\n\t};\n\t\n\t/**\n\t * If packet buffer is non-empty, begins encoding the\n\t * next packet in line.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.processPacketQueue = function () {\n\t  if (this.packetBuffer.length > 0 && !this.encoding) {\n\t    var pack = this.packetBuffer.shift();\n\t    this.packet(pack);\n\t  }\n\t};\n\t\n\t/**\n\t * Clean up transport subscriptions and packet buffer.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.cleanup = function () {\n\t\n\t  var subsLength = this.subs.length;\n\t  for (var i = 0; i < subsLength; i++) {\n\t    var sub = this.subs.shift();\n\t    sub.destroy();\n\t  }\n\t\n\t  this.packetBuffer = [];\n\t  this.encoding = false;\n\t  this.lastPing = null;\n\t\n\t  this.decoder.destroy();\n\t};\n\t\n\t/**\n\t * Close the current socket.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.close = Manager.prototype.disconnect = function () {\n\t\n\t  this.skipReconnect = true;\n\t  this.reconnecting = false;\n\t  if ('opening' === this.readyState) {\n\t    // `onclose` will not fire because\n\t    // an open event never happened\n\t    this.cleanup();\n\t  }\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  if (this.engine) this.engine.close();\n\t};\n\t\n\t/**\n\t * Called upon engine close.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onclose = function (reason) {\n\t\n\t  this.cleanup();\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  this.emit('close', reason);\n\t\n\t  if (this._reconnection && !this.skipReconnect) {\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Attempt a reconnection.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.reconnect = function () {\n\t  if (this.reconnecting || this.skipReconnect) return this;\n\t\n\t  var self = this;\n\t\n\t  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\t\n\t    this.backoff.reset();\n\t    this.emitAll('reconnect_failed');\n\t    this.reconnecting = false;\n\t  } else {\n\t    var delay = this.backoff.duration();\n\t\n\t    this.reconnecting = true;\n\t    var timer = setTimeout(function () {\n\t      if (self.skipReconnect) return;\n\t\n\t      self.emitAll('reconnect_attempt', self.backoff.attempts);\n\t      self.emitAll('reconnecting', self.backoff.attempts);\n\t\n\t      // check again for the case socket closed in above events\n\t      if (self.skipReconnect) return;\n\t\n\t      self.open(function (err) {\n\t        if (err) {\n\t\n\t          self.reconnecting = false;\n\t          self.reconnect();\n\t          self.emitAll('reconnect_error', err.data);\n\t        } else {\n\t\n\t          self.onreconnect();\n\t        }\n\t      });\n\t    }, delay);\n\t\n\t    this.subs.push({\n\t      destroy: function destroy() {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful reconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onreconnect = function () {\n\t  var attempt = this.backoff.attempts;\n\t  this.reconnecting = false;\n\t  this.backoff.reset();\n\t  this.updateSocketIds();\n\t  this.emitAll('reconnect', attempt);\n\t};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\tmodule.exports = __webpack_require__(11);\n\t\n\t/**\n\t * Exports parser\n\t *\n\t * @api public\n\t *\n\t */\n\tmodule.exports.parser = __webpack_require__(18);\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar transports = __webpack_require__(12);\n\tvar Emitter = __webpack_require__(5);\n\tvar debug = __webpack_require__(3)('engine.io-client:socket');\n\tvar index = __webpack_require__(32);\n\tvar parser = __webpack_require__(18);\n\tvar parseuri = __webpack_require__(2);\n\tvar parseqs = __webpack_require__(26);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Socket;\n\t\n\t/**\n\t * Socket constructor.\n\t *\n\t * @param {String|Object} uri or options\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Socket (uri, opts) {\n\t  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\t\n\t  opts = opts || {};\n\t\n\t  if (uri && 'object' === typeof uri) {\n\t    opts = uri;\n\t    uri = null;\n\t  }\n\t\n\t  if (uri) {\n\t    uri = parseuri(uri);\n\t    opts.hostname = uri.host;\n\t    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n\t    opts.port = uri.port;\n\t    if (uri.query) opts.query = uri.query;\n\t  } else if (opts.host) {\n\t    opts.hostname = parseuri(opts.host).host;\n\t  }\n\t\n\t  this.secure = null != opts.secure ? opts.secure\n\t    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\t\n\t  if (opts.hostname && !opts.port) {\n\t    // if no port is specified manually, use the protocol default\n\t    opts.port = this.secure ? '443' : '80';\n\t  }\n\t\n\t  this.agent = opts.agent || false;\n\t  this.hostname = opts.hostname ||\n\t    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n\t  this.port = opts.port || (typeof location !== 'undefined' && location.port\n\t      ? location.port\n\t      : (this.secure ? 443 : 80));\n\t  this.query = opts.query || {};\n\t  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n\t  this.upgrade = false !== opts.upgrade;\n\t  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n\t  this.forceJSONP = !!opts.forceJSONP;\n\t  this.jsonp = false !== opts.jsonp;\n\t  this.forceBase64 = !!opts.forceBase64;\n\t  this.enablesXDR = !!opts.enablesXDR;\n\t  this.withCredentials = false !== opts.withCredentials;\n\t  this.timestampParam = opts.timestampParam || 't';\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.transports = opts.transports || ['polling', 'websocket'];\n\t  this.transportOptions = opts.transportOptions || {};\n\t  this.readyState = '';\n\t  this.writeBuffer = [];\n\t  this.prevBufferLen = 0;\n\t  this.policyPort = opts.policyPort || 843;\n\t  this.rememberUpgrade = opts.rememberUpgrade || false;\n\t  this.binaryType = null;\n\t  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n\t  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\t\n\t  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n\t  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n\t    this.perMessageDeflate.threshold = 1024;\n\t  }\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx || null;\n\t  this.key = opts.key || null;\n\t  this.passphrase = opts.passphrase || null;\n\t  this.cert = opts.cert || null;\n\t  this.ca = opts.ca || null;\n\t  this.ciphers = opts.ciphers || null;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n\t  this.forceNode = !!opts.forceNode;\n\t\n\t  // detect ReactNative environment\n\t  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\t\n\t  // other options for Node.js or ReactNative client\n\t  if (typeof self === 'undefined' || this.isReactNative) {\n\t    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n\t      this.extraHeaders = opts.extraHeaders;\n\t    }\n\t\n\t    if (opts.localAddress) {\n\t      this.localAddress = opts.localAddress;\n\t    }\n\t  }\n\t\n\t  // set on handshake\n\t  this.id = null;\n\t  this.upgrades = null;\n\t  this.pingInterval = null;\n\t  this.pingTimeout = null;\n\t\n\t  // set on heartbeat\n\t  this.pingIntervalTimer = null;\n\t  this.pingTimeoutTimer = null;\n\t\n\t  this.open();\n\t}\n\t\n\tSocket.priorWebsocketSuccess = false;\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.protocol = parser.protocol; // this is an int\n\t\n\t/**\n\t * Expose deps for legacy compatibility\n\t * and standalone browser access.\n\t */\n\t\n\tSocket.Socket = Socket;\n\tSocket.Transport = __webpack_require__(17);\n\tSocket.transports = __webpack_require__(12);\n\tSocket.parser = __webpack_require__(18);\n\t\n\t/**\n\t * Creates transport of the given type.\n\t *\n\t * @param {String} transport name\n\t * @return {Transport}\n\t * @api private\n\t */\n\t\n\tSocket.prototype.createTransport = function (name) {\n\t\n\t  var query = clone(this.query);\n\t\n\t  // append engine.io protocol identifier\n\t  query.EIO = parser.protocol;\n\t\n\t  // transport name\n\t  query.transport = name;\n\t\n\t  // per-transport options\n\t  var options = this.transportOptions[name] || {};\n\t\n\t  // session id if we already have one\n\t  if (this.id) query.sid = this.id;\n\t\n\t  var transport = new transports[name]({\n\t    query: query,\n\t    socket: this,\n\t    agent: options.agent || this.agent,\n\t    hostname: options.hostname || this.hostname,\n\t    port: options.port || this.port,\n\t    secure: options.secure || this.secure,\n\t    path: options.path || this.path,\n\t    forceJSONP: options.forceJSONP || this.forceJSONP,\n\t    jsonp: options.jsonp || this.jsonp,\n\t    forceBase64: options.forceBase64 || this.forceBase64,\n\t    enablesXDR: options.enablesXDR || this.enablesXDR,\n\t    withCredentials: options.withCredentials || this.withCredentials,\n\t    timestampRequests: options.timestampRequests || this.timestampRequests,\n\t    timestampParam: options.timestampParam || this.timestampParam,\n\t    policyPort: options.policyPort || this.policyPort,\n\t    pfx: options.pfx || this.pfx,\n\t    key: options.key || this.key,\n\t    passphrase: options.passphrase || this.passphrase,\n\t    cert: options.cert || this.cert,\n\t    ca: options.ca || this.ca,\n\t    ciphers: options.ciphers || this.ciphers,\n\t    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n\t    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n\t    extraHeaders: options.extraHeaders || this.extraHeaders,\n\t    forceNode: options.forceNode || this.forceNode,\n\t    localAddress: options.localAddress || this.localAddress,\n\t    requestTimeout: options.requestTimeout || this.requestTimeout,\n\t    protocols: options.protocols || void (0),\n\t    isReactNative: this.isReactNative\n\t  });\n\t\n\t  return transport;\n\t};\n\t\n\tfunction clone (obj) {\n\t  var o = {};\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      o[i] = obj[i];\n\t    }\n\t  }\n\t  return o;\n\t}\n\t\n\t/**\n\t * Initializes transport to use and starts probe.\n\t *\n\t * @api private\n\t */\n\tSocket.prototype.open = function () {\n\t  var transport;\n\t  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n\t    transport = 'websocket';\n\t  } else if (0 === this.transports.length) {\n\t    // Emit error on next tick so it can be listened to\n\t    var self = this;\n\t    setTimeout(function () {\n\t      self.emit('error', 'No transports available');\n\t    }, 0);\n\t    return;\n\t  } else {\n\t    transport = this.transports[0];\n\t  }\n\t  this.readyState = 'opening';\n\t\n\t  // Retry with the next transport if the transport is disabled (jsonp: false)\n\t  try {\n\t    transport = this.createTransport(transport);\n\t  } catch (e) {\n\t    this.transports.shift();\n\t    this.open();\n\t    return;\n\t  }\n\t\n\t  transport.open();\n\t  this.setTransport(transport);\n\t};\n\t\n\t/**\n\t * Sets the current transport. Disables the existing one (if any).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setTransport = function (transport) {\n\t\n\t  var self = this;\n\t\n\t  if (this.transport) {\n\t\n\t    this.transport.removeAllListeners();\n\t  }\n\t\n\t  // set up transport\n\t  this.transport = transport;\n\t\n\t  // set up transport listeners\n\t  transport\n\t  .on('drain', function () {\n\t    self.onDrain();\n\t  })\n\t  .on('packet', function (packet) {\n\t    self.onPacket(packet);\n\t  })\n\t  .on('error', function (e) {\n\t    self.onError(e);\n\t  })\n\t  .on('close', function () {\n\t    self.onClose('transport close');\n\t  });\n\t};\n\t\n\t/**\n\t * Probes a transport.\n\t *\n\t * @param {String} transport name\n\t * @api private\n\t */\n\t\n\tSocket.prototype.probe = function (name) {\n\t\n\t  var transport = this.createTransport(name, { probe: 1 });\n\t  var failed = false;\n\t  var self = this;\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t\n\t  function onTransportOpen () {\n\t    if (self.onlyBinaryUpgrades) {\n\t      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n\t      failed = failed || upgradeLosesBinary;\n\t    }\n\t    if (failed) return;\n\t\n\t\n\t    transport.send([{ type: 'ping', data: 'probe' }]);\n\t    transport.once('packet', function (msg) {\n\t      if (failed) return;\n\t      if ('pong' === msg.type && 'probe' === msg.data) {\n\t\n\t        self.upgrading = true;\n\t        self.emit('upgrading', transport);\n\t        if (!transport) return;\n\t        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\t\n\t\n\t        self.transport.pause(function () {\n\t          if (failed) return;\n\t          if ('closed' === self.readyState) return;\n\t\n\t\n\t          cleanup();\n\t\n\t          self.setTransport(transport);\n\t          transport.send([{ type: 'upgrade' }]);\n\t          self.emit('upgrade', transport);\n\t          transport = null;\n\t          self.upgrading = false;\n\t          self.flush();\n\t        });\n\t      } else {\n\t\n\t        var err = new Error('probe error');\n\t        err.transport = transport.name;\n\t        self.emit('upgradeError', err);\n\t      }\n\t    });\n\t  }\n\t\n\t  function freezeTransport () {\n\t    if (failed) return;\n\t\n\t    // Any callback called by transport should be ignored since now\n\t    failed = true;\n\t\n\t    cleanup();\n\t\n\t    transport.close();\n\t    transport = null;\n\t  }\n\t\n\t  // Handle any error that happens while probing\n\t  function onerror (err) {\n\t    var error = new Error('probe error: ' + err);\n\t    error.transport = transport.name;\n\t\n\t    freezeTransport();\n\t\n\t\n\t\n\t    self.emit('upgradeError', error);\n\t  }\n\t\n\t  function onTransportClose () {\n\t    onerror('transport closed');\n\t  }\n\t\n\t  // When the socket is closed while we're probing\n\t  function onclose () {\n\t    onerror('socket closed');\n\t  }\n\t\n\t  // When the socket is upgraded while we're probing\n\t  function onupgrade (to) {\n\t    if (transport && to.name !== transport.name) {\n\t\n\t      freezeTransport();\n\t    }\n\t  }\n\t\n\t  // Remove all listeners on the transport and on self\n\t  function cleanup () {\n\t    transport.removeListener('open', onTransportOpen);\n\t    transport.removeListener('error', onerror);\n\t    transport.removeListener('close', onTransportClose);\n\t    self.removeListener('close', onclose);\n\t    self.removeListener('upgrading', onupgrade);\n\t  }\n\t\n\t  transport.once('open', onTransportOpen);\n\t  transport.once('error', onerror);\n\t  transport.once('close', onTransportClose);\n\t\n\t  this.once('close', onclose);\n\t  this.once('upgrading', onupgrade);\n\t\n\t  transport.open();\n\t};\n\t\n\t/**\n\t * Called when connection is deemed open.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.onOpen = function () {\n\t\n\t  this.readyState = 'open';\n\t  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n\t  this.emit('open');\n\t  this.flush();\n\t\n\t  // we check for `readyState` in case an `open`\n\t  // listener already closed the socket\n\t  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\t\n\t    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n\t      this.probe(this.upgrades[i]);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Handles a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onPacket = function (packet) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState ||\n\t      'closing' === this.readyState) {\n\t\n\t\n\t    this.emit('packet', packet);\n\t\n\t    // Socket is live - any packet counts\n\t    this.emit('heartbeat');\n\t\n\t    switch (packet.type) {\n\t      case 'open':\n\t        this.onHandshake(JSON.parse(packet.data));\n\t        break;\n\t\n\t      case 'pong':\n\t        this.setPing();\n\t        this.emit('pong');\n\t        break;\n\t\n\t      case 'error':\n\t        var err = new Error('server error');\n\t        err.code = packet.data;\n\t        this.onError(err);\n\t        break;\n\t\n\t      case 'message':\n\t        this.emit('data', packet.data);\n\t        this.emit('message', packet.data);\n\t        break;\n\t    }\n\t  } else {\n\t\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon handshake completion.\n\t *\n\t * @param {Object} handshake obj\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHandshake = function (data) {\n\t  this.emit('handshake', data);\n\t  this.id = data.sid;\n\t  this.transport.query.sid = data.sid;\n\t  this.upgrades = this.filterUpgrades(data.upgrades);\n\t  this.pingInterval = data.pingInterval;\n\t  this.pingTimeout = data.pingTimeout;\n\t  this.onOpen();\n\t  // In case open handler closes socket\n\t  if ('closed' === this.readyState) return;\n\t  this.setPing();\n\t\n\t  // Prolong liveness of socket on heartbeat\n\t  this.removeListener('heartbeat', this.onHeartbeat);\n\t  this.on('heartbeat', this.onHeartbeat);\n\t};\n\t\n\t/**\n\t * Resets ping timeout.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHeartbeat = function (timeout) {\n\t  clearTimeout(this.pingTimeoutTimer);\n\t  var self = this;\n\t  self.pingTimeoutTimer = setTimeout(function () {\n\t    if ('closed' === self.readyState) return;\n\t    self.onClose('ping timeout');\n\t  }, timeout || (self.pingInterval + self.pingTimeout));\n\t};\n\t\n\t/**\n\t * Pings server every `this.pingInterval` and expects response\n\t * within `this.pingTimeout` or closes connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setPing = function () {\n\t  var self = this;\n\t  clearTimeout(self.pingIntervalTimer);\n\t  self.pingIntervalTimer = setTimeout(function () {\n\t\n\t    self.ping();\n\t    self.onHeartbeat(self.pingTimeout);\n\t  }, self.pingInterval);\n\t};\n\t\n\t/**\n\t* Sends a ping packet.\n\t*\n\t* @api private\n\t*/\n\t\n\tSocket.prototype.ping = function () {\n\t  var self = this;\n\t  this.sendPacket('ping', function () {\n\t    self.emit('ping');\n\t  });\n\t};\n\t\n\t/**\n\t * Called on `drain` event\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onDrain = function () {\n\t  this.writeBuffer.splice(0, this.prevBufferLen);\n\t\n\t  // setting prevBufferLen = 0 is very important\n\t  // for example, when upgrading, upgrade packet is sent over,\n\t  // and a nonzero prevBufferLen could cause problems on `drain`\n\t  this.prevBufferLen = 0;\n\t\n\t  if (0 === this.writeBuffer.length) {\n\t    this.emit('drain');\n\t  } else {\n\t    this.flush();\n\t  }\n\t};\n\t\n\t/**\n\t * Flush write buffers.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.flush = function () {\n\t  if ('closed' !== this.readyState && this.transport.writable &&\n\t    !this.upgrading && this.writeBuffer.length) {\n\t\n\t    this.transport.send(this.writeBuffer);\n\t    // keep track of current length of writeBuffer\n\t    // splice writeBuffer and callbackBuffer on `drain`\n\t    this.prevBufferLen = this.writeBuffer.length;\n\t    this.emit('flush');\n\t  }\n\t};\n\t\n\t/**\n\t * Sends a message.\n\t *\n\t * @param {String} message.\n\t * @param {Function} callback function.\n\t * @param {Object} options.\n\t * @return {Socket} for chaining.\n\t * @api public\n\t */\n\t\n\tSocket.prototype.write =\n\tSocket.prototype.send = function (msg, options, fn) {\n\t  this.sendPacket('message', msg, options, fn);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {String} packet type.\n\t * @param {String} data.\n\t * @param {Object} options.\n\t * @param {Function} callback function.\n\t * @api private\n\t */\n\t\n\tSocket.prototype.sendPacket = function (type, data, options, fn) {\n\t  if ('function' === typeof data) {\n\t    fn = data;\n\t    data = undefined;\n\t  }\n\t\n\t  if ('function' === typeof options) {\n\t    fn = options;\n\t    options = null;\n\t  }\n\t\n\t  if ('closing' === this.readyState || 'closed' === this.readyState) {\n\t    return;\n\t  }\n\t\n\t  options = options || {};\n\t  options.compress = false !== options.compress;\n\t\n\t  var packet = {\n\t    type: type,\n\t    data: data,\n\t    options: options\n\t  };\n\t  this.emit('packetCreate', packet);\n\t  this.writeBuffer.push(packet);\n\t  if (fn) this.once('flush', fn);\n\t  this.flush();\n\t};\n\t\n\t/**\n\t * Closes the connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.readyState = 'closing';\n\t\n\t    var self = this;\n\t\n\t    if (this.writeBuffer.length) {\n\t      this.once('drain', function () {\n\t        if (this.upgrading) {\n\t          waitForUpgrade();\n\t        } else {\n\t          close();\n\t        }\n\t      });\n\t    } else if (this.upgrading) {\n\t      waitForUpgrade();\n\t    } else {\n\t      close();\n\t    }\n\t  }\n\t\n\t  function close () {\n\t    self.onClose('forced close');\n\t\n\t    self.transport.close();\n\t  }\n\t\n\t  function cleanupAndClose () {\n\t    self.removeListener('upgrade', cleanupAndClose);\n\t    self.removeListener('upgradeError', cleanupAndClose);\n\t    close();\n\t  }\n\t\n\t  function waitForUpgrade () {\n\t    // wait for upgrade to finish since we can't send packets while pausing a transport\n\t    self.once('upgrade', cleanupAndClose);\n\t    self.once('upgradeError', cleanupAndClose);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport error\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onError = function (err) {\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t  this.emit('error', err);\n\t  this.onClose('transport error', err);\n\t};\n\t\n\t/**\n\t * Called upon transport close.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onClose = function (reason, desc) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\t\n\t    var self = this;\n\t\n\t    // clear timers\n\t    clearTimeout(this.pingIntervalTimer);\n\t    clearTimeout(this.pingTimeoutTimer);\n\t\n\t    // stop event from firing again for transport\n\t    this.transport.removeAllListeners('close');\n\t\n\t    // ensure transport won't stay open\n\t    this.transport.close();\n\t\n\t    // ignore further transport communication\n\t    this.transport.removeAllListeners();\n\t\n\t    // set ready state\n\t    this.readyState = 'closed';\n\t\n\t    // clear session id\n\t    this.id = null;\n\t\n\t    // emit close event\n\t    this.emit('close', reason, desc);\n\t\n\t    // clean buffers after, so users can still\n\t    // grab the buffers on `close` event\n\t    self.writeBuffer = [];\n\t    self.prevBufferLen = 0;\n\t  }\n\t};\n\t\n\t/**\n\t * Filters upgrades, returning only those matching client transports.\n\t *\n\t * @param {Array} server upgrades\n\t * @api private\n\t *\n\t */\n\t\n\tSocket.prototype.filterUpgrades = function (upgrades) {\n\t  var filteredUpgrades = [];\n\t  for (var i = 0, j = upgrades.length; i < j; i++) {\n\t    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n\t  }\n\t  return filteredUpgrades;\n\t};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(13);\n\tvar XHR = __webpack_require__(15);\n\tvar JSONP = __webpack_require__(29);\n\tvar websocket = __webpack_require__(30);\n\t\n\t/**\n\t * Export transports.\n\t */\n\t\n\texports.polling = polling;\n\texports.websocket = websocket;\n\t\n\t/**\n\t * Polling transport polymorphic constructor.\n\t * Decides on xhr vs jsonp based on feature detection.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction polling (opts) {\n\t  var xhr;\n\t  var xd = false;\n\t  var xs = false;\n\t  var jsonp = false !== opts.jsonp;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    xd = opts.hostname !== location.hostname || port !== opts.port;\n\t    xs = opts.secure !== isSSL;\n\t  }\n\t\n\t  opts.xdomain = xd;\n\t  opts.xscheme = xs;\n\t  xhr = new XMLHttpRequest(opts);\n\t\n\t  if ('open' in xhr && !opts.forceJSONP) {\n\t    return new XHR(opts);\n\t  } else {\n\t    if (!jsonp) throw new Error('JSONP disabled');\n\t    return new JSONP(opts);\n\t  }\n\t}\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// browser shim for xmlhttprequest module\n\t\n\tvar hasCORS = __webpack_require__(14);\n\t\n\tmodule.exports = function (opts) {\n\t  var xdomain = opts.xdomain;\n\t\n\t  // scheme must be same when usign XDomainRequest\n\t  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t  var xscheme = opts.xscheme;\n\t\n\t  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n\t  // https://github.com/Automattic/engine.io-client/pull/217\n\t  var enablesXDR = opts.enablesXDR;\n\t\n\t  // XMLHttpRequest can be disabled on IE\n\t  try {\n\t    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n\t      return new XMLHttpRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  // Use XDomainRequest for IE8 if enablesXDR is true\n\t  // because loading bar keeps flashing when using jsonp-polling\n\t  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n\t  try {\n\t    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n\t      return new XDomainRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  if (!xdomain) {\n\t    try {\n\t      return new self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n\t    } catch (e) { }\n\t  }\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t *\n\t * Logic borrowed from Modernizr:\n\t *\n\t *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n\t */\n\t\n\ttry {\n\t  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n\t    'withCredentials' in new XMLHttpRequest();\n\t} catch (err) {\n\t  // if XMLHttp support is disabled in IE then it will throw\n\t  // when trying to create\n\t  module.exports = false;\n\t}\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global attachEvent */\n\t\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(13);\n\tvar Polling = __webpack_require__(16);\n\tvar Emitter = __webpack_require__(5);\n\tvar inherit = __webpack_require__(27);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling-xhr');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = XHR;\n\tmodule.exports.Request = Request;\n\t\n\t/**\n\t * Empty function\n\t */\n\t\n\tfunction empty () {}\n\t\n\t/**\n\t * XHR Polling constructor.\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction XHR (opts) {\n\t  Polling.call(this, opts);\n\t  this.requestTimeout = opts.requestTimeout;\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n\t      port !== opts.port;\n\t    this.xs = opts.secure !== isSSL;\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(XHR, Polling);\n\t\n\t/**\n\t * XHR supports binary\n\t */\n\t\n\tXHR.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Creates a request.\n\t *\n\t * @param {String} method\n\t * @api private\n\t */\n\t\n\tXHR.prototype.request = function (opts) {\n\t  opts = opts || {};\n\t  opts.uri = this.uri();\n\t  opts.xd = this.xd;\n\t  opts.xs = this.xs;\n\t  opts.agent = this.agent || false;\n\t  opts.supportsBinary = this.supportsBinary;\n\t  opts.enablesXDR = this.enablesXDR;\n\t  opts.withCredentials = this.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  opts.requestTimeout = this.requestTimeout;\n\t\n\t  // other options for Node.js client\n\t  opts.extraHeaders = this.extraHeaders;\n\t\n\t  return new Request(opts);\n\t};\n\t\n\t/**\n\t * Sends data.\n\t *\n\t * @param {String} data to send.\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doWrite = function (data, fn) {\n\t  var isBinary = typeof data !== 'string' && data !== undefined;\n\t  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n\t  var self = this;\n\t  req.on('success', fn);\n\t  req.on('error', function (err) {\n\t    self.onError('xhr post error', err);\n\t  });\n\t  this.sendXhr = req;\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doPoll = function () {\n\t\n\t  var req = this.request();\n\t  var self = this;\n\t  req.on('data', function (data) {\n\t    self.onData(data);\n\t  });\n\t  req.on('error', function (err) {\n\t    self.onError('xhr poll error', err);\n\t  });\n\t  this.pollXhr = req;\n\t};\n\t\n\t/**\n\t * Request constructor\n\t *\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Request (opts) {\n\t  this.method = opts.method || 'GET';\n\t  this.uri = opts.uri;\n\t  this.xd = !!opts.xd;\n\t  this.xs = !!opts.xs;\n\t  this.async = false !== opts.async;\n\t  this.data = undefined !== opts.data ? opts.data : null;\n\t  this.agent = opts.agent;\n\t  this.isBinary = opts.isBinary;\n\t  this.supportsBinary = opts.supportsBinary;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t  this.requestTimeout = opts.requestTimeout;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  this.create();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Request.prototype);\n\t\n\t/**\n\t * Creates the XHR object and sends the request.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.create = function () {\n\t  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t\n\t  var xhr = this.xhr = new XMLHttpRequest(opts);\n\t  var self = this;\n\t\n\t  try {\n\t\n\t    xhr.open(this.method, this.uri, this.async);\n\t    try {\n\t      if (this.extraHeaders) {\n\t        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n\t        for (var i in this.extraHeaders) {\n\t          if (this.extraHeaders.hasOwnProperty(i)) {\n\t            xhr.setRequestHeader(i, this.extraHeaders[i]);\n\t          }\n\t        }\n\t      }\n\t    } catch (e) {}\n\t\n\t    if ('POST' === this.method) {\n\t      try {\n\t        if (this.isBinary) {\n\t          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n\t        } else {\n\t          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n\t        }\n\t      } catch (e) {}\n\t    }\n\t\n\t    try {\n\t      xhr.setRequestHeader('Accept', '*/*');\n\t    } catch (e) {}\n\t\n\t    // ie6 check\n\t    if ('withCredentials' in xhr) {\n\t      xhr.withCredentials = this.withCredentials;\n\t    }\n\t\n\t    if (this.requestTimeout) {\n\t      xhr.timeout = this.requestTimeout;\n\t    }\n\t\n\t    if (this.hasXDR()) {\n\t      xhr.onload = function () {\n\t        self.onLoad();\n\t      };\n\t      xhr.onerror = function () {\n\t        self.onError(xhr.responseText);\n\t      };\n\t    } else {\n\t      xhr.onreadystatechange = function () {\n\t        if (xhr.readyState === 2) {\n\t          try {\n\t            var contentType = xhr.getResponseHeader('Content-Type');\n\t            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t              xhr.responseType = 'arraybuffer';\n\t            }\n\t          } catch (e) {}\n\t        }\n\t        if (4 !== xhr.readyState) return;\n\t        if (200 === xhr.status || 1223 === xhr.status) {\n\t          self.onLoad();\n\t        } else {\n\t          // make sure the `error` event handler that's user-set\n\t          // does not throw in the same tick and gets caught here\n\t          setTimeout(function () {\n\t            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n\t          }, 0);\n\t        }\n\t      };\n\t    }\n\t\n\t\n\t    xhr.send(this.data);\n\t  } catch (e) {\n\t    // Need to defer since .create() is called directly fhrom the constructor\n\t    // and thus the 'error' event can only be only bound *after* this exception\n\t    // occurs.  Therefore, also, we cannot throw here at all.\n\t    setTimeout(function () {\n\t      self.onError(e);\n\t    }, 0);\n\t    return;\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    this.index = Request.requestsCount++;\n\t    Request.requests[this.index] = this;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful response.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onSuccess = function () {\n\t  this.emit('success');\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Called if we have data.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onData = function (data) {\n\t  this.emit('data', data);\n\t  this.onSuccess();\n\t};\n\t\n\t/**\n\t * Called upon error.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onError = function (err) {\n\t  this.emit('error', err);\n\t  this.cleanup(true);\n\t};\n\t\n\t/**\n\t * Cleans up house.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.cleanup = function (fromError) {\n\t  if ('undefined' === typeof this.xhr || null === this.xhr) {\n\t    return;\n\t  }\n\t  // xmlhttprequest\n\t  if (this.hasXDR()) {\n\t    this.xhr.onload = this.xhr.onerror = empty;\n\t  } else {\n\t    this.xhr.onreadystatechange = empty;\n\t  }\n\t\n\t  if (fromError) {\n\t    try {\n\t      this.xhr.abort();\n\t    } catch (e) {}\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    delete Request.requests[this.index];\n\t  }\n\t\n\t  this.xhr = null;\n\t};\n\t\n\t/**\n\t * Called upon load.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onLoad = function () {\n\t  var data;\n\t  try {\n\t    var contentType;\n\t    try {\n\t      contentType = this.xhr.getResponseHeader('Content-Type');\n\t    } catch (e) {}\n\t    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t      data = this.xhr.response || this.xhr.responseText;\n\t    } else {\n\t      data = this.xhr.responseText;\n\t    }\n\t  } catch (e) {\n\t    this.onError(e);\n\t  }\n\t  if (null != data) {\n\t    this.onData(data);\n\t  }\n\t};\n\t\n\t/**\n\t * Check if it has XDomainRequest.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.hasXDR = function () {\n\t  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n\t};\n\t\n\t/**\n\t * Aborts the request.\n\t *\n\t * @api public\n\t */\n\t\n\tRequest.prototype.abort = function () {\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Aborts pending requests when unloading the window. This is needed to prevent\n\t * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n\t * emitted.\n\t */\n\t\n\tRequest.requestsCount = 0;\n\tRequest.requests = {};\n\t\n\tif (typeof document !== 'undefined') {\n\t  if (typeof attachEvent === 'function') {\n\t    attachEvent('onunload', unloadHandler);\n\t  } else if (typeof addEventListener === 'function') {\n\t    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n\t    addEventListener(terminationEvent, unloadHandler, false);\n\t  }\n\t}\n\t\n\tfunction unloadHandler () {\n\t  for (var i in Request.requests) {\n\t    if (Request.requests.hasOwnProperty(i)) {\n\t      Request.requests[i].abort();\n\t    }\n\t  }\n\t}\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(17);\n\tvar parseqs = __webpack_require__(26);\n\tvar parser = __webpack_require__(18);\n\tvar inherit = __webpack_require__(27);\n\tvar yeast = __webpack_require__(28);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Polling;\n\t\n\t/**\n\t * Is XHR2 supported?\n\t */\n\t\n\tvar hasXHR2 = (function () {\n\t  var XMLHttpRequest = __webpack_require__(13);\n\t  var xhr = new XMLHttpRequest({ xdomain: false });\n\t  return null != xhr.responseType;\n\t})();\n\t\n\t/**\n\t * Polling interface.\n\t *\n\t * @param {Object} opts\n\t * @api private\n\t */\n\t\n\tfunction Polling (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (!hasXHR2 || forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(Polling, Transport);\n\t\n\t/**\n\t * Transport name.\n\t */\n\t\n\tPolling.prototype.name = 'polling';\n\t\n\t/**\n\t * Opens the socket (triggers polling). We write a PING message to determine\n\t * when the transport is open.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doOpen = function () {\n\t  this.poll();\n\t};\n\t\n\t/**\n\t * Pauses polling.\n\t *\n\t * @param {Function} callback upon buffers are flushed and transport is paused\n\t * @api private\n\t */\n\t\n\tPolling.prototype.pause = function (onPause) {\n\t  var self = this;\n\t\n\t  this.readyState = 'pausing';\n\t\n\t  function pause () {\n\t\n\t    self.readyState = 'paused';\n\t    onPause();\n\t  }\n\t\n\t  if (this.polling || !this.writable) {\n\t    var total = 0;\n\t\n\t    if (this.polling) {\n\t\n\t      total++;\n\t      this.once('pollComplete', function () {\n\t\n\t        --total || pause();\n\t      });\n\t    }\n\t\n\t    if (!this.writable) {\n\t\n\t      total++;\n\t      this.once('drain', function () {\n\t\n\t        --total || pause();\n\t      });\n\t    }\n\t  } else {\n\t    pause();\n\t  }\n\t};\n\t\n\t/**\n\t * Starts polling cycle.\n\t *\n\t * @api public\n\t */\n\t\n\tPolling.prototype.poll = function () {\n\t\n\t  this.polling = true;\n\t  this.doPoll();\n\t  this.emit('poll');\n\t};\n\t\n\t/**\n\t * Overloads onData to detect payloads.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.onData = function (data) {\n\t  var self = this;\n\t\n\t  var callback = function (packet, index, total) {\n\t    // if its the first message we consider the transport open\n\t    if ('opening' === self.readyState) {\n\t      self.onOpen();\n\t    }\n\t\n\t    // if its a close packet, we close the ongoing requests\n\t    if ('close' === packet.type) {\n\t      self.onClose();\n\t      return false;\n\t    }\n\t\n\t    // otherwise bypass onData and handle the message\n\t    self.onPacket(packet);\n\t  };\n\t\n\t  // decode payload\n\t  parser.decodePayload(data, this.socket.binaryType, callback);\n\t\n\t  // if an event did not trigger closing\n\t  if ('closed' !== this.readyState) {\n\t    // if we got data we're not polling\n\t    this.polling = false;\n\t    this.emit('pollComplete');\n\t\n\t    if ('open' === this.readyState) {\n\t      this.poll();\n\t    } else {\n\t\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * For polling, send a close packet.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doClose = function () {\n\t  var self = this;\n\t\n\t  function close () {\n\t\n\t    self.write([{ type: 'close' }]);\n\t  }\n\t\n\t  if ('open' === this.readyState) {\n\t\n\t    close();\n\t  } else {\n\t    // in case we're trying to close while\n\t    // handshaking is in progress (GH-164)\n\t\n\t    this.once('open', close);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes a packets payload.\n\t *\n\t * @param {Array} data packets\n\t * @param {Function} drain callback\n\t * @api private\n\t */\n\t\n\tPolling.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t  var callbackfn = function () {\n\t    self.writable = true;\n\t    self.emit('drain');\n\t  };\n\t\n\t  parser.encodePayload(packets, this.supportsBinary, function (data) {\n\t    self.doWrite(data, callbackfn);\n\t  });\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'https' : 'http';\n\t  var port = '';\n\t\n\t  // cache busting is forced\n\t  if (false !== this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  if (!this.supportsBinary && !query.sid) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n\t     ('http' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(18);\n\tvar Emitter = __webpack_require__(5);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Transport;\n\t\n\t/**\n\t * Transport abstract constructor.\n\t *\n\t * @param {Object} options.\n\t * @api private\n\t */\n\t\n\tfunction Transport (opts) {\n\t  this.path = opts.path;\n\t  this.hostname = opts.hostname;\n\t  this.port = opts.port;\n\t  this.secure = opts.secure;\n\t  this.query = opts.query;\n\t  this.timestampParam = opts.timestampParam;\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.readyState = '';\n\t  this.agent = opts.agent || false;\n\t  this.socket = opts.socket;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t  this.forceNode = opts.forceNode;\n\t\n\t  // results of ReactNative environment detection\n\t  this.isReactNative = opts.isReactNative;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t  this.localAddress = opts.localAddress;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Transport.prototype);\n\t\n\t/**\n\t * Emits an error.\n\t *\n\t * @param {String} str\n\t * @return {Transport} for chaining\n\t * @api public\n\t */\n\t\n\tTransport.prototype.onError = function (msg, desc) {\n\t  var err = new Error(msg);\n\t  err.type = 'TransportError';\n\t  err.description = desc;\n\t  this.emit('error', err);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Opens the transport.\n\t *\n\t * @api public\n\t */\n\t\n\tTransport.prototype.open = function () {\n\t  if ('closed' === this.readyState || '' === this.readyState) {\n\t    this.readyState = 'opening';\n\t    this.doOpen();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Closes the transport.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.doClose();\n\t    this.onClose();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends multiple packets.\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\tTransport.prototype.send = function (packets) {\n\t  if ('open' === this.readyState) {\n\t    this.write(packets);\n\t  } else {\n\t    throw new Error('Transport not open');\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon open\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onOpen = function () {\n\t  this.readyState = 'open';\n\t  this.writable = true;\n\t  this.emit('open');\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @param {String} data\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onData = function (data) {\n\t  var packet = parser.decodePacket(data, this.socket.binaryType);\n\t  this.onPacket(packet);\n\t};\n\t\n\t/**\n\t * Called with a decoded packet.\n\t */\n\t\n\tTransport.prototype.onPacket = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon close.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onClose = function () {\n\t  this.readyState = 'closed';\n\t  this.emit('close');\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar keys = __webpack_require__(19);\n\tvar hasBinary = __webpack_require__(20);\n\tvar sliceBuffer = __webpack_require__(21);\n\tvar after = __webpack_require__(22);\n\tvar utf8 = __webpack_require__(23);\n\t\n\tvar base64encoder;\n\tif (typeof ArrayBuffer !== 'undefined') {\n\t  base64encoder = __webpack_require__(24);\n\t}\n\t\n\t/**\n\t * Check if we are running an android browser. That requires us to use\n\t * ArrayBuffer with polling transports...\n\t *\n\t * http://ghinda.net/jpeg-blob-ajax-android/\n\t */\n\t\n\tvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Check if we are running in PhantomJS.\n\t * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n\t * https://github.com/ariya/phantomjs/issues/11395\n\t * @type boolean\n\t */\n\tvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\t\n\t/**\n\t * When true, avoids using Blobs to encode payloads.\n\t * @type boolean\n\t */\n\tvar dontSendBlobs = isAndroid || isPhantomJS;\n\t\n\t/**\n\t * Current protocol version.\n\t */\n\t\n\texports.protocol = 3;\n\t\n\t/**\n\t * Packet types.\n\t */\n\t\n\tvar packets = exports.packets = {\n\t    open:     0    // non-ws\n\t  , close:    1    // non-ws\n\t  , ping:     2\n\t  , pong:     3\n\t  , message:  4\n\t  , upgrade:  5\n\t  , noop:     6\n\t};\n\t\n\tvar packetslist = keys(packets);\n\t\n\t/**\n\t * Premade error packet.\n\t */\n\t\n\tvar err = { type: 'error', data: 'parser error' };\n\t\n\t/**\n\t * Create a blob api even for blob builder when vendor prefixes exist\n\t */\n\t\n\tvar Blob = __webpack_require__(25);\n\t\n\t/**\n\t * Encodes a packet.\n\t *\n\t *     <packet type id> [ <data> ]\n\t *\n\t * Example:\n\t *\n\t *     5hello world\n\t *     3\n\t *     4\n\t *\n\t * Binary is encoded in an identical principle\n\t *\n\t * @api private\n\t */\n\t\n\texports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = false;\n\t  }\n\t\n\t  if (typeof utf8encode === 'function') {\n\t    callback = utf8encode;\n\t    utf8encode = null;\n\t  }\n\t\n\t  var data = (packet.data === undefined)\n\t    ? undefined\n\t    : packet.data.buffer || packet.data;\n\t\n\t  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n\t    return encodeArrayBuffer(packet, supportsBinary, callback);\n\t  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n\t    return encodeBlob(packet, supportsBinary, callback);\n\t  }\n\t\n\t  // might be an object with { base64: true, data: dataAsBase64String }\n\t  if (data && data.base64) {\n\t    return encodeBase64Object(packet, callback);\n\t  }\n\t\n\t  // Sending data as a utf-8 string\n\t  var encoded = packets[packet.type];\n\t\n\t  // data fragment is optional\n\t  if (undefined !== packet.data) {\n\t    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n\t  }\n\t\n\t  return callback('' + encoded);\n\t\n\t};\n\t\n\tfunction encodeBase64Object(packet, callback) {\n\t  // packet data is an object { base64: true, data: dataAsBase64String }\n\t  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n\t  return callback(message);\n\t}\n\t\n\t/**\n\t * Encode packet helpers for binary types\n\t */\n\t\n\tfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var data = packet.data;\n\t  var contentArray = new Uint8Array(data);\n\t  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\t\n\t  resultBuffer[0] = packets[packet.type];\n\t  for (var i = 0; i < contentArray.length; i++) {\n\t    resultBuffer[i+1] = contentArray[i];\n\t  }\n\t\n\t  return callback(resultBuffer.buffer);\n\t}\n\t\n\tfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var fr = new FileReader();\n\t  fr.onload = function() {\n\t    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n\t  };\n\t  return fr.readAsArrayBuffer(packet.data);\n\t}\n\t\n\tfunction encodeBlob(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  if (dontSendBlobs) {\n\t    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n\t  }\n\t\n\t  var length = new Uint8Array(1);\n\t  length[0] = packets[packet.type];\n\t  var blob = new Blob([length.buffer, packet.data]);\n\t\n\t  return callback(blob);\n\t}\n\t\n\t/**\n\t * Encodes a packet with binary data in a base64 string\n\t *\n\t * @param {Object} packet, has `type` and `data`\n\t * @return {String} base64 encoded message\n\t */\n\t\n\texports.encodeBase64Packet = function(packet, callback) {\n\t  var message = 'b' + exports.packets[packet.type];\n\t  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n\t    var fr = new FileReader();\n\t    fr.onload = function() {\n\t      var b64 = fr.result.split(',')[1];\n\t      callback(message + b64);\n\t    };\n\t    return fr.readAsDataURL(packet.data);\n\t  }\n\t\n\t  var b64data;\n\t  try {\n\t    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n\t  } catch (e) {\n\t    // iPhone Safari doesn't let you apply with typed arrays\n\t    var typed = new Uint8Array(packet.data);\n\t    var basic = new Array(typed.length);\n\t    for (var i = 0; i < typed.length; i++) {\n\t      basic[i] = typed[i];\n\t    }\n\t    b64data = String.fromCharCode.apply(null, basic);\n\t  }\n\t  message += btoa(b64data);\n\t  return callback(message);\n\t};\n\t\n\t/**\n\t * Decodes a packet. Changes format to Blob if requested.\n\t *\n\t * @return {Object} with `type` and `data` (if any)\n\t * @api private\n\t */\n\t\n\texports.decodePacket = function (data, binaryType, utf8decode) {\n\t  if (data === undefined) {\n\t    return err;\n\t  }\n\t  // String data\n\t  if (typeof data === 'string') {\n\t    if (data.charAt(0) === 'b') {\n\t      return exports.decodeBase64Packet(data.substr(1), binaryType);\n\t    }\n\t\n\t    if (utf8decode) {\n\t      data = tryDecode(data);\n\t      if (data === false) {\n\t        return err;\n\t      }\n\t    }\n\t    var type = data.charAt(0);\n\t\n\t    if (Number(type) != type || !packetslist[type]) {\n\t      return err;\n\t    }\n\t\n\t    if (data.length > 1) {\n\t      return { type: packetslist[type], data: data.substring(1) };\n\t    } else {\n\t      return { type: packetslist[type] };\n\t    }\n\t  }\n\t\n\t  var asArray = new Uint8Array(data);\n\t  var type = asArray[0];\n\t  var rest = sliceBuffer(data, 1);\n\t  if (Blob && binaryType === 'blob') {\n\t    rest = new Blob([rest]);\n\t  }\n\t  return { type: packetslist[type], data: rest };\n\t};\n\t\n\tfunction tryDecode(data) {\n\t  try {\n\t    data = utf8.decode(data, { strict: false });\n\t  } catch (e) {\n\t    return false;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Decodes a packet encoded in a base64 string\n\t *\n\t * @param {String} base64 encoded message\n\t * @return {Object} with `type` and `data` (if any)\n\t */\n\t\n\texports.decodeBase64Packet = function(msg, binaryType) {\n\t  var type = packetslist[msg.charAt(0)];\n\t  if (!base64encoder) {\n\t    return { type: type, data: { base64: true, data: msg.substr(1) } };\n\t  }\n\t\n\t  var data = base64encoder.decode(msg.substr(1));\n\t\n\t  if (binaryType === 'blob' && Blob) {\n\t    data = new Blob([data]);\n\t  }\n\t\n\t  return { type: type, data: data };\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload).\n\t *\n\t *     <length>:data\n\t *\n\t * Example:\n\t *\n\t *     11:hello world2:hi\n\t *\n\t * If any contents are binary, they will be encoded as base64 strings. Base64\n\t * encoded strings are marked with a b before the length specifier\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\texports.encodePayload = function (packets, supportsBinary, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = null;\n\t  }\n\t\n\t  var isBinary = hasBinary(packets);\n\t\n\t  if (supportsBinary && isBinary) {\n\t    if (Blob && !dontSendBlobs) {\n\t      return exports.encodePayloadAsBlob(packets, callback);\n\t    }\n\t\n\t    return exports.encodePayloadAsArrayBuffer(packets, callback);\n\t  }\n\t\n\t  if (!packets.length) {\n\t    return callback('0:');\n\t  }\n\t\n\t  function setLengthHeader(message) {\n\t    return message.length + ':' + message;\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n\t      doneCallback(null, setLengthHeader(message));\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(results.join(''));\n\t  });\n\t};\n\t\n\t/**\n\t * Async array map using after\n\t */\n\t\n\tfunction map(ary, each, done) {\n\t  var result = new Array(ary.length);\n\t  var next = after(ary.length, done);\n\t\n\t  var eachWithIndex = function(i, el, cb) {\n\t    each(el, function(error, msg) {\n\t      result[i] = msg;\n\t      cb(error, result);\n\t    });\n\t  };\n\t\n\t  for (var i = 0; i < ary.length; i++) {\n\t    eachWithIndex(i, ary[i], next);\n\t  }\n\t}\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Possible binary contents are\n\t * decoded from their base64 representation\n\t *\n\t * @param {String} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayload = function (data, binaryType, callback) {\n\t  if (typeof data !== 'string') {\n\t    return exports.decodePayloadAsBinary(data, binaryType, callback);\n\t  }\n\t\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var packet;\n\t  if (data === '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t  var length = '', n, msg;\n\t\n\t  for (var i = 0, l = data.length; i < l; i++) {\n\t    var chr = data.charAt(i);\n\t\n\t    if (chr !== ':') {\n\t      length += chr;\n\t      continue;\n\t    }\n\t\n\t    if (length === '' || (length != (n = Number(length)))) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    msg = data.substr(i + 1, n);\n\t\n\t    if (length != msg.length) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    if (msg.length) {\n\t      packet = exports.decodePacket(msg, binaryType, false);\n\t\n\t      if (err.type === packet.type && err.data === packet.data) {\n\t        // parser error in individual packet - ignoring payload\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      var ret = callback(packet, i + n, l);\n\t      if (false === ret) return;\n\t    }\n\t\n\t    // advance cursor\n\t    i += n;\n\t    length = '';\n\t  }\n\t\n\t  if (length !== '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload) as binary.\n\t *\n\t * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n\t * 255><data>\n\t *\n\t * Example:\n\t * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n\t *\n\t * @param {Array} packets\n\t * @return {ArrayBuffer} encoded payload\n\t * @api private\n\t */\n\t\n\texports.encodePayloadAsArrayBuffer = function(packets, callback) {\n\t  if (!packets.length) {\n\t    return callback(new ArrayBuffer(0));\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(data) {\n\t      return doneCallback(null, data);\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, encodedPackets) {\n\t    var totalLength = encodedPackets.reduce(function(acc, p) {\n\t      var len;\n\t      if (typeof p === 'string'){\n\t        len = p.length;\n\t      } else {\n\t        len = p.byteLength;\n\t      }\n\t      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n\t    }, 0);\n\t\n\t    var resultArray = new Uint8Array(totalLength);\n\t\n\t    var bufferIndex = 0;\n\t    encodedPackets.forEach(function(p) {\n\t      var isString = typeof p === 'string';\n\t      var ab = p;\n\t      if (isString) {\n\t        var view = new Uint8Array(p.length);\n\t        for (var i = 0; i < p.length; i++) {\n\t          view[i] = p.charCodeAt(i);\n\t        }\n\t        ab = view.buffer;\n\t      }\n\t\n\t      if (isString) { // not true binary\n\t        resultArray[bufferIndex++] = 0;\n\t      } else { // true binary\n\t        resultArray[bufferIndex++] = 1;\n\t      }\n\t\n\t      var lenStr = ab.byteLength.toString();\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n\t      }\n\t      resultArray[bufferIndex++] = 255;\n\t\n\t      var view = new Uint8Array(ab);\n\t      for (var i = 0; i < view.length; i++) {\n\t        resultArray[bufferIndex++] = view[i];\n\t      }\n\t    });\n\t\n\t    return callback(resultArray.buffer);\n\t  });\n\t};\n\t\n\t/**\n\t * Encode as Blob\n\t */\n\t\n\texports.encodePayloadAsBlob = function(packets, callback) {\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(encoded) {\n\t      var binaryIdentifier = new Uint8Array(1);\n\t      binaryIdentifier[0] = 1;\n\t      if (typeof encoded === 'string') {\n\t        var view = new Uint8Array(encoded.length);\n\t        for (var i = 0; i < encoded.length; i++) {\n\t          view[i] = encoded.charCodeAt(i);\n\t        }\n\t        encoded = view.buffer;\n\t        binaryIdentifier[0] = 0;\n\t      }\n\t\n\t      var len = (encoded instanceof ArrayBuffer)\n\t        ? encoded.byteLength\n\t        : encoded.size;\n\t\n\t      var lenStr = len.toString();\n\t      var lengthAry = new Uint8Array(lenStr.length + 1);\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        lengthAry[i] = parseInt(lenStr[i]);\n\t      }\n\t      lengthAry[lenStr.length] = 255;\n\t\n\t      if (Blob) {\n\t        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n\t        doneCallback(null, blob);\n\t      }\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(new Blob(results));\n\t  });\n\t};\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Strings are decoded by\n\t * interpreting each byte as a key code for entries marked to start with 0. See\n\t * description of encodePayloadAsBinary\n\t *\n\t * @param {ArrayBuffer} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayloadAsBinary = function (data, binaryType, callback) {\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var bufferTail = data;\n\t  var buffers = [];\n\t\n\t  while (bufferTail.byteLength > 0) {\n\t    var tailArray = new Uint8Array(bufferTail);\n\t    var isString = tailArray[0] === 0;\n\t    var msgLength = '';\n\t\n\t    for (var i = 1; ; i++) {\n\t      if (tailArray[i] === 255) break;\n\t\n\t      // 310 = char length of Number.MAX_VALUE\n\t      if (msgLength.length > 310) {\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      msgLength += tailArray[i];\n\t    }\n\t\n\t    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n\t    msgLength = parseInt(msgLength);\n\t\n\t    var msg = sliceBuffer(bufferTail, 0, msgLength);\n\t    if (isString) {\n\t      try {\n\t        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n\t      } catch (e) {\n\t        // iPhone Safari doesn't let you apply to typed arrays\n\t        var typed = new Uint8Array(msg);\n\t        msg = '';\n\t        for (var i = 0; i < typed.length; i++) {\n\t          msg += String.fromCharCode(typed[i]);\n\t        }\n\t      }\n\t    }\n\t\n\t    buffers.push(msg);\n\t    bufferTail = sliceBuffer(bufferTail, msgLength);\n\t  }\n\t\n\t  var total = buffers.length;\n\t  buffers.forEach(function(buffer, i) {\n\t    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n\t  });\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Gets the keys for an object.\n\t *\n\t * @return {Array} keys\n\t * @api private\n\t */\n\t\n\tmodule.exports = Object.keys || function keys (obj){\n\t  var arr = [];\n\t  var has = Object.prototype.hasOwnProperty;\n\t\n\t  for (var i in obj) {\n\t    if (has.call(obj, i)) {\n\t      arr.push(i);\n\t    }\n\t  }\n\t  return arr;\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global Blob File */\n\t\n\t/*\n\t * Module requirements.\n\t */\n\t\n\tvar isArray = __webpack_require__(7);\n\t\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' ||\n\t                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\n\tvar withNativeFile = typeof File === 'function' ||\n\t                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = hasBinary;\n\t\n\t/**\n\t * Checks for binary data.\n\t *\n\t * Supports Buffer, ArrayBuffer, Blob and File.\n\t *\n\t * @param {Object} anything\n\t * @api public\n\t */\n\t\n\tfunction hasBinary (obj) {\n\t  if (!obj || typeof obj !== 'object') {\n\t    return false;\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      if (hasBinary(obj[i])) {\n\t        return true;\n\t      }\n\t    }\n\t    return false;\n\t  }\n\t\n\t  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n\t    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n\t    (withNativeBlob && obj instanceof Blob) ||\n\t    (withNativeFile && obj instanceof File)\n\t  ) {\n\t    return true;\n\t  }\n\t\n\t  // see: https://github.com/Automattic/has-binary/pull/4\n\t  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n\t    return hasBinary(obj.toJSON(), true);\n\t  }\n\t\n\t  for (var key in obj) {\n\t    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * An abstraction for slicing an arraybuffer even when\n\t * ArrayBuffer.prototype.slice is not supported\n\t *\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(arraybuffer, start, end) {\n\t  var bytes = arraybuffer.byteLength;\n\t  start = start || 0;\n\t  end = end || bytes;\n\t\n\t  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\t\n\t  if (start < 0) { start += bytes; }\n\t  if (end < 0) { end += bytes; }\n\t  if (end > bytes) { end = bytes; }\n\t\n\t  if (start >= bytes || start >= end || bytes === 0) {\n\t    return new ArrayBuffer(0);\n\t  }\n\t\n\t  var abv = new Uint8Array(arraybuffer);\n\t  var result = new Uint8Array(end - start);\n\t  for (var i = start, ii = 0; i < end; i++, ii++) {\n\t    result[ii] = abv[i];\n\t  }\n\t  return result.buffer;\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = after\n\t\n\tfunction after(count, callback, err_cb) {\n\t    var bail = false\n\t    err_cb = err_cb || noop\n\t    proxy.count = count\n\t\n\t    return (count === 0) ? callback() : proxy\n\t\n\t    function proxy(err, result) {\n\t        if (proxy.count <= 0) {\n\t            throw new Error('after called too many times')\n\t        }\n\t        --proxy.count\n\t\n\t        // after first error, rest are passed to err_cb\n\t        if (err) {\n\t            bail = true\n\t            callback(err)\n\t            // future error callbacks will go to error handler\n\t            callback = err_cb\n\t        } else if (proxy.count === 0 && !bail) {\n\t            callback(null, result)\n\t        }\n\t    }\n\t}\n\t\n\tfunction noop() {}\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\n\t/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\t\n\tvar stringFromCharCode = String.fromCharCode;\n\t\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\t\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\t\n\tfunction checkScalarValue(codePoint, strict) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tif (strict) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t\t' is not a scalar value'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\t\n\tfunction encodeCodePoint(codePoint, strict) {\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\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t}\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\t\n\tfunction utf8encode(string, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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, strict);\n\t\t}\n\t\treturn byteString;\n\t}\n\t\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\t\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\t\n\tfunction decodeSymbol(strict) {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\t\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\t\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = 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\t\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 checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\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 & 0x07) << 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\t\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\t\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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(strict)) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\t\n\tmodule.exports = {\n\t\tversion: '2.1.2',\n\t\tencode: utf8encode,\n\t\tdecode: utf8decode\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\n\t/*\n\t * base64-arraybuffer\n\t * https://github.com/niklasvh/base64-arraybuffer\n\t *\n\t * Copyright (c) 2012 Niklas von Hertzen\n\t * Licensed under the MIT license.\n\t */\n\t(function(){\n\t  \"use strict\";\n\t\n\t  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\t\n\t  // Use a lookup table to find the index.\n\t  var lookup = new Uint8Array(256);\n\t  for (var i = 0; i < chars.length; i++) {\n\t    lookup[chars.charCodeAt(i)] = i;\n\t  }\n\t\n\t  exports.encode = function(arraybuffer) {\n\t    var bytes = new Uint8Array(arraybuffer),\n\t    i, len = bytes.length, base64 = \"\";\n\t\n\t    for (i = 0; i < len; i+=3) {\n\t      base64 += chars[bytes[i] >> 2];\n\t      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n\t      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n\t      base64 += chars[bytes[i + 2] & 63];\n\t    }\n\t\n\t    if ((len % 3) === 2) {\n\t      base64 = base64.substring(0, base64.length - 1) + \"=\";\n\t    } else if (len % 3 === 1) {\n\t      base64 = base64.substring(0, base64.length - 2) + \"==\";\n\t    }\n\t\n\t    return base64;\n\t  };\n\t\n\t  exports.decode =  function(base64) {\n\t    var bufferLength = base64.length * 0.75,\n\t    len = base64.length, i, p = 0,\n\t    encoded1, encoded2, encoded3, encoded4;\n\t\n\t    if (base64[base64.length - 1] === \"=\") {\n\t      bufferLength--;\n\t      if (base64[base64.length - 2] === \"=\") {\n\t        bufferLength--;\n\t      }\n\t    }\n\t\n\t    var arraybuffer = new ArrayBuffer(bufferLength),\n\t    bytes = new Uint8Array(arraybuffer);\n\t\n\t    for (i = 0; i < len; i+=4) {\n\t      encoded1 = lookup[base64.charCodeAt(i)];\n\t      encoded2 = lookup[base64.charCodeAt(i+1)];\n\t      encoded3 = lookup[base64.charCodeAt(i+2)];\n\t      encoded4 = lookup[base64.charCodeAt(i+3)];\n\t\n\t      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n\t      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n\t      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n\t    }\n\t\n\t    return arraybuffer;\n\t  };\n\t})();\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Create a blob builder even when vendor prefixes exist\r\n\t */\r\n\t\r\n\tvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n\t  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n\t  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n\t  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n\t  false;\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor is supported\r\n\t */\r\n\t\r\n\tvar blobSupported = (function() {\r\n\t  try {\r\n\t    var a = new Blob(['hi']);\r\n\t    return a.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor supports ArrayBufferViews\r\n\t * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n\t */\r\n\t\r\n\tvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n\t  try {\r\n\t    var b = new Blob([new Uint8Array([1,2])]);\r\n\t    return b.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if BlobBuilder is supported\r\n\t */\r\n\t\r\n\tvar blobBuilderSupported = BlobBuilder\r\n\t  && BlobBuilder.prototype.append\r\n\t  && BlobBuilder.prototype.getBlob;\r\n\t\r\n\t/**\r\n\t * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n\t * Used by BlobBuilder constructor and old browsers that didn't\r\n\t * support it in the Blob constructor.\r\n\t */\r\n\t\r\n\tfunction mapArrayBufferViews(ary) {\r\n\t  return ary.map(function(chunk) {\r\n\t    if (chunk.buffer instanceof ArrayBuffer) {\r\n\t      var buf = chunk.buffer;\r\n\t\r\n\t      // if this is a subarray, make a copy so we only\r\n\t      // include the subarray region from the underlying buffer\r\n\t      if (chunk.byteLength !== buf.byteLength) {\r\n\t        var copy = new Uint8Array(chunk.byteLength);\r\n\t        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n\t        buf = copy.buffer;\r\n\t      }\r\n\t\r\n\t      return buf;\r\n\t    }\r\n\t\r\n\t    return chunk;\r\n\t  });\r\n\t}\r\n\t\r\n\tfunction BlobBuilderConstructor(ary, options) {\r\n\t  options = options || {};\r\n\t\r\n\t  var bb = new BlobBuilder();\r\n\t  mapArrayBufferViews(ary).forEach(function(part) {\r\n\t    bb.append(part);\r\n\t  });\r\n\t\r\n\t  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n\t};\r\n\t\r\n\tfunction BlobConstructor(ary, options) {\r\n\t  return new Blob(mapArrayBufferViews(ary), options || {});\r\n\t};\r\n\t\r\n\tif (typeof Blob !== 'undefined') {\r\n\t  BlobBuilderConstructor.prototype = Blob.prototype;\r\n\t  BlobConstructor.prototype = Blob.prototype;\r\n\t}\r\n\t\r\n\tmodule.exports = (function() {\r\n\t  if (blobSupported) {\r\n\t    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n\t  } else if (blobBuilderSupported) {\r\n\t    return BlobBuilderConstructor;\r\n\t  } else {\r\n\t    return undefined;\r\n\t  }\r\n\t})();\r\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Compiles a querystring\r\n\t * Returns string representation of the object\r\n\t *\r\n\t * @param {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\texports.encode = function (obj) {\r\n\t  var str = '';\r\n\t\r\n\t  for (var i in obj) {\r\n\t    if (obj.hasOwnProperty(i)) {\r\n\t      if (str.length) str += '&';\r\n\t      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return str;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Parses a simple querystring into an object\r\n\t *\r\n\t * @param {String} qs\r\n\t * @api private\r\n\t */\r\n\t\r\n\texports.decode = function(qs){\r\n\t  var qry = {};\r\n\t  var pairs = qs.split('&');\r\n\t  for (var i = 0, l = pairs.length; i < l; i++) {\r\n\t    var pair = pairs[i].split('=');\r\n\t    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n\t  }\r\n\t  return qry;\r\n\t};\r\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = function(a, b){\n\t  var fn = function(){};\n\t  fn.prototype = b.prototype;\n\t  a.prototype = new fn;\n\t  a.prototype.constructor = a;\n\t};\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n\t  , length = 64\n\t  , map = {}\n\t  , seed = 0\n\t  , i = 0\n\t  , prev;\n\t\n\t/**\n\t * Return a string representing the specified number.\n\t *\n\t * @param {Number} num The number to convert.\n\t * @returns {String} The string representation of the number.\n\t * @api public\n\t */\n\tfunction encode(num) {\n\t  var encoded = '';\n\t\n\t  do {\n\t    encoded = alphabet[num % length] + encoded;\n\t    num = Math.floor(num / length);\n\t  } while (num > 0);\n\t\n\t  return encoded;\n\t}\n\t\n\t/**\n\t * Return the integer value specified by the given string.\n\t *\n\t * @param {String} str The string to convert.\n\t * @returns {Number} The integer value represented by the string.\n\t * @api public\n\t */\n\tfunction decode(str) {\n\t  var decoded = 0;\n\t\n\t  for (i = 0; i < str.length; i++) {\n\t    decoded = decoded * length + map[str.charAt(i)];\n\t  }\n\t\n\t  return decoded;\n\t}\n\t\n\t/**\n\t * Yeast: A tiny growing id generator.\n\t *\n\t * @returns {String} A unique id.\n\t * @api public\n\t */\n\tfunction yeast() {\n\t  var now = encode(+new Date());\n\t\n\t  if (now !== prev) return seed = 0, prev = now;\n\t  return now +'.'+ encode(seed++);\n\t}\n\t\n\t//\n\t// Map each character to its index.\n\t//\n\tfor (; i < length; i++) map[alphabet[i]] = i;\n\t\n\t//\n\t// Expose the `yeast`, `encode` and `decode` functions.\n\t//\n\tyeast.encode = encode;\n\tyeast.decode = decode;\n\tmodule.exports = yeast;\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/**\n\t * Module requirements.\n\t */\n\t\n\tvar Polling = __webpack_require__(16);\n\tvar inherit = __webpack_require__(27);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = JSONPPolling;\n\t\n\t/**\n\t * Cached regular expressions.\n\t */\n\t\n\tvar rNewline = /\\n/g;\n\tvar rEscapedNewline = /\\\\n/g;\n\t\n\t/**\n\t * Global JSONP callbacks.\n\t */\n\t\n\tvar callbacks;\n\t\n\t/**\n\t * Noop.\n\t */\n\t\n\tfunction empty () { }\n\t\n\t/**\n\t * Until https://github.com/tc39/proposal-global is shipped.\n\t */\n\tfunction glob () {\n\t  return typeof self !== 'undefined' ? self\n\t      : typeof window !== 'undefined' ? window\n\t      : typeof global !== 'undefined' ? global : {};\n\t}\n\t\n\t/**\n\t * JSONP Polling constructor.\n\t *\n\t * @param {Object} opts.\n\t * @api public\n\t */\n\t\n\tfunction JSONPPolling (opts) {\n\t  Polling.call(this, opts);\n\t\n\t  this.query = this.query || {};\n\t\n\t  // define global callbacks array if not present\n\t  // we do this here (lazily) to avoid unneeded global pollution\n\t  if (!callbacks) {\n\t    // we need to consider multiple engines in the same page\n\t    var global = glob();\n\t    callbacks = global.___eio = (global.___eio || []);\n\t  }\n\t\n\t  // callback identifier\n\t  this.index = callbacks.length;\n\t\n\t  // add callback to jsonp global\n\t  var self = this;\n\t  callbacks.push(function (msg) {\n\t    self.onData(msg);\n\t  });\n\t\n\t  // append to query string\n\t  this.query.j = this.index;\n\t\n\t  // prevent spurious errors from being emitted when the window is unloaded\n\t  if (typeof addEventListener === 'function') {\n\t    addEventListener('beforeunload', function () {\n\t      if (self.script) self.script.onerror = empty;\n\t    }, false);\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(JSONPPolling, Polling);\n\t\n\t/*\n\t * JSONP only supports binary as base64 encoded strings\n\t */\n\t\n\tJSONPPolling.prototype.supportsBinary = false;\n\t\n\t/**\n\t * Closes the socket.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doClose = function () {\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  if (this.form) {\n\t    this.form.parentNode.removeChild(this.form);\n\t    this.form = null;\n\t    this.iframe = null;\n\t  }\n\t\n\t  Polling.prototype.doClose.call(this);\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doPoll = function () {\n\t  var self = this;\n\t  var script = document.createElement('script');\n\t\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  script.async = true;\n\t  script.src = this.uri();\n\t  script.onerror = function (e) {\n\t    self.onError('jsonp poll error', e);\n\t  };\n\t\n\t  var insertAt = document.getElementsByTagName('script')[0];\n\t  if (insertAt) {\n\t    insertAt.parentNode.insertBefore(script, insertAt);\n\t  } else {\n\t    (document.head || document.body).appendChild(script);\n\t  }\n\t  this.script = script;\n\t\n\t  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\t\n\t  if (isUAgecko) {\n\t    setTimeout(function () {\n\t      var iframe = document.createElement('iframe');\n\t      document.body.appendChild(iframe);\n\t      document.body.removeChild(iframe);\n\t    }, 100);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes with a hidden iframe.\n\t *\n\t * @param {String} data to send\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doWrite = function (data, fn) {\n\t  var self = this;\n\t\n\t  if (!this.form) {\n\t    var form = document.createElement('form');\n\t    var area = document.createElement('textarea');\n\t    var id = this.iframeId = 'eio_iframe_' + this.index;\n\t    var iframe;\n\t\n\t    form.className = 'socketio';\n\t    form.style.position = 'absolute';\n\t    form.style.top = '-1000px';\n\t    form.style.left = '-1000px';\n\t    form.target = id;\n\t    form.method = 'POST';\n\t    form.setAttribute('accept-charset', 'utf-8');\n\t    area.name = 'd';\n\t    form.appendChild(area);\n\t    document.body.appendChild(form);\n\t\n\t    this.form = form;\n\t    this.area = area;\n\t  }\n\t\n\t  this.form.action = this.uri();\n\t\n\t  function complete () {\n\t    initIframe();\n\t    fn();\n\t  }\n\t\n\t  function initIframe () {\n\t    if (self.iframe) {\n\t      try {\n\t        self.form.removeChild(self.iframe);\n\t      } catch (e) {\n\t        self.onError('jsonp polling iframe removal error', e);\n\t      }\n\t    }\n\t\n\t    try {\n\t      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n\t      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n\t      iframe = document.createElement(html);\n\t    } catch (e) {\n\t      iframe = document.createElement('iframe');\n\t      iframe.name = self.iframeId;\n\t      iframe.src = 'javascript:0';\n\t    }\n\t\n\t    iframe.id = self.iframeId;\n\t\n\t    self.form.appendChild(iframe);\n\t    self.iframe = iframe;\n\t  }\n\t\n\t  initIframe();\n\t\n\t  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n\t  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n\t  data = data.replace(rEscapedNewline, '\\\\\\n');\n\t  this.area.value = data.replace(rNewline, '\\\\n');\n\t\n\t  try {\n\t    this.form.submit();\n\t  } catch (e) {}\n\t\n\t  if (this.iframe.attachEvent) {\n\t    this.iframe.onreadystatechange = function () {\n\t      if (self.iframe.readyState === 'complete') {\n\t        complete();\n\t      }\n\t    };\n\t  } else {\n\t    this.iframe.onload = complete;\n\t  }\n\t};\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(17);\n\tvar parser = __webpack_require__(18);\n\tvar parseqs = __webpack_require__(26);\n\tvar inherit = __webpack_require__(27);\n\tvar yeast = __webpack_require__(28);\n\tvar debug = __webpack_require__(3)('engine.io-client:websocket');\n\t\n\tvar BrowserWebSocket, NodeWebSocket;\n\t\n\tif (typeof WebSocket !== 'undefined') {\n\t  BrowserWebSocket = WebSocket;\n\t} else if (typeof self !== 'undefined') {\n\t  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n\t}\n\t\n\tif (typeof window === 'undefined') {\n\t  try {\n\t    NodeWebSocket = __webpack_require__(31);\n\t  } catch (e) { }\n\t}\n\t\n\t/**\n\t * Get either the `WebSocket` or `MozWebSocket` globals\n\t * in the browser or try to resolve WebSocket-compatible\n\t * interface exposed by `ws` for Node-like environment.\n\t */\n\t\n\tvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = WS;\n\t\n\t/**\n\t * WebSocket transport constructor.\n\t *\n\t * @api {Object} connection options\n\t * @api public\n\t */\n\t\n\tfunction WS (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  this.perMessageDeflate = opts.perMessageDeflate;\n\t  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n\t  this.protocols = opts.protocols;\n\t  if (!this.usingBrowserWebSocket) {\n\t    WebSocketImpl = NodeWebSocket;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(WS, Transport);\n\t\n\t/**\n\t * Transport name.\n\t *\n\t * @api public\n\t */\n\t\n\tWS.prototype.name = 'websocket';\n\t\n\t/*\n\t * WebSockets support binary\n\t */\n\t\n\tWS.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Opens socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doOpen = function () {\n\t  if (!this.check()) {\n\t    // let probe timeout\n\t    return;\n\t  }\n\t\n\t  var uri = this.uri();\n\t  var protocols = this.protocols;\n\t  var opts = {\n\t    agent: this.agent,\n\t    perMessageDeflate: this.perMessageDeflate\n\t  };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  if (this.extraHeaders) {\n\t    opts.headers = this.extraHeaders;\n\t  }\n\t  if (this.localAddress) {\n\t    opts.localAddress = this.localAddress;\n\t  }\n\t\n\t  try {\n\t    this.ws =\n\t      this.usingBrowserWebSocket && !this.isReactNative\n\t        ? protocols\n\t          ? new WebSocketImpl(uri, protocols)\n\t          : new WebSocketImpl(uri)\n\t        : new WebSocketImpl(uri, protocols, opts);\n\t  } catch (err) {\n\t    return this.emit('error', err);\n\t  }\n\t\n\t  if (this.ws.binaryType === undefined) {\n\t    this.supportsBinary = false;\n\t  }\n\t\n\t  if (this.ws.supports && this.ws.supports.binary) {\n\t    this.supportsBinary = true;\n\t    this.ws.binaryType = 'nodebuffer';\n\t  } else {\n\t    this.ws.binaryType = 'arraybuffer';\n\t  }\n\t\n\t  this.addEventListeners();\n\t};\n\t\n\t/**\n\t * Adds event listeners to the socket\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.addEventListeners = function () {\n\t  var self = this;\n\t\n\t  this.ws.onopen = function () {\n\t    self.onOpen();\n\t  };\n\t  this.ws.onclose = function () {\n\t    self.onClose();\n\t  };\n\t  this.ws.onmessage = function (ev) {\n\t    self.onData(ev.data);\n\t  };\n\t  this.ws.onerror = function (e) {\n\t    self.onError('websocket error', e);\n\t  };\n\t};\n\t\n\t/**\n\t * Writes data to socket.\n\t *\n\t * @param {Array} array of packets.\n\t * @api private\n\t */\n\t\n\tWS.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t\n\t  // encodePacket efficient as it uses WS framing\n\t  // no need for encodePayload\n\t  var total = packets.length;\n\t  for (var i = 0, l = total; i < l; i++) {\n\t    (function (packet) {\n\t      parser.encodePacket(packet, self.supportsBinary, function (data) {\n\t        if (!self.usingBrowserWebSocket) {\n\t          // always create a new object (GH-437)\n\t          var opts = {};\n\t          if (packet.options) {\n\t            opts.compress = packet.options.compress;\n\t          }\n\t\n\t          if (self.perMessageDeflate) {\n\t            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n\t            if (len < self.perMessageDeflate.threshold) {\n\t              opts.compress = false;\n\t            }\n\t          }\n\t        }\n\t\n\t        // Sometimes the websocket has already been closed but the browser didn't\n\t        // have a chance of informing us about it yet, in that case send will\n\t        // throw an error\n\t        try {\n\t          if (self.usingBrowserWebSocket) {\n\t            // TypeError is thrown when passing the second argument on Safari\n\t            self.ws.send(data);\n\t          } else {\n\t            self.ws.send(data, opts);\n\t          }\n\t        } catch (e) {\n\t\n\t        }\n\t\n\t        --total || done();\n\t      });\n\t    })(packets[i]);\n\t  }\n\t\n\t  function done () {\n\t    self.emit('flush');\n\t\n\t    // fake drain\n\t    // defer to next tick to allow Socket to clear writeBuffer\n\t    setTimeout(function () {\n\t      self.writable = true;\n\t      self.emit('drain');\n\t    }, 0);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon close\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.onClose = function () {\n\t  Transport.prototype.onClose.call(this);\n\t};\n\t\n\t/**\n\t * Closes socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doClose = function () {\n\t  if (typeof this.ws !== 'undefined') {\n\t    this.ws.close();\n\t  }\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'wss' : 'ws';\n\t  var port = '';\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n\t    ('ws' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // append timestamp to URI\n\t  if (this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  // communicate binary support capabilities\n\t  if (!this.supportsBinary) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\t\n\t/**\n\t * Feature detection for WebSocket.\n\t *\n\t * @return {Boolean} whether this transport is available.\n\t * @api public\n\t */\n\t\n\tWS.prototype.check = function () {\n\t  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n\t};\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\n\t/* (ignored) */\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\n\t\n\tvar indexOf = [].indexOf;\n\t\n\tmodule.exports = function(arr, obj){\n\t  if (indexOf) return arr.indexOf(obj);\n\t  for (var i = 0; i < arr.length; ++i) {\n\t    if (arr[i] === obj) return i;\n\t  }\n\t  return -1;\n\t};\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(4);\n\tvar Emitter = __webpack_require__(5);\n\tvar toArray = __webpack_require__(34);\n\tvar on = __webpack_require__(35);\n\tvar bind = __webpack_require__(36);\n\tvar debug = __webpack_require__(3)('socket.io-client:socket');\n\tvar parseqs = __webpack_require__(26);\n\tvar hasBin = __webpack_require__(20);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = Socket;\n\t\n\t/**\n\t * Internal events (blacklisted).\n\t * These events can't be emitted by the user.\n\t *\n\t * @api private\n\t */\n\t\n\tvar events = {\n\t  connect: 1,\n\t  connect_error: 1,\n\t  connect_timeout: 1,\n\t  connecting: 1,\n\t  disconnect: 1,\n\t  error: 1,\n\t  reconnect: 1,\n\t  reconnect_attempt: 1,\n\t  reconnect_failed: 1,\n\t  reconnect_error: 1,\n\t  reconnecting: 1,\n\t  ping: 1,\n\t  pong: 1\n\t};\n\t\n\t/**\n\t * Shortcut to `Emitter#emit`.\n\t */\n\t\n\tvar emit = Emitter.prototype.emit;\n\t\n\t/**\n\t * `Socket` constructor.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Socket(io, nsp, opts) {\n\t  this.io = io;\n\t  this.nsp = nsp;\n\t  this.json = this; // compat\n\t  this.ids = 0;\n\t  this.acks = {};\n\t  this.receiveBuffer = [];\n\t  this.sendBuffer = [];\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  this.flags = {};\n\t  if (opts && opts.query) {\n\t    this.query = opts.query;\n\t  }\n\t  if (this.io.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Subscribe to open, close and packet events\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.subEvents = function () {\n\t  if (this.subs) return;\n\t\n\t  var io = this.io;\n\t  this.subs = [on(io, 'open', bind(this, 'onopen')), on(io, 'packet', bind(this, 'onpacket')), on(io, 'close', bind(this, 'onclose'))];\n\t};\n\t\n\t/**\n\t * \"Opens\" the socket.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.open = Socket.prototype.connect = function () {\n\t  if (this.connected) return this;\n\t\n\t  this.subEvents();\n\t  this.io.open(); // ensure open\n\t  if ('open' === this.io.readyState) this.onopen();\n\t  this.emit('connecting');\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a `message` event.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.send = function () {\n\t  var args = toArray(arguments);\n\t  args.unshift('message');\n\t  this.emit.apply(this, args);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Override `emit`.\n\t * If the event is in `events`, it's emitted normally.\n\t *\n\t * @param {String} event name\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.emit = function (ev) {\n\t  if (events.hasOwnProperty(ev)) {\n\t    emit.apply(this, arguments);\n\t    return this;\n\t  }\n\t\n\t  var args = toArray(arguments);\n\t  var packet = {\n\t    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n\t    data: args\n\t  };\n\t\n\t  packet.options = {};\n\t  packet.options.compress = !this.flags || false !== this.flags.compress;\n\t\n\t  // event ack callback\n\t  if ('function' === typeof args[args.length - 1]) {\n\t\n\t    this.acks[this.ids] = args.pop();\n\t    packet.id = this.ids++;\n\t  }\n\t\n\t  if (this.connected) {\n\t    this.packet(packet);\n\t  } else {\n\t    this.sendBuffer.push(packet);\n\t  }\n\t\n\t  this.flags = {};\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.packet = function (packet) {\n\t  packet.nsp = this.nsp;\n\t  this.io.packet(packet);\n\t};\n\t\n\t/**\n\t * Called upon engine `open`.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onopen = function () {\n\t\n\t  // write connect packet if necessary\n\t  if ('/' !== this.nsp) {\n\t    if (this.query) {\n\t      var query = _typeof(this.query) === 'object' ? parseqs.encode(this.query) : this.query;\n\t\n\t      this.packet({ type: parser.CONNECT, query: query });\n\t    } else {\n\t      this.packet({ type: parser.CONNECT });\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon engine `close`.\n\t *\n\t * @param {String} reason\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onclose = function (reason) {\n\t\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  delete this.id;\n\t  this.emit('disconnect', reason);\n\t};\n\t\n\t/**\n\t * Called with socket packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onpacket = function (packet) {\n\t  var sameNamespace = packet.nsp === this.nsp;\n\t  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\t\n\t  if (!sameNamespace && !rootNamespaceError) return;\n\t\n\t  switch (packet.type) {\n\t    case parser.CONNECT:\n\t      this.onconnect();\n\t      break;\n\t\n\t    case parser.EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.BINARY_EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.BINARY_ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.DISCONNECT:\n\t      this.ondisconnect();\n\t      break;\n\t\n\t    case parser.ERROR:\n\t      this.emit('error', packet.data);\n\t      break;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon a server event.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onevent = function (packet) {\n\t  var args = packet.data || [];\n\t\n\t  if (null != packet.id) {\n\t\n\t    args.push(this.ack(packet.id));\n\t  }\n\t\n\t  if (this.connected) {\n\t    emit.apply(this, args);\n\t  } else {\n\t    this.receiveBuffer.push(args);\n\t  }\n\t};\n\t\n\t/**\n\t * Produces an ack callback to emit with an event.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ack = function (id) {\n\t  var self = this;\n\t  var sent = false;\n\t  return function () {\n\t    // prevent double callbacks\n\t    if (sent) return;\n\t    sent = true;\n\t    var args = toArray(arguments);\n\t\n\t    self.packet({\n\t      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n\t      id: id,\n\t      data: args\n\t    });\n\t  };\n\t};\n\t\n\t/**\n\t * Called upon a server acknowlegement.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onack = function (packet) {\n\t  var ack = this.acks[packet.id];\n\t  if ('function' === typeof ack) {\n\t\n\t    ack.apply(this, packet.data);\n\t    delete this.acks[packet.id];\n\t  } else {}\n\t};\n\t\n\t/**\n\t * Called upon server connect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onconnect = function () {\n\t  this.connected = true;\n\t  this.disconnected = false;\n\t  this.emit('connect');\n\t  this.emitBuffered();\n\t};\n\t\n\t/**\n\t * Emit buffered events (received and emitted).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.emitBuffered = function () {\n\t  var i;\n\t  for (i = 0; i < this.receiveBuffer.length; i++) {\n\t    emit.apply(this, this.receiveBuffer[i]);\n\t  }\n\t  this.receiveBuffer = [];\n\t\n\t  for (i = 0; i < this.sendBuffer.length; i++) {\n\t    this.packet(this.sendBuffer[i]);\n\t  }\n\t  this.sendBuffer = [];\n\t};\n\t\n\t/**\n\t * Called upon server disconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ondisconnect = function () {\n\t\n\t  this.destroy();\n\t  this.onclose('io server disconnect');\n\t};\n\t\n\t/**\n\t * Called upon forced client/server side disconnections,\n\t * this method ensures the manager stops tracking us and\n\t * that reconnections don't get triggered for this.\n\t *\n\t * @api private.\n\t */\n\t\n\tSocket.prototype.destroy = function () {\n\t  if (this.subs) {\n\t    // clean subscriptions to avoid reconnections\n\t    for (var i = 0; i < this.subs.length; i++) {\n\t      this.subs[i].destroy();\n\t    }\n\t    this.subs = null;\n\t  }\n\t\n\t  this.io.destroy(this);\n\t};\n\t\n\t/**\n\t * Disconnects the socket manually.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.close = Socket.prototype.disconnect = function () {\n\t  if (this.connected) {\n\t\n\t    this.packet({ type: parser.DISCONNECT });\n\t  }\n\t\n\t  // remove socket from pool\n\t  this.destroy();\n\t\n\t  if (this.connected) {\n\t    // fire events\n\t    this.onclose('io client disconnect');\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the compress flag.\n\t *\n\t * @param {Boolean} if `true`, compresses the sending data\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.compress = function (compress) {\n\t  this.flags.compress = compress;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the binary flag\n\t *\n\t * @param {Boolean} whether the emitted data contains binary\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.binary = function (binary) {\n\t  this.flags.binary = binary;\n\t  return this;\n\t};\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = toArray\n\t\n\tfunction toArray(list, index) {\n\t    var array = []\n\t\n\t    index = index || 0\n\t\n\t    for (var i = index || 0; i < list.length; i++) {\n\t        array[i - index] = list[i]\n\t    }\n\t\n\t    return array\n\t}\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = on;\n\t\n\t/**\n\t * Helper for subscriptions.\n\t *\n\t * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n\t * @param {String} event name\n\t * @param {Function} callback\n\t * @api public\n\t */\n\t\n\tfunction on(obj, ev, fn) {\n\t  obj.on(ev, fn);\n\t  return {\n\t    destroy: function destroy() {\n\t      obj.removeListener(ev, fn);\n\t    }\n\t  };\n\t}\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Slice reference.\n\t */\n\t\n\tvar slice = [].slice;\n\t\n\t/**\n\t * Bind `obj` to `fn`.\n\t *\n\t * @param {Object} obj\n\t * @param {Function|String} fn or string\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(obj, fn){\n\t  if ('string' == typeof fn) fn = obj[fn];\n\t  if ('function' != typeof fn) throw new Error('bind() requires a function');\n\t  var args = slice.call(arguments, 2);\n\t  return function(){\n\t    return fn.apply(obj, args.concat(slice.call(arguments)));\n\t  }\n\t};\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Expose `Backoff`.\n\t */\n\t\n\tmodule.exports = Backoff;\n\t\n\t/**\n\t * Initialize backoff timer with `opts`.\n\t *\n\t * - `min` initial timeout in milliseconds [100]\n\t * - `max` max timeout [10000]\n\t * - `jitter` [0]\n\t * - `factor` [2]\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction Backoff(opts) {\n\t  opts = opts || {};\n\t  this.ms = opts.min || 100;\n\t  this.max = opts.max || 10000;\n\t  this.factor = opts.factor || 2;\n\t  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n\t  this.attempts = 0;\n\t}\n\t\n\t/**\n\t * Return the backoff duration.\n\t *\n\t * @return {Number}\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.duration = function(){\n\t  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n\t  if (this.jitter) {\n\t    var rand =  Math.random();\n\t    var deviation = Math.floor(rand * this.jitter * ms);\n\t    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n\t  }\n\t  return Math.min(ms, this.max) | 0;\n\t};\n\t\n\t/**\n\t * Reset the number of attempts.\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.reset = function(){\n\t  this.attempts = 0;\n\t};\n\t\n\t/**\n\t * Set the minimum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMin = function(min){\n\t  this.ms = min;\n\t};\n\t\n\t/**\n\t * Set the maximum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMax = function(max){\n\t  this.max = max;\n\t};\n\t\n\t/**\n\t * Set the jitter\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setJitter = function(jitter){\n\t  this.jitter = jitter;\n\t};\n\t\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// socket.io.slim.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 31c6c79423e11e145ab4","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/index.js","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/url.js","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n    var src = str,\r\n        b = str.indexOf('['),\r\n        e = str.indexOf(']');\r\n\r\n    if (b != -1 && e != -1) {\r\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n    }\r\n\r\n    var m = re.exec(str || ''),\r\n        uri = {},\r\n        i = 14;\r\n\r\n    while (i--) {\r\n        uri[parts[i]] = m[i] || '';\r\n    }\r\n\r\n    if (b != -1 && e != -1) {\r\n        uri.source = src;\r\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n        uri.ipv6uri = true;\r\n    }\r\n\r\n    return uri;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","\nmodule.exports = function () { return function () {}; };\n\n\n\n// WEBPACK FOOTER //\n// ./support/noop.js","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 4\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  var args = [].slice.call(arguments, 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 5\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 6\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 7\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 8\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n\n  if (~this.readyState.indexOf('open')) return this;\n\n\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n\n\n    // set timer\n    var timer = setTimeout(function () {\n\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/manager.js","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 10\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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\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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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\n  var self = this;\n\n  if (this.transport) {\n\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\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\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\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n\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\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\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\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\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\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\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(JSON.parse(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\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\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\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\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\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\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 11\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 12\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('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 self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 13\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 14\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 15\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n\n      total++;\n      this.once('pollComplete', function () {\n\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n\n      total++;\n      this.once('drain', function () {\n\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\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\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\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\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n\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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 18\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 19\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 20\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 21\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 22\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 23\n// module chunks = 0","/*\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 24\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 25\n// module chunks = 0","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n  var str = '';\r\n\r\n  for (var i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      if (str.length) str += '&';\r\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n    }\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n  var qry = {};\r\n  var pairs = qs.split('&');\r\n  for (var i = 0, l = pairs.length; i < l; i++) {\r\n    var pair = pairs[i].split('=');\r\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n  }\r\n  return qry;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 26\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 27\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 28\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('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 * Until https://github.com/tc39/proposal-global is shipped.\n */\nfunction glob () {\n  return typeof self !== 'undefined' ? self\n      : typeof window !== 'undefined' ? window\n      : typeof global !== 'undefined' ? global : {};\n}\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    var global = glob();\n    callbacks = global.___eio = (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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 29\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\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  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 30\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 32\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n\n\n  if (null != packet.id) {\n\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/socket.js","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 34\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/on.js","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 36\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 37\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///socket.io.slim.js","webpack:///webpack/bootstrap b1396182394c549233a5","webpack:///./lib/index.js","webpack:///./lib/url.js","webpack:///./~/parseuri/index.js","webpack:///./support/noop.js","webpack:///./~/socket.io-parser/index.js","webpack:///./~/component-emitter/index.js","webpack:///./~/socket.io-parser/binary.js","webpack:///./~/isarray/index.js","webpack:///./~/socket.io-parser/is-buffer.js","webpack:///./lib/manager.js","webpack:///./~/engine.io-client/lib/index.js","webpack:///./~/engine.io-client/lib/socket.js","webpack:///./~/engine.io-client/lib/transports/index.js","webpack:///./~/engine.io-client/lib/xmlhttprequest.js","webpack:///./~/has-cors/index.js","webpack:///./~/engine.io-client/lib/globalThis.browser.js","webpack:///./~/engine.io-client/lib/transports/polling-xhr.js","webpack:///./~/engine.io-client/lib/transports/polling.js","webpack:///./~/engine.io-client/lib/transport.js","webpack:///./~/engine.io-parser/lib/browser.js","webpack:///./~/engine.io-parser/lib/keys.js","webpack:///./~/has-binary2/index.js","webpack:///./~/arraybuffer.slice/index.js","webpack:///./~/after/index.js","webpack:///./~/engine.io-parser/lib/utf8.js","webpack:///./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js","webpack:///./~/blob/index.js","webpack:///./~/parseqs/index.js","webpack:///./~/component-inherit/index.js","webpack:///./~/yeast/index.js","webpack:///./~/engine.io-client/lib/transports/polling-jsonp.js","webpack:///./~/engine.io-client/lib/transports/websocket.js","webpack:///./~/indexof/index.js","webpack:///./lib/socket.js","webpack:///./~/to-array/index.js","webpack:///./lib/on.js","webpack:///./~/component-bind/index.js","webpack:///./~/backo2/index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","lookup","uri","opts","_typeof","undefined","io","parsed","url","source","path","sameNamespace","cache","nsps","newConnection","forceNew","multiplex","Manager","query","socket","Symbol","iterator","obj","constructor","prototype","parser","managers","protocol","connect","Socket","loc","location","host","charAt","test","parseuri","port","ipv6","indexOf","href","pathNames","regx","names","replace","split","substr","length","splice","queryKey","data","$0","$1","$2","re","parts","str","src","b","e","substring","exec","i","authority","ipv6uri","Encoder","encodeAsString","type","BINARY_EVENT","BINARY_ACK","attachments","nsp","payload","tryStringify","ERROR_PACKET","JSON","stringify","encodeAsBinary","callback","writeEncoding","bloblessData","deconstruction","binary","deconstructPacket","pack","packet","buffers","unshift","removeBlobs","Decoder","reconstructor","decodeString","Number","types","error","buf","Error","next","tryParse","isPayloadValid","ERROR","isArray","parse","BinaryReconstructor","reconPack","msg","Emitter","isBuf","CONNECT","DISCONNECT","EVENT","ACK","encode","encoding","add","emit","base64","takeBinaryData","destroy","finishedReconstruction","binData","push","reconstructPacket","mixin","key","on","addEventListener","event","fn","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","args","Array","slice","len","listeners","hasListeners","_deconstructPacket","placeholder","_placeholder","num","newData","Date","_reconstructPacket","toString","Object","withNativeBlob","Blob","withNativeFile","File","packetData","_removeBlobs","curKey","containingObject","pendingBlobs","fileReader","FileReader","onload","result","readAsArrayBuffer","arr","withNativeBuffer","Buffer","isBuffer","withNativeArrayBuffer","ArrayBuffer","isView","buffer","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","timeout","readyState","connecting","lastPing","packetBuffer","_parser","encoder","decoder","autoConnect","open","eio","bind","has","hasOwnProperty","emitAll","updateSocketIds","generateId","engine","v","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","reconnecting","attempts","reconnect","self","skipReconnect","openSub","onopen","errorSub","cleanup","err","timer","setTimeout","close","clearTimeout","onping","onpong","ondata","ondecoded","onerror","onConnecting","index","encodedPackets","write","options","processPacketQueue","shift","subsLength","sub","disconnect","reset","onclose","reason","delay","duration","onreconnect","attempt","hostname","secure","agent","parseqs","decode","upgrade","forceJSONP","jsonp","forceBase64","enablesXDR","withCredentials","timestampParam","timestampRequests","transports","transportOptions","writeBuffer","prevBufferLen","policyPort","rememberUpgrade","binaryType","onlyBinaryUpgrades","perMessageDeflate","threshold","pfx","passphrase","cert","ca","ciphers","rejectUnauthorized","forceNode","isReactNative","navigator","product","toLowerCase","extraHeaders","keys","localAddress","upgrades","pingInterval","pingTimeout","pingIntervalTimer","pingTimeoutTimer","clone","o","priorWebsocketSuccess","Transport","createTransport","name","EIO","transport","sid","requestTimeout","protocols","setTransport","onDrain","onPacket","onError","onClose","probe","onTransportOpen","upgradeLosesBinary","supportsBinary","failed","send","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","to","onOpen","l","onHandshake","setPing","code","filterUpgrades","onHeartbeat","ping","sendPacket","writable","compress","cleanupAndClose","waitForUpgrade","desc","filteredUpgrades","j","polling","xhr","xd","xs","isSSL","xdomain","xscheme","XMLHttpRequest","XHR","JSONP","websocket","hasCORS","globalThis","XDomainRequest","concat","join","window","Function","empty","Polling","Request","method","async","isBinary","create","unloadHandler","requests","abort","inherit","request","doWrite","req","sendXhr","doPoll","onData","pollXhr","setDisableHeaderCheck","setRequestHeader","hasXDR","onLoad","responseText","onreadystatechange","contentType","getResponseHeader","responseType","status","document","requestsCount","onSuccess","fromError","response","attachEvent","terminationEvent","hasXHR2","yeast","doOpen","poll","onPause","total","decodePayload","doClose","packets","callbackfn","encodePayload","schema","b64","description","decodePacket","encodeBase64Object","message","encodeArrayBuffer","encodeBase64Packet","contentArray","Uint8Array","resultBuffer","byteLength","encodeBlobAsArrayBuffer","fr","encodePacket","encodeBlob","dontSendBlobs","blob","tryDecode","utf8","strict","map","ary","each","done","after","eachWithIndex","el","base64encoder","hasBinary","sliceBuffer","isAndroid","userAgent","isPhantomJS","pong","noop","packetslist","utf8encode","encoded","String","readAsDataURL","b64data","fromCharCode","typed","basic","btoa","utf8decode","decodeBase64Packet","asArray","rest","setLengthHeader","encodeOne","doneCallback","encodePayloadAsBlob","encodePayloadAsArrayBuffer","results","decodePayloadAsBinary","n","chr","ret","totalLength","reduce","acc","resultArray","bufferIndex","forEach","isString","ab","view","charCodeAt","lenStr","parseInt","binaryIdentifier","size","lengthAry","bufferTail","tailArray","msgLength","toJSON","arraybuffer","start","end","bytes","abv","ii","count","err_cb","proxy","bail","ucs2decode","string","value","extra","output","counter","ucs2encode","array","stringFromCharCode","checkScalarValue","codePoint","toUpperCase","createByte","encodeCodePoint","symbol","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","tmp","version","chars","encoded1","encoded2","encoded3","encoded4","bufferLength","mapArrayBufferViews","chunk","copy","set","byteOffset","BlobBuilderConstructor","bb","BlobBuilder","part","append","getBlob","BlobConstructor","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","blobSupported","a","blobSupportsArrayBufferView","blobBuilderSupported","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","alphabet","Math","floor","decoded","now","prev","seed","JSONPPolling","___eio","script","rNewline","rEscapedNewline","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","isUAgecko","complete","initIframe","html","iframeId","area","className","style","position","top","left","target","setAttribute","action","submit","WS","usingBrowserWebSocket","BrowserWebSocket","WebSocketImpl","NodeWebSocket","WebSocket","MozWebSocket","check","headers","ws","supports","addEventListeners","onmessage","ev","json","ids","acks","receiveBuffer","sendBuffer","connected","disconnected","flags","toArray","hasBin","events","connect_error","connect_timeout","reconnect_attempt","reconnect_failed","reconnect_error","subEvents","pop","onpacket","rootNamespaceError","onconnect","onevent","onack","ondisconnect","ack","sent","emitBuffered","list","ms","factor","pow","rand","random","deviation"],"mappings":"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","file":"socket.io.slim.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar url = __webpack_require__(1);\n\tvar parser = __webpack_require__(4);\n\tvar Manager = __webpack_require__(9);\n\tvar debug = __webpack_require__(3)('socket.io-client');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = lookup;\n\t\n\t/**\n\t * Managers cache.\n\t */\n\t\n\tvar cache = exports.managers = {};\n\t\n\t/**\n\t * Looks up an existing `Manager` for multiplexing.\n\t * If the user summons:\n\t *\n\t *   `io('http://localhost/a');`\n\t *   `io('http://localhost/b');`\n\t *\n\t * We reuse the existing instance based on same scheme/port/host,\n\t * and we initialize sockets for each namespace.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction lookup(uri, opts) {\n\t  if ((typeof uri === 'undefined' ? 'undefined' : _typeof(uri)) === 'object') {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t\n\t  opts = opts || {};\n\t\n\t  var parsed = url(uri);\n\t  var source = parsed.source;\n\t  var id = parsed.id;\n\t  var path = parsed.path;\n\t  var sameNamespace = cache[id] && path in cache[id].nsps;\n\t  var newConnection = opts.forceNew || opts['force new connection'] || false === opts.multiplex || sameNamespace;\n\t\n\t  var io;\n\t\n\t  if (newConnection) {\n\t\n\t    io = Manager(source, opts);\n\t  } else {\n\t    if (!cache[id]) {\n\t\n\t      cache[id] = Manager(source, opts);\n\t    }\n\t    io = cache[id];\n\t  }\n\t  if (parsed.query && !opts.query) {\n\t    opts.query = parsed.query;\n\t  }\n\t  return io.socket(parsed.path, opts);\n\t}\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = parser.protocol;\n\t\n\t/**\n\t * `connect`.\n\t *\n\t * @param {String} uri\n\t * @api public\n\t */\n\t\n\texports.connect = lookup;\n\t\n\t/**\n\t * Expose constructors for standalone build.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Manager = __webpack_require__(9);\n\texports.Socket = __webpack_require__(34);\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parseuri = __webpack_require__(2);\n\tvar debug = __webpack_require__(3)('socket.io-client:url');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = url;\n\t\n\t/**\n\t * URL parser.\n\t *\n\t * @param {String} url\n\t * @param {Object} An object meant to mimic window.location.\n\t *                 Defaults to window.location.\n\t * @api public\n\t */\n\t\n\tfunction url(uri, loc) {\n\t  var obj = uri;\n\t\n\t  // default to window.location\n\t  loc = loc || typeof location !== 'undefined' && location;\n\t  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\t\n\t  // relative path support\n\t  if ('string' === typeof uri) {\n\t    if ('/' === uri.charAt(0)) {\n\t      if ('/' === uri.charAt(1)) {\n\t        uri = loc.protocol + uri;\n\t      } else {\n\t        uri = loc.host + uri;\n\t      }\n\t    }\n\t\n\t    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\t\n\t      if ('undefined' !== typeof loc) {\n\t        uri = loc.protocol + '//' + uri;\n\t      } else {\n\t        uri = 'https://' + uri;\n\t      }\n\t    }\n\t\n\t    // parse\n\t\n\t    obj = parseuri(uri);\n\t  }\n\t\n\t  // make sure we treat `localhost:80` and `localhost` equally\n\t  if (!obj.port) {\n\t    if (/^(http|ws)$/.test(obj.protocol)) {\n\t      obj.port = '80';\n\t    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n\t      obj.port = '443';\n\t    }\n\t  }\n\t\n\t  obj.path = obj.path || '/';\n\t\n\t  var ipv6 = obj.host.indexOf(':') !== -1;\n\t  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\t\n\t  // define unique id\n\t  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n\t  // define href\n\t  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : ':' + obj.port);\n\t\n\t  return obj;\n\t}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Parses an URI\n\t *\n\t * @author Steven Levithan <stevenlevithan.com> (MIT license)\n\t * @api private\n\t */\n\t\n\tvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\t\n\tvar parts = [\n\t    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n\t];\n\t\n\tmodule.exports = function parseuri(str) {\n\t    var src = str,\n\t        b = str.indexOf('['),\n\t        e = str.indexOf(']');\n\t\n\t    if (b != -1 && e != -1) {\n\t        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n\t    }\n\t\n\t    var m = re.exec(str || ''),\n\t        uri = {},\n\t        i = 14;\n\t\n\t    while (i--) {\n\t        uri[parts[i]] = m[i] || '';\n\t    }\n\t\n\t    if (b != -1 && e != -1) {\n\t        uri.source = src;\n\t        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n\t        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n\t        uri.ipv6uri = true;\n\t    }\n\t\n\t    uri.pathNames = pathNames(uri, uri['path']);\n\t    uri.queryKey = queryKey(uri, uri['query']);\n\t\n\t    return uri;\n\t};\n\t\n\tfunction pathNames(obj, path) {\n\t    var regx = /\\/{2,9}/g,\n\t        names = path.replace(regx, \"/\").split(\"/\");\n\t\n\t    if (path.substr(0, 1) == '/' || path.length === 0) {\n\t        names.splice(0, 1);\n\t    }\n\t    if (path.substr(path.length - 1, 1) == '/') {\n\t        names.splice(names.length - 1, 1);\n\t    }\n\t\n\t    return names;\n\t}\n\t\n\tfunction queryKey(uri, query) {\n\t    var data = {};\n\t\n\t    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n\t        if ($1) {\n\t            data[$1] = $2;\n\t        }\n\t    });\n\t\n\t    return data;\n\t}\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = function () {\n\t  return function () {};\n\t};\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar debug = __webpack_require__(3)('socket.io-parser');\n\tvar Emitter = __webpack_require__(5);\n\tvar binary = __webpack_require__(6);\n\tvar isArray = __webpack_require__(7);\n\tvar isBuf = __webpack_require__(8);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\texports.protocol = 4;\n\t\n\t/**\n\t * Packet types.\n\t *\n\t * @api public\n\t */\n\t\n\texports.types = [\n\t  'CONNECT',\n\t  'DISCONNECT',\n\t  'EVENT',\n\t  'ACK',\n\t  'ERROR',\n\t  'BINARY_EVENT',\n\t  'BINARY_ACK'\n\t];\n\t\n\t/**\n\t * Packet type `connect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.CONNECT = 0;\n\t\n\t/**\n\t * Packet type `disconnect`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.DISCONNECT = 1;\n\t\n\t/**\n\t * Packet type `event`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.EVENT = 2;\n\t\n\t/**\n\t * Packet type `ack`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ACK = 3;\n\t\n\t/**\n\t * Packet type `error`.\n\t *\n\t * @api public\n\t */\n\t\n\texports.ERROR = 4;\n\t\n\t/**\n\t * Packet type 'binary event'\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_EVENT = 5;\n\t\n\t/**\n\t * Packet type `binary ack`. For acks with binary arguments.\n\t *\n\t * @api public\n\t */\n\t\n\texports.BINARY_ACK = 6;\n\t\n\t/**\n\t * Encoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Encoder = Encoder;\n\t\n\t/**\n\t * Decoder constructor.\n\t *\n\t * @api public\n\t */\n\t\n\texports.Decoder = Decoder;\n\t\n\t/**\n\t * A socket.io Encoder instance\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Encoder() {}\n\t\n\tvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\t\n\t/**\n\t * Encode a packet as a single string if non-binary, or as a\n\t * buffer sequence, depending on packet type.\n\t *\n\t * @param {Object} obj - packet object\n\t * @param {Function} callback - function to handle encodings (likely engine.write)\n\t * @return Calls callback with Array of encodings\n\t * @api public\n\t */\n\t\n\tEncoder.prototype.encode = function(obj, callback){\n\t\n\t\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    encodeAsBinary(obj, callback);\n\t  } else {\n\t    var encoding = encodeAsString(obj);\n\t    callback([encoding]);\n\t  }\n\t};\n\t\n\t/**\n\t * Encode packet as string.\n\t *\n\t * @param {Object} packet\n\t * @return {String} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsString(obj) {\n\t\n\t  // first is type\n\t  var str = '' + obj.type;\n\t\n\t  // attachments if we have them\n\t  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n\t    str += obj.attachments + '-';\n\t  }\n\t\n\t  // if we have a namespace other than `/`\n\t  // we append it followed by a comma `,`\n\t  if (obj.nsp && '/' !== obj.nsp) {\n\t    str += obj.nsp + ',';\n\t  }\n\t\n\t  // immediately followed by the id\n\t  if (null != obj.id) {\n\t    str += obj.id;\n\t  }\n\t\n\t  // json data\n\t  if (null != obj.data) {\n\t    var payload = tryStringify(obj.data);\n\t    if (payload !== false) {\n\t      str += payload;\n\t    } else {\n\t      return ERROR_PACKET;\n\t    }\n\t  }\n\t\n\t\n\t  return str;\n\t}\n\t\n\tfunction tryStringify(str) {\n\t  try {\n\t    return JSON.stringify(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Encode packet as 'buffer sequence' by removing blobs, and\n\t * deconstructing packet into object with placeholders and\n\t * a list of buffers.\n\t *\n\t * @param {Object} packet\n\t * @return {Buffer} encoded\n\t * @api private\n\t */\n\t\n\tfunction encodeAsBinary(obj, callback) {\n\t\n\t  function writeEncoding(bloblessData) {\n\t    var deconstruction = binary.deconstructPacket(bloblessData);\n\t    var pack = encodeAsString(deconstruction.packet);\n\t    var buffers = deconstruction.buffers;\n\t\n\t    buffers.unshift(pack); // add packet info to beginning of data list\n\t    callback(buffers); // write all the buffers\n\t  }\n\t\n\t  binary.removeBlobs(obj, writeEncoding);\n\t}\n\t\n\t/**\n\t * A socket.io Decoder instance\n\t *\n\t * @return {Object} decoder\n\t * @api public\n\t */\n\t\n\tfunction Decoder() {\n\t  this.reconstructor = null;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter` with Decoder.\n\t */\n\t\n\tEmitter(Decoder.prototype);\n\t\n\t/**\n\t * Decodes an encoded packet string into packet JSON.\n\t *\n\t * @param {String} obj - encoded packet\n\t * @return {Object} packet\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.add = function(obj) {\n\t  var packet;\n\t  if (typeof obj === 'string') {\n\t    packet = decodeString(obj);\n\t    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n\t      this.reconstructor = new BinaryReconstructor(packet);\n\t\n\t      // no attachments, labeled binary but no binary data to follow\n\t      if (this.reconstructor.reconPack.attachments === 0) {\n\t        this.emit('decoded', packet);\n\t      }\n\t    } else { // non-binary full packet\n\t      this.emit('decoded', packet);\n\t    }\n\t  } else if (isBuf(obj) || obj.base64) { // raw binary data\n\t    if (!this.reconstructor) {\n\t      throw new Error('got binary data when not reconstructing a packet');\n\t    } else {\n\t      packet = this.reconstructor.takeBinaryData(obj);\n\t      if (packet) { // received final buffer\n\t        this.reconstructor = null;\n\t        this.emit('decoded', packet);\n\t      }\n\t    }\n\t  } else {\n\t    throw new Error('Unknown type: ' + obj);\n\t  }\n\t};\n\t\n\t/**\n\t * Decode a packet String (JSON data)\n\t *\n\t * @param {String} str\n\t * @return {Object} packet\n\t * @api private\n\t */\n\t\n\tfunction decodeString(str) {\n\t  var i = 0;\n\t  // look up type\n\t  var p = {\n\t    type: Number(str.charAt(0))\n\t  };\n\t\n\t  if (null == exports.types[p.type]) {\n\t    return error('unknown packet type ' + p.type);\n\t  }\n\t\n\t  // look up attachments if type binary\n\t  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n\t    var buf = '';\n\t    while (str.charAt(++i) !== '-') {\n\t      buf += str.charAt(i);\n\t      if (i == str.length) break;\n\t    }\n\t    if (buf != Number(buf) || str.charAt(i) !== '-') {\n\t      throw new Error('Illegal attachments');\n\t    }\n\t    p.attachments = Number(buf);\n\t  }\n\t\n\t  // look up namespace (if any)\n\t  if ('/' === str.charAt(i + 1)) {\n\t    p.nsp = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (',' === c) break;\n\t      p.nsp += c;\n\t      if (i === str.length) break;\n\t    }\n\t  } else {\n\t    p.nsp = '/';\n\t  }\n\t\n\t  // look up id\n\t  var next = str.charAt(i + 1);\n\t  if ('' !== next && Number(next) == next) {\n\t    p.id = '';\n\t    while (++i) {\n\t      var c = str.charAt(i);\n\t      if (null == c || Number(c) != c) {\n\t        --i;\n\t        break;\n\t      }\n\t      p.id += str.charAt(i);\n\t      if (i === str.length) break;\n\t    }\n\t    p.id = Number(p.id);\n\t  }\n\t\n\t  // look up json data\n\t  if (str.charAt(++i)) {\n\t    var payload = tryParse(str.substr(i));\n\t    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n\t    if (isPayloadValid) {\n\t      p.data = payload;\n\t    } else {\n\t      return error('invalid payload');\n\t    }\n\t  }\n\t\n\t\n\t  return p;\n\t}\n\t\n\tfunction tryParse(str) {\n\t  try {\n\t    return JSON.parse(str);\n\t  } catch(e){\n\t    return false;\n\t  }\n\t}\n\t\n\t/**\n\t * Deallocates a parser's resources\n\t *\n\t * @api public\n\t */\n\t\n\tDecoder.prototype.destroy = function() {\n\t  if (this.reconstructor) {\n\t    this.reconstructor.finishedReconstruction();\n\t  }\n\t};\n\t\n\t/**\n\t * A manager of a binary event's 'buffer sequence'. Should\n\t * be constructed whenever a packet of type BINARY_EVENT is\n\t * decoded.\n\t *\n\t * @param {Object} packet\n\t * @return {BinaryReconstructor} initialized reconstructor\n\t * @api private\n\t */\n\t\n\tfunction BinaryReconstructor(packet) {\n\t  this.reconPack = packet;\n\t  this.buffers = [];\n\t}\n\t\n\t/**\n\t * Method to be called when binary data received from connection\n\t * after a BINARY_EVENT packet.\n\t *\n\t * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n\t * @return {null | Object} returns null if more binary data is expected or\n\t *   a reconstructed packet object if all buffers have been received.\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n\t  this.buffers.push(binData);\n\t  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n\t    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n\t    this.finishedReconstruction();\n\t    return packet;\n\t  }\n\t  return null;\n\t};\n\t\n\t/**\n\t * Cleans up binary packet reconstruction variables.\n\t *\n\t * @api private\n\t */\n\t\n\tBinaryReconstructor.prototype.finishedReconstruction = function() {\n\t  this.reconPack = null;\n\t  this.buffers = [];\n\t};\n\t\n\tfunction error(msg) {\n\t  return {\n\t    type: exports.ERROR,\n\t    data: 'parser error: ' + msg\n\t  };\n\t}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\r\n\t/**\r\n\t * Expose `Emitter`.\r\n\t */\r\n\t\r\n\tif (true) {\r\n\t  module.exports = Emitter;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialize a new `Emitter`.\r\n\t *\r\n\t * @api public\r\n\t */\r\n\t\r\n\tfunction Emitter(obj) {\r\n\t  if (obj) return mixin(obj);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Mixin the emitter properties.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Object}\r\n\t * @api private\r\n\t */\r\n\t\r\n\tfunction mixin(obj) {\r\n\t  for (var key in Emitter.prototype) {\r\n\t    obj[key] = Emitter.prototype[key];\r\n\t  }\r\n\t  return obj;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Listen on the given `event` with `fn`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.on =\r\n\tEmitter.prototype.addEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n\t    .push(fn);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Adds an `event` listener that will be invoked a single\r\n\t * time then automatically removed.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.once = function(event, fn){\r\n\t  function on() {\r\n\t    this.off(event, on);\r\n\t    fn.apply(this, arguments);\r\n\t  }\r\n\t\r\n\t  on.fn = fn;\r\n\t  this.on(event, on);\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Remove the given callback for `event` or all\r\n\t * registered callbacks.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Function} fn\r\n\t * @return {Emitter}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.off =\r\n\tEmitter.prototype.removeListener =\r\n\tEmitter.prototype.removeAllListeners =\r\n\tEmitter.prototype.removeEventListener = function(event, fn){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  // all\r\n\t  if (0 == arguments.length) {\r\n\t    this._callbacks = {};\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // specific event\r\n\t  var callbacks = this._callbacks['$' + event];\r\n\t  if (!callbacks) return this;\r\n\t\r\n\t  // remove all handlers\r\n\t  if (1 == arguments.length) {\r\n\t    delete this._callbacks['$' + event];\r\n\t    return this;\r\n\t  }\r\n\t\r\n\t  // remove specific handler\r\n\t  var cb;\r\n\t  for (var i = 0; i < callbacks.length; i++) {\r\n\t    cb = callbacks[i];\r\n\t    if (cb === fn || cb.fn === fn) {\r\n\t      callbacks.splice(i, 1);\r\n\t      break;\r\n\t    }\r\n\t  }\r\n\t\r\n\t  // Remove event specific arrays for event types that no\r\n\t  // one is subscribed for to avoid memory leak.\r\n\t  if (callbacks.length === 0) {\r\n\t    delete this._callbacks['$' + event];\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Emit `event` with the given args.\r\n\t *\r\n\t * @param {String} event\r\n\t * @param {Mixed} ...\r\n\t * @return {Emitter}\r\n\t */\r\n\t\r\n\tEmitter.prototype.emit = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t\r\n\t  var args = new Array(arguments.length - 1)\r\n\t    , callbacks = this._callbacks['$' + event];\r\n\t\r\n\t  for (var i = 1; i < arguments.length; i++) {\r\n\t    args[i - 1] = arguments[i];\r\n\t  }\r\n\t\r\n\t  if (callbacks) {\r\n\t    callbacks = callbacks.slice(0);\r\n\t    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n\t      callbacks[i].apply(this, args);\r\n\t    }\r\n\t  }\r\n\t\r\n\t  return this;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Return array of callbacks for `event`.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Array}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.listeners = function(event){\r\n\t  this._callbacks = this._callbacks || {};\r\n\t  return this._callbacks['$' + event] || [];\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if this emitter has `event` handlers.\r\n\t *\r\n\t * @param {String} event\r\n\t * @return {Boolean}\r\n\t * @api public\r\n\t */\r\n\t\r\n\tEmitter.prototype.hasListeners = function(event){\r\n\t  return !! this.listeners(event).length;\r\n\t};\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*global Blob,File*/\n\t\n\t/**\n\t * Module requirements\n\t */\n\t\n\tvar isArray = __webpack_require__(7);\n\tvar isBuf = __webpack_require__(8);\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\n\tvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\t\n\t/**\n\t * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n\t * Anything with blobs or files should be fed through removeBlobs before coming\n\t * here.\n\t *\n\t * @param {Object} packet - socket.io event packet\n\t * @return {Object} with deconstructed packet and list of buffers\n\t * @api public\n\t */\n\t\n\texports.deconstructPacket = function(packet) {\n\t  var buffers = [];\n\t  var packetData = packet.data;\n\t  var pack = packet;\n\t  pack.data = _deconstructPacket(packetData, buffers);\n\t  pack.attachments = buffers.length; // number of binary 'attachments'\n\t  return {packet: pack, buffers: buffers};\n\t};\n\t\n\tfunction _deconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (isBuf(data)) {\n\t    var placeholder = { _placeholder: true, num: buffers.length };\n\t    buffers.push(data);\n\t    return placeholder;\n\t  } else if (isArray(data)) {\n\t    var newData = new Array(data.length);\n\t    for (var i = 0; i < data.length; i++) {\n\t      newData[i] = _deconstructPacket(data[i], buffers);\n\t    }\n\t    return newData;\n\t  } else if (typeof data === 'object' && !(data instanceof Date)) {\n\t    var newData = {};\n\t    for (var key in data) {\n\t      newData[key] = _deconstructPacket(data[key], buffers);\n\t    }\n\t    return newData;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Reconstructs a binary packet from its placeholder packet and buffers\n\t *\n\t * @param {Object} packet - event packet with placeholders\n\t * @param {Array} buffers - binary buffers to put in placeholder positions\n\t * @return {Object} reconstructed packet\n\t * @api public\n\t */\n\t\n\texports.reconstructPacket = function(packet, buffers) {\n\t  packet.data = _reconstructPacket(packet.data, buffers);\n\t  packet.attachments = undefined; // no longer useful\n\t  return packet;\n\t};\n\t\n\tfunction _reconstructPacket(data, buffers) {\n\t  if (!data) return data;\n\t\n\t  if (data && data._placeholder) {\n\t    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n\t  } else if (isArray(data)) {\n\t    for (var i = 0; i < data.length; i++) {\n\t      data[i] = _reconstructPacket(data[i], buffers);\n\t    }\n\t  } else if (typeof data === 'object') {\n\t    for (var key in data) {\n\t      data[key] = _reconstructPacket(data[key], buffers);\n\t    }\n\t  }\n\t\n\t  return data;\n\t}\n\t\n\t/**\n\t * Asynchronously removes Blobs or Files from data via\n\t * FileReader's readAsArrayBuffer method. Used before encoding\n\t * data as msgpack. Calls callback with the blobless data.\n\t *\n\t * @param {Object} data\n\t * @param {Function} callback\n\t * @api private\n\t */\n\t\n\texports.removeBlobs = function(data, callback) {\n\t  function _removeBlobs(obj, curKey, containingObject) {\n\t    if (!obj) return obj;\n\t\n\t    // convert any blob\n\t    if ((withNativeBlob && obj instanceof Blob) ||\n\t        (withNativeFile && obj instanceof File)) {\n\t      pendingBlobs++;\n\t\n\t      // async filereader\n\t      var fileReader = new FileReader();\n\t      fileReader.onload = function() { // this.result == arraybuffer\n\t        if (containingObject) {\n\t          containingObject[curKey] = this.result;\n\t        }\n\t        else {\n\t          bloblessData = this.result;\n\t        }\n\t\n\t        // if nothing pending its callback time\n\t        if(! --pendingBlobs) {\n\t          callback(bloblessData);\n\t        }\n\t      };\n\t\n\t      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n\t    } else if (isArray(obj)) { // handle array\n\t      for (var i = 0; i < obj.length; i++) {\n\t        _removeBlobs(obj[i], i, obj);\n\t      }\n\t    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n\t      for (var key in obj) {\n\t        _removeBlobs(obj[key], key, obj);\n\t      }\n\t    }\n\t  }\n\t\n\t  var pendingBlobs = 0;\n\t  var bloblessData = data;\n\t  _removeBlobs(bloblessData);\n\t  if (!pendingBlobs) {\n\t    callback(bloblessData);\n\t  }\n\t};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = Array.isArray || function (arr) {\n\t  return toString.call(arr) == '[object Array]';\n\t};\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = isBuf;\n\t\n\tvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\n\tvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\t\n\tvar isView = function (obj) {\n\t  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n\t};\n\t\n\t/**\n\t * Returns true if obj is a buffer or an arraybuffer.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction isBuf(obj) {\n\t  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n\t          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n\t}\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar eio = __webpack_require__(10);\n\tvar Socket = __webpack_require__(34);\n\tvar Emitter = __webpack_require__(5);\n\tvar parser = __webpack_require__(4);\n\tvar on = __webpack_require__(36);\n\tvar bind = __webpack_require__(37);\n\tvar debug = __webpack_require__(3)('socket.io-client:manager');\n\tvar indexOf = __webpack_require__(33);\n\tvar Backoff = __webpack_require__(38);\n\t\n\t/**\n\t * IE6+ hasOwnProperty\n\t */\n\t\n\tvar has = Object.prototype.hasOwnProperty;\n\t\n\t/**\n\t * Module exports\n\t */\n\t\n\tmodule.exports = Manager;\n\t\n\t/**\n\t * `Manager` constructor.\n\t *\n\t * @param {String} engine instance or engine uri/opts\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Manager(uri, opts) {\n\t  if (!(this instanceof Manager)) return new Manager(uri, opts);\n\t  if (uri && 'object' === (typeof uri === 'undefined' ? 'undefined' : _typeof(uri))) {\n\t    opts = uri;\n\t    uri = undefined;\n\t  }\n\t  opts = opts || {};\n\t\n\t  opts.path = opts.path || '/socket.io';\n\t  this.nsps = {};\n\t  this.subs = [];\n\t  this.opts = opts;\n\t  this.reconnection(opts.reconnection !== false);\n\t  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n\t  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n\t  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n\t  this.randomizationFactor(opts.randomizationFactor || 0.5);\n\t  this.backoff = new Backoff({\n\t    min: this.reconnectionDelay(),\n\t    max: this.reconnectionDelayMax(),\n\t    jitter: this.randomizationFactor()\n\t  });\n\t  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n\t  this.readyState = 'closed';\n\t  this.uri = uri;\n\t  this.connecting = [];\n\t  this.lastPing = null;\n\t  this.encoding = false;\n\t  this.packetBuffer = [];\n\t  var _parser = opts.parser || parser;\n\t  this.encoder = new _parser.Encoder();\n\t  this.decoder = new _parser.Decoder();\n\t  this.autoConnect = opts.autoConnect !== false;\n\t  if (this.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Propagate given event to sockets and emit on `this`\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.emitAll = function () {\n\t  this.emit.apply(this, arguments);\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Update `socket.id` of all sockets\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.updateSocketIds = function () {\n\t  for (var nsp in this.nsps) {\n\t    if (has.call(this.nsps, nsp)) {\n\t      this.nsps[nsp].id = this.generateId(nsp);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * generate `socket.id` for the given `nsp`\n\t *\n\t * @param {String} nsp\n\t * @return {String}\n\t * @api private\n\t */\n\t\n\tManager.prototype.generateId = function (nsp) {\n\t  return (nsp === '/' ? '' : nsp + '#') + this.engine.id;\n\t};\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Manager.prototype);\n\t\n\t/**\n\t * Sets the `reconnection` config.\n\t *\n\t * @param {Boolean} true/false if it should automatically reconnect\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnection = function (v) {\n\t  if (!arguments.length) return this._reconnection;\n\t  this._reconnection = !!v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the reconnection attempts config.\n\t *\n\t * @param {Number} max reconnection attempts before giving up\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionAttempts = function (v) {\n\t  if (!arguments.length) return this._reconnectionAttempts;\n\t  this._reconnectionAttempts = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelay = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelay;\n\t  this._reconnectionDelay = v;\n\t  this.backoff && this.backoff.setMin(v);\n\t  return this;\n\t};\n\t\n\tManager.prototype.randomizationFactor = function (v) {\n\t  if (!arguments.length) return this._randomizationFactor;\n\t  this._randomizationFactor = v;\n\t  this.backoff && this.backoff.setJitter(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the maximum delay between reconnections.\n\t *\n\t * @param {Number} delay\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.reconnectionDelayMax = function (v) {\n\t  if (!arguments.length) return this._reconnectionDelayMax;\n\t  this._reconnectionDelayMax = v;\n\t  this.backoff && this.backoff.setMax(v);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the connection timeout. `false` to disable\n\t *\n\t * @return {Manager} self or value\n\t * @api public\n\t */\n\t\n\tManager.prototype.timeout = function (v) {\n\t  if (!arguments.length) return this._timeout;\n\t  this._timeout = v;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Starts trying to reconnect if reconnection is enabled and we have not\n\t * started reconnecting yet\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.maybeReconnectOnOpen = function () {\n\t  // Only try to reconnect if it's the first time we're connecting\n\t  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n\t    // keeps reconnection from firing twice for the same reconnection loop\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Sets the current transport `socket`.\n\t *\n\t * @param {Function} optional, callback\n\t * @return {Manager} self\n\t * @api public\n\t */\n\t\n\tManager.prototype.open = Manager.prototype.connect = function (fn, opts) {\n\t\n\t  if (~this.readyState.indexOf('open')) return this;\n\t\n\t  this.engine = eio(this.uri, this.opts);\n\t  var socket = this.engine;\n\t  var self = this;\n\t  this.readyState = 'opening';\n\t  this.skipReconnect = false;\n\t\n\t  // emit `open`\n\t  var openSub = on(socket, 'open', function () {\n\t    self.onopen();\n\t    fn && fn();\n\t  });\n\t\n\t  // emit `connect_error`\n\t  var errorSub = on(socket, 'error', function (data) {\n\t\n\t    self.cleanup();\n\t    self.readyState = 'closed';\n\t    self.emitAll('connect_error', data);\n\t    if (fn) {\n\t      var err = new Error('Connection error');\n\t      err.data = data;\n\t      fn(err);\n\t    } else {\n\t      // Only do this if there is no fn to handle the error\n\t      self.maybeReconnectOnOpen();\n\t    }\n\t  });\n\t\n\t  // emit `connect_timeout`\n\t  if (false !== this._timeout) {\n\t    var timeout = this._timeout;\n\t\n\t    if (timeout === 0) {\n\t      openSub.destroy(); // prevents a race condition with the 'open' event\n\t    }\n\t\n\t    // set timer\n\t    var timer = setTimeout(function () {\n\t\n\t      openSub.destroy();\n\t      socket.close();\n\t      socket.emit('error', 'timeout');\n\t      self.emitAll('connect_timeout', timeout);\n\t    }, timeout);\n\t\n\t    this.subs.push({\n\t      destroy: function destroy() {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t\n\t  this.subs.push(openSub);\n\t  this.subs.push(errorSub);\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport open.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onopen = function () {\n\t\n\t  // clear old subs\n\t  this.cleanup();\n\t\n\t  // mark as open\n\t  this.readyState = 'open';\n\t  this.emit('open');\n\t\n\t  // add new subs\n\t  var socket = this.engine;\n\t  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n\t  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n\t  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n\t  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n\t  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n\t  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n\t};\n\t\n\t/**\n\t * Called upon a ping.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onping = function () {\n\t  this.lastPing = new Date();\n\t  this.emitAll('ping');\n\t};\n\t\n\t/**\n\t * Called upon a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onpong = function () {\n\t  this.emitAll('pong', new Date() - this.lastPing);\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondata = function (data) {\n\t  this.decoder.add(data);\n\t};\n\t\n\t/**\n\t * Called when parser fully decodes a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.ondecoded = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon socket error.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onerror = function (err) {\n\t\n\t  this.emitAll('error', err);\n\t};\n\t\n\t/**\n\t * Creates a new socket for the given `nsp`.\n\t *\n\t * @return {Socket}\n\t * @api public\n\t */\n\t\n\tManager.prototype.socket = function (nsp, opts) {\n\t  var socket = this.nsps[nsp];\n\t  if (!socket) {\n\t    socket = new Socket(this, nsp, opts);\n\t    this.nsps[nsp] = socket;\n\t    var self = this;\n\t    socket.on('connecting', onConnecting);\n\t    socket.on('connect', function () {\n\t      socket.id = self.generateId(nsp);\n\t    });\n\t\n\t    if (this.autoConnect) {\n\t      // manually call here since connecting event is fired before listening\n\t      onConnecting();\n\t    }\n\t  }\n\t\n\t  function onConnecting() {\n\t    if (!~indexOf(self.connecting, socket)) {\n\t      self.connecting.push(socket);\n\t    }\n\t  }\n\t\n\t  return socket;\n\t};\n\t\n\t/**\n\t * Called upon a socket close.\n\t *\n\t * @param {Socket} socket\n\t */\n\t\n\tManager.prototype.destroy = function (socket) {\n\t  var index = indexOf(this.connecting, socket);\n\t  if (~index) this.connecting.splice(index, 1);\n\t  if (this.connecting.length) return;\n\t\n\t  this.close();\n\t};\n\t\n\t/**\n\t * Writes a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tManager.prototype.packet = function (packet) {\n\t\n\t  var self = this;\n\t  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\t\n\t  if (!self.encoding) {\n\t    // encode, then write to engine with result\n\t    self.encoding = true;\n\t    this.encoder.encode(packet, function (encodedPackets) {\n\t      for (var i = 0; i < encodedPackets.length; i++) {\n\t        self.engine.write(encodedPackets[i], packet.options);\n\t      }\n\t      self.encoding = false;\n\t      self.processPacketQueue();\n\t    });\n\t  } else {\n\t    // add packet to the queue\n\t    self.packetBuffer.push(packet);\n\t  }\n\t};\n\t\n\t/**\n\t * If packet buffer is non-empty, begins encoding the\n\t * next packet in line.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.processPacketQueue = function () {\n\t  if (this.packetBuffer.length > 0 && !this.encoding) {\n\t    var pack = this.packetBuffer.shift();\n\t    this.packet(pack);\n\t  }\n\t};\n\t\n\t/**\n\t * Clean up transport subscriptions and packet buffer.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.cleanup = function () {\n\t\n\t  var subsLength = this.subs.length;\n\t  for (var i = 0; i < subsLength; i++) {\n\t    var sub = this.subs.shift();\n\t    sub.destroy();\n\t  }\n\t\n\t  this.packetBuffer = [];\n\t  this.encoding = false;\n\t  this.lastPing = null;\n\t\n\t  this.decoder.destroy();\n\t};\n\t\n\t/**\n\t * Close the current socket.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.close = Manager.prototype.disconnect = function () {\n\t\n\t  this.skipReconnect = true;\n\t  this.reconnecting = false;\n\t  if ('opening' === this.readyState) {\n\t    // `onclose` will not fire because\n\t    // an open event never happened\n\t    this.cleanup();\n\t  }\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  if (this.engine) this.engine.close();\n\t};\n\t\n\t/**\n\t * Called upon engine close.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onclose = function (reason) {\n\t\n\t  this.cleanup();\n\t  this.backoff.reset();\n\t  this.readyState = 'closed';\n\t  this.emit('close', reason);\n\t\n\t  if (this._reconnection && !this.skipReconnect) {\n\t    this.reconnect();\n\t  }\n\t};\n\t\n\t/**\n\t * Attempt a reconnection.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.reconnect = function () {\n\t  if (this.reconnecting || this.skipReconnect) return this;\n\t\n\t  var self = this;\n\t\n\t  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\t\n\t    this.backoff.reset();\n\t    this.emitAll('reconnect_failed');\n\t    this.reconnecting = false;\n\t  } else {\n\t    var delay = this.backoff.duration();\n\t\n\t    this.reconnecting = true;\n\t    var timer = setTimeout(function () {\n\t      if (self.skipReconnect) return;\n\t\n\t      self.emitAll('reconnect_attempt', self.backoff.attempts);\n\t      self.emitAll('reconnecting', self.backoff.attempts);\n\t\n\t      // check again for the case socket closed in above events\n\t      if (self.skipReconnect) return;\n\t\n\t      self.open(function (err) {\n\t        if (err) {\n\t\n\t          self.reconnecting = false;\n\t          self.reconnect();\n\t          self.emitAll('reconnect_error', err.data);\n\t        } else {\n\t\n\t          self.onreconnect();\n\t        }\n\t      });\n\t    }, delay);\n\t\n\t    this.subs.push({\n\t      destroy: function destroy() {\n\t        clearTimeout(timer);\n\t      }\n\t    });\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful reconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tManager.prototype.onreconnect = function () {\n\t  var attempt = this.backoff.attempts;\n\t  this.reconnecting = false;\n\t  this.backoff.reset();\n\t  this.updateSocketIds();\n\t  this.emitAll('reconnect', attempt);\n\t};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\n\tmodule.exports = __webpack_require__(11);\n\t\n\t/**\n\t * Exports parser\n\t *\n\t * @api public\n\t *\n\t */\n\tmodule.exports.parser = __webpack_require__(19);\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar transports = __webpack_require__(12);\n\tvar Emitter = __webpack_require__(5);\n\tvar debug = __webpack_require__(3)('engine.io-client:socket');\n\tvar index = __webpack_require__(33);\n\tvar parser = __webpack_require__(19);\n\tvar parseuri = __webpack_require__(2);\n\tvar parseqs = __webpack_require__(27);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Socket;\n\t\n\t/**\n\t * Socket constructor.\n\t *\n\t * @param {String|Object} uri or options\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Socket (uri, opts) {\n\t  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\t\n\t  opts = opts || {};\n\t\n\t  if (uri && 'object' === typeof uri) {\n\t    opts = uri;\n\t    uri = null;\n\t  }\n\t\n\t  if (uri) {\n\t    uri = parseuri(uri);\n\t    opts.hostname = uri.host;\n\t    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n\t    opts.port = uri.port;\n\t    if (uri.query) opts.query = uri.query;\n\t  } else if (opts.host) {\n\t    opts.hostname = parseuri(opts.host).host;\n\t  }\n\t\n\t  this.secure = null != opts.secure ? opts.secure\n\t    : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\t\n\t  if (opts.hostname && !opts.port) {\n\t    // if no port is specified manually, use the protocol default\n\t    opts.port = this.secure ? '443' : '80';\n\t  }\n\t\n\t  this.agent = opts.agent || false;\n\t  this.hostname = opts.hostname ||\n\t    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n\t  this.port = opts.port || (typeof location !== 'undefined' && location.port\n\t      ? location.port\n\t      : (this.secure ? 443 : 80));\n\t  this.query = opts.query || {};\n\t  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n\t  this.upgrade = false !== opts.upgrade;\n\t  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n\t  this.forceJSONP = !!opts.forceJSONP;\n\t  this.jsonp = false !== opts.jsonp;\n\t  this.forceBase64 = !!opts.forceBase64;\n\t  this.enablesXDR = !!opts.enablesXDR;\n\t  this.withCredentials = false !== opts.withCredentials;\n\t  this.timestampParam = opts.timestampParam || 't';\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.transports = opts.transports || ['polling', 'websocket'];\n\t  this.transportOptions = opts.transportOptions || {};\n\t  this.readyState = '';\n\t  this.writeBuffer = [];\n\t  this.prevBufferLen = 0;\n\t  this.policyPort = opts.policyPort || 843;\n\t  this.rememberUpgrade = opts.rememberUpgrade || false;\n\t  this.binaryType = null;\n\t  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n\t  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\t\n\t  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n\t  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n\t    this.perMessageDeflate.threshold = 1024;\n\t  }\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx || null;\n\t  this.key = opts.key || null;\n\t  this.passphrase = opts.passphrase || null;\n\t  this.cert = opts.cert || null;\n\t  this.ca = opts.ca || null;\n\t  this.ciphers = opts.ciphers || null;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n\t  this.forceNode = !!opts.forceNode;\n\t\n\t  // detect ReactNative environment\n\t  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\t\n\t  // other options for Node.js or ReactNative client\n\t  if (typeof self === 'undefined' || this.isReactNative) {\n\t    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n\t      this.extraHeaders = opts.extraHeaders;\n\t    }\n\t\n\t    if (opts.localAddress) {\n\t      this.localAddress = opts.localAddress;\n\t    }\n\t  }\n\t\n\t  // set on handshake\n\t  this.id = null;\n\t  this.upgrades = null;\n\t  this.pingInterval = null;\n\t  this.pingTimeout = null;\n\t\n\t  // set on heartbeat\n\t  this.pingIntervalTimer = null;\n\t  this.pingTimeoutTimer = null;\n\t\n\t  this.open();\n\t}\n\t\n\tSocket.priorWebsocketSuccess = false;\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Protocol version.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.protocol = parser.protocol; // this is an int\n\t\n\t/**\n\t * Expose deps for legacy compatibility\n\t * and standalone browser access.\n\t */\n\t\n\tSocket.Socket = Socket;\n\tSocket.Transport = __webpack_require__(18);\n\tSocket.transports = __webpack_require__(12);\n\tSocket.parser = __webpack_require__(19);\n\t\n\t/**\n\t * Creates transport of the given type.\n\t *\n\t * @param {String} transport name\n\t * @return {Transport}\n\t * @api private\n\t */\n\t\n\tSocket.prototype.createTransport = function (name) {\n\t\n\t  var query = clone(this.query);\n\t\n\t  // append engine.io protocol identifier\n\t  query.EIO = parser.protocol;\n\t\n\t  // transport name\n\t  query.transport = name;\n\t\n\t  // per-transport options\n\t  var options = this.transportOptions[name] || {};\n\t\n\t  // session id if we already have one\n\t  if (this.id) query.sid = this.id;\n\t\n\t  var transport = new transports[name]({\n\t    query: query,\n\t    socket: this,\n\t    agent: options.agent || this.agent,\n\t    hostname: options.hostname || this.hostname,\n\t    port: options.port || this.port,\n\t    secure: options.secure || this.secure,\n\t    path: options.path || this.path,\n\t    forceJSONP: options.forceJSONP || this.forceJSONP,\n\t    jsonp: options.jsonp || this.jsonp,\n\t    forceBase64: options.forceBase64 || this.forceBase64,\n\t    enablesXDR: options.enablesXDR || this.enablesXDR,\n\t    withCredentials: options.withCredentials || this.withCredentials,\n\t    timestampRequests: options.timestampRequests || this.timestampRequests,\n\t    timestampParam: options.timestampParam || this.timestampParam,\n\t    policyPort: options.policyPort || this.policyPort,\n\t    pfx: options.pfx || this.pfx,\n\t    key: options.key || this.key,\n\t    passphrase: options.passphrase || this.passphrase,\n\t    cert: options.cert || this.cert,\n\t    ca: options.ca || this.ca,\n\t    ciphers: options.ciphers || this.ciphers,\n\t    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n\t    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n\t    extraHeaders: options.extraHeaders || this.extraHeaders,\n\t    forceNode: options.forceNode || this.forceNode,\n\t    localAddress: options.localAddress || this.localAddress,\n\t    requestTimeout: options.requestTimeout || this.requestTimeout,\n\t    protocols: options.protocols || void (0),\n\t    isReactNative: this.isReactNative\n\t  });\n\t\n\t  return transport;\n\t};\n\t\n\tfunction clone (obj) {\n\t  var o = {};\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      o[i] = obj[i];\n\t    }\n\t  }\n\t  return o;\n\t}\n\t\n\t/**\n\t * Initializes transport to use and starts probe.\n\t *\n\t * @api private\n\t */\n\tSocket.prototype.open = function () {\n\t  var transport;\n\t  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n\t    transport = 'websocket';\n\t  } else if (0 === this.transports.length) {\n\t    // Emit error on next tick so it can be listened to\n\t    var self = this;\n\t    setTimeout(function () {\n\t      self.emit('error', 'No transports available');\n\t    }, 0);\n\t    return;\n\t  } else {\n\t    transport = this.transports[0];\n\t  }\n\t  this.readyState = 'opening';\n\t\n\t  // Retry with the next transport if the transport is disabled (jsonp: false)\n\t  try {\n\t    transport = this.createTransport(transport);\n\t  } catch (e) {\n\t    this.transports.shift();\n\t    this.open();\n\t    return;\n\t  }\n\t\n\t  transport.open();\n\t  this.setTransport(transport);\n\t};\n\t\n\t/**\n\t * Sets the current transport. Disables the existing one (if any).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setTransport = function (transport) {\n\t\n\t  var self = this;\n\t\n\t  if (this.transport) {\n\t\n\t    this.transport.removeAllListeners();\n\t  }\n\t\n\t  // set up transport\n\t  this.transport = transport;\n\t\n\t  // set up transport listeners\n\t  transport\n\t  .on('drain', function () {\n\t    self.onDrain();\n\t  })\n\t  .on('packet', function (packet) {\n\t    self.onPacket(packet);\n\t  })\n\t  .on('error', function (e) {\n\t    self.onError(e);\n\t  })\n\t  .on('close', function () {\n\t    self.onClose('transport close');\n\t  });\n\t};\n\t\n\t/**\n\t * Probes a transport.\n\t *\n\t * @param {String} transport name\n\t * @api private\n\t */\n\t\n\tSocket.prototype.probe = function (name) {\n\t\n\t  var transport = this.createTransport(name, { probe: 1 });\n\t  var failed = false;\n\t  var self = this;\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t\n\t  function onTransportOpen () {\n\t    if (self.onlyBinaryUpgrades) {\n\t      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n\t      failed = failed || upgradeLosesBinary;\n\t    }\n\t    if (failed) return;\n\t\n\t\n\t    transport.send([{ type: 'ping', data: 'probe' }]);\n\t    transport.once('packet', function (msg) {\n\t      if (failed) return;\n\t      if ('pong' === msg.type && 'probe' === msg.data) {\n\t\n\t        self.upgrading = true;\n\t        self.emit('upgrading', transport);\n\t        if (!transport) return;\n\t        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\t\n\t\n\t        self.transport.pause(function () {\n\t          if (failed) return;\n\t          if ('closed' === self.readyState) return;\n\t\n\t\n\t          cleanup();\n\t\n\t          self.setTransport(transport);\n\t          transport.send([{ type: 'upgrade' }]);\n\t          self.emit('upgrade', transport);\n\t          transport = null;\n\t          self.upgrading = false;\n\t          self.flush();\n\t        });\n\t      } else {\n\t\n\t        var err = new Error('probe error');\n\t        err.transport = transport.name;\n\t        self.emit('upgradeError', err);\n\t      }\n\t    });\n\t  }\n\t\n\t  function freezeTransport () {\n\t    if (failed) return;\n\t\n\t    // Any callback called by transport should be ignored since now\n\t    failed = true;\n\t\n\t    cleanup();\n\t\n\t    transport.close();\n\t    transport = null;\n\t  }\n\t\n\t  // Handle any error that happens while probing\n\t  function onerror (err) {\n\t    var error = new Error('probe error: ' + err);\n\t    error.transport = transport.name;\n\t\n\t    freezeTransport();\n\t\n\t\n\t\n\t    self.emit('upgradeError', error);\n\t  }\n\t\n\t  function onTransportClose () {\n\t    onerror('transport closed');\n\t  }\n\t\n\t  // When the socket is closed while we're probing\n\t  function onclose () {\n\t    onerror('socket closed');\n\t  }\n\t\n\t  // When the socket is upgraded while we're probing\n\t  function onupgrade (to) {\n\t    if (transport && to.name !== transport.name) {\n\t\n\t      freezeTransport();\n\t    }\n\t  }\n\t\n\t  // Remove all listeners on the transport and on self\n\t  function cleanup () {\n\t    transport.removeListener('open', onTransportOpen);\n\t    transport.removeListener('error', onerror);\n\t    transport.removeListener('close', onTransportClose);\n\t    self.removeListener('close', onclose);\n\t    self.removeListener('upgrading', onupgrade);\n\t  }\n\t\n\t  transport.once('open', onTransportOpen);\n\t  transport.once('error', onerror);\n\t  transport.once('close', onTransportClose);\n\t\n\t  this.once('close', onclose);\n\t  this.once('upgrading', onupgrade);\n\t\n\t  transport.open();\n\t};\n\t\n\t/**\n\t * Called when connection is deemed open.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.onOpen = function () {\n\t\n\t  this.readyState = 'open';\n\t  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n\t  this.emit('open');\n\t  this.flush();\n\t\n\t  // we check for `readyState` in case an `open`\n\t  // listener already closed the socket\n\t  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n\t\n\t    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n\t      this.probe(this.upgrades[i]);\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Handles a packet.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onPacket = function (packet) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState ||\n\t      'closing' === this.readyState) {\n\t\n\t\n\t    this.emit('packet', packet);\n\t\n\t    // Socket is live - any packet counts\n\t    this.emit('heartbeat');\n\t\n\t    switch (packet.type) {\n\t      case 'open':\n\t        this.onHandshake(JSON.parse(packet.data));\n\t        break;\n\t\n\t      case 'pong':\n\t        this.setPing();\n\t        this.emit('pong');\n\t        break;\n\t\n\t      case 'error':\n\t        var err = new Error('server error');\n\t        err.code = packet.data;\n\t        this.onError(err);\n\t        break;\n\t\n\t      case 'message':\n\t        this.emit('data', packet.data);\n\t        this.emit('message', packet.data);\n\t        break;\n\t    }\n\t  } else {\n\t\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon handshake completion.\n\t *\n\t * @param {Object} handshake obj\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHandshake = function (data) {\n\t  this.emit('handshake', data);\n\t  this.id = data.sid;\n\t  this.transport.query.sid = data.sid;\n\t  this.upgrades = this.filterUpgrades(data.upgrades);\n\t  this.pingInterval = data.pingInterval;\n\t  this.pingTimeout = data.pingTimeout;\n\t  this.onOpen();\n\t  // In case open handler closes socket\n\t  if ('closed' === this.readyState) return;\n\t  this.setPing();\n\t\n\t  // Prolong liveness of socket on heartbeat\n\t  this.removeListener('heartbeat', this.onHeartbeat);\n\t  this.on('heartbeat', this.onHeartbeat);\n\t};\n\t\n\t/**\n\t * Resets ping timeout.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onHeartbeat = function (timeout) {\n\t  clearTimeout(this.pingTimeoutTimer);\n\t  var self = this;\n\t  self.pingTimeoutTimer = setTimeout(function () {\n\t    if ('closed' === self.readyState) return;\n\t    self.onClose('ping timeout');\n\t  }, timeout || (self.pingInterval + self.pingTimeout));\n\t};\n\t\n\t/**\n\t * Pings server every `this.pingInterval` and expects response\n\t * within `this.pingTimeout` or closes connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.setPing = function () {\n\t  var self = this;\n\t  clearTimeout(self.pingIntervalTimer);\n\t  self.pingIntervalTimer = setTimeout(function () {\n\t\n\t    self.ping();\n\t    self.onHeartbeat(self.pingTimeout);\n\t  }, self.pingInterval);\n\t};\n\t\n\t/**\n\t* Sends a ping packet.\n\t*\n\t* @api private\n\t*/\n\t\n\tSocket.prototype.ping = function () {\n\t  var self = this;\n\t  this.sendPacket('ping', function () {\n\t    self.emit('ping');\n\t  });\n\t};\n\t\n\t/**\n\t * Called on `drain` event\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onDrain = function () {\n\t  this.writeBuffer.splice(0, this.prevBufferLen);\n\t\n\t  // setting prevBufferLen = 0 is very important\n\t  // for example, when upgrading, upgrade packet is sent over,\n\t  // and a nonzero prevBufferLen could cause problems on `drain`\n\t  this.prevBufferLen = 0;\n\t\n\t  if (0 === this.writeBuffer.length) {\n\t    this.emit('drain');\n\t  } else {\n\t    this.flush();\n\t  }\n\t};\n\t\n\t/**\n\t * Flush write buffers.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.flush = function () {\n\t  if ('closed' !== this.readyState && this.transport.writable &&\n\t    !this.upgrading && this.writeBuffer.length) {\n\t\n\t    this.transport.send(this.writeBuffer);\n\t    // keep track of current length of writeBuffer\n\t    // splice writeBuffer and callbackBuffer on `drain`\n\t    this.prevBufferLen = this.writeBuffer.length;\n\t    this.emit('flush');\n\t  }\n\t};\n\t\n\t/**\n\t * Sends a message.\n\t *\n\t * @param {String} message.\n\t * @param {Function} callback function.\n\t * @param {Object} options.\n\t * @return {Socket} for chaining.\n\t * @api public\n\t */\n\t\n\tSocket.prototype.write =\n\tSocket.prototype.send = function (msg, options, fn) {\n\t  this.sendPacket('message', msg, options, fn);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {String} packet type.\n\t * @param {String} data.\n\t * @param {Object} options.\n\t * @param {Function} callback function.\n\t * @api private\n\t */\n\t\n\tSocket.prototype.sendPacket = function (type, data, options, fn) {\n\t  if ('function' === typeof data) {\n\t    fn = data;\n\t    data = undefined;\n\t  }\n\t\n\t  if ('function' === typeof options) {\n\t    fn = options;\n\t    options = null;\n\t  }\n\t\n\t  if ('closing' === this.readyState || 'closed' === this.readyState) {\n\t    return;\n\t  }\n\t\n\t  options = options || {};\n\t  options.compress = false !== options.compress;\n\t\n\t  var packet = {\n\t    type: type,\n\t    data: data,\n\t    options: options\n\t  };\n\t  this.emit('packetCreate', packet);\n\t  this.writeBuffer.push(packet);\n\t  if (fn) this.once('flush', fn);\n\t  this.flush();\n\t};\n\t\n\t/**\n\t * Closes the connection.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.readyState = 'closing';\n\t\n\t    var self = this;\n\t\n\t    if (this.writeBuffer.length) {\n\t      this.once('drain', function () {\n\t        if (this.upgrading) {\n\t          waitForUpgrade();\n\t        } else {\n\t          close();\n\t        }\n\t      });\n\t    } else if (this.upgrading) {\n\t      waitForUpgrade();\n\t    } else {\n\t      close();\n\t    }\n\t  }\n\t\n\t  function close () {\n\t    self.onClose('forced close');\n\t\n\t    self.transport.close();\n\t  }\n\t\n\t  function cleanupAndClose () {\n\t    self.removeListener('upgrade', cleanupAndClose);\n\t    self.removeListener('upgradeError', cleanupAndClose);\n\t    close();\n\t  }\n\t\n\t  function waitForUpgrade () {\n\t    // wait for upgrade to finish since we can't send packets while pausing a transport\n\t    self.once('upgrade', cleanupAndClose);\n\t    self.once('upgradeError', cleanupAndClose);\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Called upon transport error\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onError = function (err) {\n\t\n\t  Socket.priorWebsocketSuccess = false;\n\t  this.emit('error', err);\n\t  this.onClose('transport error', err);\n\t};\n\t\n\t/**\n\t * Called upon transport close.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onClose = function (reason, desc) {\n\t  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n\t\n\t    var self = this;\n\t\n\t    // clear timers\n\t    clearTimeout(this.pingIntervalTimer);\n\t    clearTimeout(this.pingTimeoutTimer);\n\t\n\t    // stop event from firing again for transport\n\t    this.transport.removeAllListeners('close');\n\t\n\t    // ensure transport won't stay open\n\t    this.transport.close();\n\t\n\t    // ignore further transport communication\n\t    this.transport.removeAllListeners();\n\t\n\t    // set ready state\n\t    this.readyState = 'closed';\n\t\n\t    // clear session id\n\t    this.id = null;\n\t\n\t    // emit close event\n\t    this.emit('close', reason, desc);\n\t\n\t    // clean buffers after, so users can still\n\t    // grab the buffers on `close` event\n\t    self.writeBuffer = [];\n\t    self.prevBufferLen = 0;\n\t  }\n\t};\n\t\n\t/**\n\t * Filters upgrades, returning only those matching client transports.\n\t *\n\t * @param {Array} server upgrades\n\t * @api private\n\t *\n\t */\n\t\n\tSocket.prototype.filterUpgrades = function (upgrades) {\n\t  var filteredUpgrades = [];\n\t  for (var i = 0, j = upgrades.length; i < j; i++) {\n\t    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n\t  }\n\t  return filteredUpgrades;\n\t};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(13);\n\tvar XHR = __webpack_require__(16);\n\tvar JSONP = __webpack_require__(30);\n\tvar websocket = __webpack_require__(31);\n\t\n\t/**\n\t * Export transports.\n\t */\n\t\n\texports.polling = polling;\n\texports.websocket = websocket;\n\t\n\t/**\n\t * Polling transport polymorphic constructor.\n\t * Decides on xhr vs jsonp based on feature detection.\n\t *\n\t * @api private\n\t */\n\t\n\tfunction polling (opts) {\n\t  var xhr;\n\t  var xd = false;\n\t  var xs = false;\n\t  var jsonp = false !== opts.jsonp;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    xd = opts.hostname !== location.hostname || port !== opts.port;\n\t    xs = opts.secure !== isSSL;\n\t  }\n\t\n\t  opts.xdomain = xd;\n\t  opts.xscheme = xs;\n\t  xhr = new XMLHttpRequest(opts);\n\t\n\t  if ('open' in xhr && !opts.forceJSONP) {\n\t    return new XHR(opts);\n\t  } else {\n\t    if (!jsonp) throw new Error('JSONP disabled');\n\t    return new JSONP(opts);\n\t  }\n\t}\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// browser shim for xmlhttprequest module\n\t\n\tvar hasCORS = __webpack_require__(14);\n\tvar globalThis = __webpack_require__(15);\n\t\n\tmodule.exports = function (opts) {\n\t  var xdomain = opts.xdomain;\n\t\n\t  // scheme must be same when usign XDomainRequest\n\t  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t  var xscheme = opts.xscheme;\n\t\n\t  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n\t  // https://github.com/Automattic/engine.io-client/pull/217\n\t  var enablesXDR = opts.enablesXDR;\n\t\n\t  // XMLHttpRequest can be disabled on IE\n\t  try {\n\t    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n\t      return new XMLHttpRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  // Use XDomainRequest for IE8 if enablesXDR is true\n\t  // because loading bar keeps flashing when using jsonp-polling\n\t  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n\t  try {\n\t    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n\t      return new XDomainRequest();\n\t    }\n\t  } catch (e) { }\n\t\n\t  if (!xdomain) {\n\t    try {\n\t      return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n\t    } catch (e) { }\n\t  }\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Module exports.\n\t *\n\t * Logic borrowed from Modernizr:\n\t *\n\t *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n\t */\n\t\n\ttry {\n\t  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n\t    'withCredentials' in new XMLHttpRequest();\n\t} catch (err) {\n\t  // if XMLHttp support is disabled in IE then it will throw\n\t  // when trying to create\n\t  module.exports = false;\n\t}\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = (function () {\n\t  if (typeof self !== 'undefined') {\n\t    return self;\n\t  } else if (typeof window !== 'undefined') {\n\t    return window;\n\t  } else {\n\t    return Function('return this')(); // eslint-disable-line no-new-func\n\t  }\n\t})();\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global attachEvent */\n\t\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar XMLHttpRequest = __webpack_require__(13);\n\tvar Polling = __webpack_require__(17);\n\tvar Emitter = __webpack_require__(5);\n\tvar inherit = __webpack_require__(28);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling-xhr');\n\tvar globalThis = __webpack_require__(15);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = XHR;\n\tmodule.exports.Request = Request;\n\t\n\t/**\n\t * Empty function\n\t */\n\t\n\tfunction empty () {}\n\t\n\t/**\n\t * XHR Polling constructor.\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction XHR (opts) {\n\t  Polling.call(this, opts);\n\t  this.requestTimeout = opts.requestTimeout;\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  if (typeof location !== 'undefined') {\n\t    var isSSL = 'https:' === location.protocol;\n\t    var port = location.port;\n\t\n\t    // some user agents have empty `location.port`\n\t    if (!port) {\n\t      port = isSSL ? 443 : 80;\n\t    }\n\t\n\t    this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n\t      port !== opts.port;\n\t    this.xs = opts.secure !== isSSL;\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(XHR, Polling);\n\t\n\t/**\n\t * XHR supports binary\n\t */\n\t\n\tXHR.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Creates a request.\n\t *\n\t * @param {String} method\n\t * @api private\n\t */\n\t\n\tXHR.prototype.request = function (opts) {\n\t  opts = opts || {};\n\t  opts.uri = this.uri();\n\t  opts.xd = this.xd;\n\t  opts.xs = this.xs;\n\t  opts.agent = this.agent || false;\n\t  opts.supportsBinary = this.supportsBinary;\n\t  opts.enablesXDR = this.enablesXDR;\n\t  opts.withCredentials = this.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  opts.requestTimeout = this.requestTimeout;\n\t\n\t  // other options for Node.js client\n\t  opts.extraHeaders = this.extraHeaders;\n\t\n\t  return new Request(opts);\n\t};\n\t\n\t/**\n\t * Sends data.\n\t *\n\t * @param {String} data to send.\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doWrite = function (data, fn) {\n\t  var isBinary = typeof data !== 'string' && data !== undefined;\n\t  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n\t  var self = this;\n\t  req.on('success', fn);\n\t  req.on('error', function (err) {\n\t    self.onError('xhr post error', err);\n\t  });\n\t  this.sendXhr = req;\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tXHR.prototype.doPoll = function () {\n\t\n\t  var req = this.request();\n\t  var self = this;\n\t  req.on('data', function (data) {\n\t    self.onData(data);\n\t  });\n\t  req.on('error', function (err) {\n\t    self.onError('xhr poll error', err);\n\t  });\n\t  this.pollXhr = req;\n\t};\n\t\n\t/**\n\t * Request constructor\n\t *\n\t * @param {Object} options\n\t * @api public\n\t */\n\t\n\tfunction Request (opts) {\n\t  this.method = opts.method || 'GET';\n\t  this.uri = opts.uri;\n\t  this.xd = !!opts.xd;\n\t  this.xs = !!opts.xs;\n\t  this.async = false !== opts.async;\n\t  this.data = undefined !== opts.data ? opts.data : null;\n\t  this.agent = opts.agent;\n\t  this.isBinary = opts.isBinary;\n\t  this.supportsBinary = opts.supportsBinary;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t  this.requestTimeout = opts.requestTimeout;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t\n\t  this.create();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Request.prototype);\n\t\n\t/**\n\t * Creates the XHR object and sends the request.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.create = function () {\n\t  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\t\n\t  // SSL options for Node.js client\n\t  opts.pfx = this.pfx;\n\t  opts.key = this.key;\n\t  opts.passphrase = this.passphrase;\n\t  opts.cert = this.cert;\n\t  opts.ca = this.ca;\n\t  opts.ciphers = this.ciphers;\n\t  opts.rejectUnauthorized = this.rejectUnauthorized;\n\t\n\t  var xhr = this.xhr = new XMLHttpRequest(opts);\n\t  var self = this;\n\t\n\t  try {\n\t\n\t    xhr.open(this.method, this.uri, this.async);\n\t    try {\n\t      if (this.extraHeaders) {\n\t        xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n\t        for (var i in this.extraHeaders) {\n\t          if (this.extraHeaders.hasOwnProperty(i)) {\n\t            xhr.setRequestHeader(i, this.extraHeaders[i]);\n\t          }\n\t        }\n\t      }\n\t    } catch (e) {}\n\t\n\t    if ('POST' === this.method) {\n\t      try {\n\t        if (this.isBinary) {\n\t          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n\t        } else {\n\t          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n\t        }\n\t      } catch (e) {}\n\t    }\n\t\n\t    try {\n\t      xhr.setRequestHeader('Accept', '*/*');\n\t    } catch (e) {}\n\t\n\t    // ie6 check\n\t    if ('withCredentials' in xhr) {\n\t      xhr.withCredentials = this.withCredentials;\n\t    }\n\t\n\t    if (this.requestTimeout) {\n\t      xhr.timeout = this.requestTimeout;\n\t    }\n\t\n\t    if (this.hasXDR()) {\n\t      xhr.onload = function () {\n\t        self.onLoad();\n\t      };\n\t      xhr.onerror = function () {\n\t        self.onError(xhr.responseText);\n\t      };\n\t    } else {\n\t      xhr.onreadystatechange = function () {\n\t        if (xhr.readyState === 2) {\n\t          try {\n\t            var contentType = xhr.getResponseHeader('Content-Type');\n\t            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t              xhr.responseType = 'arraybuffer';\n\t            }\n\t          } catch (e) {}\n\t        }\n\t        if (4 !== xhr.readyState) return;\n\t        if (200 === xhr.status || 1223 === xhr.status) {\n\t          self.onLoad();\n\t        } else {\n\t          // make sure the `error` event handler that's user-set\n\t          // does not throw in the same tick and gets caught here\n\t          setTimeout(function () {\n\t            self.onError(typeof xhr.status === 'number' ? xhr.status : 0);\n\t          }, 0);\n\t        }\n\t      };\n\t    }\n\t\n\t\n\t    xhr.send(this.data);\n\t  } catch (e) {\n\t    // Need to defer since .create() is called directly fhrom the constructor\n\t    // and thus the 'error' event can only be only bound *after* this exception\n\t    // occurs.  Therefore, also, we cannot throw here at all.\n\t    setTimeout(function () {\n\t      self.onError(e);\n\t    }, 0);\n\t    return;\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    this.index = Request.requestsCount++;\n\t    Request.requests[this.index] = this;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon successful response.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onSuccess = function () {\n\t  this.emit('success');\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Called if we have data.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onData = function (data) {\n\t  this.emit('data', data);\n\t  this.onSuccess();\n\t};\n\t\n\t/**\n\t * Called upon error.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onError = function (err) {\n\t  this.emit('error', err);\n\t  this.cleanup(true);\n\t};\n\t\n\t/**\n\t * Cleans up house.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.cleanup = function (fromError) {\n\t  if ('undefined' === typeof this.xhr || null === this.xhr) {\n\t    return;\n\t  }\n\t  // xmlhttprequest\n\t  if (this.hasXDR()) {\n\t    this.xhr.onload = this.xhr.onerror = empty;\n\t  } else {\n\t    this.xhr.onreadystatechange = empty;\n\t  }\n\t\n\t  if (fromError) {\n\t    try {\n\t      this.xhr.abort();\n\t    } catch (e) {}\n\t  }\n\t\n\t  if (typeof document !== 'undefined') {\n\t    delete Request.requests[this.index];\n\t  }\n\t\n\t  this.xhr = null;\n\t};\n\t\n\t/**\n\t * Called upon load.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.onLoad = function () {\n\t  var data;\n\t  try {\n\t    var contentType;\n\t    try {\n\t      contentType = this.xhr.getResponseHeader('Content-Type');\n\t    } catch (e) {}\n\t    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n\t      data = this.xhr.response || this.xhr.responseText;\n\t    } else {\n\t      data = this.xhr.responseText;\n\t    }\n\t  } catch (e) {\n\t    this.onError(e);\n\t  }\n\t  if (null != data) {\n\t    this.onData(data);\n\t  }\n\t};\n\t\n\t/**\n\t * Check if it has XDomainRequest.\n\t *\n\t * @api private\n\t */\n\t\n\tRequest.prototype.hasXDR = function () {\n\t  return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;\n\t};\n\t\n\t/**\n\t * Aborts the request.\n\t *\n\t * @api public\n\t */\n\t\n\tRequest.prototype.abort = function () {\n\t  this.cleanup();\n\t};\n\t\n\t/**\n\t * Aborts pending requests when unloading the window. This is needed to prevent\n\t * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n\t * emitted.\n\t */\n\t\n\tRequest.requestsCount = 0;\n\tRequest.requests = {};\n\t\n\tif (typeof document !== 'undefined') {\n\t  if (typeof attachEvent === 'function') {\n\t    attachEvent('onunload', unloadHandler);\n\t  } else if (typeof addEventListener === 'function') {\n\t    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n\t    addEventListener(terminationEvent, unloadHandler, false);\n\t  }\n\t}\n\t\n\tfunction unloadHandler () {\n\t  for (var i in Request.requests) {\n\t    if (Request.requests.hasOwnProperty(i)) {\n\t      Request.requests[i].abort();\n\t    }\n\t  }\n\t}\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(18);\n\tvar parseqs = __webpack_require__(27);\n\tvar parser = __webpack_require__(19);\n\tvar inherit = __webpack_require__(28);\n\tvar yeast = __webpack_require__(29);\n\tvar debug = __webpack_require__(3)('engine.io-client:polling');\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Polling;\n\t\n\t/**\n\t * Is XHR2 supported?\n\t */\n\t\n\tvar hasXHR2 = (function () {\n\t  var XMLHttpRequest = __webpack_require__(13);\n\t  var xhr = new XMLHttpRequest({ xdomain: false });\n\t  return null != xhr.responseType;\n\t})();\n\t\n\t/**\n\t * Polling interface.\n\t *\n\t * @param {Object} opts\n\t * @api private\n\t */\n\t\n\tfunction Polling (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (!hasXHR2 || forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(Polling, Transport);\n\t\n\t/**\n\t * Transport name.\n\t */\n\t\n\tPolling.prototype.name = 'polling';\n\t\n\t/**\n\t * Opens the socket (triggers polling). We write a PING message to determine\n\t * when the transport is open.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doOpen = function () {\n\t  this.poll();\n\t};\n\t\n\t/**\n\t * Pauses polling.\n\t *\n\t * @param {Function} callback upon buffers are flushed and transport is paused\n\t * @api private\n\t */\n\t\n\tPolling.prototype.pause = function (onPause) {\n\t  var self = this;\n\t\n\t  this.readyState = 'pausing';\n\t\n\t  function pause () {\n\t\n\t    self.readyState = 'paused';\n\t    onPause();\n\t  }\n\t\n\t  if (this.polling || !this.writable) {\n\t    var total = 0;\n\t\n\t    if (this.polling) {\n\t\n\t      total++;\n\t      this.once('pollComplete', function () {\n\t\n\t        --total || pause();\n\t      });\n\t    }\n\t\n\t    if (!this.writable) {\n\t\n\t      total++;\n\t      this.once('drain', function () {\n\t\n\t        --total || pause();\n\t      });\n\t    }\n\t  } else {\n\t    pause();\n\t  }\n\t};\n\t\n\t/**\n\t * Starts polling cycle.\n\t *\n\t * @api public\n\t */\n\t\n\tPolling.prototype.poll = function () {\n\t\n\t  this.polling = true;\n\t  this.doPoll();\n\t  this.emit('poll');\n\t};\n\t\n\t/**\n\t * Overloads onData to detect payloads.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.onData = function (data) {\n\t  var self = this;\n\t\n\t  var callback = function (packet, index, total) {\n\t    // if its the first message we consider the transport open\n\t    if ('opening' === self.readyState && packet.type === 'open') {\n\t      self.onOpen();\n\t    }\n\t\n\t    // if its a close packet, we close the ongoing requests\n\t    if ('close' === packet.type) {\n\t      self.onClose();\n\t      return false;\n\t    }\n\t\n\t    // otherwise bypass onData and handle the message\n\t    self.onPacket(packet);\n\t  };\n\t\n\t  // decode payload\n\t  parser.decodePayload(data, this.socket.binaryType, callback);\n\t\n\t  // if an event did not trigger closing\n\t  if ('closed' !== this.readyState) {\n\t    // if we got data we're not polling\n\t    this.polling = false;\n\t    this.emit('pollComplete');\n\t\n\t    if ('open' === this.readyState) {\n\t      this.poll();\n\t    } else {\n\t\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * For polling, send a close packet.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.doClose = function () {\n\t  var self = this;\n\t\n\t  function close () {\n\t\n\t    self.write([{ type: 'close' }]);\n\t  }\n\t\n\t  if ('open' === this.readyState) {\n\t\n\t    close();\n\t  } else {\n\t    // in case we're trying to close while\n\t    // handshaking is in progress (GH-164)\n\t\n\t    this.once('open', close);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes a packets payload.\n\t *\n\t * @param {Array} data packets\n\t * @param {Function} drain callback\n\t * @api private\n\t */\n\t\n\tPolling.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t  var callbackfn = function () {\n\t    self.writable = true;\n\t    self.emit('drain');\n\t  };\n\t\n\t  parser.encodePayload(packets, this.supportsBinary, function (data) {\n\t    self.doWrite(data, callbackfn);\n\t  });\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tPolling.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'https' : 'http';\n\t  var port = '';\n\t\n\t  // cache busting is forced\n\t  if (false !== this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  if (!this.supportsBinary && !query.sid) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('https' === schema && Number(this.port) !== 443) ||\n\t     ('http' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(19);\n\tvar Emitter = __webpack_require__(5);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = Transport;\n\t\n\t/**\n\t * Transport abstract constructor.\n\t *\n\t * @param {Object} options.\n\t * @api private\n\t */\n\t\n\tfunction Transport (opts) {\n\t  this.path = opts.path;\n\t  this.hostname = opts.hostname;\n\t  this.port = opts.port;\n\t  this.secure = opts.secure;\n\t  this.query = opts.query;\n\t  this.timestampParam = opts.timestampParam;\n\t  this.timestampRequests = opts.timestampRequests;\n\t  this.readyState = '';\n\t  this.agent = opts.agent || false;\n\t  this.socket = opts.socket;\n\t  this.enablesXDR = opts.enablesXDR;\n\t  this.withCredentials = opts.withCredentials;\n\t\n\t  // SSL options for Node.js client\n\t  this.pfx = opts.pfx;\n\t  this.key = opts.key;\n\t  this.passphrase = opts.passphrase;\n\t  this.cert = opts.cert;\n\t  this.ca = opts.ca;\n\t  this.ciphers = opts.ciphers;\n\t  this.rejectUnauthorized = opts.rejectUnauthorized;\n\t  this.forceNode = opts.forceNode;\n\t\n\t  // results of ReactNative environment detection\n\t  this.isReactNative = opts.isReactNative;\n\t\n\t  // other options for Node.js client\n\t  this.extraHeaders = opts.extraHeaders;\n\t  this.localAddress = opts.localAddress;\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Transport.prototype);\n\t\n\t/**\n\t * Emits an error.\n\t *\n\t * @param {String} str\n\t * @return {Transport} for chaining\n\t * @api public\n\t */\n\t\n\tTransport.prototype.onError = function (msg, desc) {\n\t  var err = new Error(msg);\n\t  err.type = 'TransportError';\n\t  err.description = desc;\n\t  this.emit('error', err);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Opens the transport.\n\t *\n\t * @api public\n\t */\n\t\n\tTransport.prototype.open = function () {\n\t  if ('closed' === this.readyState || '' === this.readyState) {\n\t    this.readyState = 'opening';\n\t    this.doOpen();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Closes the transport.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.close = function () {\n\t  if ('opening' === this.readyState || 'open' === this.readyState) {\n\t    this.doClose();\n\t    this.onClose();\n\t  }\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends multiple packets.\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\tTransport.prototype.send = function (packets) {\n\t  if ('open' === this.readyState) {\n\t    this.write(packets);\n\t  } else {\n\t    throw new Error('Transport not open');\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon open\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onOpen = function () {\n\t  this.readyState = 'open';\n\t  this.writable = true;\n\t  this.emit('open');\n\t};\n\t\n\t/**\n\t * Called with data.\n\t *\n\t * @param {String} data\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onData = function (data) {\n\t  var packet = parser.decodePacket(data, this.socket.binaryType);\n\t  this.onPacket(packet);\n\t};\n\t\n\t/**\n\t * Called with a decoded packet.\n\t */\n\t\n\tTransport.prototype.onPacket = function (packet) {\n\t  this.emit('packet', packet);\n\t};\n\t\n\t/**\n\t * Called upon close.\n\t *\n\t * @api private\n\t */\n\t\n\tTransport.prototype.onClose = function () {\n\t  this.readyState = 'closed';\n\t  this.emit('close');\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar keys = __webpack_require__(20);\n\tvar hasBinary = __webpack_require__(21);\n\tvar sliceBuffer = __webpack_require__(22);\n\tvar after = __webpack_require__(23);\n\tvar utf8 = __webpack_require__(24);\n\t\n\tvar base64encoder;\n\tif (typeof ArrayBuffer !== 'undefined') {\n\t  base64encoder = __webpack_require__(25);\n\t}\n\t\n\t/**\n\t * Check if we are running an android browser. That requires us to use\n\t * ArrayBuffer with polling transports...\n\t *\n\t * http://ghinda.net/jpeg-blob-ajax-android/\n\t */\n\t\n\tvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\t\n\t/**\n\t * Check if we are running in PhantomJS.\n\t * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n\t * https://github.com/ariya/phantomjs/issues/11395\n\t * @type boolean\n\t */\n\tvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\t\n\t/**\n\t * When true, avoids using Blobs to encode payloads.\n\t * @type boolean\n\t */\n\tvar dontSendBlobs = isAndroid || isPhantomJS;\n\t\n\t/**\n\t * Current protocol version.\n\t */\n\t\n\texports.protocol = 3;\n\t\n\t/**\n\t * Packet types.\n\t */\n\t\n\tvar packets = exports.packets = {\n\t    open:     0    // non-ws\n\t  , close:    1    // non-ws\n\t  , ping:     2\n\t  , pong:     3\n\t  , message:  4\n\t  , upgrade:  5\n\t  , noop:     6\n\t};\n\t\n\tvar packetslist = keys(packets);\n\t\n\t/**\n\t * Premade error packet.\n\t */\n\t\n\tvar err = { type: 'error', data: 'parser error' };\n\t\n\t/**\n\t * Create a blob api even for blob builder when vendor prefixes exist\n\t */\n\t\n\tvar Blob = __webpack_require__(26);\n\t\n\t/**\n\t * Encodes a packet.\n\t *\n\t *     <packet type id> [ <data> ]\n\t *\n\t * Example:\n\t *\n\t *     5hello world\n\t *     3\n\t *     4\n\t *\n\t * Binary is encoded in an identical principle\n\t *\n\t * @api private\n\t */\n\t\n\texports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = false;\n\t  }\n\t\n\t  if (typeof utf8encode === 'function') {\n\t    callback = utf8encode;\n\t    utf8encode = null;\n\t  }\n\t\n\t  var data = (packet.data === undefined)\n\t    ? undefined\n\t    : packet.data.buffer || packet.data;\n\t\n\t  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n\t    return encodeArrayBuffer(packet, supportsBinary, callback);\n\t  } else if (typeof Blob !== 'undefined' && data instanceof Blob) {\n\t    return encodeBlob(packet, supportsBinary, callback);\n\t  }\n\t\n\t  // might be an object with { base64: true, data: dataAsBase64String }\n\t  if (data && data.base64) {\n\t    return encodeBase64Object(packet, callback);\n\t  }\n\t\n\t  // Sending data as a utf-8 string\n\t  var encoded = packets[packet.type];\n\t\n\t  // data fragment is optional\n\t  if (undefined !== packet.data) {\n\t    encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);\n\t  }\n\t\n\t  return callback('' + encoded);\n\t\n\t};\n\t\n\tfunction encodeBase64Object(packet, callback) {\n\t  // packet data is an object { base64: true, data: dataAsBase64String }\n\t  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n\t  return callback(message);\n\t}\n\t\n\t/**\n\t * Encode packet helpers for binary types\n\t */\n\t\n\tfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var data = packet.data;\n\t  var contentArray = new Uint8Array(data);\n\t  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\t\n\t  resultBuffer[0] = packets[packet.type];\n\t  for (var i = 0; i < contentArray.length; i++) {\n\t    resultBuffer[i+1] = contentArray[i];\n\t  }\n\t\n\t  return callback(resultBuffer.buffer);\n\t}\n\t\n\tfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  var fr = new FileReader();\n\t  fr.onload = function() {\n\t    exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);\n\t  };\n\t  return fr.readAsArrayBuffer(packet.data);\n\t}\n\t\n\tfunction encodeBlob(packet, supportsBinary, callback) {\n\t  if (!supportsBinary) {\n\t    return exports.encodeBase64Packet(packet, callback);\n\t  }\n\t\n\t  if (dontSendBlobs) {\n\t    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n\t  }\n\t\n\t  var length = new Uint8Array(1);\n\t  length[0] = packets[packet.type];\n\t  var blob = new Blob([length.buffer, packet.data]);\n\t\n\t  return callback(blob);\n\t}\n\t\n\t/**\n\t * Encodes a packet with binary data in a base64 string\n\t *\n\t * @param {Object} packet, has `type` and `data`\n\t * @return {String} base64 encoded message\n\t */\n\t\n\texports.encodeBase64Packet = function(packet, callback) {\n\t  var message = 'b' + exports.packets[packet.type];\n\t  if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {\n\t    var fr = new FileReader();\n\t    fr.onload = function() {\n\t      var b64 = fr.result.split(',')[1];\n\t      callback(message + b64);\n\t    };\n\t    return fr.readAsDataURL(packet.data);\n\t  }\n\t\n\t  var b64data;\n\t  try {\n\t    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n\t  } catch (e) {\n\t    // iPhone Safari doesn't let you apply with typed arrays\n\t    var typed = new Uint8Array(packet.data);\n\t    var basic = new Array(typed.length);\n\t    for (var i = 0; i < typed.length; i++) {\n\t      basic[i] = typed[i];\n\t    }\n\t    b64data = String.fromCharCode.apply(null, basic);\n\t  }\n\t  message += btoa(b64data);\n\t  return callback(message);\n\t};\n\t\n\t/**\n\t * Decodes a packet. Changes format to Blob if requested.\n\t *\n\t * @return {Object} with `type` and `data` (if any)\n\t * @api private\n\t */\n\t\n\texports.decodePacket = function (data, binaryType, utf8decode) {\n\t  if (data === undefined) {\n\t    return err;\n\t  }\n\t  // String data\n\t  if (typeof data === 'string') {\n\t    if (data.charAt(0) === 'b') {\n\t      return exports.decodeBase64Packet(data.substr(1), binaryType);\n\t    }\n\t\n\t    if (utf8decode) {\n\t      data = tryDecode(data);\n\t      if (data === false) {\n\t        return err;\n\t      }\n\t    }\n\t    var type = data.charAt(0);\n\t\n\t    if (Number(type) != type || !packetslist[type]) {\n\t      return err;\n\t    }\n\t\n\t    if (data.length > 1) {\n\t      return { type: packetslist[type], data: data.substring(1) };\n\t    } else {\n\t      return { type: packetslist[type] };\n\t    }\n\t  }\n\t\n\t  var asArray = new Uint8Array(data);\n\t  var type = asArray[0];\n\t  var rest = sliceBuffer(data, 1);\n\t  if (Blob && binaryType === 'blob') {\n\t    rest = new Blob([rest]);\n\t  }\n\t  return { type: packetslist[type], data: rest };\n\t};\n\t\n\tfunction tryDecode(data) {\n\t  try {\n\t    data = utf8.decode(data, { strict: false });\n\t  } catch (e) {\n\t    return false;\n\t  }\n\t  return data;\n\t}\n\t\n\t/**\n\t * Decodes a packet encoded in a base64 string\n\t *\n\t * @param {String} base64 encoded message\n\t * @return {Object} with `type` and `data` (if any)\n\t */\n\t\n\texports.decodeBase64Packet = function(msg, binaryType) {\n\t  var type = packetslist[msg.charAt(0)];\n\t  if (!base64encoder) {\n\t    return { type: type, data: { base64: true, data: msg.substr(1) } };\n\t  }\n\t\n\t  var data = base64encoder.decode(msg.substr(1));\n\t\n\t  if (binaryType === 'blob' && Blob) {\n\t    data = new Blob([data]);\n\t  }\n\t\n\t  return { type: type, data: data };\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload).\n\t *\n\t *     <length>:data\n\t *\n\t * Example:\n\t *\n\t *     11:hello world2:hi\n\t *\n\t * If any contents are binary, they will be encoded as base64 strings. Base64\n\t * encoded strings are marked with a b before the length specifier\n\t *\n\t * @param {Array} packets\n\t * @api private\n\t */\n\t\n\texports.encodePayload = function (packets, supportsBinary, callback) {\n\t  if (typeof supportsBinary === 'function') {\n\t    callback = supportsBinary;\n\t    supportsBinary = null;\n\t  }\n\t\n\t  var isBinary = hasBinary(packets);\n\t\n\t  if (supportsBinary && isBinary) {\n\t    if (Blob && !dontSendBlobs) {\n\t      return exports.encodePayloadAsBlob(packets, callback);\n\t    }\n\t\n\t    return exports.encodePayloadAsArrayBuffer(packets, callback);\n\t  }\n\t\n\t  if (!packets.length) {\n\t    return callback('0:');\n\t  }\n\t\n\t  function setLengthHeader(message) {\n\t    return message.length + ':' + message;\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {\n\t      doneCallback(null, setLengthHeader(message));\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(results.join(''));\n\t  });\n\t};\n\t\n\t/**\n\t * Async array map using after\n\t */\n\t\n\tfunction map(ary, each, done) {\n\t  var result = new Array(ary.length);\n\t  var next = after(ary.length, done);\n\t\n\t  var eachWithIndex = function(i, el, cb) {\n\t    each(el, function(error, msg) {\n\t      result[i] = msg;\n\t      cb(error, result);\n\t    });\n\t  };\n\t\n\t  for (var i = 0; i < ary.length; i++) {\n\t    eachWithIndex(i, ary[i], next);\n\t  }\n\t}\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Possible binary contents are\n\t * decoded from their base64 representation\n\t *\n\t * @param {String} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayload = function (data, binaryType, callback) {\n\t  if (typeof data !== 'string') {\n\t    return exports.decodePayloadAsBinary(data, binaryType, callback);\n\t  }\n\t\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var packet;\n\t  if (data === '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t  var length = '', n, msg;\n\t\n\t  for (var i = 0, l = data.length; i < l; i++) {\n\t    var chr = data.charAt(i);\n\t\n\t    if (chr !== ':') {\n\t      length += chr;\n\t      continue;\n\t    }\n\t\n\t    if (length === '' || (length != (n = Number(length)))) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    msg = data.substr(i + 1, n);\n\t\n\t    if (length != msg.length) {\n\t      // parser error - ignoring payload\n\t      return callback(err, 0, 1);\n\t    }\n\t\n\t    if (msg.length) {\n\t      packet = exports.decodePacket(msg, binaryType, false);\n\t\n\t      if (err.type === packet.type && err.data === packet.data) {\n\t        // parser error in individual packet - ignoring payload\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      var ret = callback(packet, i + n, l);\n\t      if (false === ret) return;\n\t    }\n\t\n\t    // advance cursor\n\t    i += n;\n\t    length = '';\n\t  }\n\t\n\t  if (length !== '') {\n\t    // parser error - ignoring payload\n\t    return callback(err, 0, 1);\n\t  }\n\t\n\t};\n\t\n\t/**\n\t * Encodes multiple messages (payload) as binary.\n\t *\n\t * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n\t * 255><data>\n\t *\n\t * Example:\n\t * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n\t *\n\t * @param {Array} packets\n\t * @return {ArrayBuffer} encoded payload\n\t * @api private\n\t */\n\t\n\texports.encodePayloadAsArrayBuffer = function(packets, callback) {\n\t  if (!packets.length) {\n\t    return callback(new ArrayBuffer(0));\n\t  }\n\t\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(data) {\n\t      return doneCallback(null, data);\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, encodedPackets) {\n\t    var totalLength = encodedPackets.reduce(function(acc, p) {\n\t      var len;\n\t      if (typeof p === 'string'){\n\t        len = p.length;\n\t      } else {\n\t        len = p.byteLength;\n\t      }\n\t      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n\t    }, 0);\n\t\n\t    var resultArray = new Uint8Array(totalLength);\n\t\n\t    var bufferIndex = 0;\n\t    encodedPackets.forEach(function(p) {\n\t      var isString = typeof p === 'string';\n\t      var ab = p;\n\t      if (isString) {\n\t        var view = new Uint8Array(p.length);\n\t        for (var i = 0; i < p.length; i++) {\n\t          view[i] = p.charCodeAt(i);\n\t        }\n\t        ab = view.buffer;\n\t      }\n\t\n\t      if (isString) { // not true binary\n\t        resultArray[bufferIndex++] = 0;\n\t      } else { // true binary\n\t        resultArray[bufferIndex++] = 1;\n\t      }\n\t\n\t      var lenStr = ab.byteLength.toString();\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n\t      }\n\t      resultArray[bufferIndex++] = 255;\n\t\n\t      var view = new Uint8Array(ab);\n\t      for (var i = 0; i < view.length; i++) {\n\t        resultArray[bufferIndex++] = view[i];\n\t      }\n\t    });\n\t\n\t    return callback(resultArray.buffer);\n\t  });\n\t};\n\t\n\t/**\n\t * Encode as Blob\n\t */\n\t\n\texports.encodePayloadAsBlob = function(packets, callback) {\n\t  function encodeOne(packet, doneCallback) {\n\t    exports.encodePacket(packet, true, true, function(encoded) {\n\t      var binaryIdentifier = new Uint8Array(1);\n\t      binaryIdentifier[0] = 1;\n\t      if (typeof encoded === 'string') {\n\t        var view = new Uint8Array(encoded.length);\n\t        for (var i = 0; i < encoded.length; i++) {\n\t          view[i] = encoded.charCodeAt(i);\n\t        }\n\t        encoded = view.buffer;\n\t        binaryIdentifier[0] = 0;\n\t      }\n\t\n\t      var len = (encoded instanceof ArrayBuffer)\n\t        ? encoded.byteLength\n\t        : encoded.size;\n\t\n\t      var lenStr = len.toString();\n\t      var lengthAry = new Uint8Array(lenStr.length + 1);\n\t      for (var i = 0; i < lenStr.length; i++) {\n\t        lengthAry[i] = parseInt(lenStr[i]);\n\t      }\n\t      lengthAry[lenStr.length] = 255;\n\t\n\t      if (Blob) {\n\t        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n\t        doneCallback(null, blob);\n\t      }\n\t    });\n\t  }\n\t\n\t  map(packets, encodeOne, function(err, results) {\n\t    return callback(new Blob(results));\n\t  });\n\t};\n\t\n\t/*\n\t * Decodes data when a payload is maybe expected. Strings are decoded by\n\t * interpreting each byte as a key code for entries marked to start with 0. See\n\t * description of encodePayloadAsBinary\n\t *\n\t * @param {ArrayBuffer} data, callback method\n\t * @api public\n\t */\n\t\n\texports.decodePayloadAsBinary = function (data, binaryType, callback) {\n\t  if (typeof binaryType === 'function') {\n\t    callback = binaryType;\n\t    binaryType = null;\n\t  }\n\t\n\t  var bufferTail = data;\n\t  var buffers = [];\n\t\n\t  while (bufferTail.byteLength > 0) {\n\t    var tailArray = new Uint8Array(bufferTail);\n\t    var isString = tailArray[0] === 0;\n\t    var msgLength = '';\n\t\n\t    for (var i = 1; ; i++) {\n\t      if (tailArray[i] === 255) break;\n\t\n\t      // 310 = char length of Number.MAX_VALUE\n\t      if (msgLength.length > 310) {\n\t        return callback(err, 0, 1);\n\t      }\n\t\n\t      msgLength += tailArray[i];\n\t    }\n\t\n\t    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n\t    msgLength = parseInt(msgLength);\n\t\n\t    var msg = sliceBuffer(bufferTail, 0, msgLength);\n\t    if (isString) {\n\t      try {\n\t        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n\t      } catch (e) {\n\t        // iPhone Safari doesn't let you apply to typed arrays\n\t        var typed = new Uint8Array(msg);\n\t        msg = '';\n\t        for (var i = 0; i < typed.length; i++) {\n\t          msg += String.fromCharCode(typed[i]);\n\t        }\n\t      }\n\t    }\n\t\n\t    buffers.push(msg);\n\t    bufferTail = sliceBuffer(bufferTail, msgLength);\n\t  }\n\t\n\t  var total = buffers.length;\n\t  buffers.forEach(function(buffer, i) {\n\t    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n\t  });\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Gets the keys for an object.\n\t *\n\t * @return {Array} keys\n\t * @api private\n\t */\n\t\n\tmodule.exports = Object.keys || function keys (obj){\n\t  var arr = [];\n\t  var has = Object.prototype.hasOwnProperty;\n\t\n\t  for (var i in obj) {\n\t    if (has.call(obj, i)) {\n\t      arr.push(i);\n\t    }\n\t  }\n\t  return arr;\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global Blob File */\n\t\n\t/*\n\t * Module requirements.\n\t */\n\t\n\tvar isArray = __webpack_require__(7);\n\t\n\tvar toString = Object.prototype.toString;\n\tvar withNativeBlob = typeof Blob === 'function' ||\n\t                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\n\tvar withNativeFile = typeof File === 'function' ||\n\t                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = hasBinary;\n\t\n\t/**\n\t * Checks for binary data.\n\t *\n\t * Supports Buffer, ArrayBuffer, Blob and File.\n\t *\n\t * @param {Object} anything\n\t * @api public\n\t */\n\t\n\tfunction hasBinary (obj) {\n\t  if (!obj || typeof obj !== 'object') {\n\t    return false;\n\t  }\n\t\n\t  if (isArray(obj)) {\n\t    for (var i = 0, l = obj.length; i < l; i++) {\n\t      if (hasBinary(obj[i])) {\n\t        return true;\n\t      }\n\t    }\n\t    return false;\n\t  }\n\t\n\t  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n\t    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n\t    (withNativeBlob && obj instanceof Blob) ||\n\t    (withNativeFile && obj instanceof File)\n\t  ) {\n\t    return true;\n\t  }\n\t\n\t  // see: https://github.com/Automattic/has-binary/pull/4\n\t  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n\t    return hasBinary(obj.toJSON(), true);\n\t  }\n\t\n\t  for (var key in obj) {\n\t    if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n\t      return true;\n\t    }\n\t  }\n\t\n\t  return false;\n\t}\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * An abstraction for slicing an arraybuffer even when\n\t * ArrayBuffer.prototype.slice is not supported\n\t *\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(arraybuffer, start, end) {\n\t  var bytes = arraybuffer.byteLength;\n\t  start = start || 0;\n\t  end = end || bytes;\n\t\n\t  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\t\n\t  if (start < 0) { start += bytes; }\n\t  if (end < 0) { end += bytes; }\n\t  if (end > bytes) { end = bytes; }\n\t\n\t  if (start >= bytes || start >= end || bytes === 0) {\n\t    return new ArrayBuffer(0);\n\t  }\n\t\n\t  var abv = new Uint8Array(arraybuffer);\n\t  var result = new Uint8Array(end - start);\n\t  for (var i = start, ii = 0; i < end; i++, ii++) {\n\t    result[ii] = abv[i];\n\t  }\n\t  return result.buffer;\n\t};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = after\n\t\n\tfunction after(count, callback, err_cb) {\n\t    var bail = false\n\t    err_cb = err_cb || noop\n\t    proxy.count = count\n\t\n\t    return (count === 0) ? callback() : proxy\n\t\n\t    function proxy(err, result) {\n\t        if (proxy.count <= 0) {\n\t            throw new Error('after called too many times')\n\t        }\n\t        --proxy.count\n\t\n\t        // after first error, rest are passed to err_cb\n\t        if (err) {\n\t            bail = true\n\t            callback(err)\n\t            // future error callbacks will go to error handler\n\t            callback = err_cb\n\t        } else if (proxy.count === 0 && !bail) {\n\t            callback(null, result)\n\t        }\n\t    }\n\t}\n\t\n\tfunction noop() {}\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\n\t/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\t\n\tvar stringFromCharCode = String.fromCharCode;\n\t\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\t\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\t\n\tfunction checkScalarValue(codePoint, strict) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tif (strict) {\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t\t' is not a scalar value'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\t\n\tfunction encodeCodePoint(codePoint, strict) {\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\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\t\tcodePoint = 0xFFFD;\n\t\t\t}\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\t\n\tfunction utf8encode(string, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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, strict);\n\t\t}\n\t\treturn byteString;\n\t}\n\t\n\t/*--------------------------------------------------------------------------*/\n\t\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\t\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\t\n\tfunction decodeSymbol(strict) {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\t\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\t\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\t\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\t\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = 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\t\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 checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\t\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 & 0x07) << 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\t\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\t\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString, opts) {\n\t\topts = opts || {};\n\t\tvar strict = false !== opts.strict;\n\t\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(strict)) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\t\n\tmodule.exports = {\n\t\tversion: '2.1.2',\n\t\tencode: utf8encode,\n\t\tdecode: utf8decode\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\n\t/*\n\t * base64-arraybuffer\n\t * https://github.com/niklasvh/base64-arraybuffer\n\t *\n\t * Copyright (c) 2012 Niklas von Hertzen\n\t * Licensed under the MIT license.\n\t */\n\t(function(chars){\n\t  \"use strict\";\n\t\n\t  exports.encode = function(arraybuffer) {\n\t    var bytes = new Uint8Array(arraybuffer),\n\t    i, len = bytes.length, base64 = \"\";\n\t\n\t    for (i = 0; i < len; i+=3) {\n\t      base64 += chars[bytes[i] >> 2];\n\t      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n\t      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n\t      base64 += chars[bytes[i + 2] & 63];\n\t    }\n\t\n\t    if ((len % 3) === 2) {\n\t      base64 = base64.substring(0, base64.length - 1) + \"=\";\n\t    } else if (len % 3 === 1) {\n\t      base64 = base64.substring(0, base64.length - 2) + \"==\";\n\t    }\n\t\n\t    return base64;\n\t  };\n\t\n\t  exports.decode =  function(base64) {\n\t    var bufferLength = base64.length * 0.75,\n\t    len = base64.length, i, p = 0,\n\t    encoded1, encoded2, encoded3, encoded4;\n\t\n\t    if (base64[base64.length - 1] === \"=\") {\n\t      bufferLength--;\n\t      if (base64[base64.length - 2] === \"=\") {\n\t        bufferLength--;\n\t      }\n\t    }\n\t\n\t    var arraybuffer = new ArrayBuffer(bufferLength),\n\t    bytes = new Uint8Array(arraybuffer);\n\t\n\t    for (i = 0; i < len; i+=4) {\n\t      encoded1 = chars.indexOf(base64[i]);\n\t      encoded2 = chars.indexOf(base64[i+1]);\n\t      encoded3 = chars.indexOf(base64[i+2]);\n\t      encoded4 = chars.indexOf(base64[i+3]);\n\t\n\t      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n\t      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n\t      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n\t    }\n\t\n\t    return arraybuffer;\n\t  };\n\t})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\n\t/**\r\n\t * Create a blob builder even when vendor prefixes exist\r\n\t */\r\n\t\r\n\tvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n\t  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n\t  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n\t  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n\t  false;\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor is supported\r\n\t */\r\n\t\r\n\tvar blobSupported = (function() {\r\n\t  try {\r\n\t    var a = new Blob(['hi']);\r\n\t    return a.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if Blob constructor supports ArrayBufferViews\r\n\t * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n\t */\r\n\t\r\n\tvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n\t  try {\r\n\t    var b = new Blob([new Uint8Array([1,2])]);\r\n\t    return b.size === 2;\r\n\t  } catch(e) {\r\n\t    return false;\r\n\t  }\r\n\t})();\r\n\t\r\n\t/**\r\n\t * Check if BlobBuilder is supported\r\n\t */\r\n\t\r\n\tvar blobBuilderSupported = BlobBuilder\r\n\t  && BlobBuilder.prototype.append\r\n\t  && BlobBuilder.prototype.getBlob;\r\n\t\r\n\t/**\r\n\t * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n\t * Used by BlobBuilder constructor and old browsers that didn't\r\n\t * support it in the Blob constructor.\r\n\t */\r\n\t\r\n\tfunction mapArrayBufferViews(ary) {\r\n\t  return ary.map(function(chunk) {\r\n\t    if (chunk.buffer instanceof ArrayBuffer) {\r\n\t      var buf = chunk.buffer;\r\n\t\r\n\t      // if this is a subarray, make a copy so we only\r\n\t      // include the subarray region from the underlying buffer\r\n\t      if (chunk.byteLength !== buf.byteLength) {\r\n\t        var copy = new Uint8Array(chunk.byteLength);\r\n\t        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n\t        buf = copy.buffer;\r\n\t      }\r\n\t\r\n\t      return buf;\r\n\t    }\r\n\t\r\n\t    return chunk;\r\n\t  });\r\n\t}\r\n\t\r\n\tfunction BlobBuilderConstructor(ary, options) {\r\n\t  options = options || {};\r\n\t\r\n\t  var bb = new BlobBuilder();\r\n\t  mapArrayBufferViews(ary).forEach(function(part) {\r\n\t    bb.append(part);\r\n\t  });\r\n\t\r\n\t  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n\t};\r\n\t\r\n\tfunction BlobConstructor(ary, options) {\r\n\t  return new Blob(mapArrayBufferViews(ary), options || {});\r\n\t};\r\n\t\r\n\tif (typeof Blob !== 'undefined') {\r\n\t  BlobBuilderConstructor.prototype = Blob.prototype;\r\n\t  BlobConstructor.prototype = Blob.prototype;\r\n\t}\r\n\t\r\n\tmodule.exports = (function() {\r\n\t  if (blobSupported) {\r\n\t    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n\t  } else if (blobBuilderSupported) {\r\n\t    return BlobBuilderConstructor;\r\n\t  } else {\r\n\t    return undefined;\r\n\t  }\r\n\t})();\r\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Compiles a querystring\n\t * Returns string representation of the object\n\t *\n\t * @param {Object}\n\t * @api private\n\t */\n\t\n\texports.encode = function (obj) {\n\t  var str = '';\n\t\n\t  for (var i in obj) {\n\t    if (obj.hasOwnProperty(i)) {\n\t      if (str.length) str += '&';\n\t      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n\t    }\n\t  }\n\t\n\t  return str;\n\t};\n\t\n\t/**\n\t * Parses a simple querystring into an object\n\t *\n\t * @param {String} qs\n\t * @api private\n\t */\n\t\n\texports.decode = function(qs){\n\t  var qry = {};\n\t  var pairs = qs.split('&');\n\t  for (var i = 0, l = pairs.length; i < l; i++) {\n\t    var pair = pairs[i].split('=');\n\t    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n\t  }\n\t  return qry;\n\t};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t\n\tmodule.exports = function(a, b){\n\t  var fn = function(){};\n\t  fn.prototype = b.prototype;\n\t  a.prototype = new fn;\n\t  a.prototype.constructor = a;\n\t};\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n\t  , length = 64\n\t  , map = {}\n\t  , seed = 0\n\t  , i = 0\n\t  , prev;\n\t\n\t/**\n\t * Return a string representing the specified number.\n\t *\n\t * @param {Number} num The number to convert.\n\t * @returns {String} The string representation of the number.\n\t * @api public\n\t */\n\tfunction encode(num) {\n\t  var encoded = '';\n\t\n\t  do {\n\t    encoded = alphabet[num % length] + encoded;\n\t    num = Math.floor(num / length);\n\t  } while (num > 0);\n\t\n\t  return encoded;\n\t}\n\t\n\t/**\n\t * Return the integer value specified by the given string.\n\t *\n\t * @param {String} str The string to convert.\n\t * @returns {Number} The integer value represented by the string.\n\t * @api public\n\t */\n\tfunction decode(str) {\n\t  var decoded = 0;\n\t\n\t  for (i = 0; i < str.length; i++) {\n\t    decoded = decoded * length + map[str.charAt(i)];\n\t  }\n\t\n\t  return decoded;\n\t}\n\t\n\t/**\n\t * Yeast: A tiny growing id generator.\n\t *\n\t * @returns {String} A unique id.\n\t * @api public\n\t */\n\tfunction yeast() {\n\t  var now = encode(+new Date());\n\t\n\t  if (now !== prev) return seed = 0, prev = now;\n\t  return now +'.'+ encode(seed++);\n\t}\n\t\n\t//\n\t// Map each character to its index.\n\t//\n\tfor (; i < length; i++) map[alphabet[i]] = i;\n\t\n\t//\n\t// Expose the `yeast`, `encode` and `decode` functions.\n\t//\n\tyeast.encode = encode;\n\tyeast.decode = decode;\n\tmodule.exports = yeast;\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module requirements.\n\t */\n\t\n\tvar Polling = __webpack_require__(17);\n\tvar inherit = __webpack_require__(28);\n\tvar globalThis = __webpack_require__(15);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = JSONPPolling;\n\t\n\t/**\n\t * Cached regular expressions.\n\t */\n\t\n\tvar rNewline = /\\n/g;\n\tvar rEscapedNewline = /\\\\n/g;\n\t\n\t/**\n\t * Global JSONP callbacks.\n\t */\n\t\n\tvar callbacks;\n\t\n\t/**\n\t * Noop.\n\t */\n\t\n\tfunction empty () { }\n\t\n\t/**\n\t * JSONP Polling constructor.\n\t *\n\t * @param {Object} opts.\n\t * @api public\n\t */\n\t\n\tfunction JSONPPolling (opts) {\n\t  Polling.call(this, opts);\n\t\n\t  this.query = this.query || {};\n\t\n\t  // define global callbacks array if not present\n\t  // we do this here (lazily) to avoid unneeded global pollution\n\t  if (!callbacks) {\n\t    // we need to consider multiple engines in the same page\n\t    callbacks = globalThis.___eio = (globalThis.___eio || []);\n\t  }\n\t\n\t  // callback identifier\n\t  this.index = callbacks.length;\n\t\n\t  // add callback to jsonp global\n\t  var self = this;\n\t  callbacks.push(function (msg) {\n\t    self.onData(msg);\n\t  });\n\t\n\t  // append to query string\n\t  this.query.j = this.index;\n\t\n\t  // prevent spurious errors from being emitted when the window is unloaded\n\t  if (typeof addEventListener === 'function') {\n\t    addEventListener('beforeunload', function () {\n\t      if (self.script) self.script.onerror = empty;\n\t    }, false);\n\t  }\n\t}\n\t\n\t/**\n\t * Inherits from Polling.\n\t */\n\t\n\tinherit(JSONPPolling, Polling);\n\t\n\t/*\n\t * JSONP only supports binary as base64 encoded strings\n\t */\n\t\n\tJSONPPolling.prototype.supportsBinary = false;\n\t\n\t/**\n\t * Closes the socket.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doClose = function () {\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  if (this.form) {\n\t    this.form.parentNode.removeChild(this.form);\n\t    this.form = null;\n\t    this.iframe = null;\n\t  }\n\t\n\t  Polling.prototype.doClose.call(this);\n\t};\n\t\n\t/**\n\t * Starts a poll cycle.\n\t *\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doPoll = function () {\n\t  var self = this;\n\t  var script = document.createElement('script');\n\t\n\t  if (this.script) {\n\t    this.script.parentNode.removeChild(this.script);\n\t    this.script = null;\n\t  }\n\t\n\t  script.async = true;\n\t  script.src = this.uri();\n\t  script.onerror = function (e) {\n\t    self.onError('jsonp poll error', e);\n\t  };\n\t\n\t  var insertAt = document.getElementsByTagName('script')[0];\n\t  if (insertAt) {\n\t    insertAt.parentNode.insertBefore(script, insertAt);\n\t  } else {\n\t    (document.head || document.body).appendChild(script);\n\t  }\n\t  this.script = script;\n\t\n\t  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\t\n\t  if (isUAgecko) {\n\t    setTimeout(function () {\n\t      var iframe = document.createElement('iframe');\n\t      document.body.appendChild(iframe);\n\t      document.body.removeChild(iframe);\n\t    }, 100);\n\t  }\n\t};\n\t\n\t/**\n\t * Writes with a hidden iframe.\n\t *\n\t * @param {String} data to send\n\t * @param {Function} called upon flush.\n\t * @api private\n\t */\n\t\n\tJSONPPolling.prototype.doWrite = function (data, fn) {\n\t  var self = this;\n\t\n\t  if (!this.form) {\n\t    var form = document.createElement('form');\n\t    var area = document.createElement('textarea');\n\t    var id = this.iframeId = 'eio_iframe_' + this.index;\n\t    var iframe;\n\t\n\t    form.className = 'socketio';\n\t    form.style.position = 'absolute';\n\t    form.style.top = '-1000px';\n\t    form.style.left = '-1000px';\n\t    form.target = id;\n\t    form.method = 'POST';\n\t    form.setAttribute('accept-charset', 'utf-8');\n\t    area.name = 'd';\n\t    form.appendChild(area);\n\t    document.body.appendChild(form);\n\t\n\t    this.form = form;\n\t    this.area = area;\n\t  }\n\t\n\t  this.form.action = this.uri();\n\t\n\t  function complete () {\n\t    initIframe();\n\t    fn();\n\t  }\n\t\n\t  function initIframe () {\n\t    if (self.iframe) {\n\t      try {\n\t        self.form.removeChild(self.iframe);\n\t      } catch (e) {\n\t        self.onError('jsonp polling iframe removal error', e);\n\t      }\n\t    }\n\t\n\t    try {\n\t      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n\t      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n\t      iframe = document.createElement(html);\n\t    } catch (e) {\n\t      iframe = document.createElement('iframe');\n\t      iframe.name = self.iframeId;\n\t      iframe.src = 'javascript:0';\n\t    }\n\t\n\t    iframe.id = self.iframeId;\n\t\n\t    self.form.appendChild(iframe);\n\t    self.iframe = iframe;\n\t  }\n\t\n\t  initIframe();\n\t\n\t  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n\t  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n\t  data = data.replace(rEscapedNewline, '\\\\\\n');\n\t  this.area.value = data.replace(rNewline, '\\\\n');\n\t\n\t  try {\n\t    this.form.submit();\n\t  } catch (e) {}\n\t\n\t  if (this.iframe.attachEvent) {\n\t    this.iframe.onreadystatechange = function () {\n\t      if (self.iframe.readyState === 'complete') {\n\t        complete();\n\t      }\n\t    };\n\t  } else {\n\t    this.iframe.onload = complete;\n\t  }\n\t};\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar Transport = __webpack_require__(18);\n\tvar parser = __webpack_require__(19);\n\tvar parseqs = __webpack_require__(27);\n\tvar inherit = __webpack_require__(28);\n\tvar yeast = __webpack_require__(29);\n\tvar debug = __webpack_require__(3)('engine.io-client:websocket');\n\t\n\tvar BrowserWebSocket, NodeWebSocket;\n\t\n\tif (typeof WebSocket !== 'undefined') {\n\t  BrowserWebSocket = WebSocket;\n\t} else if (typeof self !== 'undefined') {\n\t  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n\t}\n\t\n\tif (typeof window === 'undefined') {\n\t  try {\n\t    NodeWebSocket = __webpack_require__(32);\n\t  } catch (e) { }\n\t}\n\t\n\t/**\n\t * Get either the `WebSocket` or `MozWebSocket` globals\n\t * in the browser or try to resolve WebSocket-compatible\n\t * interface exposed by `ws` for Node-like environment.\n\t */\n\t\n\tvar WebSocketImpl = BrowserWebSocket || NodeWebSocket;\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = WS;\n\t\n\t/**\n\t * WebSocket transport constructor.\n\t *\n\t * @api {Object} connection options\n\t * @api public\n\t */\n\t\n\tfunction WS (opts) {\n\t  var forceBase64 = (opts && opts.forceBase64);\n\t  if (forceBase64) {\n\t    this.supportsBinary = false;\n\t  }\n\t  this.perMessageDeflate = opts.perMessageDeflate;\n\t  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n\t  this.protocols = opts.protocols;\n\t  if (!this.usingBrowserWebSocket) {\n\t    WebSocketImpl = NodeWebSocket;\n\t  }\n\t  Transport.call(this, opts);\n\t}\n\t\n\t/**\n\t * Inherits from Transport.\n\t */\n\t\n\tinherit(WS, Transport);\n\t\n\t/**\n\t * Transport name.\n\t *\n\t * @api public\n\t */\n\t\n\tWS.prototype.name = 'websocket';\n\t\n\t/*\n\t * WebSockets support binary\n\t */\n\t\n\tWS.prototype.supportsBinary = true;\n\t\n\t/**\n\t * Opens socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doOpen = function () {\n\t  if (!this.check()) {\n\t    // let probe timeout\n\t    return;\n\t  }\n\t\n\t  var uri = this.uri();\n\t  var protocols = this.protocols;\n\t\n\t  var opts = {};\n\t\n\t  if (!this.isReactNative) {\n\t    opts.agent = this.agent;\n\t    opts.perMessageDeflate = this.perMessageDeflate;\n\t\n\t    // SSL options for Node.js client\n\t    opts.pfx = this.pfx;\n\t    opts.key = this.key;\n\t    opts.passphrase = this.passphrase;\n\t    opts.cert = this.cert;\n\t    opts.ca = this.ca;\n\t    opts.ciphers = this.ciphers;\n\t    opts.rejectUnauthorized = this.rejectUnauthorized;\n\t  }\n\t\n\t  if (this.extraHeaders) {\n\t    opts.headers = this.extraHeaders;\n\t  }\n\t  if (this.localAddress) {\n\t    opts.localAddress = this.localAddress;\n\t  }\n\t\n\t  try {\n\t    this.ws =\n\t      this.usingBrowserWebSocket && !this.isReactNative\n\t        ? protocols\n\t          ? new WebSocketImpl(uri, protocols)\n\t          : new WebSocketImpl(uri)\n\t        : new WebSocketImpl(uri, protocols, opts);\n\t  } catch (err) {\n\t    return this.emit('error', err);\n\t  }\n\t\n\t  if (this.ws.binaryType === undefined) {\n\t    this.supportsBinary = false;\n\t  }\n\t\n\t  if (this.ws.supports && this.ws.supports.binary) {\n\t    this.supportsBinary = true;\n\t    this.ws.binaryType = 'nodebuffer';\n\t  } else {\n\t    this.ws.binaryType = 'arraybuffer';\n\t  }\n\t\n\t  this.addEventListeners();\n\t};\n\t\n\t/**\n\t * Adds event listeners to the socket\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.addEventListeners = function () {\n\t  var self = this;\n\t\n\t  this.ws.onopen = function () {\n\t    self.onOpen();\n\t  };\n\t  this.ws.onclose = function () {\n\t    self.onClose();\n\t  };\n\t  this.ws.onmessage = function (ev) {\n\t    self.onData(ev.data);\n\t  };\n\t  this.ws.onerror = function (e) {\n\t    self.onError('websocket error', e);\n\t  };\n\t};\n\t\n\t/**\n\t * Writes data to socket.\n\t *\n\t * @param {Array} array of packets.\n\t * @api private\n\t */\n\t\n\tWS.prototype.write = function (packets) {\n\t  var self = this;\n\t  this.writable = false;\n\t\n\t  // encodePacket efficient as it uses WS framing\n\t  // no need for encodePayload\n\t  var total = packets.length;\n\t  for (var i = 0, l = total; i < l; i++) {\n\t    (function (packet) {\n\t      parser.encodePacket(packet, self.supportsBinary, function (data) {\n\t        if (!self.usingBrowserWebSocket) {\n\t          // always create a new object (GH-437)\n\t          var opts = {};\n\t          if (packet.options) {\n\t            opts.compress = packet.options.compress;\n\t          }\n\t\n\t          if (self.perMessageDeflate) {\n\t            var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;\n\t            if (len < self.perMessageDeflate.threshold) {\n\t              opts.compress = false;\n\t            }\n\t          }\n\t        }\n\t\n\t        // Sometimes the websocket has already been closed but the browser didn't\n\t        // have a chance of informing us about it yet, in that case send will\n\t        // throw an error\n\t        try {\n\t          if (self.usingBrowserWebSocket) {\n\t            // TypeError is thrown when passing the second argument on Safari\n\t            self.ws.send(data);\n\t          } else {\n\t            self.ws.send(data, opts);\n\t          }\n\t        } catch (e) {\n\t\n\t        }\n\t\n\t        --total || done();\n\t      });\n\t    })(packets[i]);\n\t  }\n\t\n\t  function done () {\n\t    self.emit('flush');\n\t\n\t    // fake drain\n\t    // defer to next tick to allow Socket to clear writeBuffer\n\t    setTimeout(function () {\n\t      self.writable = true;\n\t      self.emit('drain');\n\t    }, 0);\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon close\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.onClose = function () {\n\t  Transport.prototype.onClose.call(this);\n\t};\n\t\n\t/**\n\t * Closes socket.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.doClose = function () {\n\t  if (typeof this.ws !== 'undefined') {\n\t    this.ws.close();\n\t  }\n\t};\n\t\n\t/**\n\t * Generates uri for connection.\n\t *\n\t * @api private\n\t */\n\t\n\tWS.prototype.uri = function () {\n\t  var query = this.query || {};\n\t  var schema = this.secure ? 'wss' : 'ws';\n\t  var port = '';\n\t\n\t  // avoid port if default for schema\n\t  if (this.port && (('wss' === schema && Number(this.port) !== 443) ||\n\t    ('ws' === schema && Number(this.port) !== 80))) {\n\t    port = ':' + this.port;\n\t  }\n\t\n\t  // append timestamp to URI\n\t  if (this.timestampRequests) {\n\t    query[this.timestampParam] = yeast();\n\t  }\n\t\n\t  // communicate binary support capabilities\n\t  if (!this.supportsBinary) {\n\t    query.b64 = 1;\n\t  }\n\t\n\t  query = parseqs.encode(query);\n\t\n\t  // prepend ? to query\n\t  if (query.length) {\n\t    query = '?' + query;\n\t  }\n\t\n\t  var ipv6 = this.hostname.indexOf(':') !== -1;\n\t  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n\t};\n\t\n\t/**\n\t * Feature detection for WebSocket.\n\t *\n\t * @return {Boolean} whether this transport is available.\n\t * @api public\n\t */\n\t\n\tWS.prototype.check = function () {\n\t  return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n\t};\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\n\t/* (ignored) */\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports) {\n\n\t\n\tvar indexOf = [].indexOf;\n\t\n\tmodule.exports = function(arr, obj){\n\t  if (indexOf) return arr.indexOf(obj);\n\t  for (var i = 0; i < arr.length; ++i) {\n\t    if (arr[i] === obj) return i;\n\t  }\n\t  return -1;\n\t};\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/**\n\t * Module dependencies.\n\t */\n\t\n\tvar parser = __webpack_require__(4);\n\tvar Emitter = __webpack_require__(5);\n\tvar toArray = __webpack_require__(35);\n\tvar on = __webpack_require__(36);\n\tvar bind = __webpack_require__(37);\n\tvar debug = __webpack_require__(3)('socket.io-client:socket');\n\tvar parseqs = __webpack_require__(27);\n\tvar hasBin = __webpack_require__(21);\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = exports = Socket;\n\t\n\t/**\n\t * Internal events (blacklisted).\n\t * These events can't be emitted by the user.\n\t *\n\t * @api private\n\t */\n\t\n\tvar events = {\n\t  connect: 1,\n\t  connect_error: 1,\n\t  connect_timeout: 1,\n\t  connecting: 1,\n\t  disconnect: 1,\n\t  error: 1,\n\t  reconnect: 1,\n\t  reconnect_attempt: 1,\n\t  reconnect_failed: 1,\n\t  reconnect_error: 1,\n\t  reconnecting: 1,\n\t  ping: 1,\n\t  pong: 1\n\t};\n\t\n\t/**\n\t * Shortcut to `Emitter#emit`.\n\t */\n\t\n\tvar emit = Emitter.prototype.emit;\n\t\n\t/**\n\t * `Socket` constructor.\n\t *\n\t * @api public\n\t */\n\t\n\tfunction Socket(io, nsp, opts) {\n\t  this.io = io;\n\t  this.nsp = nsp;\n\t  this.json = this; // compat\n\t  this.ids = 0;\n\t  this.acks = {};\n\t  this.receiveBuffer = [];\n\t  this.sendBuffer = [];\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  this.flags = {};\n\t  if (opts && opts.query) {\n\t    this.query = opts.query;\n\t  }\n\t  if (this.io.autoConnect) this.open();\n\t}\n\t\n\t/**\n\t * Mix in `Emitter`.\n\t */\n\t\n\tEmitter(Socket.prototype);\n\t\n\t/**\n\t * Subscribe to open, close and packet events\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.subEvents = function () {\n\t  if (this.subs) return;\n\t\n\t  var io = this.io;\n\t  this.subs = [on(io, 'open', bind(this, 'onopen')), on(io, 'packet', bind(this, 'onpacket')), on(io, 'close', bind(this, 'onclose'))];\n\t};\n\t\n\t/**\n\t * \"Opens\" the socket.\n\t *\n\t * @api public\n\t */\n\t\n\tSocket.prototype.open = Socket.prototype.connect = function () {\n\t  if (this.connected) return this;\n\t\n\t  this.subEvents();\n\t  if (!this.io.reconnecting) this.io.open(); // ensure open\n\t  if ('open' === this.io.readyState) this.onopen();\n\t  this.emit('connecting');\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a `message` event.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.send = function () {\n\t  var args = toArray(arguments);\n\t  args.unshift('message');\n\t  this.emit.apply(this, args);\n\t  return this;\n\t};\n\t\n\t/**\n\t * Override `emit`.\n\t * If the event is in `events`, it's emitted normally.\n\t *\n\t * @param {String} event name\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.emit = function (ev) {\n\t  if (events.hasOwnProperty(ev)) {\n\t    emit.apply(this, arguments);\n\t    return this;\n\t  }\n\t\n\t  var args = toArray(arguments);\n\t  var packet = {\n\t    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n\t    data: args\n\t  };\n\t\n\t  packet.options = {};\n\t  packet.options.compress = !this.flags || false !== this.flags.compress;\n\t\n\t  // event ack callback\n\t  if ('function' === typeof args[args.length - 1]) {\n\t\n\t    this.acks[this.ids] = args.pop();\n\t    packet.id = this.ids++;\n\t  }\n\t\n\t  if (this.connected) {\n\t    this.packet(packet);\n\t  } else {\n\t    this.sendBuffer.push(packet);\n\t  }\n\t\n\t  this.flags = {};\n\t\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sends a packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.packet = function (packet) {\n\t  packet.nsp = this.nsp;\n\t  this.io.packet(packet);\n\t};\n\t\n\t/**\n\t * Called upon engine `open`.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onopen = function () {\n\t\n\t  // write connect packet if necessary\n\t  if ('/' !== this.nsp) {\n\t    if (this.query) {\n\t      var query = _typeof(this.query) === 'object' ? parseqs.encode(this.query) : this.query;\n\t\n\t      this.packet({ type: parser.CONNECT, query: query });\n\t    } else {\n\t      this.packet({ type: parser.CONNECT });\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon engine `close`.\n\t *\n\t * @param {String} reason\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onclose = function (reason) {\n\t\n\t  this.connected = false;\n\t  this.disconnected = true;\n\t  delete this.id;\n\t  this.emit('disconnect', reason);\n\t};\n\t\n\t/**\n\t * Called with socket packet.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onpacket = function (packet) {\n\t  var sameNamespace = packet.nsp === this.nsp;\n\t  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\t\n\t  if (!sameNamespace && !rootNamespaceError) return;\n\t\n\t  switch (packet.type) {\n\t    case parser.CONNECT:\n\t      this.onconnect();\n\t      break;\n\t\n\t    case parser.EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.BINARY_EVENT:\n\t      this.onevent(packet);\n\t      break;\n\t\n\t    case parser.ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.BINARY_ACK:\n\t      this.onack(packet);\n\t      break;\n\t\n\t    case parser.DISCONNECT:\n\t      this.ondisconnect();\n\t      break;\n\t\n\t    case parser.ERROR:\n\t      this.emit('error', packet.data);\n\t      break;\n\t  }\n\t};\n\t\n\t/**\n\t * Called upon a server event.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onevent = function (packet) {\n\t  var args = packet.data || [];\n\t\n\t  if (null != packet.id) {\n\t\n\t    args.push(this.ack(packet.id));\n\t  }\n\t\n\t  if (this.connected) {\n\t    emit.apply(this, args);\n\t  } else {\n\t    this.receiveBuffer.push(args);\n\t  }\n\t};\n\t\n\t/**\n\t * Produces an ack callback to emit with an event.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ack = function (id) {\n\t  var self = this;\n\t  var sent = false;\n\t  return function () {\n\t    // prevent double callbacks\n\t    if (sent) return;\n\t    sent = true;\n\t    var args = toArray(arguments);\n\t\n\t    self.packet({\n\t      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n\t      id: id,\n\t      data: args\n\t    });\n\t  };\n\t};\n\t\n\t/**\n\t * Called upon a server acknowlegement.\n\t *\n\t * @param {Object} packet\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onack = function (packet) {\n\t  var ack = this.acks[packet.id];\n\t  if ('function' === typeof ack) {\n\t\n\t    ack.apply(this, packet.data);\n\t    delete this.acks[packet.id];\n\t  } else {}\n\t};\n\t\n\t/**\n\t * Called upon server connect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.onconnect = function () {\n\t  this.connected = true;\n\t  this.disconnected = false;\n\t  this.emit('connect');\n\t  this.emitBuffered();\n\t};\n\t\n\t/**\n\t * Emit buffered events (received and emitted).\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.emitBuffered = function () {\n\t  var i;\n\t  for (i = 0; i < this.receiveBuffer.length; i++) {\n\t    emit.apply(this, this.receiveBuffer[i]);\n\t  }\n\t  this.receiveBuffer = [];\n\t\n\t  for (i = 0; i < this.sendBuffer.length; i++) {\n\t    this.packet(this.sendBuffer[i]);\n\t  }\n\t  this.sendBuffer = [];\n\t};\n\t\n\t/**\n\t * Called upon server disconnect.\n\t *\n\t * @api private\n\t */\n\t\n\tSocket.prototype.ondisconnect = function () {\n\t\n\t  this.destroy();\n\t  this.onclose('io server disconnect');\n\t};\n\t\n\t/**\n\t * Called upon forced client/server side disconnections,\n\t * this method ensures the manager stops tracking us and\n\t * that reconnections don't get triggered for this.\n\t *\n\t * @api private.\n\t */\n\t\n\tSocket.prototype.destroy = function () {\n\t  if (this.subs) {\n\t    // clean subscriptions to avoid reconnections\n\t    for (var i = 0; i < this.subs.length; i++) {\n\t      this.subs[i].destroy();\n\t    }\n\t    this.subs = null;\n\t  }\n\t\n\t  this.io.destroy(this);\n\t};\n\t\n\t/**\n\t * Disconnects the socket manually.\n\t *\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.close = Socket.prototype.disconnect = function () {\n\t  if (this.connected) {\n\t\n\t    this.packet({ type: parser.DISCONNECT });\n\t  }\n\t\n\t  // remove socket from pool\n\t  this.destroy();\n\t\n\t  if (this.connected) {\n\t    // fire events\n\t    this.onclose('io client disconnect');\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the compress flag.\n\t *\n\t * @param {Boolean} if `true`, compresses the sending data\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.compress = function (compress) {\n\t  this.flags.compress = compress;\n\t  return this;\n\t};\n\t\n\t/**\n\t * Sets the binary flag\n\t *\n\t * @param {Boolean} whether the emitted data contains binary\n\t * @return {Socket} self\n\t * @api public\n\t */\n\t\n\tSocket.prototype.binary = function (binary) {\n\t  this.flags.binary = binary;\n\t  return this;\n\t};\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = toArray\n\t\n\tfunction toArray(list, index) {\n\t    var array = []\n\t\n\t    index = index || 0\n\t\n\t    for (var i = index || 0; i < list.length; i++) {\n\t        array[i - index] = list[i]\n\t    }\n\t\n\t    return array\n\t}\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\t\n\t/**\n\t * Module exports.\n\t */\n\t\n\tmodule.exports = on;\n\t\n\t/**\n\t * Helper for subscriptions.\n\t *\n\t * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n\t * @param {String} event name\n\t * @param {Function} callback\n\t * @api public\n\t */\n\t\n\tfunction on(obj, ev, fn) {\n\t  obj.on(ev, fn);\n\t  return {\n\t    destroy: function destroy() {\n\t      obj.removeListener(ev, fn);\n\t    }\n\t  };\n\t}\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\n\t/**\n\t * Slice reference.\n\t */\n\t\n\tvar slice = [].slice;\n\t\n\t/**\n\t * Bind `obj` to `fn`.\n\t *\n\t * @param {Object} obj\n\t * @param {Function|String} fn or string\n\t * @return {Function}\n\t * @api public\n\t */\n\t\n\tmodule.exports = function(obj, fn){\n\t  if ('string' == typeof fn) fn = obj[fn];\n\t  if ('function' != typeof fn) throw new Error('bind() requires a function');\n\t  var args = slice.call(arguments, 2);\n\t  return function(){\n\t    return fn.apply(obj, args.concat(slice.call(arguments)));\n\t  }\n\t};\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\n\t\n\t/**\n\t * Expose `Backoff`.\n\t */\n\t\n\tmodule.exports = Backoff;\n\t\n\t/**\n\t * Initialize backoff timer with `opts`.\n\t *\n\t * - `min` initial timeout in milliseconds [100]\n\t * - `max` max timeout [10000]\n\t * - `jitter` [0]\n\t * - `factor` [2]\n\t *\n\t * @param {Object} opts\n\t * @api public\n\t */\n\t\n\tfunction Backoff(opts) {\n\t  opts = opts || {};\n\t  this.ms = opts.min || 100;\n\t  this.max = opts.max || 10000;\n\t  this.factor = opts.factor || 2;\n\t  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n\t  this.attempts = 0;\n\t}\n\t\n\t/**\n\t * Return the backoff duration.\n\t *\n\t * @return {Number}\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.duration = function(){\n\t  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n\t  if (this.jitter) {\n\t    var rand =  Math.random();\n\t    var deviation = Math.floor(rand * this.jitter * ms);\n\t    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n\t  }\n\t  return Math.min(ms, this.max) | 0;\n\t};\n\t\n\t/**\n\t * Reset the number of attempts.\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.reset = function(){\n\t  this.attempts = 0;\n\t};\n\t\n\t/**\n\t * Set the minimum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMin = function(min){\n\t  this.ms = min;\n\t};\n\t\n\t/**\n\t * Set the maximum duration\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setMax = function(max){\n\t  this.max = max;\n\t};\n\t\n\t/**\n\t * Set the jitter\n\t *\n\t * @api public\n\t */\n\t\n\tBackoff.prototype.setJitter = function(jitter){\n\t  this.jitter = jitter;\n\t};\n\t\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// socket.io.slim.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b1396182394c549233a5","\n/**\n * Module dependencies.\n */\n\nvar url = require('./url');\nvar parser = require('socket.io-parser');\nvar Manager = require('./manager');\nvar debug = require('debug')('socket.io-client');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = lookup;\n\n/**\n * Managers cache.\n */\n\nvar cache = exports.managers = {};\n\n/**\n * Looks up an existing `Manager` for multiplexing.\n * If the user summons:\n *\n *   `io('http://localhost/a');`\n *   `io('http://localhost/b');`\n *\n * We reuse the existing instance based on same scheme/port/host,\n * and we initialize sockets for each namespace.\n *\n * @api public\n */\n\nfunction lookup (uri, opts) {\n  if (typeof uri === 'object') {\n    opts = uri;\n    uri = undefined;\n  }\n\n  opts = opts || {};\n\n  var parsed = url(uri);\n  var source = parsed.source;\n  var id = parsed.id;\n  var path = parsed.path;\n  var sameNamespace = cache[id] && path in cache[id].nsps;\n  var newConnection = opts.forceNew || opts['force new connection'] ||\n                      false === opts.multiplex || sameNamespace;\n\n  var io;\n\n  if (newConnection) {\n\n    io = Manager(source, opts);\n  } else {\n    if (!cache[id]) {\n\n      cache[id] = Manager(source, opts);\n    }\n    io = cache[id];\n  }\n  if (parsed.query && !opts.query) {\n    opts.query = parsed.query;\n  }\n  return io.socket(parsed.path, opts);\n}\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = parser.protocol;\n\n/**\n * `connect`.\n *\n * @param {String} uri\n * @api public\n */\n\nexports.connect = lookup;\n\n/**\n * Expose constructors for standalone build.\n *\n * @api public\n */\n\nexports.Manager = require('./manager');\nexports.Socket = require('./socket');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/index.js","\n/**\n * Module dependencies.\n */\n\nvar parseuri = require('parseuri');\nvar debug = require('debug')('socket.io-client:url');\n\n/**\n * Module exports.\n */\n\nmodule.exports = url;\n\n/**\n * URL parser.\n *\n * @param {String} url\n * @param {Object} An object meant to mimic window.location.\n *                 Defaults to window.location.\n * @api public\n */\n\nfunction url (uri, loc) {\n  var obj = uri;\n\n  // default to window.location\n  loc = loc || (typeof location !== 'undefined' && location);\n  if (null == uri) uri = loc.protocol + '//' + loc.host;\n\n  // relative path support\n  if ('string' === typeof uri) {\n    if ('/' === uri.charAt(0)) {\n      if ('/' === uri.charAt(1)) {\n        uri = loc.protocol + uri;\n      } else {\n        uri = loc.host + uri;\n      }\n    }\n\n    if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n      if ('undefined' !== typeof loc) {\n        uri = loc.protocol + '//' + uri;\n      } else {\n        uri = 'https://' + uri;\n      }\n    }\n\n    // parse\n\n    obj = parseuri(uri);\n  }\n\n  // make sure we treat `localhost:80` and `localhost` equally\n  if (!obj.port) {\n    if (/^(http|ws)$/.test(obj.protocol)) {\n      obj.port = '80';\n    } else if (/^(http|ws)s$/.test(obj.protocol)) {\n      obj.port = '443';\n    }\n  }\n\n  obj.path = obj.path || '/';\n\n  var ipv6 = obj.host.indexOf(':') !== -1;\n  var host = ipv6 ? '[' + obj.host + ']' : obj.host;\n\n  // define unique id\n  obj.id = obj.protocol + '://' + host + ':' + obj.port;\n  // define href\n  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));\n\n  return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/url.js","/**\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    uri.pathNames = pathNames(uri, uri['path']);\n    uri.queryKey = queryKey(uri, uri['query']);\n\n    return uri;\n};\n\nfunction pathNames(obj, path) {\n    var regx = /\\/{2,9}/g,\n        names = path.replace(regx, \"/\").split(\"/\");\n\n    if (path.substr(0, 1) == '/' || path.length === 0) {\n        names.splice(0, 1);\n    }\n    if (path.substr(path.length - 1, 1) == '/') {\n        names.splice(names.length - 1, 1);\n    }\n\n    return names;\n}\n\nfunction queryKey(uri, query) {\n    var data = {};\n\n    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n        if ($1) {\n            data[$1] = $2;\n        }\n    });\n\n    return data;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseuri/index.js\n// module id = 2\n// module chunks = 0","\nmodule.exports = function () { return function () {}; };\n\n\n\n// WEBPACK FOOTER //\n// ./support/noop.js","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar binary = require('./binary');\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nexports.protocol = 4;\n\n/**\n * Packet types.\n *\n * @api public\n */\n\nexports.types = [\n  'CONNECT',\n  'DISCONNECT',\n  'EVENT',\n  'ACK',\n  'ERROR',\n  'BINARY_EVENT',\n  'BINARY_ACK'\n];\n\n/**\n * Packet type `connect`.\n *\n * @api public\n */\n\nexports.CONNECT = 0;\n\n/**\n * Packet type `disconnect`.\n *\n * @api public\n */\n\nexports.DISCONNECT = 1;\n\n/**\n * Packet type `event`.\n *\n * @api public\n */\n\nexports.EVENT = 2;\n\n/**\n * Packet type `ack`.\n *\n * @api public\n */\n\nexports.ACK = 3;\n\n/**\n * Packet type `error`.\n *\n * @api public\n */\n\nexports.ERROR = 4;\n\n/**\n * Packet type 'binary event'\n *\n * @api public\n */\n\nexports.BINARY_EVENT = 5;\n\n/**\n * Packet type `binary ack`. For acks with binary arguments.\n *\n * @api public\n */\n\nexports.BINARY_ACK = 6;\n\n/**\n * Encoder constructor.\n *\n * @api public\n */\n\nexports.Encoder = Encoder;\n\n/**\n * Decoder constructor.\n *\n * @api public\n */\n\nexports.Decoder = Decoder;\n\n/**\n * A socket.io Encoder instance\n *\n * @api public\n */\n\nfunction Encoder() {}\n\nvar ERROR_PACKET = exports.ERROR + '\"encode error\"';\n\n/**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n * @param {Function} callback - function to handle encodings (likely engine.write)\n * @return Calls callback with Array of encodings\n * @api public\n */\n\nEncoder.prototype.encode = function(obj, callback){\n\n\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    encodeAsBinary(obj, callback);\n  } else {\n    var encoding = encodeAsString(obj);\n    callback([encoding]);\n  }\n};\n\n/**\n * Encode packet as string.\n *\n * @param {Object} packet\n * @return {String} encoded\n * @api private\n */\n\nfunction encodeAsString(obj) {\n\n  // first is type\n  var str = '' + obj.type;\n\n  // attachments if we have them\n  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {\n    str += obj.attachments + '-';\n  }\n\n  // if we have a namespace other than `/`\n  // we append it followed by a comma `,`\n  if (obj.nsp && '/' !== obj.nsp) {\n    str += obj.nsp + ',';\n  }\n\n  // immediately followed by the id\n  if (null != obj.id) {\n    str += obj.id;\n  }\n\n  // json data\n  if (null != obj.data) {\n    var payload = tryStringify(obj.data);\n    if (payload !== false) {\n      str += payload;\n    } else {\n      return ERROR_PACKET;\n    }\n  }\n\n\n  return str;\n}\n\nfunction tryStringify(str) {\n  try {\n    return JSON.stringify(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n *\n * @param {Object} packet\n * @return {Buffer} encoded\n * @api private\n */\n\nfunction encodeAsBinary(obj, callback) {\n\n  function writeEncoding(bloblessData) {\n    var deconstruction = binary.deconstructPacket(bloblessData);\n    var pack = encodeAsString(deconstruction.packet);\n    var buffers = deconstruction.buffers;\n\n    buffers.unshift(pack); // add packet info to beginning of data list\n    callback(buffers); // write all the buffers\n  }\n\n  binary.removeBlobs(obj, writeEncoding);\n}\n\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n * @api public\n */\n\nfunction Decoder() {\n  this.reconstructor = null;\n}\n\n/**\n * Mix in `Emitter` with Decoder.\n */\n\nEmitter(Decoder.prototype);\n\n/**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n * @return {Object} packet\n * @api public\n */\n\nDecoder.prototype.add = function(obj) {\n  var packet;\n  if (typeof obj === 'string') {\n    packet = decodeString(obj);\n    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json\n      this.reconstructor = new BinaryReconstructor(packet);\n\n      // no attachments, labeled binary but no binary data to follow\n      if (this.reconstructor.reconPack.attachments === 0) {\n        this.emit('decoded', packet);\n      }\n    } else { // non-binary full packet\n      this.emit('decoded', packet);\n    }\n  } else if (isBuf(obj) || obj.base64) { // raw binary data\n    if (!this.reconstructor) {\n      throw new Error('got binary data when not reconstructing a packet');\n    } else {\n      packet = this.reconstructor.takeBinaryData(obj);\n      if (packet) { // received final buffer\n        this.reconstructor = null;\n        this.emit('decoded', packet);\n      }\n    }\n  } else {\n    throw new Error('Unknown type: ' + obj);\n  }\n};\n\n/**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n * @api private\n */\n\nfunction decodeString(str) {\n  var i = 0;\n  // look up type\n  var p = {\n    type: Number(str.charAt(0))\n  };\n\n  if (null == exports.types[p.type]) {\n    return error('unknown packet type ' + p.type);\n  }\n\n  // look up attachments if type binary\n  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {\n    var buf = '';\n    while (str.charAt(++i) !== '-') {\n      buf += str.charAt(i);\n      if (i == str.length) break;\n    }\n    if (buf != Number(buf) || str.charAt(i) !== '-') {\n      throw new Error('Illegal attachments');\n    }\n    p.attachments = Number(buf);\n  }\n\n  // look up namespace (if any)\n  if ('/' === str.charAt(i + 1)) {\n    p.nsp = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (',' === c) break;\n      p.nsp += c;\n      if (i === str.length) break;\n    }\n  } else {\n    p.nsp = '/';\n  }\n\n  // look up id\n  var next = str.charAt(i + 1);\n  if ('' !== next && Number(next) == next) {\n    p.id = '';\n    while (++i) {\n      var c = str.charAt(i);\n      if (null == c || Number(c) != c) {\n        --i;\n        break;\n      }\n      p.id += str.charAt(i);\n      if (i === str.length) break;\n    }\n    p.id = Number(p.id);\n  }\n\n  // look up json data\n  if (str.charAt(++i)) {\n    var payload = tryParse(str.substr(i));\n    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));\n    if (isPayloadValid) {\n      p.data = payload;\n    } else {\n      return error('invalid payload');\n    }\n  }\n\n\n  return p;\n}\n\nfunction tryParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch(e){\n    return false;\n  }\n}\n\n/**\n * Deallocates a parser's resources\n *\n * @api public\n */\n\nDecoder.prototype.destroy = function() {\n  if (this.reconstructor) {\n    this.reconstructor.finishedReconstruction();\n  }\n};\n\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n * @api private\n */\n\nfunction BinaryReconstructor(packet) {\n  this.reconPack = packet;\n  this.buffers = [];\n}\n\n/**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n *   a reconstructed packet object if all buffers have been received.\n * @api private\n */\n\nBinaryReconstructor.prototype.takeBinaryData = function(binData) {\n  this.buffers.push(binData);\n  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list\n    var packet = binary.reconstructPacket(this.reconPack, this.buffers);\n    this.finishedReconstruction();\n    return packet;\n  }\n  return null;\n};\n\n/**\n * Cleans up binary packet reconstruction variables.\n *\n * @api private\n */\n\nBinaryReconstructor.prototype.finishedReconstruction = function() {\n  this.reconPack = null;\n  this.buffers = [];\n};\n\nfunction error(msg) {\n  return {\n    type: exports.ERROR,\n    data: 'parser error: ' + msg\n  };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/index.js\n// module id = 4\n// module chunks = 0","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n  module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n  if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n  for (var key in Emitter.prototype) {\r\n    obj[key] = Emitter.prototype[key];\r\n  }\r\n  return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n    .push(fn);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n  function on() {\r\n    this.off(event, on);\r\n    fn.apply(this, arguments);\r\n  }\r\n\r\n  on.fn = fn;\r\n  this.on(event, on);\r\n  return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  // all\r\n  if (0 == arguments.length) {\r\n    this._callbacks = {};\r\n    return this;\r\n  }\r\n\r\n  // specific event\r\n  var callbacks = this._callbacks['$' + event];\r\n  if (!callbacks) return this;\r\n\r\n  // remove all handlers\r\n  if (1 == arguments.length) {\r\n    delete this._callbacks['$' + event];\r\n    return this;\r\n  }\r\n\r\n  // remove specific handler\r\n  var cb;\r\n  for (var i = 0; i < callbacks.length; i++) {\r\n    cb = callbacks[i];\r\n    if (cb === fn || cb.fn === fn) {\r\n      callbacks.splice(i, 1);\r\n      break;\r\n    }\r\n  }\r\n\r\n  // Remove event specific arrays for event types that no\r\n  // one is subscribed for to avoid memory leak.\r\n  if (callbacks.length === 0) {\r\n    delete this._callbacks['$' + event];\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n\r\n  var args = new Array(arguments.length - 1)\r\n    , callbacks = this._callbacks['$' + event];\r\n\r\n  for (var i = 1; i < arguments.length; i++) {\r\n    args[i - 1] = arguments[i];\r\n  }\r\n\r\n  if (callbacks) {\r\n    callbacks = callbacks.slice(0);\r\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n      callbacks[i].apply(this, args);\r\n    }\r\n  }\r\n\r\n  return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n  this._callbacks = this._callbacks || {};\r\n  return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n  return !! this.listeners(event).length;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-emitter/index.js\n// module id = 5\n// module chunks = 0","/*global Blob,File*/\n\n/**\n * Module requirements\n */\n\nvar isArray = require('isarray');\nvar isBuf = require('./is-buffer');\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');\nvar withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');\n\n/**\n * Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.\n * Anything with blobs or files should be fed through removeBlobs before coming\n * here.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @api public\n */\n\nexports.deconstructPacket = function(packet) {\n  var buffers = [];\n  var packetData = packet.data;\n  var pack = packet;\n  pack.data = _deconstructPacket(packetData, buffers);\n  pack.attachments = buffers.length; // number of binary 'attachments'\n  return {packet: pack, buffers: buffers};\n};\n\nfunction _deconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (isBuf(data)) {\n    var placeholder = { _placeholder: true, num: buffers.length };\n    buffers.push(data);\n    return placeholder;\n  } else if (isArray(data)) {\n    var newData = new Array(data.length);\n    for (var i = 0; i < data.length; i++) {\n      newData[i] = _deconstructPacket(data[i], buffers);\n    }\n    return newData;\n  } else if (typeof data === 'object' && !(data instanceof Date)) {\n    var newData = {};\n    for (var key in data) {\n      newData[key] = _deconstructPacket(data[key], buffers);\n    }\n    return newData;\n  }\n  return data;\n}\n\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @api public\n */\n\nexports.reconstructPacket = function(packet, buffers) {\n  packet.data = _reconstructPacket(packet.data, buffers);\n  packet.attachments = undefined; // no longer useful\n  return packet;\n};\n\nfunction _reconstructPacket(data, buffers) {\n  if (!data) return data;\n\n  if (data && data._placeholder) {\n    return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n  } else if (isArray(data)) {\n    for (var i = 0; i < data.length; i++) {\n      data[i] = _reconstructPacket(data[i], buffers);\n    }\n  } else if (typeof data === 'object') {\n    for (var key in data) {\n      data[key] = _reconstructPacket(data[key], buffers);\n    }\n  }\n\n  return data;\n}\n\n/**\n * Asynchronously removes Blobs or Files from data via\n * FileReader's readAsArrayBuffer method. Used before encoding\n * data as msgpack. Calls callback with the blobless data.\n *\n * @param {Object} data\n * @param {Function} callback\n * @api private\n */\n\nexports.removeBlobs = function(data, callback) {\n  function _removeBlobs(obj, curKey, containingObject) {\n    if (!obj) return obj;\n\n    // convert any blob\n    if ((withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File)) {\n      pendingBlobs++;\n\n      // async filereader\n      var fileReader = new FileReader();\n      fileReader.onload = function() { // this.result == arraybuffer\n        if (containingObject) {\n          containingObject[curKey] = this.result;\n        }\n        else {\n          bloblessData = this.result;\n        }\n\n        // if nothing pending its callback time\n        if(! --pendingBlobs) {\n          callback(bloblessData);\n        }\n      };\n\n      fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer\n    } else if (isArray(obj)) { // handle array\n      for (var i = 0; i < obj.length; i++) {\n        _removeBlobs(obj[i], i, obj);\n      }\n    } else if (typeof obj === 'object' && !isBuf(obj)) { // and object\n      for (var key in obj) {\n        _removeBlobs(obj[key], key, obj);\n      }\n    }\n  }\n\n  var pendingBlobs = 0;\n  var bloblessData = data;\n  _removeBlobs(bloblessData);\n  if (!pendingBlobs) {\n    callback(bloblessData);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/binary.js\n// module id = 6\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 7\n// module chunks = 0","\nmodule.exports = isBuf;\n\nvar withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';\nvar withNativeArrayBuffer = typeof ArrayBuffer === 'function';\n\nvar isView = function (obj) {\n  return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);\n};\n\n/**\n * Returns true if obj is a buffer or an arraybuffer.\n *\n * @api private\n */\n\nfunction isBuf(obj) {\n  return (withNativeBuffer && Buffer.isBuffer(obj)) ||\n          (withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/socket.io-parser/is-buffer.js\n// module id = 8\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar eio = require('engine.io-client');\nvar Socket = require('./socket');\nvar Emitter = require('component-emitter');\nvar parser = require('socket.io-parser');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:manager');\nvar indexOf = require('indexof');\nvar Backoff = require('backo2');\n\n/**\n * IE6+ hasOwnProperty\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports\n */\n\nmodule.exports = Manager;\n\n/**\n * `Manager` constructor.\n *\n * @param {String} engine instance or engine uri/opts\n * @param {Object} options\n * @api public\n */\n\nfunction Manager (uri, opts) {\n  if (!(this instanceof Manager)) return new Manager(uri, opts);\n  if (uri && ('object' === typeof uri)) {\n    opts = uri;\n    uri = undefined;\n  }\n  opts = opts || {};\n\n  opts.path = opts.path || '/socket.io';\n  this.nsps = {};\n  this.subs = [];\n  this.opts = opts;\n  this.reconnection(opts.reconnection !== false);\n  this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n  this.reconnectionDelay(opts.reconnectionDelay || 1000);\n  this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n  this.randomizationFactor(opts.randomizationFactor || 0.5);\n  this.backoff = new Backoff({\n    min: this.reconnectionDelay(),\n    max: this.reconnectionDelayMax(),\n    jitter: this.randomizationFactor()\n  });\n  this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n  this.readyState = 'closed';\n  this.uri = uri;\n  this.connecting = [];\n  this.lastPing = null;\n  this.encoding = false;\n  this.packetBuffer = [];\n  var _parser = opts.parser || parser;\n  this.encoder = new _parser.Encoder();\n  this.decoder = new _parser.Decoder();\n  this.autoConnect = opts.autoConnect !== false;\n  if (this.autoConnect) this.open();\n}\n\n/**\n * Propagate given event to sockets and emit on `this`\n *\n * @api private\n */\n\nManager.prototype.emitAll = function () {\n  this.emit.apply(this, arguments);\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);\n    }\n  }\n};\n\n/**\n * Update `socket.id` of all sockets\n *\n * @api private\n */\n\nManager.prototype.updateSocketIds = function () {\n  for (var nsp in this.nsps) {\n    if (has.call(this.nsps, nsp)) {\n      this.nsps[nsp].id = this.generateId(nsp);\n    }\n  }\n};\n\n/**\n * generate `socket.id` for the given `nsp`\n *\n * @param {String} nsp\n * @return {String}\n * @api private\n */\n\nManager.prototype.generateId = function (nsp) {\n  return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;\n};\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Manager.prototype);\n\n/**\n * Sets the `reconnection` config.\n *\n * @param {Boolean} true/false if it should automatically reconnect\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnection = function (v) {\n  if (!arguments.length) return this._reconnection;\n  this._reconnection = !!v;\n  return this;\n};\n\n/**\n * Sets the reconnection attempts config.\n *\n * @param {Number} max reconnection attempts before giving up\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionAttempts = function (v) {\n  if (!arguments.length) return this._reconnectionAttempts;\n  this._reconnectionAttempts = v;\n  return this;\n};\n\n/**\n * Sets the delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelay = function (v) {\n  if (!arguments.length) return this._reconnectionDelay;\n  this._reconnectionDelay = v;\n  this.backoff && this.backoff.setMin(v);\n  return this;\n};\n\nManager.prototype.randomizationFactor = function (v) {\n  if (!arguments.length) return this._randomizationFactor;\n  this._randomizationFactor = v;\n  this.backoff && this.backoff.setJitter(v);\n  return this;\n};\n\n/**\n * Sets the maximum delay between reconnections.\n *\n * @param {Number} delay\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.reconnectionDelayMax = function (v) {\n  if (!arguments.length) return this._reconnectionDelayMax;\n  this._reconnectionDelayMax = v;\n  this.backoff && this.backoff.setMax(v);\n  return this;\n};\n\n/**\n * Sets the connection timeout. `false` to disable\n *\n * @return {Manager} self or value\n * @api public\n */\n\nManager.prototype.timeout = function (v) {\n  if (!arguments.length) return this._timeout;\n  this._timeout = v;\n  return this;\n};\n\n/**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @api private\n */\n\nManager.prototype.maybeReconnectOnOpen = function () {\n  // Only try to reconnect if it's the first time we're connecting\n  if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {\n    // keeps reconnection from firing twice for the same reconnection loop\n    this.reconnect();\n  }\n};\n\n/**\n * Sets the current transport `socket`.\n *\n * @param {Function} optional, callback\n * @return {Manager} self\n * @api public\n */\n\nManager.prototype.open =\nManager.prototype.connect = function (fn, opts) {\n\n  if (~this.readyState.indexOf('open')) return this;\n\n\n  this.engine = eio(this.uri, this.opts);\n  var socket = this.engine;\n  var self = this;\n  this.readyState = 'opening';\n  this.skipReconnect = false;\n\n  // emit `open`\n  var openSub = on(socket, 'open', function () {\n    self.onopen();\n    fn && fn();\n  });\n\n  // emit `connect_error`\n  var errorSub = on(socket, 'error', function (data) {\n\n    self.cleanup();\n    self.readyState = 'closed';\n    self.emitAll('connect_error', data);\n    if (fn) {\n      var err = new Error('Connection error');\n      err.data = data;\n      fn(err);\n    } else {\n      // Only do this if there is no fn to handle the error\n      self.maybeReconnectOnOpen();\n    }\n  });\n\n  // emit `connect_timeout`\n  if (false !== this._timeout) {\n    var timeout = this._timeout;\n\n\n    if (timeout === 0) {\n      openSub.destroy(); // prevents a race condition with the 'open' event\n    }\n\n    // set timer\n    var timer = setTimeout(function () {\n\n      openSub.destroy();\n      socket.close();\n      socket.emit('error', 'timeout');\n      self.emitAll('connect_timeout', timeout);\n    }, timeout);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n\n  this.subs.push(openSub);\n  this.subs.push(errorSub);\n\n  return this;\n};\n\n/**\n * Called upon transport open.\n *\n * @api private\n */\n\nManager.prototype.onopen = function () {\n\n\n  // clear old subs\n  this.cleanup();\n\n  // mark as open\n  this.readyState = 'open';\n  this.emit('open');\n\n  // add new subs\n  var socket = this.engine;\n  this.subs.push(on(socket, 'data', bind(this, 'ondata')));\n  this.subs.push(on(socket, 'ping', bind(this, 'onping')));\n  this.subs.push(on(socket, 'pong', bind(this, 'onpong')));\n  this.subs.push(on(socket, 'error', bind(this, 'onerror')));\n  this.subs.push(on(socket, 'close', bind(this, 'onclose')));\n  this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));\n};\n\n/**\n * Called upon a ping.\n *\n * @api private\n */\n\nManager.prototype.onping = function () {\n  this.lastPing = new Date();\n  this.emitAll('ping');\n};\n\n/**\n * Called upon a packet.\n *\n * @api private\n */\n\nManager.prototype.onpong = function () {\n  this.emitAll('pong', new Date() - this.lastPing);\n};\n\n/**\n * Called with data.\n *\n * @api private\n */\n\nManager.prototype.ondata = function (data) {\n  this.decoder.add(data);\n};\n\n/**\n * Called when parser fully decodes a packet.\n *\n * @api private\n */\n\nManager.prototype.ondecoded = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon socket error.\n *\n * @api private\n */\n\nManager.prototype.onerror = function (err) {\n\n  this.emitAll('error', err);\n};\n\n/**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @api public\n */\n\nManager.prototype.socket = function (nsp, opts) {\n  var socket = this.nsps[nsp];\n  if (!socket) {\n    socket = new Socket(this, nsp, opts);\n    this.nsps[nsp] = socket;\n    var self = this;\n    socket.on('connecting', onConnecting);\n    socket.on('connect', function () {\n      socket.id = self.generateId(nsp);\n    });\n\n    if (this.autoConnect) {\n      // manually call here since connecting event is fired before listening\n      onConnecting();\n    }\n  }\n\n  function onConnecting () {\n    if (!~indexOf(self.connecting, socket)) {\n      self.connecting.push(socket);\n    }\n  }\n\n  return socket;\n};\n\n/**\n * Called upon a socket close.\n *\n * @param {Socket} socket\n */\n\nManager.prototype.destroy = function (socket) {\n  var index = indexOf(this.connecting, socket);\n  if (~index) this.connecting.splice(index, 1);\n  if (this.connecting.length) return;\n\n  this.close();\n};\n\n/**\n * Writes a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nManager.prototype.packet = function (packet) {\n\n  var self = this;\n  if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;\n\n  if (!self.encoding) {\n    // encode, then write to engine with result\n    self.encoding = true;\n    this.encoder.encode(packet, function (encodedPackets) {\n      for (var i = 0; i < encodedPackets.length; i++) {\n        self.engine.write(encodedPackets[i], packet.options);\n      }\n      self.encoding = false;\n      self.processPacketQueue();\n    });\n  } else { // add packet to the queue\n    self.packetBuffer.push(packet);\n  }\n};\n\n/**\n * If packet buffer is non-empty, begins encoding the\n * next packet in line.\n *\n * @api private\n */\n\nManager.prototype.processPacketQueue = function () {\n  if (this.packetBuffer.length > 0 && !this.encoding) {\n    var pack = this.packetBuffer.shift();\n    this.packet(pack);\n  }\n};\n\n/**\n * Clean up transport subscriptions and packet buffer.\n *\n * @api private\n */\n\nManager.prototype.cleanup = function () {\n\n\n  var subsLength = this.subs.length;\n  for (var i = 0; i < subsLength; i++) {\n    var sub = this.subs.shift();\n    sub.destroy();\n  }\n\n  this.packetBuffer = [];\n  this.encoding = false;\n  this.lastPing = null;\n\n  this.decoder.destroy();\n};\n\n/**\n * Close the current socket.\n *\n * @api private\n */\n\nManager.prototype.close =\nManager.prototype.disconnect = function () {\n\n  this.skipReconnect = true;\n  this.reconnecting = false;\n  if ('opening' === this.readyState) {\n    // `onclose` will not fire because\n    // an open event never happened\n    this.cleanup();\n  }\n  this.backoff.reset();\n  this.readyState = 'closed';\n  if (this.engine) this.engine.close();\n};\n\n/**\n * Called upon engine close.\n *\n * @api private\n */\n\nManager.prototype.onclose = function (reason) {\n\n\n  this.cleanup();\n  this.backoff.reset();\n  this.readyState = 'closed';\n  this.emit('close', reason);\n\n  if (this._reconnection && !this.skipReconnect) {\n    this.reconnect();\n  }\n};\n\n/**\n * Attempt a reconnection.\n *\n * @api private\n */\n\nManager.prototype.reconnect = function () {\n  if (this.reconnecting || this.skipReconnect) return this;\n\n  var self = this;\n\n  if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n    this.backoff.reset();\n    this.emitAll('reconnect_failed');\n    this.reconnecting = false;\n  } else {\n    var delay = this.backoff.duration();\n\n\n    this.reconnecting = true;\n    var timer = setTimeout(function () {\n      if (self.skipReconnect) return;\n\n\n      self.emitAll('reconnect_attempt', self.backoff.attempts);\n      self.emitAll('reconnecting', self.backoff.attempts);\n\n      // check again for the case socket closed in above events\n      if (self.skipReconnect) return;\n\n      self.open(function (err) {\n        if (err) {\n\n          self.reconnecting = false;\n          self.reconnect();\n          self.emitAll('reconnect_error', err.data);\n        } else {\n\n          self.onreconnect();\n        }\n      });\n    }, delay);\n\n    this.subs.push({\n      destroy: function () {\n        clearTimeout(timer);\n      }\n    });\n  }\n};\n\n/**\n * Called upon successful reconnect.\n *\n * @api private\n */\n\nManager.prototype.onreconnect = function () {\n  var attempt = this.backoff.attempts;\n  this.reconnecting = false;\n  this.backoff.reset();\n  this.updateSocketIds();\n  this.emitAll('reconnect', attempt);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/manager.js","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/index.js\n// module id = 10\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('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    : (typeof location !== 'undefined' && '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    (typeof location !== 'undefined' ? location.hostname : 'localhost');\n  this.port = opts.port || (typeof location !== 'undefined' && 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.withCredentials = false !== opts.withCredentials;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.transportOptions = opts.transportOptions || {};\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 ? true : opts.rejectUnauthorized;\n  this.forceNode = !!opts.forceNode;\n\n  // detect ReactNative environment\n  this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n  // other options for Node.js or ReactNative client\n  if (typeof self === 'undefined' || this.isReactNative) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n\n    if (opts.localAddress) {\n      this.localAddress = opts.localAddress;\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 = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('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\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  // per-transport options\n  var options = this.transportOptions[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    query: query,\n    socket: this,\n    agent: options.agent || this.agent,\n    hostname: options.hostname || this.hostname,\n    port: options.port || this.port,\n    secure: options.secure || this.secure,\n    path: options.path || this.path,\n    forceJSONP: options.forceJSONP || this.forceJSONP,\n    jsonp: options.jsonp || this.jsonp,\n    forceBase64: options.forceBase64 || this.forceBase64,\n    enablesXDR: options.enablesXDR || this.enablesXDR,\n    withCredentials: options.withCredentials || this.withCredentials,\n    timestampRequests: options.timestampRequests || this.timestampRequests,\n    timestampParam: options.timestampParam || this.timestampParam,\n    policyPort: options.policyPort || this.policyPort,\n    pfx: options.pfx || this.pfx,\n    key: options.key || this.key,\n    passphrase: options.passphrase || this.passphrase,\n    cert: options.cert || this.cert,\n    ca: options.ca || this.ca,\n    ciphers: options.ciphers || this.ciphers,\n    rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n    perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n    extraHeaders: options.extraHeaders || this.extraHeaders,\n    forceNode: options.forceNode || this.forceNode,\n    localAddress: options.localAddress || this.localAddress,\n    requestTimeout: options.requestTimeout || this.requestTimeout,\n    protocols: options.protocols || void (0),\n    isReactNative: this.isReactNative\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\n  var self = this;\n\n  if (this.transport) {\n\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\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\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\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n\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\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\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\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\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\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\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(JSON.parse(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\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\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\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\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\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\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/socket.js\n// module id = 11\n// module chunks = 0","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./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 (typeof location !== 'undefined') {\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/index.js\n// module id = 12\n// module chunks = 0","// browser shim for xmlhttprequest module\n\nvar hasCORS = require('has-cors');\nvar globalThis = require('./globalThis');\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 globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/xmlhttprequest.js\n// module id = 13\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-cors/index.js\n// module id = 14\n// module chunks = 0","module.exports = (function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  } else if (typeof window !== 'undefined') {\n    return window;\n  } else {\n    return Function('return this')(); // eslint-disable-line no-new-func\n  }\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/globalThis.browser.js\n// module id = 15\n// module chunks = 0","/* global attachEvent */\n\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = require('xmlhttprequest-ssl');\nvar Polling = require('./polling');\nvar Emitter = require('component-emitter');\nvar inherit = require('component-inherit');\nvar debug = require('debug')('engine.io-client:polling-xhr');\nvar globalThis = require('../globalThis');\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  this.requestTimeout = opts.requestTimeout;\n  this.extraHeaders = opts.extraHeaders;\n\n  if (typeof location !== 'undefined') {\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 = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\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  opts.withCredentials = this.withCredentials;\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  opts.requestTimeout = this.requestTimeout;\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\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  this.withCredentials = opts.withCredentials;\n  this.requestTimeout = opts.requestTimeout;\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\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck && 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\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 = this.withCredentials;\n    }\n\n    if (this.requestTimeout) {\n      xhr.timeout = this.requestTimeout;\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 (xhr.readyState === 2) {\n          try {\n            var contentType = xhr.getResponseHeader('Content-Type');\n            if (self.supportsBinary && contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n              xhr.responseType = 'arraybuffer';\n            }\n          } catch (e) {}\n        }\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(typeof xhr.status === 'number' ? xhr.status : 0);\n          }, 0);\n        }\n      };\n    }\n\n\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 (typeof document !== 'undefined') {\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 (typeof document !== 'undefined') {\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');\n    } catch (e) {}\n    if (contentType === 'application/octet-stream' || contentType === 'application/octet-stream; charset=UTF-8') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      data = this.xhr.responseText;\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 typeof XDomainRequest !== 'undefined' && !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 (typeof document !== 'undefined') {\n  if (typeof attachEvent === 'function') {\n    attachEvent('onunload', unloadHandler);\n  } else if (typeof addEventListener === 'function') {\n    var terminationEvent = 'onpagehide' in globalThis ? 'pagehide' : 'unload';\n    addEventListener(terminationEvent, 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-xhr.js\n// module id = 16\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parseqs = require('parseqs');\nvar parser = require('engine.io-parser');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('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 = require('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\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n\n      total++;\n      this.once('pollComplete', function () {\n\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n\n      total++;\n      this.once('drain', function () {\n\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\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\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState && packet.type === 'open') {\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\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\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n\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 && Number(this.port) !== 443) ||\n     ('http' === schema && Number(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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling.js\n// module id = 17\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('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  this.withCredentials = opts.withCredentials;\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  this.forceNode = opts.forceNode;\n\n  // results of ReactNative environment detection\n  this.isReactNative = opts.isReactNative;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n  this.localAddress = opts.localAddress;\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transport.js\n// module id = 18\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar keys = require('./keys');\nvar hasBinary = require('has-binary2');\nvar sliceBuffer = require('arraybuffer.slice');\nvar after = require('after');\nvar utf8 = require('./utf8');\n\nvar base64encoder;\nif (typeof ArrayBuffer !== 'undefined') {\n  base64encoder = require('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 = require('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 (typeof supportsBinary === 'function') {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if (typeof utf8encode === 'function') {\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 (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (typeof Blob !== 'undefined' && data instanceof 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), { strict: false }) : 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    exports.encodePacket({ type: packet.type, data: fr.result }, 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 (typeof Blob !== 'undefined' && packet.data instanceof 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 += 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, { strict: false });\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, false, 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, 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      continue;\n    }\n\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, false);\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  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  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      // 310 = char length of Number.MAX_VALUE\n      if (msgLength.length > 310) {\n        return callback(err, 0, 1);\n      }\n\n      msgLength += tailArray[i];\n    }\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/browser.js\n// module id = 19\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/keys.js\n// module id = 20\n// module chunks = 0","/* global Blob File */\n\n/*\n * Module requirements.\n */\n\nvar isArray = require('isarray');\n\nvar toString = Object.prototype.toString;\nvar withNativeBlob = typeof Blob === 'function' ||\n                        typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';\nvar withNativeFile = typeof File === 'function' ||\n                        typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Supports Buffer, ArrayBuffer, Blob and File.\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary (obj) {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (isArray(obj)) {\n    for (var i = 0, l = obj.length; i < l; i++) {\n      if (hasBinary(obj[i])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||\n    (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||\n    (withNativeBlob && obj instanceof Blob) ||\n    (withNativeFile && obj instanceof File)\n  ) {\n    return true;\n  }\n\n  // see: https://github.com/Automattic/has-binary/pull/4\n  if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {\n    return hasBinary(obj.toJSON(), true);\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  return false;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/has-binary2/index.js\n// module id = 21\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/arraybuffer.slice/index.js\n// module id = 22\n// module chunks = 0","module.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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/after/index.js\n// module id = 23\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n\nvar stringFromCharCode = String.fromCharCode;\n\n// Taken from https://mths.be/punycode\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\tvar value;\n\tvar extra;\n\twhile (counter < length) {\n\t\tvalue = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// high surrogate, and there is a next character\n\t\t\textra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n// Taken from https://mths.be/punycode\nfunction ucs2encode(array) {\n\tvar length = array.length;\n\tvar index = -1;\n\tvar value;\n\tvar output = '';\n\twhile (++index < length) {\n\t\tvalue = array[index];\n\t\tif (value > 0xFFFF) {\n\t\t\tvalue -= 0x10000;\n\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(value);\n\t}\n\treturn output;\n}\n\nfunction checkScalarValue(codePoint, strict) {\n\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\tif (strict) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n/*--------------------------------------------------------------------------*/\n\nfunction createByte(codePoint, shift) {\n\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n}\n\nfunction encodeCodePoint(codePoint, strict) {\n\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\treturn stringFromCharCode(codePoint);\n\t}\n\tvar symbol = '';\n\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t}\n\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\tif (!checkScalarValue(codePoint, strict)) {\n\t\t\tcodePoint = 0xFFFD;\n\t\t}\n\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\tsymbol += createByte(codePoint, 12);\n\t\tsymbol += createByte(codePoint, 6);\n\t}\n\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\treturn symbol;\n}\n\nfunction utf8encode(string, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tvar codePoints = ucs2decode(string);\n\tvar length = codePoints.length;\n\tvar index = -1;\n\tvar codePoint;\n\tvar byteString = '';\n\twhile (++index < length) {\n\t\tcodePoint = codePoints[index];\n\t\tbyteString += encodeCodePoint(codePoint, strict);\n\t}\n\treturn byteString;\n}\n\n/*--------------------------------------------------------------------------*/\n\nfunction readContinuationByte() {\n\tif (byteIndex >= byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\tif ((continuationByte & 0xC0) == 0x80) {\n\t\treturn continuationByte & 0x3F;\n\t}\n\n\t// If we end up here, it’s not a continuation byte\n\tthrow Error('Invalid continuation byte');\n}\n\nfunction decodeSymbol(strict) {\n\tvar byte1;\n\tvar byte2;\n\tvar byte3;\n\tvar byte4;\n\tvar codePoint;\n\n\tif (byteIndex > byteCount) {\n\t\tthrow Error('Invalid byte index');\n\t}\n\n\tif (byteIndex == byteCount) {\n\t\treturn false;\n\t}\n\n\t// Read first byte\n\tbyte1 = byteArray[byteIndex] & 0xFF;\n\tbyteIndex++;\n\n\t// 1-byte sequence (no continuation bytes)\n\tif ((byte1 & 0x80) == 0) {\n\t\treturn byte1;\n\t}\n\n\t// 2-byte sequence\n\tif ((byte1 & 0xE0) == 0xC0) {\n\t\tbyte2 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\tif (codePoint >= 0x80) {\n\t\t\treturn codePoint;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 3-byte sequence (may include unpaired surrogates)\n\tif ((byte1 & 0xF0) == 0xE0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\tif (codePoint >= 0x0800) {\n\t\t\treturn checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;\n\t\t} else {\n\t\t\tthrow Error('Invalid continuation byte');\n\t\t}\n\t}\n\n\t// 4-byte sequence\n\tif ((byte1 & 0xF8) == 0xF0) {\n\t\tbyte2 = readContinuationByte();\n\t\tbyte3 = readContinuationByte();\n\t\tbyte4 = readContinuationByte();\n\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t(byte3 << 0x06) | byte4;\n\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\treturn codePoint;\n\t\t}\n\t}\n\n\tthrow Error('Invalid UTF-8 detected');\n}\n\nvar byteArray;\nvar byteCount;\nvar byteIndex;\nfunction utf8decode(byteString, opts) {\n\topts = opts || {};\n\tvar strict = false !== opts.strict;\n\n\tbyteArray = ucs2decode(byteString);\n\tbyteCount = byteArray.length;\n\tbyteIndex = 0;\n\tvar codePoints = [];\n\tvar tmp;\n\twhile ((tmp = decodeSymbol(strict)) !== false) {\n\t\tcodePoints.push(tmp);\n\t}\n\treturn ucs2encode(codePoints);\n}\n\nmodule.exports = {\n\tversion: '2.1.2',\n\tencode: utf8encode,\n\tdecode: utf8decode\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/lib/utf8.js\n// module id = 24\n// module chunks = 0","/*\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(chars){\n  \"use strict\";\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 = chars.indexOf(base64[i]);\n      encoded2 = chars.indexOf(base64[i+1]);\n      encoded3 = chars.indexOf(base64[i+2]);\n      encoded4 = chars.indexOf(base64[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})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-parser/~/base64-arraybuffer/lib/base64-arraybuffer.js\n// module id = 25\n// module chunks = 0","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n  typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n  false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n  try {\r\n    var a = new Blob(['hi']);\r\n    return a.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n  try {\r\n    var b = new Blob([new Uint8Array([1,2])]);\r\n    return b.size === 2;\r\n  } catch(e) {\r\n    return false;\r\n  }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n  && BlobBuilder.prototype.append\r\n  && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n  return ary.map(function(chunk) {\r\n    if (chunk.buffer instanceof ArrayBuffer) {\r\n      var buf = chunk.buffer;\r\n\r\n      // if this is a subarray, make a copy so we only\r\n      // include the subarray region from the underlying buffer\r\n      if (chunk.byteLength !== buf.byteLength) {\r\n        var copy = new Uint8Array(chunk.byteLength);\r\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n        buf = copy.buffer;\r\n      }\r\n\r\n      return buf;\r\n    }\r\n\r\n    return chunk;\r\n  });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n  options = options || {};\r\n\r\n  var bb = new BlobBuilder();\r\n  mapArrayBufferViews(ary).forEach(function(part) {\r\n    bb.append(part);\r\n  });\r\n\r\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n  return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n  BlobBuilderConstructor.prototype = Blob.prototype;\r\n  BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n  if (blobSupported) {\r\n    return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n  } else if (blobBuilderSupported) {\r\n    return BlobBuilderConstructor;\r\n  } else {\r\n    return undefined;\r\n  }\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/blob/index.js\n// module id = 26\n// module chunks = 0","/**\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/parseqs/index.js\n// module id = 27\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-inherit/index.js\n// module id = 28\n// module chunks = 0","'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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/yeast/index.js\n// module id = 29\n// module chunks = 0","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\nvar globalThis = require('../globalThis');\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    callbacks = globalThis.___eio = (globalThis.___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 (typeof addEventListener === 'function') {\n    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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/polling-jsonp.js\n// module id = 30\n// module chunks = 0","/**\n * Module dependencies.\n */\n\nvar Transport = require('../transport');\nvar parser = require('engine.io-parser');\nvar parseqs = require('parseqs');\nvar inherit = require('component-inherit');\nvar yeast = require('yeast');\nvar debug = require('debug')('engine.io-client:websocket');\n\nvar BrowserWebSocket, NodeWebSocket;\n\nif (typeof WebSocket !== 'undefined') {\n  BrowserWebSocket = WebSocket;\n} else if (typeof self !== 'undefined') {\n  BrowserWebSocket = self.WebSocket || self.MozWebSocket;\n}\n\nif (typeof window === 'undefined') {\n  try {\n    NodeWebSocket = require('ws');\n  } catch (e) { }\n}\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 WebSocketImpl = BrowserWebSocket || NodeWebSocket;\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  this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;\n  this.protocols = opts.protocols;\n  if (!this.usingBrowserWebSocket) {\n    WebSocketImpl = NodeWebSocket;\n  }\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 = this.protocols;\n\n  var opts = {};\n\n  if (!this.isReactNative) {\n    opts.agent = this.agent;\n    opts.perMessageDeflate = this.perMessageDeflate;\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\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n  if (this.localAddress) {\n    opts.localAddress = this.localAddress;\n  }\n\n  try {\n    this.ws =\n      this.usingBrowserWebSocket && !this.isReactNative\n        ? protocols\n          ? new WebSocketImpl(uri, protocols)\n          : new WebSocketImpl(uri)\n        : new WebSocketImpl(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 (!self.usingBrowserWebSocket) {\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 ? 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 (self.usingBrowserWebSocket) {\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\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 && Number(this.port) !== 443) ||\n    ('ws' === schema && Number(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 !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/engine.io-client/lib/transports/websocket.js\n// module id = 31\n// module chunks = 0","\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/indexof/index.js\n// module id = 33\n// module chunks = 0","\n/**\n * Module dependencies.\n */\n\nvar parser = require('socket.io-parser');\nvar Emitter = require('component-emitter');\nvar toArray = require('to-array');\nvar on = require('./on');\nvar bind = require('component-bind');\nvar debug = require('debug')('socket.io-client:socket');\nvar parseqs = require('parseqs');\nvar hasBin = require('has-binary2');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = Socket;\n\n/**\n * Internal events (blacklisted).\n * These events can't be emitted by the user.\n *\n * @api private\n */\n\nvar events = {\n  connect: 1,\n  connect_error: 1,\n  connect_timeout: 1,\n  connecting: 1,\n  disconnect: 1,\n  error: 1,\n  reconnect: 1,\n  reconnect_attempt: 1,\n  reconnect_failed: 1,\n  reconnect_error: 1,\n  reconnecting: 1,\n  ping: 1,\n  pong: 1\n};\n\n/**\n * Shortcut to `Emitter#emit`.\n */\n\nvar emit = Emitter.prototype.emit;\n\n/**\n * `Socket` constructor.\n *\n * @api public\n */\n\nfunction Socket (io, nsp, opts) {\n  this.io = io;\n  this.nsp = nsp;\n  this.json = this; // compat\n  this.ids = 0;\n  this.acks = {};\n  this.receiveBuffer = [];\n  this.sendBuffer = [];\n  this.connected = false;\n  this.disconnected = true;\n  this.flags = {};\n  if (opts && opts.query) {\n    this.query = opts.query;\n  }\n  if (this.io.autoConnect) this.open();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Subscribe to open, close and packet events\n *\n * @api private\n */\n\nSocket.prototype.subEvents = function () {\n  if (this.subs) return;\n\n  var io = this.io;\n  this.subs = [\n    on(io, 'open', bind(this, 'onopen')),\n    on(io, 'packet', bind(this, 'onpacket')),\n    on(io, 'close', bind(this, 'onclose'))\n  ];\n};\n\n/**\n * \"Opens\" the socket.\n *\n * @api public\n */\n\nSocket.prototype.open =\nSocket.prototype.connect = function () {\n  if (this.connected) return this;\n\n  this.subEvents();\n  if (!this.io.reconnecting) this.io.open(); // ensure open\n  if ('open' === this.io.readyState) this.onopen();\n  this.emit('connecting');\n  return this;\n};\n\n/**\n * Sends a `message` event.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.send = function () {\n  var args = toArray(arguments);\n  args.unshift('message');\n  this.emit.apply(this, args);\n  return this;\n};\n\n/**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @param {String} event name\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.emit = function (ev) {\n  if (events.hasOwnProperty(ev)) {\n    emit.apply(this, arguments);\n    return this;\n  }\n\n  var args = toArray(arguments);\n  var packet = {\n    type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,\n    data: args\n  };\n\n  packet.options = {};\n  packet.options.compress = !this.flags || false !== this.flags.compress;\n\n  // event ack callback\n  if ('function' === typeof args[args.length - 1]) {\n\n    this.acks[this.ids] = args.pop();\n    packet.id = this.ids++;\n  }\n\n  if (this.connected) {\n    this.packet(packet);\n  } else {\n    this.sendBuffer.push(packet);\n  }\n\n  this.flags = {};\n\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.packet = function (packet) {\n  packet.nsp = this.nsp;\n  this.io.packet(packet);\n};\n\n/**\n * Called upon engine `open`.\n *\n * @api private\n */\n\nSocket.prototype.onopen = function () {\n\n\n  // write connect packet if necessary\n  if ('/' !== this.nsp) {\n    if (this.query) {\n      var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;\n\n      this.packet({type: parser.CONNECT, query: query});\n    } else {\n      this.packet({type: parser.CONNECT});\n    }\n  }\n};\n\n/**\n * Called upon engine `close`.\n *\n * @param {String} reason\n * @api private\n */\n\nSocket.prototype.onclose = function (reason) {\n\n  this.connected = false;\n  this.disconnected = true;\n  delete this.id;\n  this.emit('disconnect', reason);\n};\n\n/**\n * Called with socket packet.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onpacket = function (packet) {\n  var sameNamespace = packet.nsp === this.nsp;\n  var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';\n\n  if (!sameNamespace && !rootNamespaceError) return;\n\n  switch (packet.type) {\n    case parser.CONNECT:\n      this.onconnect();\n      break;\n\n    case parser.EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.BINARY_EVENT:\n      this.onevent(packet);\n      break;\n\n    case parser.ACK:\n      this.onack(packet);\n      break;\n\n    case parser.BINARY_ACK:\n      this.onack(packet);\n      break;\n\n    case parser.DISCONNECT:\n      this.ondisconnect();\n      break;\n\n    case parser.ERROR:\n      this.emit('error', packet.data);\n      break;\n  }\n};\n\n/**\n * Called upon a server event.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onevent = function (packet) {\n  var args = packet.data || [];\n\n\n  if (null != packet.id) {\n\n    args.push(this.ack(packet.id));\n  }\n\n  if (this.connected) {\n    emit.apply(this, args);\n  } else {\n    this.receiveBuffer.push(args);\n  }\n};\n\n/**\n * Produces an ack callback to emit with an event.\n *\n * @api private\n */\n\nSocket.prototype.ack = function (id) {\n  var self = this;\n  var sent = false;\n  return function () {\n    // prevent double callbacks\n    if (sent) return;\n    sent = true;\n    var args = toArray(arguments);\n\n\n    self.packet({\n      type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,\n      id: id,\n      data: args\n    });\n  };\n};\n\n/**\n * Called upon a server acknowlegement.\n *\n * @param {Object} packet\n * @api private\n */\n\nSocket.prototype.onack = function (packet) {\n  var ack = this.acks[packet.id];\n  if ('function' === typeof ack) {\n\n    ack.apply(this, packet.data);\n    delete this.acks[packet.id];\n  } else {\n\n  }\n};\n\n/**\n * Called upon server connect.\n *\n * @api private\n */\n\nSocket.prototype.onconnect = function () {\n  this.connected = true;\n  this.disconnected = false;\n  this.emit('connect');\n  this.emitBuffered();\n};\n\n/**\n * Emit buffered events (received and emitted).\n *\n * @api private\n */\n\nSocket.prototype.emitBuffered = function () {\n  var i;\n  for (i = 0; i < this.receiveBuffer.length; i++) {\n    emit.apply(this, this.receiveBuffer[i]);\n  }\n  this.receiveBuffer = [];\n\n  for (i = 0; i < this.sendBuffer.length; i++) {\n    this.packet(this.sendBuffer[i]);\n  }\n  this.sendBuffer = [];\n};\n\n/**\n * Called upon server disconnect.\n *\n * @api private\n */\n\nSocket.prototype.ondisconnect = function () {\n\n  this.destroy();\n  this.onclose('io server disconnect');\n};\n\n/**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @api private.\n */\n\nSocket.prototype.destroy = function () {\n  if (this.subs) {\n    // clean subscriptions to avoid reconnections\n    for (var i = 0; i < this.subs.length; i++) {\n      this.subs[i].destroy();\n    }\n    this.subs = null;\n  }\n\n  this.io.destroy(this);\n};\n\n/**\n * Disconnects the socket manually.\n *\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.close =\nSocket.prototype.disconnect = function () {\n  if (this.connected) {\n\n    this.packet({ type: parser.DISCONNECT });\n  }\n\n  // remove socket from pool\n  this.destroy();\n\n  if (this.connected) {\n    // fire events\n    this.onclose('io client disconnect');\n  }\n  return this;\n};\n\n/**\n * Sets the compress flag.\n *\n * @param {Boolean} if `true`, compresses the sending data\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.compress = function (compress) {\n  this.flags.compress = compress;\n  return this;\n};\n\n/**\n * Sets the binary flag\n *\n * @param {Boolean} whether the emitted data contains binary\n * @return {Socket} self\n * @api public\n */\n\nSocket.prototype.binary = function (binary) {\n  this.flags.binary = binary;\n  return this;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/socket.js","module.exports = toArray\n\nfunction toArray(list, index) {\n    var array = []\n\n    index = index || 0\n\n    for (var i = index || 0; i < list.length; i++) {\n        array[i - index] = list[i]\n    }\n\n    return array\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/to-array/index.js\n// module id = 35\n// module chunks = 0","\n/**\n * Module exports.\n */\n\nmodule.exports = on;\n\n/**\n * Helper for subscriptions.\n *\n * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`\n * @param {String} event name\n * @param {Function} callback\n * @api public\n */\n\nfunction on (obj, ev, fn) {\n  obj.on(ev, fn);\n  return {\n    destroy: function () {\n      obj.removeListener(ev, fn);\n    }\n  };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/on.js","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n  if ('string' == typeof fn) fn = obj[fn];\n  if ('function' != typeof fn) throw new Error('bind() requires a function');\n  var args = slice.call(arguments, 2);\n  return function(){\n    return fn.apply(obj, args.concat(slice.call(arguments)));\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/component-bind/index.js\n// module id = 37\n// module chunks = 0","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n  opts = opts || {};\n  this.ms = opts.min || 100;\n  this.max = opts.max || 10000;\n  this.factor = opts.factor || 2;\n  this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n  this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n  var ms = this.ms * Math.pow(this.factor, this.attempts++);\n  if (this.jitter) {\n    var rand =  Math.random();\n    var deviation = Math.floor(rand * this.jitter * ms);\n    ms = (Math.floor(rand * 10) & 1) == 0  ? ms - deviation : ms + deviation;\n  }\n  return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n  this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n  this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n  this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n  this.jitter = jitter;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backo2/index.js\n// module id = 38\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
index e44bd6c..8fb6403 100644 (file)
@@ -256,6 +256,10 @@ Manager.prototype.connect = function (fn, opts) {
     var timeout = this._timeout;
     debug('connect attempt will timeout after %d', timeout);
 
+    if (timeout === 0) {
+      openSub.destroy(); // prevents a race condition with the 'open' event
+    }
+
     // set timer
     var timer = setTimeout(function () {
       debug('connect attempt timed out after %d', timeout);
index cf441c3..a0e1d13 100644 (file)
@@ -104,7 +104,7 @@ Socket.prototype.connect = function () {
   if (this.connected) return this;
 
   this.subEvents();
-  this.io.open(); // ensure open
+  if (!this.io.reconnecting) this.io.open(); // ensure open
   if ('open' === this.io.readyState) this.onopen();
   this.emit('connecting');
   return this;
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.coveralls.yml b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.coveralls.yml
new file mode 100644 (file)
index 0000000..20a7068
--- /dev/null
@@ -0,0 +1 @@
+repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.eslintrc b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.eslintrc
new file mode 100644 (file)
index 0000000..146371e
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "env": {
+    "browser": true,
+    "node": true
+  },
+  "globals": {
+    "chrome": true
+  },
+  "rules": {
+    "no-console": 0,
+    "no-empty": [1, { "allowEmptyCatch": true }]
+  },
+  "extends": "eslint:recommended"
+}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.npmignore b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.npmignore
new file mode 100644 (file)
index 0000000..5f60eec
--- /dev/null
@@ -0,0 +1,9 @@
+support
+test
+examples
+example
+*.sock
+dist
+yarn.lock
+coverage
+bower.json
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.travis.yml b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/.travis.yml
new file mode 100644 (file)
index 0000000..a764300
--- /dev/null
@@ -0,0 +1,20 @@
+sudo: false
+
+language: node_js
+
+node_js:
+  - "4"
+  - "6"
+  - "8"
+
+install:
+  - make install
+
+script:
+  - make lint
+  - make test
+
+matrix:
+  include:
+  - node_js: '8'
+    env: BROWSER=1
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/CHANGELOG.md b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/CHANGELOG.md
new file mode 100644 (file)
index 0000000..820d21e
--- /dev/null
@@ -0,0 +1,395 @@
+
+3.1.0 / 2017-09-26
+==================
+
+  * Add `DEBUG_HIDE_DATE` env var (#486)
+  * Remove ReDoS regexp in %o formatter (#504)
+  * Remove "component" from package.json
+  * Remove `component.json`
+  * Ignore package-lock.json
+  * Examples: fix colors printout
+  * Fix: browser detection
+  * Fix: spelling mistake (#496, @EdwardBetts)
+
+3.0.1 / 2017-08-24
+==================
+
+  * Fix: Disable colors in Edge and Internet Explorer (#489)
+
+3.0.0 / 2017-08-08
+==================
+
+  * Breaking: Remove DEBUG_FD (#406)
+  * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418)
+  * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408)
+  * Addition: document `enabled` flag (#465)
+  * Addition: add 256 colors mode (#481)
+  * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440)
+  * Update: component: update "ms" to v2.0.0
+  * Update: separate the Node and Browser tests in Travis-CI
+  * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots
+  * Update: separate Node.js and web browser examples for organization
+  * Update: update "browserify" to v14.4.0
+  * Fix: fix Readme typo (#473)
+
+2.6.9 / 2017-09-22
+==================
+
+  * remove ReDoS regexp in %o formatter (#504)
+
+2.6.8 / 2017-05-18
+==================
+
+  * Fix: Check for undefined on browser globals (#462, @marbemac)
+
+2.6.7 / 2017-05-16
+==================
+
+  * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom)
+  * Fix: Inline extend function in node implementation (#452, @dougwilson)
+  * Docs: Fix typo (#455, @msasad)
+
+2.6.5 / 2017-04-27
+==================
+  
+  * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek)
+  * Misc: clean up browser reference checks (#447, @thebigredgeek)
+  * Misc: add npm-debug.log to .gitignore (@thebigredgeek)
+
+
+2.6.4 / 2017-04-20
+==================
+
+  * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo)
+  * Chore: ignore bower.json in npm installations. (#437, @joaovieira)
+  * Misc: update "ms" to v0.7.3 (@tootallnate)
+
+2.6.3 / 2017-03-13
+==================
+
+  * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts)
+  * Docs: Changelog fix (@thebigredgeek)
+
+2.6.2 / 2017-03-10
+==================
+
+  * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin)
+  * Docs: Add backers and sponsors from Open Collective (#422, @piamancini)
+  * Docs: Add Slackin invite badge (@tootallnate)
+
+2.6.1 / 2017-02-10
+==================
+
+  * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
+  * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
+  * Fix: IE8 "Expected identifier" error (#414, @vgoma)
+  * Fix: Namespaces would not disable once enabled (#409, @musikov)
+
+2.6.0 / 2016-12-28
+==================
+
+  * Fix: added better null pointer checks for browser useColors (@thebigredgeek)
+  * Improvement: removed explicit `window.debug` export (#404, @tootallnate)
+  * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
+
+2.5.2 / 2016-12-25
+==================
+
+  * Fix: reference error on window within webworkers (#393, @KlausTrainer)
+  * Docs: fixed README typo (#391, @lurch)
+  * Docs: added notice about v3 api discussion (@thebigredgeek)
+
+2.5.1 / 2016-12-20
+==================
+
+  * Fix: babel-core compatibility
+
+2.5.0 / 2016-12-20
+==================
+
+  * Fix: wrong reference in bower file (@thebigredgeek)
+  * Fix: webworker compatibility (@thebigredgeek)
+  * Fix: output formatting issue (#388, @kribblo)
+  * Fix: babel-loader compatibility (#383, @escwald)
+  * Misc: removed built asset from repo and publications (@thebigredgeek)
+  * Misc: moved source files to /src (#378, @yamikuronue)
+  * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
+  * Test: coveralls integration (#378, @yamikuronue)
+  * Docs: simplified language in the opening paragraph (#373, @yamikuronue)
+
+2.4.5 / 2016-12-17
+==================
+
+  * Fix: `navigator` undefined in Rhino (#376, @jochenberger)
+  * Fix: custom log function (#379, @hsiliev)
+  * Improvement: bit of cleanup + linting fixes (@thebigredgeek)
+  * Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
+  * Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
+
+2.4.4 / 2016-12-14
+==================
+
+  * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
+
+2.4.3 / 2016-12-14
+==================
+
+  * Fix: navigation.userAgent error for react native (#364, @escwald)
+
+2.4.2 / 2016-12-14
+==================
+
+  * Fix: browser colors (#367, @tootallnate)
+  * Misc: travis ci integration (@thebigredgeek)
+  * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
+
+2.4.1 / 2016-12-13
+==================
+
+  * Fix: typo that broke the package (#356)
+
+2.4.0 / 2016-12-13
+==================
+
+  * Fix: bower.json references unbuilt src entry point (#342, @justmatt)
+  * Fix: revert "handle regex special characters" (@tootallnate)
+  * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
+  * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
+  * Improvement: allow colors in workers (#335, @botverse)
+  * Improvement: use same color for same namespace. (#338, @lchenay)
+
+2.3.3 / 2016-11-09
+==================
+
+  * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
+  * Fix: Returning `localStorage` saved values (#331, Levi Thomason)
+  * Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
+
+2.3.2 / 2016-11-09
+==================
+
+  * Fix: be super-safe in index.js as well (@TooTallNate)
+  * Fix: should check whether process exists (Tom Newby)
+
+2.3.1 / 2016-11-09
+==================
+
+  * Fix: Added electron compatibility (#324, @paulcbetts)
+  * Improvement: Added performance optimizations (@tootallnate)
+  * Readme: Corrected PowerShell environment variable example (#252, @gimre)
+  * Misc: Removed yarn lock file from source control (#321, @fengmk2)
+
+2.3.0 / 2016-11-07
+==================
+
+  * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
+  * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
+  * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
+  * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
+  * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
+  * Package: Update "ms" to 0.7.2 (#315, @DevSide)
+  * Package: removed superfluous version property from bower.json (#207 @kkirsche)
+  * Readme: fix USE_COLORS to DEBUG_COLORS
+  * Readme: Doc fixes for format string sugar (#269, @mlucool)
+  * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
+  * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
+  * Readme: better docs for browser support (#224, @matthewmueller)
+  * Tooling: Added yarn integration for development (#317, @thebigredgeek)
+  * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
+  * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
+  * Misc: Updated contributors (@thebigredgeek)
+
+2.2.0 / 2015-05-09
+==================
+
+  * package: update "ms" to v0.7.1 (#202, @dougwilson)
+  * README: add logging to file example (#193, @DanielOchoa)
+  * README: fixed a typo (#191, @amir-s)
+  * browser: expose `storage` (#190, @stephenmathieson)
+  * Makefile: add a `distclean` target (#189, @stephenmathieson)
+
+2.1.3 / 2015-03-13
+==================
+
+  * Updated stdout/stderr example (#186)
+  * Updated example/stdout.js to match debug current behaviour
+  * Renamed example/stderr.js to stdout.js
+  * Update Readme.md (#184)
+  * replace high intensity foreground color for bold (#182, #183)
+
+2.1.2 / 2015-03-01
+==================
+
+  * dist: recompile
+  * update "ms" to v0.7.0
+  * package: update "browserify" to v9.0.3
+  * component: fix "ms.js" repo location
+  * changed bower package name
+  * updated documentation about using debug in a browser
+  * fix: security error on safari (#167, #168, @yields)
+
+2.1.1 / 2014-12-29
+==================
+
+  * browser: use `typeof` to check for `console` existence
+  * browser: check for `console.log` truthiness (fix IE 8/9)
+  * browser: add support for Chrome apps
+  * Readme: added Windows usage remarks
+  * Add `bower.json` to properly support bower install
+
+2.1.0 / 2014-10-15
+==================
+
+  * node: implement `DEBUG_FD` env variable support
+  * package: update "browserify" to v6.1.0
+  * package: add "license" field to package.json (#135, @panuhorsmalahti)
+
+2.0.0 / 2014-09-01
+==================
+
+  * package: update "browserify" to v5.11.0
+  * node: use stderr rather than stdout for logging (#29, @stephenmathieson)
+
+1.0.4 / 2014-07-15
+==================
+
+  * dist: recompile
+  * example: remove `console.info()` log usage
+  * example: add "Content-Type" UTF-8 header to browser example
+  * browser: place %c marker after the space character
+  * browser: reset the "content" color via `color: inherit`
+  * browser: add colors support for Firefox >= v31
+  * debug: prefer an instance `log()` function over the global one (#119)
+  * Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
+
+1.0.3 / 2014-07-09
+==================
+
+  * Add support for multiple wildcards in namespaces (#122, @seegno)
+  * browser: fix lint
+
+1.0.2 / 2014-06-10
+==================
+
+  * browser: update color palette (#113, @gscottolson)
+  * common: make console logging function configurable (#108, @timoxley)
+  * node: fix %o colors on old node <= 0.8.x
+  * Makefile: find node path using shell/which (#109, @timoxley)
+
+1.0.1 / 2014-06-06
+==================
+
+  * browser: use `removeItem()` to clear localStorage
+  * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
+  * package: add "contributors" section
+  * node: fix comment typo
+  * README: list authors
+
+1.0.0 / 2014-06-04
+==================
+
+  * make ms diff be global, not be scope
+  * debug: ignore empty strings in enable()
+  * node: make DEBUG_COLORS able to disable coloring
+  * *: export the `colors` array
+  * npmignore: don't publish the `dist` dir
+  * Makefile: refactor to use browserify
+  * package: add "browserify" as a dev dependency
+  * Readme: add Web Inspector Colors section
+  * node: reset terminal color for the debug content
+  * node: map "%o" to `util.inspect()`
+  * browser: map "%j" to `JSON.stringify()`
+  * debug: add custom "formatters"
+  * debug: use "ms" module for humanizing the diff
+  * Readme: add "bash" syntax highlighting
+  * browser: add Firebug color support
+  * browser: add colors for WebKit browsers
+  * node: apply log to `console`
+  * rewrite: abstract common logic for Node & browsers
+  * add .jshintrc file
+
+0.8.1 / 2014-04-14
+==================
+
+  * package: re-add the "component" section
+
+0.8.0 / 2014-03-30
+==================
+
+  * add `enable()` method for nodejs. Closes #27
+  * change from stderr to stdout
+  * remove unnecessary index.js file
+
+0.7.4 / 2013-11-13
+==================
+
+  * remove "browserify" key from package.json (fixes something in browserify)
+
+0.7.3 / 2013-10-30
+==================
+
+  * fix: catch localStorage security error when cookies are blocked (Chrome)
+  * add debug(err) support. Closes #46
+  * add .browser prop to package.json. Closes #42
+
+0.7.2 / 2013-02-06
+==================
+
+  * fix package.json
+  * fix: Mobile Safari (private mode) is broken with debug
+  * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
+
+0.7.1 / 2013-02-05
+==================
+
+  * add repository URL to package.json
+  * add DEBUG_COLORED to force colored output
+  * add browserify support
+  * fix component. Closes #24
+
+0.7.0 / 2012-05-04
+==================
+
+  * Added .component to package.json
+  * Added debug.component.js build
+
+0.6.0 / 2012-03-16
+==================
+
+  * Added support for "-" prefix in DEBUG [Vinay Pulim]
+  * Added `.enabled` flag to the node version [TooTallNate]
+
+0.5.0 / 2012-02-02
+==================
+
+  * Added: humanize diffs. Closes #8
+  * Added `debug.disable()` to the CS variant
+  * Removed padding. Closes #10
+  * Fixed: persist client-side variant again. Closes #9
+
+0.4.0 / 2012-02-01
+==================
+
+  * Added browser variant support for older browsers [TooTallNate]
+  * Added `debug.enable('project:*')` to browser variant [TooTallNate]
+  * Added padding to diff (moved it to the right)
+
+0.3.0 / 2012-01-26
+==================
+
+  * Added millisecond diff when isatty, otherwise UTC string
+
+0.2.0 / 2012-01-22
+==================
+
+  * Added wildcard support
+
+0.1.0 / 2011-12-02
+==================
+
+  * Added: remove colors unless stderr isatty [TooTallNate]
+
+0.0.1 / 2010-01-03
+==================
+
+  * Initial release
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/LICENSE b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/LICENSE
new file mode 100644 (file)
index 0000000..658c933
--- /dev/null
@@ -0,0 +1,19 @@
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
+and associated documentation files (the 'Software'), to deal in the Software without restriction, 
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial 
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/Makefile b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/Makefile
new file mode 100644 (file)
index 0000000..3ddd136
--- /dev/null
@@ -0,0 +1,58 @@
+# get Makefile directory name: http://stackoverflow.com/a/5982798/376773
+THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)
+
+# BIN directory
+BIN := $(THIS_DIR)/node_modules/.bin
+
+# Path
+PATH := node_modules/.bin:$(PATH)
+SHELL := /bin/bash
+
+# applications
+NODE ?= $(shell which node)
+YARN ?= $(shell which yarn)
+PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm))
+BROWSERIFY ?= $(NODE) $(BIN)/browserify
+
+install: node_modules
+
+browser: dist/debug.js
+
+node_modules: package.json
+       @NODE_ENV= $(PKG) install
+       @touch node_modules
+
+dist/debug.js: src/*.js node_modules
+       @mkdir -p dist
+       @$(BROWSERIFY) \
+               --standalone debug \
+               . > dist/debug.js
+
+lint:
+       @eslint *.js src/*.js
+
+test-node:
+       @istanbul cover node_modules/mocha/bin/_mocha -- test/**.js
+       @cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
+
+test-browser:
+       @$(MAKE) browser
+       @karma start --single-run
+
+test-all:
+       @concurrently \
+               "make test-node" \
+               "make test-browser"
+
+test:
+       @if [ "x$(BROWSER)" = "x" ]; then \
+               $(MAKE) test-node; \
+               else \
+               $(MAKE) test-browser; \
+       fi
+
+clean:
+       rimraf dist coverage
+
+.PHONY: browser install clean lint test test-all test-node test-browser
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/README.md b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/README.md
new file mode 100644 (file)
index 0000000..8e754d1
--- /dev/null
@@ -0,0 +1,368 @@
+# debug
+[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug)  [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master)  [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers)
+[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors)
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.png">
+
+A tiny JavaScript debugging utility modelled after Node.js core's debugging
+technique. Works in Node.js and web browsers.
+
+## Installation
+
+```bash
+$ npm install debug
+```
+
+## Usage
+
+`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.
+
+Example [_app.js_](./examples/node/app.js):
+
+```js
+var debug = require('debug')('http')
+  , http = require('http')
+  , name = 'My App';
+
+// fake app
+
+debug('booting %o', name);
+
+http.createServer(function(req, res){
+  debug(req.method + ' ' + req.url);
+  res.end('hello\n');
+}).listen(3000, function(){
+  debug('listening');
+});
+
+// fake worker of some kind
+
+require('./worker');
+```
+
+Example [_worker.js_](./examples/node/worker.js):
+
+```js
+var a = require('debug')('worker:a')
+  , b = require('debug')('worker:b');
+
+function work() {
+  a('doing lots of uninteresting work');
+  setTimeout(work, Math.random() * 1000);
+}
+
+work();
+
+function workb() {
+  b('doing some work');
+  setTimeout(workb, Math.random() * 2000);
+}
+
+workb();
+```
+
+The `DEBUG` environment variable is then used to enable these based on space or
+comma-delimited names.
+
+Here are some examples:
+
+<img width="647" alt="screen shot 2017-08-08 at 12 53 04 pm" src="https://user-images.githubusercontent.com/71256/29091703-a6302cdc-7c38-11e7-8304-7c0b3bc600cd.png">
+<img width="647" alt="screen shot 2017-08-08 at 12 53 38 pm" src="https://user-images.githubusercontent.com/71256/29091700-a62a6888-7c38-11e7-800b-db911291ca2b.png">
+<img width="647" alt="screen shot 2017-08-08 at 12 53 25 pm" src="https://user-images.githubusercontent.com/71256/29091701-a62ea114-7c38-11e7-826a-2692bedca740.png">
+
+#### Windows note
+
+On Windows the environment variable is set using the `set` command.
+
+```cmd
+set DEBUG=*,-not_this
+```
+
+Note that PowerShell uses different syntax to set environment variables.
+
+```cmd
+$env:DEBUG = "*,-not_this"
+```
+
+Then, run the program to be debugged as usual.
+
+
+## Namespace Colors
+
+Every debug instance has a color generated for it based on its namespace name.
+This helps when visually parsing the debug output to identify which debug instance
+a debug line belongs to.
+
+#### Node.js
+
+In Node.js, colors are enabled when stderr is a TTY. You also _should_ install
+the [`supports-color`](https://npmjs.org/supports-color) module alongside debug,
+otherwise debug will only use a small handful of basic colors.
+
+<img width="521" src="https://user-images.githubusercontent.com/71256/29092181-47f6a9e6-7c3a-11e7-9a14-1928d8a711cd.png">
+
+#### Web Browser
+
+Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
+option. These are WebKit web inspectors, Firefox ([since version
+31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
+and the Firebug plugin for Firefox (any version).
+
+<img width="524" src="https://user-images.githubusercontent.com/71256/29092033-b65f9f2e-7c39-11e7-8e32-f6f0d8e865c1.png">
+
+
+## Millisecond diff
+
+When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.png">
+
+When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below:
+
+<img width="647" src="https://user-images.githubusercontent.com/71256/29091956-6bd78372-7c39-11e7-8c55-c948396d6edd.png">
+
+
+## Conventions
+
+If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".  If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable.  You can then use it for normal output as well as debug output.
+
+## Wildcards
+
+The `*` character may be used as a wildcard. Suppose for example your library has
+debuggers named "connect:bodyParser", "connect:compress", "connect:session",
+instead of listing all three with
+`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do
+`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
+
+You can also exclude specific debuggers by prefixing them with a "-" character.
+For example, `DEBUG=*,-connect:*` would include all debuggers except those
+starting with "connect:".
+
+## Environment Variables
+
+When running through Node.js, you can set a few environment variables that will
+change the behavior of the debug logging:
+
+| Name      | Purpose                                         |
+|-----------|-------------------------------------------------|
+| `DEBUG`   | Enables/disables specific debugging namespaces. |
+| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY).  |
+| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |
+| `DEBUG_DEPTH` | Object inspection depth.                    |
+| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |
+
+
+__Note:__ The environment variables beginning with `DEBUG_` end up being
+converted into an Options object that gets used with `%o`/`%O` formatters.
+See the Node.js documentation for
+[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)
+for the complete list.
+
+## Formatters
+
+Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting.
+Below are the officially supported formatters:
+
+| Formatter | Representation |
+|-----------|----------------|
+| `%O`      | Pretty-print an Object on multiple lines. |
+| `%o`      | Pretty-print an Object all on a single line. |
+| `%s`      | String. |
+| `%d`      | Number (both integer and float). |
+| `%j`      | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |
+| `%%`      | Single percent sign ('%'). This does not consume an argument. |
+
+
+### Custom formatters
+
+You can add custom formatters by extending the `debug.formatters` object.
+For example, if you wanted to add support for rendering a Buffer as hex with
+`%h`, you could do something like:
+
+```js
+const createDebug = require('debug')
+createDebug.formatters.h = (v) => {
+  return v.toString('hex')
+}
+
+// …elsewhere
+const debug = createDebug('foo')
+debug('this is hex: %h', new Buffer('hello world'))
+//   foo this is hex: 68656c6c6f20776f726c6421 +0ms
+```
+
+
+## Browser Support
+
+You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),
+or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),
+if you don't want to build it yourself.
+
+Debug's enable state is currently persisted by `localStorage`.
+Consider the situation shown below where you have `worker:a` and `worker:b`,
+and wish to debug both. You can enable this using `localStorage.debug`:
+
+```js
+localStorage.debug = 'worker:*'
+```
+
+And then refresh the page.
+
+```js
+a = debug('worker:a');
+b = debug('worker:b');
+
+setInterval(function(){
+  a('doing some work');
+}, 1000);
+
+setInterval(function(){
+  b('doing some work');
+}, 1200);
+```
+
+
+## Output streams
+
+  By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:
+
+Example [_stdout.js_](./examples/node/stdout.js):
+
+```js
+var debug = require('debug');
+var error = debug('app:error');
+
+// by default stderr is used
+error('goes to stderr!');
+
+var log = debug('app:log');
+// set this namespace to log via console.log
+log.log = console.log.bind(console); // don't forget to bind to console!
+log('goes to stdout');
+error('still goes to stderr!');
+
+// set all output to go via console.info
+// overrides all per-namespace log settings
+debug.log = console.info.bind(console);
+error('now goes to stdout via console.info');
+log('still goes to stdout, but via console.info now');
+```
+
+## Checking whether a debug target is enabled
+
+After you've created a debug instance, you can determine whether or not it is
+enabled by checking the `enabled` property:
+
+```javascript
+const debug = require('debug')('http');
+
+if (debug.enabled) {
+  // do stuff...
+}
+```
+
+You can also manually toggle this property to force the debug instance to be
+enabled or disabled.
+
+
+## Authors
+
+ - TJ Holowaychuk
+ - Nathan Rajlich
+ - Andrew Rhyne
+
+## Backers
+
+Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)]
+
+<a href="https://opencollective.com/debug/backer/0/website" target="_blank"><img src="https://opencollective.com/debug/backer/0/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/1/website" target="_blank"><img src="https://opencollective.com/debug/backer/1/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/2/website" target="_blank"><img src="https://opencollective.com/debug/backer/2/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/3/website" target="_blank"><img src="https://opencollective.com/debug/backer/3/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/4/website" target="_blank"><img src="https://opencollective.com/debug/backer/4/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/5/website" target="_blank"><img src="https://opencollective.com/debug/backer/5/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/6/website" target="_blank"><img src="https://opencollective.com/debug/backer/6/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/7/website" target="_blank"><img src="https://opencollective.com/debug/backer/7/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/8/website" target="_blank"><img src="https://opencollective.com/debug/backer/8/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/9/website" target="_blank"><img src="https://opencollective.com/debug/backer/9/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/10/website" target="_blank"><img src="https://opencollective.com/debug/backer/10/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/11/website" target="_blank"><img src="https://opencollective.com/debug/backer/11/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/12/website" target="_blank"><img src="https://opencollective.com/debug/backer/12/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/13/website" target="_blank"><img src="https://opencollective.com/debug/backer/13/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/14/website" target="_blank"><img src="https://opencollective.com/debug/backer/14/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/15/website" target="_blank"><img src="https://opencollective.com/debug/backer/15/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/16/website" target="_blank"><img src="https://opencollective.com/debug/backer/16/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/17/website" target="_blank"><img src="https://opencollective.com/debug/backer/17/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/18/website" target="_blank"><img src="https://opencollective.com/debug/backer/18/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/19/website" target="_blank"><img src="https://opencollective.com/debug/backer/19/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/20/website" target="_blank"><img src="https://opencollective.com/debug/backer/20/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/21/website" target="_blank"><img src="https://opencollective.com/debug/backer/21/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/22/website" target="_blank"><img src="https://opencollective.com/debug/backer/22/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/23/website" target="_blank"><img src="https://opencollective.com/debug/backer/23/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/24/website" target="_blank"><img src="https://opencollective.com/debug/backer/24/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/25/website" target="_blank"><img src="https://opencollective.com/debug/backer/25/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/26/website" target="_blank"><img src="https://opencollective.com/debug/backer/26/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/27/website" target="_blank"><img src="https://opencollective.com/debug/backer/27/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/28/website" target="_blank"><img src="https://opencollective.com/debug/backer/28/avatar.svg"></a>
+<a href="https://opencollective.com/debug/backer/29/website" target="_blank"><img src="https://opencollective.com/debug/backer/29/avatar.svg"></a>
+
+
+## Sponsors
+
+Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)]
+
+<a href="https://opencollective.com/debug/sponsor/0/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/0/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/1/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/1/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/2/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/2/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/3/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/3/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/4/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/4/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/5/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/5/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/6/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/6/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/7/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/7/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/8/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/8/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/9/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/9/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/10/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/10/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/11/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/11/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/12/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/12/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/13/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/13/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/14/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/14/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/15/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/15/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/16/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/16/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/17/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/17/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/18/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/18/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/19/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/19/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/20/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/20/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/21/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/21/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/22/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/22/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/23/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/23/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/24/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/24/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/25/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/25/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/26/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/26/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/27/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/27/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/28/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/28/avatar.svg"></a>
+<a href="https://opencollective.com/debug/sponsor/29/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/29/avatar.svg"></a>
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2014-2017 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/karma.conf.js b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/karma.conf.js
new file mode 100644 (file)
index 0000000..103a82d
--- /dev/null
@@ -0,0 +1,70 @@
+// Karma configuration
+// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC)
+
+module.exports = function(config) {
+  config.set({
+
+    // base path that will be used to resolve all patterns (eg. files, exclude)
+    basePath: '',
+
+
+    // frameworks to use
+    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+    frameworks: ['mocha', 'chai', 'sinon'],
+
+
+    // list of files / patterns to load in the browser
+    files: [
+      'dist/debug.js',
+      'test/*spec.js'
+    ],
+
+
+    // list of files to exclude
+    exclude: [
+      'src/node.js'
+    ],
+
+
+    // preprocess matching files before serving them to the browser
+    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
+    preprocessors: {
+    },
+
+    // test results reporter to use
+    // possible values: 'dots', 'progress'
+    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
+    reporters: ['progress'],
+
+
+    // web server port
+    port: 9876,
+
+
+    // enable / disable colors in the output (reporters and logs)
+    colors: true,
+
+
+    // level of logging
+    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+    logLevel: config.LOG_INFO,
+
+
+    // enable / disable watching file and executing tests whenever any file changes
+    autoWatch: true,
+
+
+    // start these browsers
+    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
+    browsers: ['PhantomJS'],
+
+
+    // Continuous Integration mode
+    // if true, Karma captures browsers, runs the tests and exits
+    singleRun: false,
+
+    // Concurrency level
+    // how many browser should be started simultaneous
+    concurrency: Infinity
+  })
+}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/node.js b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/node.js
new file mode 100644 (file)
index 0000000..7fc36fe
--- /dev/null
@@ -0,0 +1 @@
+module.exports = require('./src/node');
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/package.json b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/package.json
new file mode 100644 (file)
index 0000000..e025548
--- /dev/null
@@ -0,0 +1,86 @@
+{
+  "_args": [
+    [
+      "debug@3.1.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "debug@3.1.0",
+  "_id": "debug@3.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+  "_location": "/socket.io/socket.io-client/debug",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "debug@3.1.0",
+    "name": "debug",
+    "escapedName": "debug",
+    "rawSpec": "3.1.0",
+    "saveSpec": null,
+    "fetchSpec": "3.1.0"
+  },
+  "_requiredBy": [
+    "/socket.io/socket.io-client",
+    "/socket.io/socket.io-client/socket.io-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+  "_spec": "3.1.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "TJ Holowaychuk",
+    "email": "tj@vision-media.ca"
+  },
+  "browser": "./src/browser.js",
+  "bugs": {
+    "url": "https://github.com/visionmedia/debug/issues"
+  },
+  "contributors": [
+    {
+      "name": "Nathan Rajlich",
+      "email": "nathan@tootallnate.net",
+      "url": "http://n8.io"
+    },
+    {
+      "name": "Andrew Rhyne",
+      "email": "rhyneandrew@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "ms": "2.0.0"
+  },
+  "description": "small debugging utility",
+  "devDependencies": {
+    "browserify": "14.4.0",
+    "chai": "^3.5.0",
+    "concurrently": "^3.1.0",
+    "coveralls": "^2.11.15",
+    "eslint": "^3.12.1",
+    "istanbul": "^0.4.5",
+    "karma": "^1.3.0",
+    "karma-chai": "^0.1.0",
+    "karma-mocha": "^1.3.0",
+    "karma-phantomjs-launcher": "^1.0.2",
+    "karma-sinon": "^1.0.5",
+    "mocha": "^3.2.0",
+    "mocha-lcov-reporter": "^1.2.0",
+    "rimraf": "^2.5.4",
+    "sinon": "^1.17.6",
+    "sinon-chai": "^2.8.0"
+  },
+  "homepage": "https://github.com/visionmedia/debug#readme",
+  "keywords": [
+    "debug",
+    "log",
+    "debugger"
+  ],
+  "license": "MIT",
+  "main": "./src/index.js",
+  "name": "debug",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/visionmedia/debug.git"
+  },
+  "version": "3.1.0"
+}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/browser.js b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/browser.js
new file mode 100644 (file)
index 0000000..f5149ff
--- /dev/null
@@ -0,0 +1,195 @@
+/**
+ * This is the web browser implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = 'undefined' != typeof chrome
+               && 'undefined' != typeof chrome.storage
+                  ? chrome.storage.local
+                  : localstorage();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
+  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
+  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
+  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
+  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
+  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
+  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
+  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
+  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
+  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
+  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+function useColors() {
+  // NB: In an Electron preload script, document will be defined but not fully
+  // initialized. Since we know we're in Chrome, we'll just detect this case
+  // explicitly
+  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
+    return true;
+  }
+
+  // Internet Explorer and Edge do not support colors.
+  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+    return false;
+  }
+
+  // is webkit? http://stackoverflow.com/a/16459606/376773
+  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+    // is firebug? http://stackoverflow.com/a/398120/376773
+    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+    // is firefox >= v31?
+    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+    // double check webkit in userAgent just in case we are in a worker
+    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+exports.formatters.j = function(v) {
+  try {
+    return JSON.stringify(v);
+  } catch (err) {
+    return '[UnexpectedJSONParseError]: ' + err.message;
+  }
+};
+
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+  var useColors = this.useColors;
+
+  args[0] = (useColors ? '%c' : '')
+    + this.namespace
+    + (useColors ? ' %c' : ' ')
+    + args[0]
+    + (useColors ? '%c ' : ' ')
+    + '+' + exports.humanize(this.diff);
+
+  if (!useColors) return;
+
+  var c = 'color: ' + this.color;
+  args.splice(1, 0, c, 'color: inherit')
+
+  // the final "%c" is somewhat tricky, because there could be other
+  // arguments passed either before or after the %c, so we need to
+  // figure out the correct index to insert the CSS into
+  var index = 0;
+  var lastC = 0;
+  args[0].replace(/%[a-zA-Z%]/g, function(match) {
+    if ('%%' === match) return;
+    index++;
+    if ('%c' === match) {
+      // we only are interested in the *last* %c
+      // (the user may have provided their own)
+      lastC = index;
+    }
+  });
+
+  args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.log()` when available.
+ * No-op when `console.log` is not a "function".
+ *
+ * @api public
+ */
+
+function log() {
+  // this hackery is required for IE8/9, where
+  // the `console.log` function doesn't have 'apply'
+  return 'object' === typeof console
+    && console.log
+    && Function.prototype.apply.call(console.log, console, arguments);
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+  try {
+    if (null == namespaces) {
+      exports.storage.removeItem('debug');
+    } else {
+      exports.storage.debug = namespaces;
+    }
+  } catch(e) {}
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+  var r;
+  try {
+    r = exports.storage.debug;
+  } catch(e) {}
+
+  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+  if (!r && typeof process !== 'undefined' && 'env' in process) {
+    r = process.env.DEBUG;
+  }
+
+  return r;
+}
+
+/**
+ * Enable namespaces listed in `localStorage.debug` initially.
+ */
+
+exports.enable(load());
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+  try {
+    return window.localStorage;
+  } catch (e) {}
+}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/debug.js b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/debug.js
new file mode 100644 (file)
index 0000000..77e6384
--- /dev/null
@@ -0,0 +1,225 @@
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
+exports.coerce = coerce;
+exports.disable = disable;
+exports.enable = enable;
+exports.enabled = enabled;
+exports.humanize = require('ms');
+
+/**
+ * Active `debug` instances.
+ */
+exports.instances = [];
+
+/**
+ * The currently active debug mode names, and names to skip.
+ */
+
+exports.names = [];
+exports.skips = [];
+
+/**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+
+exports.formatters = {};
+
+/**
+ * Select a color.
+ * @param {String} namespace
+ * @return {Number}
+ * @api private
+ */
+
+function selectColor(namespace) {
+  var hash = 0, i;
+
+  for (i in namespace) {
+    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
+    hash |= 0; // Convert to 32bit integer
+  }
+
+  return exports.colors[Math.abs(hash) % exports.colors.length];
+}
+
+/**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+
+function createDebug(namespace) {
+
+  var prevTime;
+
+  function debug() {
+    // disabled?
+    if (!debug.enabled) return;
+
+    var self = debug;
+
+    // set `diff` timestamp
+    var curr = +new Date();
+    var ms = curr - (prevTime || curr);
+    self.diff = ms;
+    self.prev = prevTime;
+    self.curr = curr;
+    prevTime = curr;
+
+    // turn the `arguments` into a proper Array
+    var args = new Array(arguments.length);
+    for (var i = 0; i < args.length; i++) {
+      args[i] = arguments[i];
+    }
+
+    args[0] = exports.coerce(args[0]);
+
+    if ('string' !== typeof args[0]) {
+      // anything else let's inspect with %O
+      args.unshift('%O');
+    }
+
+    // apply any `formatters` transformations
+    var index = 0;
+    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
+      // if we encounter an escaped % then don't increase the array index
+      if (match === '%%') return match;
+      index++;
+      var formatter = exports.formatters[format];
+      if ('function' === typeof formatter) {
+        var val = args[index];
+        match = formatter.call(self, val);
+
+        // now we need to remove `args[index]` since it's inlined in the `format`
+        args.splice(index, 1);
+        index--;
+      }
+      return match;
+    });
+
+    // apply env-specific formatting (colors, etc.)
+    exports.formatArgs.call(self, args);
+
+    var logFn = debug.log || exports.log || console.log.bind(console);
+    logFn.apply(self, args);
+  }
+
+  debug.namespace = namespace;
+  debug.enabled = exports.enabled(namespace);
+  debug.useColors = exports.useColors();
+  debug.color = selectColor(namespace);
+  debug.destroy = destroy;
+
+  // env-specific initialization logic for debug instances
+  if ('function' === typeof exports.init) {
+    exports.init(debug);
+  }
+
+  exports.instances.push(debug);
+
+  return debug;
+}
+
+function destroy () {
+  var index = exports.instances.indexOf(this);
+  if (index !== -1) {
+    exports.instances.splice(index, 1);
+    return true;
+  } else {
+    return false;
+  }
+}
+
+/**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+
+function enable(namespaces) {
+  exports.save(namespaces);
+
+  exports.names = [];
+  exports.skips = [];
+
+  var i;
+  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+  var len = split.length;
+
+  for (i = 0; i < len; i++) {
+    if (!split[i]) continue; // ignore empty strings
+    namespaces = split[i].replace(/\*/g, '.*?');
+    if (namespaces[0] === '-') {
+      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+    } else {
+      exports.names.push(new RegExp('^' + namespaces + '$'));
+    }
+  }
+
+  for (i = 0; i < exports.instances.length; i++) {
+    var instance = exports.instances[i];
+    instance.enabled = exports.enabled(instance.namespace);
+  }
+}
+
+/**
+ * Disable debug output.
+ *
+ * @api public
+ */
+
+function disable() {
+  exports.enable('');
+}
+
+/**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+
+function enabled(name) {
+  if (name[name.length - 1] === '*') {
+    return true;
+  }
+  var i, len;
+  for (i = 0, len = exports.skips.length; i < len; i++) {
+    if (exports.skips[i].test(name)) {
+      return false;
+    }
+  }
+  for (i = 0, len = exports.names.length; i < len; i++) {
+    if (exports.names[i].test(name)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+/**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+
+function coerce(val) {
+  if (val instanceof Error) return val.stack || val.message;
+  return val;
+}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/index.js b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/index.js
new file mode 100644 (file)
index 0000000..cabcbcd
--- /dev/null
@@ -0,0 +1,10 @@
+/**
+ * Detect Electron renderer process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process === 'undefined' || process.type === 'renderer') {
+  module.exports = require('./browser.js');
+} else {
+  module.exports = require('./node.js');
+}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/node.js b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/src/node.js
new file mode 100644 (file)
index 0000000..d666fb9
--- /dev/null
@@ -0,0 +1,186 @@
+/**
+ * Module dependencies.
+ */
+
+var tty = require('tty');
+var util = require('util');
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+
+/**
+ * Colors.
+ */
+
+exports.colors = [ 6, 2, 3, 4, 5, 1 ];
+
+try {
+  var supportsColor = require('supports-color');
+  if (supportsColor && supportsColor.level >= 2) {
+    exports.colors = [
+      20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68,
+      69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134,
+      135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+      172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204,
+      205, 206, 207, 208, 209, 214, 215, 220, 221
+    ];
+  }
+} catch (err) {
+  // swallow - we only care if `supports-color` is available; it doesn't have to be.
+}
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(function (key) {
+  return /^debug_/i.test(key);
+}).reduce(function (obj, key) {
+  // camel-case
+  var prop = key
+    .substring(6)
+    .toLowerCase()
+    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });
+
+  // coerce string value into JS value
+  var val = process.env[key];
+  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
+  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
+  else if (val === 'null') val = null;
+  else val = Number(val);
+
+  obj[prop] = val;
+  return obj;
+}, {});
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+  return 'colors' in exports.inspectOpts
+    ? Boolean(exports.inspectOpts.colors)
+    : tty.isatty(process.stderr.fd);
+}
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+exports.formatters.o = function(v) {
+  this.inspectOpts.colors = this.useColors;
+  return util.inspect(v, this.inspectOpts)
+    .split('\n').map(function(str) {
+      return str.trim()
+    }).join(' ');
+};
+
+/**
+ * Map %o to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+exports.formatters.O = function(v) {
+  this.inspectOpts.colors = this.useColors;
+  return util.inspect(v, this.inspectOpts);
+};
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+  var name = this.namespace;
+  var useColors = this.useColors;
+
+  if (useColors) {
+    var c = this.color;
+    var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c);
+    var prefix = '  ' + colorCode + ';1m' + name + ' ' + '\u001b[0m';
+
+    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+    args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
+  } else {
+    args[0] = getDate() + name + ' ' + args[0];
+  }
+}
+
+function getDate() {
+  if (exports.inspectOpts.hideDate) {
+    return '';
+  } else {
+    return new Date().toISOString() + ' ';
+  }
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to stderr.
+ */
+
+function log() {
+  return process.stderr.write(util.format.apply(util, arguments) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+  if (null == namespaces) {
+    // If you set a process.env field to null or undefined, it gets cast to the
+    // string 'null' or 'undefined'. Just delete instead.
+    delete process.env.DEBUG;
+  } else {
+    process.env.DEBUG = namespaces;
+  }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+  return process.env.DEBUG;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init (debug) {
+  debug.inspectOpts = {};
+
+  var keys = Object.keys(exports.inspectOpts);
+  for (var i = 0; i < keys.length; i++) {
+    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+  }
+}
+
+/**
+ * Enable namespaces listed in `process.env.DEBUG` initially.
+ */
+
+exports.enable(load());
index 3aa006d..4b35893 100644 (file)
@@ -1,9 +1,15 @@
 {
+  "_args": [
+    [
+      "ms@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
   "_from": "ms@2.0.0",
   "_id": "ms@2.0.0",
   "_inBundle": false,
   "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-  "_location": "/socket.io-client/ms",
+  "_location": "/socket.io/socket.io-client/ms",
   "_phantomChildren": {},
   "_requested": {
     "type": "version",
     "fetchSpec": "2.0.0"
   },
   "_requiredBy": [
-    "/socket.io-client/socket.io-parser/debug"
+    "/socket.io/socket.io-client/debug"
   ],
   "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-  "_shasum": "5608aeadfc00be6c2901df5f9861788de0d597c8",
-  "_spec": "ms@2.0.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
   "bugs": {
     "url": "https://github.com/zeit/ms/issues"
   },
-  "bundleDependencies": false,
-  "deprecated": false,
   "description": "Tiny milisecond conversion utility",
   "devDependencies": {
     "eslint": "3.19.0",
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/CHANGELOG.md b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/CHANGELOG.md
new file mode 100644 (file)
index 0000000..8b1992a
--- /dev/null
@@ -0,0 +1,10 @@
+## [3.3.2](https://github.com/Automattic/socket.io-parser/compare/3.3.1...3.3.2) (2021-01-09)
+
+
+### Bug Fixes
+
+* prevent DoS (OOM) via massive packets ([#95](https://github.com/Automattic/socket.io-parser/issues/95)) ([89197a0](https://github.com/Automattic/socket.io-parser/commit/89197a05c43b18cc4569fd178d56e7bb8f403865))
+
+
+## [3.3.1](https://github.com/socketio/socket.io-parser/compare/3.3.0...3.3.1) (2020-09-30)
+
index 102615a..ff613cc 100644 (file)
@@ -286,11 +286,9 @@ function decodeString(str) {
 
   // look up attachments if type binary
   if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {
-    var buf = '';
-    while (str.charAt(++i) !== '-') {
-      buf += str.charAt(i);
-      if (i == str.length) break;
-    }
+    var start = i + 1;
+    while (str.charAt(++i) !== '-' && i != str.length) {}
+    var buf = str.substring(start, i);
     if (buf != Number(buf) || str.charAt(i) !== '-') {
       throw new Error('Illegal attachments');
     }
@@ -299,13 +297,13 @@ function decodeString(str) {
 
   // look up namespace (if any)
   if ('/' === str.charAt(i + 1)) {
-    p.nsp = '';
+    var start = i + 1;
     while (++i) {
       var c = str.charAt(i);
       if (',' === c) break;
-      p.nsp += c;
       if (i === str.length) break;
     }
+    p.nsp = str.substring(start, i);
   } else {
     p.nsp = '/';
   }
@@ -313,17 +311,16 @@ function decodeString(str) {
   // look up id
   var next = str.charAt(i + 1);
   if ('' !== next && Number(next) == next) {
-    p.id = '';
+    var start = i + 1;
     while (++i) {
       var c = str.charAt(i);
       if (null == c || Number(c) != c) {
         --i;
         break;
       }
-      p.id += str.charAt(i);
       if (i === str.length) break;
     }
-    p.id = Number(p.id);
+    p.id = Number(str.substring(start, i + 1));
   }
 
   // look up json data
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/package.json b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-client/node_modules/socket.io-parser/node_modules/debug/package.json
deleted file mode 100644 (file)
index d84746a..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "_from": "debug@~3.1.0",
-  "_id": "debug@3.1.0",
-  "_inBundle": false,
-  "_integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-  "_location": "/socket.io-client/socket.io-parser/debug",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "debug@~3.1.0",
-    "name": "debug",
-    "escapedName": "debug",
-    "rawSpec": "~3.1.0",
-    "saveSpec": null,
-    "fetchSpec": "~3.1.0"
-  },
-  "_requiredBy": [
-    "/socket.io-client/socket.io-parser"
-  ],
-  "_resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-  "_shasum": "5bb5a0672628b64149566ba16819e61518c67261",
-  "_spec": "debug@~3.1.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client/node_modules/socket.io-parser",
-  "author": {
-    "name": "TJ Holowaychuk",
-    "email": "tj@vision-media.ca"
-  },
-  "browser": "./src/browser.js",
-  "bugs": {
-    "url": "https://github.com/visionmedia/debug/issues"
-  },
-  "bundleDependencies": false,
-  "contributors": [
-    {
-      "name": "Nathan Rajlich",
-      "email": "nathan@tootallnate.net",
-      "url": "http://n8.io"
-    },
-    {
-      "name": "Andrew Rhyne",
-      "email": "rhyneandrew@gmail.com"
-    }
-  ],
-  "dependencies": {
-    "ms": "2.0.0"
-  },
-  "deprecated": false,
-  "description": "small debugging utility",
-  "devDependencies": {
-    "browserify": "14.4.0",
-    "chai": "^3.5.0",
-    "concurrently": "^3.1.0",
-    "coveralls": "^2.11.15",
-    "eslint": "^3.12.1",
-    "istanbul": "^0.4.5",
-    "karma": "^1.3.0",
-    "karma-chai": "^0.1.0",
-    "karma-mocha": "^1.3.0",
-    "karma-phantomjs-launcher": "^1.0.2",
-    "karma-sinon": "^1.0.5",
-    "mocha": "^3.2.0",
-    "mocha-lcov-reporter": "^1.2.0",
-    "rimraf": "^2.5.4",
-    "sinon": "^1.17.6",
-    "sinon-chai": "^2.8.0"
-  },
-  "homepage": "https://github.com/visionmedia/debug#readme",
-  "keywords": [
-    "debug",
-    "log",
-    "debugger"
-  ],
-  "license": "MIT",
-  "main": "./src/index.js",
-  "name": "debug",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/visionmedia/debug.git"
-  },
-  "version": "3.1.0"
-}
index 8aa0f83..70c7c74 100644 (file)
@@ -1,39 +1,40 @@
 {
-  "_from": "socket.io-parser@~3.3.0",
-  "_id": "socket.io-parser@3.3.0",
+  "_args": [
+    [
+      "socket.io-parser@3.3.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "socket.io-parser@3.3.2",
+  "_id": "socket.io-parser@3.3.2",
   "_inBundle": false,
-  "_integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==",
-  "_location": "/socket.io-client/socket.io-parser",
-  "_phantomChildren": {
-    "ms": "2.0.0"
-  },
+  "_integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==",
+  "_location": "/socket.io/socket.io-client/socket.io-parser",
+  "_phantomChildren": {},
   "_requested": {
-    "type": "range",
+    "type": "version",
     "registry": true,
-    "raw": "socket.io-parser@~3.3.0",
+    "raw": "socket.io-parser@3.3.2",
     "name": "socket.io-parser",
     "escapedName": "socket.io-parser",
-    "rawSpec": "~3.3.0",
+    "rawSpec": "3.3.2",
     "saveSpec": null,
-    "fetchSpec": "~3.3.0"
+    "fetchSpec": "3.3.2"
   },
   "_requiredBy": [
-    "/socket.io-client"
+    "/socket.io/socket.io-client"
   ],
-  "_resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz",
-  "_shasum": "2b52a96a509fdf31440ba40fed6094c7d4f1262f",
-  "_spec": "socket.io-parser@~3.3.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
+  "_resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz",
+  "_spec": "3.3.2",
+  "_where": "/opt/source/offload.js",
   "bugs": {
     "url": "https://github.com/Automattic/socket.io-parser/issues"
   },
-  "bundleDependencies": false,
   "dependencies": {
-    "component-emitter": "1.2.1",
+    "component-emitter": "~1.3.0",
     "debug": "~3.1.0",
     "isarray": "2.0.1"
   },
-  "deprecated": false,
   "description": "socket.io protocol parser",
   "devDependencies": {
     "benchmark": "2.1.2",
@@ -58,5 +59,5 @@
   "scripts": {
     "test": "make test"
   },
-  "version": "3.3.0"
+  "version": "3.3.2"
 }
index 80762f2..d5c2a04 100644 (file)
@@ -1,34 +1,38 @@
 {
-  "_from": "socket.io-client@2.3.0",
-  "_id": "socket.io-client@2.3.0",
+  "_args": [
+    [
+      "socket.io-client@2.4.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "socket.io-client@2.4.0",
+  "_id": "socket.io-client@2.4.0",
   "_inBundle": false,
-  "_integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==",
-  "_location": "/socket.io-client",
+  "_integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==",
+  "_location": "/socket.io/socket.io-client",
   "_phantomChildren": {
-    "component-emitter": "1.2.1",
+    "component-emitter": "1.3.0",
     "isarray": "2.0.1"
   },
   "_requested": {
     "type": "version",
     "registry": true,
-    "raw": "socket.io-client@2.3.0",
+    "raw": "socket.io-client@2.4.0",
     "name": "socket.io-client",
     "escapedName": "socket.io-client",
-    "rawSpec": "2.3.0",
+    "rawSpec": "2.4.0",
     "saveSpec": null,
-    "fetchSpec": "2.3.0"
+    "fetchSpec": "2.4.0"
   },
   "_requiredBy": [
     "/socket.io"
   ],
-  "_resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz",
-  "_shasum": "14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4",
-  "_spec": "socket.io-client@2.3.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io",
+  "_resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz",
+  "_spec": "2.4.0",
+  "_where": "/opt/source/offload.js",
   "bugs": {
     "url": "https://github.com/Automattic/socket.io-client/issues"
   },
-  "bundleDependencies": false,
   "contributors": [
     {
       "name": "Guillermo Rauch",
   ],
   "dependencies": {
     "backo2": "1.0.2",
-    "base64-arraybuffer": "0.1.5",
     "component-bind": "1.0.0",
-    "component-emitter": "1.2.1",
-    "debug": "~4.1.0",
-    "engine.io-client": "~3.4.0",
+    "component-emitter": "~1.3.0",
+    "debug": "~3.1.0",
+    "engine.io-client": "~3.5.0",
     "has-binary2": "~1.0.2",
-    "has-cors": "1.1.0",
     "indexof": "0.0.1",
-    "object-component": "0.0.3",
-    "parseqs": "0.0.5",
-    "parseuri": "0.0.5",
+    "parseqs": "0.0.6",
+    "parseuri": "0.0.6",
     "socket.io-parser": "~3.3.0",
     "to-array": "0.1.4"
   },
-  "deprecated": false,
-  "description": "[![Build Status](https://secure.travis-ci.org/socketio/socket.io-client.svg?branch=master)](http://travis-ci.org/socketio/socket.io-client) [![Dependency Status](https://david-dm.org/socketio/socket.io-client.svg)](https://david-dm.org/socketio/socket.io-client) [![devDependency Status](https://david-dm.org/socketio/socket.io-client/dev-status.svg)](https://david-dm.org/socketio/socket.io-client#info=devDependencies) [![NPM version](https://badge.fury.io/js/socket.io-client.svg)](https://www.npmjs.com/package/socket.io-client) ![Downloads](http://img.shields.io/npm/dm/socket.io-client.svg?style=flat) [![](http://slack.socket.io/badge.svg?)](http://slack.socket.io)",
+  "description": "[![Build Status](https://github.com/socketio/socket.io-client/workflows/CI/badge.svg)](https://github.com/socketio/socket.io-client/actions) [![Dependency Status](https://david-dm.org/socketio/socket.io-client.svg)](https://david-dm.org/socketio/socket.io-client) [![devDependency Status](https://david-dm.org/socketio/socket.io-client/dev-status.svg)](https://david-dm.org/socketio/socket.io-client#info=devDependencies) [![NPM version](https://badge.fury.io/js/socket.io-client.svg)](https://www.npmjs.com/package/socket.io-client) ![Downloads](http://img.shields.io/npm/dm/socket.io-client.svg?style=flat) [![](http://slack.socket.io/badge.svg?)](http://slack.socket.io)",
   "devDependencies": {
     "babel-core": "^6.24.1",
     "babel-eslint": "4.1.7",
     "babel-loader": "7.0.0",
     "babel-preset-es2015": "6.24.1",
+    "base64-arraybuffer": "^0.1.5",
     "concat-stream": "^1.6.0",
     "derequire": "^2.0.6",
     "eslint-config-standard": "4.4.0",
@@ -81,6 +82,7 @@
     "gulp-istanbul": "^1.1.1",
     "gulp-mocha": "^4.3.1",
     "gulp-task-listing": "1.0.1",
+    "has-cors": "^1.1.0",
     "imports-loader": "^0.7.1",
     "istanbul": "^0.4.5",
     "mocha": "^3.3.0",
   "scripts": {
     "test": "gulp test"
   },
-  "version": "2.3.0"
+  "version": "2.4.0"
 }
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/index.js b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/index.js
deleted file mode 100644 (file)
index 102615a..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var debug = require('debug')('socket.io-parser');
-var Emitter = require('component-emitter');
-var binary = require('./binary');
-var isArray = require('isarray');
-var isBuf = require('./is-buffer');
-
-/**
- * Protocol version.
- *
- * @api public
- */
-
-exports.protocol = 4;
-
-/**
- * Packet types.
- *
- * @api public
- */
-
-exports.types = [
-  'CONNECT',
-  'DISCONNECT',
-  'EVENT',
-  'ACK',
-  'ERROR',
-  'BINARY_EVENT',
-  'BINARY_ACK'
-];
-
-/**
- * Packet type `connect`.
- *
- * @api public
- */
-
-exports.CONNECT = 0;
-
-/**
- * Packet type `disconnect`.
- *
- * @api public
- */
-
-exports.DISCONNECT = 1;
-
-/**
- * Packet type `event`.
- *
- * @api public
- */
-
-exports.EVENT = 2;
-
-/**
- * Packet type `ack`.
- *
- * @api public
- */
-
-exports.ACK = 3;
-
-/**
- * Packet type `error`.
- *
- * @api public
- */
-
-exports.ERROR = 4;
-
-/**
- * Packet type 'binary event'
- *
- * @api public
- */
-
-exports.BINARY_EVENT = 5;
-
-/**
- * Packet type `binary ack`. For acks with binary arguments.
- *
- * @api public
- */
-
-exports.BINARY_ACK = 6;
-
-/**
- * Encoder constructor.
- *
- * @api public
- */
-
-exports.Encoder = Encoder;
-
-/**
- * Decoder constructor.
- *
- * @api public
- */
-
-exports.Decoder = Decoder;
-
-/**
- * A socket.io Encoder instance
- *
- * @api public
- */
-
-function Encoder() {}
-
-var ERROR_PACKET = exports.ERROR + '"encode error"';
-
-/**
- * Encode a packet as a single string if non-binary, or as a
- * buffer sequence, depending on packet type.
- *
- * @param {Object} obj - packet object
- * @param {Function} callback - function to handle encodings (likely engine.write)
- * @return Calls callback with Array of encodings
- * @api public
- */
-
-Encoder.prototype.encode = function(obj, callback){
-  debug('encoding packet %j', obj);
-
-  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
-    encodeAsBinary(obj, callback);
-  } else {
-    var encoding = encodeAsString(obj);
-    callback([encoding]);
-  }
-};
-
-/**
- * Encode packet as string.
- *
- * @param {Object} packet
- * @return {String} encoded
- * @api private
- */
-
-function encodeAsString(obj) {
-
-  // first is type
-  var str = '' + obj.type;
-
-  // attachments if we have them
-  if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
-    str += obj.attachments + '-';
-  }
-
-  // if we have a namespace other than `/`
-  // we append it followed by a comma `,`
-  if (obj.nsp && '/' !== obj.nsp) {
-    str += obj.nsp + ',';
-  }
-
-  // immediately followed by the id
-  if (null != obj.id) {
-    str += obj.id;
-  }
-
-  // json data
-  if (null != obj.data) {
-    var payload = tryStringify(obj.data);
-    if (payload !== false) {
-      str += payload;
-    } else {
-      return ERROR_PACKET;
-    }
-  }
-
-  debug('encoded %j as %s', obj, str);
-  return str;
-}
-
-function tryStringify(str) {
-  try {
-    return JSON.stringify(str);
-  } catch(e){
-    return false;
-  }
-}
-
-/**
- * Encode packet as 'buffer sequence' by removing blobs, and
- * deconstructing packet into object with placeholders and
- * a list of buffers.
- *
- * @param {Object} packet
- * @return {Buffer} encoded
- * @api private
- */
-
-function encodeAsBinary(obj, callback) {
-
-  function writeEncoding(bloblessData) {
-    var deconstruction = binary.deconstructPacket(bloblessData);
-    var pack = encodeAsString(deconstruction.packet);
-    var buffers = deconstruction.buffers;
-
-    buffers.unshift(pack); // add packet info to beginning of data list
-    callback(buffers); // write all the buffers
-  }
-
-  binary.removeBlobs(obj, writeEncoding);
-}
-
-/**
- * A socket.io Decoder instance
- *
- * @return {Object} decoder
- * @api public
- */
-
-function Decoder() {
-  this.reconstructor = null;
-}
-
-/**
- * Mix in `Emitter` with Decoder.
- */
-
-Emitter(Decoder.prototype);
-
-/**
- * Decodes an encoded packet string into packet JSON.
- *
- * @param {String} obj - encoded packet
- * @return {Object} packet
- * @api public
- */
-
-Decoder.prototype.add = function(obj) {
-  var packet;
-  if (typeof obj === 'string') {
-    packet = decodeString(obj);
-    if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json
-      this.reconstructor = new BinaryReconstructor(packet);
-
-      // no attachments, labeled binary but no binary data to follow
-      if (this.reconstructor.reconPack.attachments === 0) {
-        this.emit('decoded', packet);
-      }
-    } else { // non-binary full packet
-      this.emit('decoded', packet);
-    }
-  } else if (isBuf(obj) || obj.base64) { // raw binary data
-    if (!this.reconstructor) {
-      throw new Error('got binary data when not reconstructing a packet');
-    } else {
-      packet = this.reconstructor.takeBinaryData(obj);
-      if (packet) { // received final buffer
-        this.reconstructor = null;
-        this.emit('decoded', packet);
-      }
-    }
-  } else {
-    throw new Error('Unknown type: ' + obj);
-  }
-};
-
-/**
- * Decode a packet String (JSON data)
- *
- * @param {String} str
- * @return {Object} packet
- * @api private
- */
-
-function decodeString(str) {
-  var i = 0;
-  // look up type
-  var p = {
-    type: Number(str.charAt(0))
-  };
-
-  if (null == exports.types[p.type]) {
-    return error('unknown packet type ' + p.type);
-  }
-
-  // look up attachments if type binary
-  if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {
-    var buf = '';
-    while (str.charAt(++i) !== '-') {
-      buf += str.charAt(i);
-      if (i == str.length) break;
-    }
-    if (buf != Number(buf) || str.charAt(i) !== '-') {
-      throw new Error('Illegal attachments');
-    }
-    p.attachments = Number(buf);
-  }
-
-  // look up namespace (if any)
-  if ('/' === str.charAt(i + 1)) {
-    p.nsp = '';
-    while (++i) {
-      var c = str.charAt(i);
-      if (',' === c) break;
-      p.nsp += c;
-      if (i === str.length) break;
-    }
-  } else {
-    p.nsp = '/';
-  }
-
-  // look up id
-  var next = str.charAt(i + 1);
-  if ('' !== next && Number(next) == next) {
-    p.id = '';
-    while (++i) {
-      var c = str.charAt(i);
-      if (null == c || Number(c) != c) {
-        --i;
-        break;
-      }
-      p.id += str.charAt(i);
-      if (i === str.length) break;
-    }
-    p.id = Number(p.id);
-  }
-
-  // look up json data
-  if (str.charAt(++i)) {
-    var payload = tryParse(str.substr(i));
-    var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));
-    if (isPayloadValid) {
-      p.data = payload;
-    } else {
-      return error('invalid payload');
-    }
-  }
-
-  debug('decoded %s as %j', str, p);
-  return p;
-}
-
-function tryParse(str) {
-  try {
-    return JSON.parse(str);
-  } catch(e){
-    return false;
-  }
-}
-
-/**
- * Deallocates a parser's resources
- *
- * @api public
- */
-
-Decoder.prototype.destroy = function() {
-  if (this.reconstructor) {
-    this.reconstructor.finishedReconstruction();
-  }
-};
-
-/**
- * A manager of a binary event's 'buffer sequence'. Should
- * be constructed whenever a packet of type BINARY_EVENT is
- * decoded.
- *
- * @param {Object} packet
- * @return {BinaryReconstructor} initialized reconstructor
- * @api private
- */
-
-function BinaryReconstructor(packet) {
-  this.reconPack = packet;
-  this.buffers = [];
-}
-
-/**
- * Method to be called when binary data received from connection
- * after a BINARY_EVENT packet.
- *
- * @param {Buffer | ArrayBuffer} binData - the raw binary data received
- * @return {null | Object} returns null if more binary data is expected or
- *   a reconstructed packet object if all buffers have been received.
- * @api private
- */
-
-BinaryReconstructor.prototype.takeBinaryData = function(binData) {
-  this.buffers.push(binData);
-  if (this.buffers.length === this.reconPack.attachments) { // done with buffer list
-    var packet = binary.reconstructPacket(this.reconPack, this.buffers);
-    this.finishedReconstruction();
-    return packet;
-  }
-  return null;
-};
-
-/**
- * Cleans up binary packet reconstruction variables.
- *
- * @api private
- */
-
-BinaryReconstructor.prototype.finishedReconstruction = function() {
-  this.reconPack = null;
-  this.buffers = [];
-};
-
-function error(msg) {
-  return {
-    type: exports.ERROR,
-    data: 'parser error: ' + msg
-  };
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/package.json b/signaling_server/service/node_modules/socket.io/node_modules/socket.io-parser/package.json
deleted file mode 100644 (file)
index ba26d84..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "_from": "socket.io-parser@~3.4.0",
-  "_id": "socket.io-parser@3.4.0",
-  "_inBundle": false,
-  "_integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==",
-  "_location": "/socket.io-parser",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "socket.io-parser@~3.4.0",
-    "name": "socket.io-parser",
-    "escapedName": "socket.io-parser",
-    "rawSpec": "~3.4.0",
-    "saveSpec": null,
-    "fetchSpec": "~3.4.0"
-  },
-  "_requiredBy": [
-    "/socket.io"
-  ],
-  "_resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz",
-  "_shasum": "370bb4a151df2f77ce3345ff55a7072cc6e9565a",
-  "_spec": "socket.io-parser@~3.4.0",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io",
-  "bugs": {
-    "url": "https://github.com/Automattic/socket.io-parser/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "component-emitter": "1.2.1",
-    "debug": "~4.1.0",
-    "isarray": "2.0.1"
-  },
-  "deprecated": false,
-  "description": "socket.io protocol parser",
-  "devDependencies": {
-    "benchmark": "2.1.2",
-    "expect.js": "0.3.1",
-    "mocha": "3.2.0",
-    "socket.io-browsers": "^1.0.0",
-    "zuul": "3.11.1",
-    "zuul-ngrok": "4.0.0"
-  },
-  "files": [
-    "binary.js",
-    "index.js",
-    "is-buffer.js"
-  ],
-  "homepage": "https://github.com/Automattic/socket.io-parser#readme",
-  "license": "MIT",
-  "name": "socket.io-parser",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/Automattic/socket.io-parser.git"
-  },
-  "scripts": {
-    "test": "make test"
-  },
-  "version": "3.4.0"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/to-array/package.json b/signaling_server/service/node_modules/socket.io/node_modules/to-array/package.json
deleted file mode 100644 (file)
index 0a90c92..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-  "_from": "to-array@0.1.4",
-  "_id": "to-array@0.1.4",
-  "_inBundle": false,
-  "_integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
-  "_location": "/to-array",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "to-array@0.1.4",
-    "name": "to-array",
-    "escapedName": "to-array",
-    "rawSpec": "0.1.4",
-    "saveSpec": null,
-    "fetchSpec": "0.1.4"
-  },
-  "_requiredBy": [
-    "/socket.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
-  "_shasum": "17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890",
-  "_spec": "to-array@0.1.4",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/socket.io-client",
-  "author": {
-    "name": "Raynos",
-    "email": "raynos2@gmail.com"
-  },
-  "bugs": {
-    "url": "https://github.com/Raynos/to-array/issues",
-    "email": "raynos2@gmail.com"
-  },
-  "bundleDependencies": false,
-  "component": {
-    "scripts": {
-      "to-array/index.js": "index.js"
-    }
-  },
-  "contributors": [
-    {
-      "name": "Jake Verbaten"
-    }
-  ],
-  "dependencies": {},
-  "deprecated": false,
-  "description": "Turn an array like into an array",
-  "devDependencies": {
-    "tap": "~0.3.1"
-  },
-  "homepage": "https://github.com/Raynos/to-array",
-  "keywords": [],
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "http://github.com/Raynos/to-array/raw/master/LICENSE"
-    }
-  ],
-  "main": "index",
-  "name": "to-array",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/Raynos/to-array.git"
-  },
-  "scripts": {
-    "test": "tap --stderr --tap ./test"
-  },
-  "version": "0.1.4"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/package.json b/signaling_server/service/node_modules/socket.io/node_modules/xmlhttprequest-ssl/package.json
deleted file mode 100644 (file)
index 7a14e4e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "_from": "xmlhttprequest-ssl@~1.5.4",
-  "_id": "xmlhttprequest-ssl@1.5.5",
-  "_inBundle": false,
-  "_integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
-  "_location": "/xmlhttprequest-ssl",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "xmlhttprequest-ssl@~1.5.4",
-    "name": "xmlhttprequest-ssl",
-    "escapedName": "xmlhttprequest-ssl",
-    "rawSpec": "~1.5.4",
-    "saveSpec": null,
-    "fetchSpec": "~1.5.4"
-  },
-  "_requiredBy": [
-    "/engine.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
-  "_shasum": "c2876b06168aadc40e57d97e81191ac8f4398b3e",
-  "_spec": "xmlhttprequest-ssl@~1.5.4",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io-client",
-  "author": {
-    "name": "Michael de Wit"
-  },
-  "bugs": {
-    "url": "http://github.com/mjwwit/node-XMLHttpRequest/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "XMLHttpRequest for Node",
-  "directories": {
-    "lib": "./lib",
-    "example": "./example"
-  },
-  "engines": {
-    "node": ">=0.4.0"
-  },
-  "homepage": "https://github.com/mjwwit/node-XMLHttpRequest#readme",
-  "keywords": [
-    "xhr",
-    "ajax"
-  ],
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "http://creativecommons.org/licenses/MIT/"
-    }
-  ],
-  "main": "./lib/XMLHttpRequest.js",
-  "name": "xmlhttprequest-ssl",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/mjwwit/node-XMLHttpRequest.git"
-  },
-  "scripts": {
-    "test": "cd ./tests && node test-constants.js && node test-events.js && node test-exceptions.js && node test-headers.js && node test-redirect-302.js && node test-redirect-303.js && node test-redirect-307.js && node test-request-methods.js && node test-request-protocols.js"
-  },
-  "version": "1.5.5"
-}
diff --git a/signaling_server/service/node_modules/socket.io/node_modules/yeast/package.json b/signaling_server/service/node_modules/socket.io/node_modules/yeast/package.json
deleted file mode 100644 (file)
index 014bfcb..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "_from": "yeast@0.1.2",
-  "_id": "yeast@0.1.2",
-  "_inBundle": false,
-  "_integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
-  "_location": "/yeast",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "yeast@0.1.2",
-    "name": "yeast",
-    "escapedName": "yeast",
-    "rawSpec": "0.1.2",
-    "saveSpec": null,
-    "fetchSpec": "0.1.2"
-  },
-  "_requiredBy": [
-    "/engine.io-client"
-  ],
-  "_resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
-  "_shasum": "008e06d8094320c372dbc2f8ed76a0ca6c8ac419",
-  "_spec": "yeast@0.1.2",
-  "_where": "/home/djmix.kim/workspace/GlobalServiceSinglePkg/service/node_modules/engine.io-client",
-  "author": {
-    "name": "Arnout Kazemier"
-  },
-  "bugs": {
-    "url": "https://github.com/unshiftio/yeast/issues"
-  },
-  "bundleDependencies": false,
-  "deprecated": false,
-  "description": "Tiny but linear growing unique id generator",
-  "devDependencies": {
-    "assume": "1.3.x",
-    "istanbul": "0.3.x",
-    "mocha": "2.3.x",
-    "pre-commit": "1.1.x",
-    "zuul": "3.4.x"
-  },
-  "homepage": "https://github.com/unshiftio/yeast",
-  "keywords": [
-    "yeast",
-    "id",
-    "generator",
-    "unique"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "yeast",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/unshiftio/yeast.git"
-  },
-  "scripts": {
-    "100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100",
-    "coverage": "istanbul cover _mocha -- test.js",
-    "test": "mocha test.js",
-    "test-browser": "zuul -- test.js",
-    "test-node": "istanbul cover _mocha --report lcovonly -- test.js",
-    "watch": "mocha --watch test.js"
-  },
-  "version": "0.1.2"
-}
index 60e3add..8714158 100644 (file)
@@ -1,35 +1,46 @@
 {
-  "_from": "socket.io@^2.3.0",
-  "_id": "socket.io@2.3.0",
+  "_args": [
+    [
+      "socket.io@2.4.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "socket.io@2.4.1",
+  "_id": "socket.io@2.4.1",
   "_inBundle": false,
-  "_integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==",
+  "_integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==",
   "_location": "/socket.io",
   "_phantomChildren": {
-    "component-emitter": "1.2.1",
-    "debug": "4.1.1",
-    "isarray": "2.0.1"
+    "backo2": "1.0.2",
+    "component-bind": "1.0.0",
+    "component-emitter": "1.3.0",
+    "engine.io-client": "3.5.1",
+    "has-binary2": "1.0.3",
+    "indexof": "0.0.1",
+    "ms": "2.1.2",
+    "parseqs": "0.0.6",
+    "parseuri": "0.0.6",
+    "to-array": "0.1.4"
   },
   "_requested": {
-    "type": "range",
+    "type": "version",
     "registry": true,
-    "raw": "socket.io@^2.3.0",
+    "raw": "socket.io@2.4.1",
     "name": "socket.io",
     "escapedName": "socket.io",
-    "rawSpec": "^2.3.0",
+    "rawSpec": "2.4.1",
     "saveSpec": null,
-    "fetchSpec": "^2.3.0"
+    "fetchSpec": "2.4.1"
   },
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz",
-  "_shasum": "cd762ed6a4faeca59bc1f3e243c0969311eb73fb",
-  "_spec": "socket.io@^2.3.0",
-  "_where": "/home/djmix.kim/workspace/ssd/jsoffloading/offload.js-1/offload.js-1/offload.js",
+  "_resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz",
+  "_spec": "2.4.1",
+  "_where": "/opt/source/offload.js",
   "bugs": {
     "url": "https://github.com/socketio/socket.io/issues"
   },
-  "bundleDependencies": false,
   "contributors": [
     {
       "name": "Guillermo Rauch",
   ],
   "dependencies": {
     "debug": "~4.1.0",
-    "engine.io": "~3.4.0",
+    "engine.io": "~3.5.0",
     "has-binary2": "~1.0.2",
     "socket.io-adapter": "~1.1.0",
-    "socket.io-client": "2.3.0",
+    "socket.io-client": "2.4.0",
     "socket.io-parser": "~3.4.0"
   },
-  "deprecated": false,
   "description": "node.js realtime framework server",
   "devDependencies": {
     "expect.js": "0.3.1",
@@ -88,5 +98,5 @@
   "scripts": {
     "test": "nyc mocha --reporter spec --slow 200 --bail --timeout 10000 test/socket.io.js"
   },
-  "version": "2.3.0"
+  "version": "2.4.1"
 }
diff --git a/signaling_server/service/node_modules/statuses/package.json b/signaling_server/service/node_modules/statuses/package.json
new file mode 100644 (file)
index 0000000..07175fc
--- /dev/null
@@ -0,0 +1,93 @@
+{
+  "_args": [
+    [
+      "statuses@1.5.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "statuses@1.5.0",
+  "_id": "statuses@1.5.0",
+  "_inBundle": false,
+  "_integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+  "_location": "/statuses",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "statuses@1.5.0",
+    "name": "statuses",
+    "escapedName": "statuses",
+    "rawSpec": "1.5.0",
+    "saveSpec": null,
+    "fetchSpec": "1.5.0"
+  },
+  "_requiredBy": [
+    "/express",
+    "/finalhandler",
+    "/http-errors",
+    "/send"
+  ],
+  "_resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+  "_spec": "1.5.0",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/jshttp/statuses/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    }
+  ],
+  "description": "HTTP status utility",
+  "devDependencies": {
+    "csv-parse": "1.2.4",
+    "eslint": "4.19.1",
+    "eslint-config-standard": "11.0.0",
+    "eslint-plugin-import": "2.9.0",
+    "eslint-plugin-markdown": "1.0.0-beta.6",
+    "eslint-plugin-node": "6.0.1",
+    "eslint-plugin-promise": "3.7.0",
+    "eslint-plugin-standard": "3.0.1",
+    "istanbul": "0.4.5",
+    "mocha": "1.21.5",
+    "raw-body": "2.3.2",
+    "stream-to-array": "2.3.0"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "HISTORY.md",
+    "index.js",
+    "codes.json",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/jshttp/statuses#readme",
+  "keywords": [
+    "http",
+    "status",
+    "code"
+  ],
+  "license": "MIT",
+  "name": "statuses",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/statuses.git"
+  },
+  "scripts": {
+    "build": "node scripts/build.js",
+    "fetch": "node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js",
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --check-leaks --bail test/",
+    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "update": "npm run fetch && npm run build"
+  },
+  "version": "1.5.0"
+}
diff --git a/signaling_server/service/node_modules/string-width/package.json b/signaling_server/service/node_modules/string-width/package.json
new file mode 100644 (file)
index 0000000..d136829
--- /dev/null
@@ -0,0 +1,93 @@
+{
+  "_args": [
+    [
+      "string-width@3.1.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "string-width@3.1.0",
+  "_id": "string-width@3.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+  "_location": "/string-width",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "string-width@3.1.0",
+    "name": "string-width",
+    "escapedName": "string-width",
+    "rawSpec": "3.1.0",
+    "saveSpec": null,
+    "fetchSpec": "3.1.0"
+  },
+  "_requiredBy": [
+    "/cliui",
+    "/wrap-ansi",
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+  "_spec": "3.1.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/string-width/issues"
+  },
+  "dependencies": {
+    "emoji-regex": "^7.0.1",
+    "is-fullwidth-code-point": "^2.0.0",
+    "strip-ansi": "^5.1.0"
+  },
+  "description": "Get the visual width of a string - the number of columns required to display it",
+  "devDependencies": {
+    "ava": "^1.0.1",
+    "xo": "^0.23.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/string-width#readme",
+  "keywords": [
+    "string",
+    "str",
+    "character",
+    "char",
+    "unicode",
+    "width",
+    "visual",
+    "column",
+    "columns",
+    "fullwidth",
+    "full-width",
+    "full",
+    "ansi",
+    "escape",
+    "codes",
+    "cli",
+    "command-line",
+    "terminal",
+    "console",
+    "cjk",
+    "chinese",
+    "japanese",
+    "korean",
+    "fixed-width"
+  ],
+  "license": "MIT",
+  "name": "string-width",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/string-width.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "3.1.0"
+}
diff --git a/signaling_server/service/node_modules/strip-ansi/package.json b/signaling_server/service/node_modules/strip-ansi/package.json
new file mode 100644 (file)
index 0000000..ea5dda7
--- /dev/null
@@ -0,0 +1,91 @@
+{
+  "_args": [
+    [
+      "strip-ansi@5.2.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "strip-ansi@5.2.0",
+  "_id": "strip-ansi@5.2.0",
+  "_inBundle": false,
+  "_integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+  "_location": "/strip-ansi",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "strip-ansi@5.2.0",
+    "name": "strip-ansi",
+    "escapedName": "strip-ansi",
+    "rawSpec": "5.2.0",
+    "saveSpec": null,
+    "fetchSpec": "5.2.0"
+  },
+  "_requiredBy": [
+    "/cliui",
+    "/string-width",
+    "/wrap-ansi"
+  ],
+  "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+  "_spec": "5.2.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/chalk/strip-ansi/issues"
+  },
+  "dependencies": {
+    "ansi-regex": "^4.1.0"
+  },
+  "description": "Strip ANSI escape codes from a string",
+  "devDependencies": {
+    "ava": "^1.3.1",
+    "tsd-check": "^0.5.0",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/chalk/strip-ansi#readme",
+  "keywords": [
+    "strip",
+    "trim",
+    "remove",
+    "ansi",
+    "styles",
+    "color",
+    "colour",
+    "colors",
+    "terminal",
+    "console",
+    "string",
+    "tty",
+    "escape",
+    "formatting",
+    "rgb",
+    "256",
+    "shell",
+    "xterm",
+    "log",
+    "logging",
+    "command-line",
+    "text"
+  ],
+  "license": "MIT",
+  "name": "strip-ansi",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/chalk/strip-ansi.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd-check"
+  },
+  "version": "5.2.0"
+}
diff --git a/signaling_server/service/node_modules/to-array/package.json b/signaling_server/service/node_modules/to-array/package.json
new file mode 100644 (file)
index 0000000..4503290
--- /dev/null
@@ -0,0 +1,71 @@
+{
+  "_args": [
+    [
+      "to-array@0.1.4",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "to-array@0.1.4",
+  "_id": "to-array@0.1.4",
+  "_inBundle": false,
+  "_integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+  "_location": "/to-array",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "to-array@0.1.4",
+    "name": "to-array",
+    "escapedName": "to-array",
+    "rawSpec": "0.1.4",
+    "saveSpec": null,
+    "fetchSpec": "0.1.4"
+  },
+  "_requiredBy": [
+    "/socket.io/socket.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+  "_spec": "0.1.4",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Raynos",
+    "email": "raynos2@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/Raynos/to-array/issues",
+    "email": "raynos2@gmail.com"
+  },
+  "component": {
+    "scripts": {
+      "to-array/index.js": "index.js"
+    }
+  },
+  "contributors": [
+    {
+      "name": "Jake Verbaten"
+    }
+  ],
+  "dependencies": {},
+  "description": "Turn an array like into an array",
+  "devDependencies": {
+    "tap": "~0.3.1"
+  },
+  "homepage": "https://github.com/Raynos/to-array",
+  "keywords": [],
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "http://github.com/Raynos/to-array/raw/master/LICENSE"
+    }
+  ],
+  "main": "index",
+  "name": "to-array",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/Raynos/to-array.git"
+  },
+  "scripts": {
+    "test": "tap --stderr --tap ./test"
+  },
+  "version": "0.1.4"
+}
diff --git a/signaling_server/service/node_modules/toidentifier/package.json b/signaling_server/service/node_modules/toidentifier/package.json
new file mode 100644 (file)
index 0000000..e3b6571
--- /dev/null
@@ -0,0 +1,79 @@
+{
+  "_args": [
+    [
+      "toidentifier@1.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "toidentifier@1.0.0",
+  "_id": "toidentifier@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+  "_location": "/toidentifier",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "toidentifier@1.0.0",
+    "name": "toidentifier",
+    "escapedName": "toidentifier",
+    "rawSpec": "1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "1.0.0"
+  },
+  "_requiredBy": [
+    "/http-errors"
+  ],
+  "_resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+  "_spec": "1.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "bugs": {
+    "url": "https://github.com/component/toidentifier/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Nick Baugh",
+      "email": "niftylettuce@gmail.com",
+      "url": "http://niftylettuce.com/"
+    }
+  ],
+  "description": "Convert a string of words to a JavaScript identifier",
+  "devDependencies": {
+    "eslint": "4.19.1",
+    "eslint-config-standard": "11.0.0",
+    "eslint-plugin-import": "2.11.0",
+    "eslint-plugin-markdown": "1.0.0-beta.6",
+    "eslint-plugin-node": "6.0.1",
+    "eslint-plugin-promise": "3.7.0",
+    "eslint-plugin-standard": "3.1.0",
+    "mocha": "1.21.5",
+    "nyc": "11.8.0"
+  },
+  "engines": {
+    "node": ">=0.6"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/component/toidentifier#readme",
+  "license": "MIT",
+  "name": "toidentifier",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/component/toidentifier.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "nyc --reporter=html --reporter=text npm test"
+  },
+  "version": "1.0.0"
+}
diff --git a/signaling_server/service/node_modules/type-is/package.json b/signaling_server/service/node_modules/type-is/package.json
new file mode 100644 (file)
index 0000000..c49aec6
--- /dev/null
@@ -0,0 +1,88 @@
+{
+  "_args": [
+    [
+      "type-is@1.6.18",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "type-is@1.6.18",
+  "_id": "type-is@1.6.18",
+  "_inBundle": false,
+  "_integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+  "_location": "/type-is",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "type-is@1.6.18",
+    "name": "type-is",
+    "escapedName": "type-is",
+    "rawSpec": "1.6.18",
+    "saveSpec": null,
+    "fetchSpec": "1.6.18"
+  },
+  "_requiredBy": [
+    "/body-parser",
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+  "_spec": "1.6.18",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/jshttp/type-is/issues"
+  },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Jonathan Ong",
+      "email": "me@jongleberry.com",
+      "url": "http://jongleberry.com"
+    }
+  ],
+  "dependencies": {
+    "media-typer": "0.3.0",
+    "mime-types": "~2.1.24"
+  },
+  "description": "Infer the content-type of a request.",
+  "devDependencies": {
+    "eslint": "5.16.0",
+    "eslint-config-standard": "12.0.0",
+    "eslint-plugin-import": "2.17.2",
+    "eslint-plugin-markdown": "1.0.0",
+    "eslint-plugin-node": "8.0.1",
+    "eslint-plugin-promise": "4.1.1",
+    "eslint-plugin-standard": "4.0.0",
+    "mocha": "6.1.4",
+    "nyc": "14.0.0"
+  },
+  "engines": {
+    "node": ">= 0.6"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/type-is#readme",
+  "keywords": [
+    "content",
+    "type",
+    "checking"
+  ],
+  "license": "MIT",
+  "name": "type-is",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/type-is.git"
+  },
+  "scripts": {
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --check-leaks --bail test/",
+    "test-cov": "nyc --reporter=html --reporter=text npm test",
+    "test-travis": "nyc --reporter=text npm test"
+  },
+  "version": "1.6.18"
+}
diff --git a/signaling_server/service/node_modules/unpipe/package.json b/signaling_server/service/node_modules/unpipe/package.json
new file mode 100644 (file)
index 0000000..754f312
--- /dev/null
@@ -0,0 +1,66 @@
+{
+  "_args": [
+    [
+      "unpipe@1.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "unpipe@1.0.0",
+  "_id": "unpipe@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+  "_location": "/unpipe",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "unpipe@1.0.0",
+    "name": "unpipe",
+    "escapedName": "unpipe",
+    "rawSpec": "1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "1.0.0"
+  },
+  "_requiredBy": [
+    "/finalhandler",
+    "/raw-body"
+  ],
+  "_resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+  "_spec": "1.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "bugs": {
+    "url": "https://github.com/stream-utils/unpipe/issues"
+  },
+  "description": "Unpipe a stream from all destinations",
+  "devDependencies": {
+    "istanbul": "0.3.15",
+    "mocha": "2.2.5",
+    "readable-stream": "1.1.13"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/stream-utils/unpipe#readme",
+  "license": "MIT",
+  "name": "unpipe",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/stream-utils/unpipe.git"
+  },
+  "scripts": {
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "1.0.0"
+}
diff --git a/signaling_server/service/node_modules/utils-merge/package.json b/signaling_server/service/node_modules/utils-merge/package.json
new file mode 100644 (file)
index 0000000..c486b59
--- /dev/null
@@ -0,0 +1,69 @@
+{
+  "_args": [
+    [
+      "utils-merge@1.0.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "utils-merge@1.0.1",
+  "_id": "utils-merge@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+  "_location": "/utils-merge",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "utils-merge@1.0.1",
+    "name": "utils-merge",
+    "escapedName": "utils-merge",
+    "rawSpec": "1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "1.0.1"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+  "_spec": "1.0.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Jared Hanson",
+    "email": "jaredhanson@gmail.com",
+    "url": "http://www.jaredhanson.net/"
+  },
+  "bugs": {
+    "url": "http://github.com/jaredhanson/utils-merge/issues"
+  },
+  "dependencies": {},
+  "description": "merge() utility function",
+  "devDependencies": {
+    "chai": "1.x.x",
+    "make-node": "0.3.x",
+    "mocha": "1.x.x"
+  },
+  "engines": {
+    "node": ">= 0.4.0"
+  },
+  "homepage": "https://github.com/jaredhanson/utils-merge#readme",
+  "keywords": [
+    "util"
+  ],
+  "license": "MIT",
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "http://opensource.org/licenses/MIT"
+    }
+  ],
+  "main": "./index",
+  "name": "utils-merge",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/jaredhanson/utils-merge.git"
+  },
+  "scripts": {
+    "test": "mocha --reporter spec --require test/bootstrap/node test/*.test.js"
+  },
+  "version": "1.0.1"
+}
diff --git a/signaling_server/service/node_modules/vary/package.json b/signaling_server/service/node_modules/vary/package.json
new file mode 100644 (file)
index 0000000..3cbea81
--- /dev/null
@@ -0,0 +1,81 @@
+{
+  "_args": [
+    [
+      "vary@1.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "vary@1.1.2",
+  "_id": "vary@1.1.2",
+  "_inBundle": false,
+  "_integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+  "_location": "/vary",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "vary@1.1.2",
+    "name": "vary",
+    "escapedName": "vary",
+    "rawSpec": "1.1.2",
+    "saveSpec": null,
+    "fetchSpec": "1.1.2"
+  },
+  "_requiredBy": [
+    "/express"
+  ],
+  "_resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+  "_spec": "1.1.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Douglas Christopher Wilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jshttp/vary/issues"
+  },
+  "description": "Manipulate the HTTP Vary header",
+  "devDependencies": {
+    "beautify-benchmark": "0.2.4",
+    "benchmark": "2.1.4",
+    "eslint": "3.19.0",
+    "eslint-config-standard": "10.2.1",
+    "eslint-plugin-import": "2.7.0",
+    "eslint-plugin-markdown": "1.0.0-beta.6",
+    "eslint-plugin-node": "5.1.1",
+    "eslint-plugin-promise": "3.5.0",
+    "eslint-plugin-standard": "3.0.1",
+    "istanbul": "0.4.5",
+    "mocha": "2.5.3",
+    "supertest": "1.1.0"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "README.md",
+    "index.js"
+  ],
+  "homepage": "https://github.com/jshttp/vary#readme",
+  "keywords": [
+    "http",
+    "res",
+    "vary"
+  ],
+  "license": "MIT",
+  "name": "vary",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jshttp/vary.git"
+  },
+  "scripts": {
+    "bench": "node benchmark/index.js",
+    "lint": "eslint --plugin markdown --ext js,md .",
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+  },
+  "version": "1.1.2"
+}
diff --git a/signaling_server/service/node_modules/which-module/package.json b/signaling_server/service/node_modules/which-module/package.json
new file mode 100644 (file)
index 0000000..e123d9e
--- /dev/null
@@ -0,0 +1,71 @@
+{
+  "_args": [
+    [
+      "which-module@2.0.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "which-module@2.0.0",
+  "_id": "which-module@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+  "_location": "/which-module",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "which-module@2.0.0",
+    "name": "which-module",
+    "escapedName": "which-module",
+    "rawSpec": "2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "2.0.0"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+  "_spec": "2.0.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "nexdrew"
+  },
+  "bugs": {
+    "url": "https://github.com/nexdrew/which-module/issues"
+  },
+  "description": "Find the module object for something that was require()d",
+  "devDependencies": {
+    "ava": "^0.19.1",
+    "coveralls": "^2.13.1",
+    "nyc": "^10.3.0",
+    "standard": "^10.0.2",
+    "standard-version": "^4.0.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/nexdrew/which-module#readme",
+  "keywords": [
+    "which",
+    "module",
+    "exports",
+    "filename",
+    "require",
+    "reverse",
+    "lookup"
+  ],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "which-module",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/nexdrew/which-module.git"
+  },
+  "scripts": {
+    "coverage": "nyc report --reporter=text-lcov | coveralls",
+    "pretest": "standard",
+    "release": "standard-version",
+    "test": "nyc ava"
+  },
+  "version": "2.0.0"
+}
diff --git a/signaling_server/service/node_modules/wrap-ansi/package.json b/signaling_server/service/node_modules/wrap-ansi/package.json
new file mode 100644 (file)
index 0000000..08db9cf
--- /dev/null
@@ -0,0 +1,96 @@
+{
+  "_args": [
+    [
+      "wrap-ansi@5.1.0",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "wrap-ansi@5.1.0",
+  "_id": "wrap-ansi@5.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+  "_location": "/wrap-ansi",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "wrap-ansi@5.1.0",
+    "name": "wrap-ansi",
+    "escapedName": "wrap-ansi",
+    "rawSpec": "5.1.0",
+    "saveSpec": null,
+    "fetchSpec": "5.1.0"
+  },
+  "_requiredBy": [
+    "/cliui"
+  ],
+  "_resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+  "_spec": "5.1.0",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/chalk/wrap-ansi/issues"
+  },
+  "dependencies": {
+    "ansi-styles": "^3.2.0",
+    "string-width": "^3.0.0",
+    "strip-ansi": "^5.0.0"
+  },
+  "description": "Wordwrap a string with ANSI escape codes",
+  "devDependencies": {
+    "ava": "^1.2.1",
+    "chalk": "^2.4.2",
+    "coveralls": "^3.0.3",
+    "has-ansi": "^3.0.0",
+    "nyc": "^13.3.0",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/chalk/wrap-ansi#readme",
+  "keywords": [
+    "wrap",
+    "break",
+    "wordwrap",
+    "wordbreak",
+    "linewrap",
+    "ansi",
+    "styles",
+    "color",
+    "colour",
+    "colors",
+    "terminal",
+    "console",
+    "cli",
+    "string",
+    "tty",
+    "escape",
+    "formatting",
+    "rgb",
+    "256",
+    "shell",
+    "xterm",
+    "log",
+    "logging",
+    "command-line",
+    "text"
+  ],
+  "license": "MIT",
+  "name": "wrap-ansi",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/chalk/wrap-ansi.git"
+  },
+  "scripts": {
+    "test": "xo && nyc ava"
+  },
+  "version": "5.1.0"
+}
diff --git a/signaling_server/service/node_modules/ws/README.md b/signaling_server/service/node_modules/ws/README.md
deleted file mode 100644 (file)
index 3fd9a8c..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-# ws: a Node.js WebSocket library
-
-[![Version npm](https://img.shields.io/npm/v/ws.svg)](https://www.npmjs.com/package/ws)
-[![Linux Build](https://img.shields.io/travis/websockets/ws/master.svg)](https://travis-ci.org/websockets/ws)
-[![Windows Build](https://ci.appveyor.com/api/projects/status/github/websockets/ws?branch=master&svg=true)](https://ci.appveyor.com/project/lpinca/ws)
-[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg)](https://coveralls.io/r/websockets/ws?branch=master)
-
-ws is a simple to use, blazing fast, and thoroughly tested WebSocket client
-and server implementation.
-
-Passes the quite extensive Autobahn test suite: [server][server-report],
-[client][client-report].
-
-**Note**: This module does not work in the browser. The client in the docs is a
-reference to a back end with the role of a client in the WebSocket
-communication. Browser clients must use the native
-[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) object.
-To make the same code work seamlessly on Node.js and the browser, you can use
-one of the many wrappers available on npm, like
-[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws).
-
-## Table of Contents
-
-* [Protocol support](#protocol-support)
-* [Installing](#installing)
-  + [Opt-in for performance and spec compliance](#opt-in-for-performance-and-spec-compliance)
-* [API docs](#api-docs)
-* [WebSocket compression](#websocket-compression)
-* [Usage examples](#usage-examples)
-  + [Sending and receiving text data](#sending-and-receiving-text-data)
-  + [Sending binary data](#sending-binary-data)
-  + [Simple server](#simple-server)
-  + [External HTTP/S server](#external-https-server)
-  + [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server)
-  + [Server broadcast](#server-broadcast)
-  + [echo.websocket.org demo](#echowebsocketorg-demo)
-  + [Other examples](#other-examples)
-* [Error handling best practices](#error-handling-best-practices)
-* [FAQ](#faq)
-  + [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client)
-  + [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections)
-  + [How to connect via a proxy?](#how-to-connect-via-a-proxy)
-* [Changelog](#changelog)
-* [License](#license)
-
-## Protocol support
-
-* **HyBi drafts 07-12** (Use the option `protocolVersion: 8`)
-* **HyBi drafts 13-17** (Current default, alternatively option `protocolVersion: 13`)
-
-## Installing
-
-```
-npm install --save ws
-```
-
-### Opt-in for performance and spec compliance
-
-There are 2 optional modules that can be installed along side with the ws
-module. These modules are binary addons which improve certain operations.
-Prebuilt binaries are available for the most popular platforms so you don't
-necessarily need to have a C++ compiler installed on your machine.
-
-- `npm install --save-optional bufferutil`: Allows to efficiently perform
-  operations such as masking and unmasking the data payload of the WebSocket
-  frames.
-- `npm install --save-optional utf-8-validate`: Allows to efficiently check
-  if a message contains valid UTF-8 as required by the spec.
-
-## API docs
-
-See [`/doc/ws.md`](./doc/ws.md) for Node.js-like docs for the ws classes.
-
-## WebSocket compression
-
-ws supports the [permessage-deflate extension][permessage-deflate] which
-enables the client and server to negotiate a compression algorithm and its
-parameters, and then selectively apply it to the data payloads of each
-WebSocket message.
-
-The extension is disabled by default on the server and enabled by default on
-the client. It adds a significant overhead in terms of performance and memory
-consumption so we suggest to enable it only if it is really needed.
-
-Note that Node.js has a variety of issues with high-performance compression,
-where increased concurrency, especially on Linux, can lead to
-[catastrophic memory fragmentation][node-zlib-bug] and slow performance.
-If you intend to use permessage-deflate in production, it is worthwhile to set
-up a test representative of your workload and ensure Node.js/zlib will handle
-it with acceptable performance and memory usage.
-
-Tuning of permessage-deflate can be done via the options defined below. You can
-also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly
-into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs].
-
-See [the docs][ws-server-options] for more options.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({
-  port: 8080,
-  perMessageDeflate: {
-    zlibDeflateOptions: { // See zlib defaults.
-      chunkSize: 1024,
-      memLevel: 7,
-      level: 3,
-    },
-    zlibInflateOptions: {
-      chunkSize: 10 * 1024
-    },
-    // Other options settable:
-    clientNoContextTakeover: true, // Defaults to negotiated value.
-    serverNoContextTakeover: true, // Defaults to negotiated value.
-    clientMaxWindowBits: 10,       // Defaults to negotiated value.
-    serverMaxWindowBits: 10,       // Defaults to negotiated value.
-    // Below options specified as default values.
-    concurrencyLimit: 10,          // Limits zlib concurrency for perf.
-    threshold: 1024,               // Size (in bytes) below which messages
-                                   // should not be compressed.
-  }
-});
-```
-
-The client will only use the extension if it is supported and enabled on the
-server. To always disable the extension on the client set the
-`perMessageDeflate` option to `false`.
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path', {
-  perMessageDeflate: false
-});
-```
-
-## Usage examples
-
-### Sending and receiving text data
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path');
-
-ws.on('open', function open() {
-  ws.send('something');
-});
-
-ws.on('message', function incoming(data) {
-  console.log(data);
-});
-```
-
-### Sending binary data
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path');
-
-ws.on('open', function open() {
-  const array = new Float32Array(5);
-
-  for (var i = 0; i < array.length; ++i) {
-    array[i] = i / 2;
-  }
-
-  ws.send(array);
-});
-```
-
-### Simple server
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(message) {
-    console.log('received: %s', message);
-  });
-
-  ws.send('something');
-});
-```
-
-### External HTTP/S server
-
-```js
-const fs = require('fs');
-const https = require('https');
-const WebSocket = require('ws');
-
-const server = new https.createServer({
-  cert: fs.readFileSync('/path/to/cert.pem'),
-  key: fs.readFileSync('/path/to/key.pem')
-});
-const wss = new WebSocket.Server({ server });
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(message) {
-    console.log('received: %s', message);
-  });
-
-  ws.send('something');
-});
-
-server.listen(8080);
-```
-
-### Multiple servers sharing a single HTTP/S server
-
-```js
-const http = require('http');
-const WebSocket = require('ws');
-
-const server = http.createServer();
-const wss1 = new WebSocket.Server({ noServer: true });
-const wss2 = new WebSocket.Server({ noServer: true });
-
-wss1.on('connection', function connection(ws) {
-  // ...
-});
-
-wss2.on('connection', function connection(ws) {
-  // ...
-});
-
-server.on('upgrade', function upgrade(request, socket, head) {
-  const pathname = url.parse(request.url).pathname;
-
-  if (pathname === '/foo') {
-    wss1.handleUpgrade(request, socket, head, function done(ws) {
-      wss1.emit('connection', ws, request);
-    });
-  } else if (pathname === '/bar') {
-    wss2.handleUpgrade(request, socket, head, function done(ws) {
-      wss2.emit('connection', ws, request);
-    });
-  } else {
-    socket.destroy();
-  }
-});
-
-server.listen(8080);
-```
-
-### Server broadcast
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-// Broadcast to all.
-wss.broadcast = function broadcast(data) {
-  wss.clients.forEach(function each(client) {
-    if (client.readyState === WebSocket.OPEN) {
-      client.send(data);
-    }
-  });
-};
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(data) {
-    // Broadcast to everyone else.
-    wss.clients.forEach(function each(client) {
-      if (client !== ws && client.readyState === WebSocket.OPEN) {
-        client.send(data);
-      }
-    });
-  });
-});
-```
-
-### echo.websocket.org demo
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('wss://echo.websocket.org/', {
-  origin: 'https://websocket.org'
-});
-
-ws.on('open', function open() {
-  console.log('connected');
-  ws.send(Date.now());
-});
-
-ws.on('close', function close() {
-  console.log('disconnected');
-});
-
-ws.on('message', function incoming(data) {
-  console.log(`Roundtrip time: ${Date.now() - data} ms`);
-
-  setTimeout(function timeout() {
-    ws.send(Date.now());
-  }, 500);
-});
-```
-
-### Other examples
-
-For a full example with a browser client communicating with a ws server, see the
-examples folder.
-
-Otherwise, see the test cases.
-
-## Error handling best practices
-
-```js
-// If the WebSocket is closed before the following send is attempted
-ws.send('something');
-
-// Errors (both immediate and async write errors) can be detected in an optional
-// callback. The callback is also the only way of being notified that data has
-// actually been sent.
-ws.send('something', function ack(error) {
-  // If error is not defined, the send has been completed, otherwise the error
-  // object will indicate what failed.
-});
-
-// Immediate errors can also be handled with `try...catch`, but **note** that
-// since sends are inherently asynchronous, socket write failures will *not* be
-// captured when this technique is used.
-try { ws.send('something'); }
-catch (e) { /* handle error */ }
-```
-
-## FAQ
-
-### How to get the IP address of the client?
-
-The remote IP address can be obtained from the raw socket.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws, req) {
-  const ip = req.connection.remoteAddress;
-});
-```
-
-When the server runs behind a proxy like NGINX, the de-facto standard is to use
-the `X-Forwarded-For` header.
-
-```js
-wss.on('connection', function connection(ws, req) {
-  const ip = req.headers['x-forwarded-for'].split(/\s*,\s*/)[0];
-});
-```
-
-### How to detect and close broken connections?
-
-Sometimes the link between the server and the client can be interrupted in a
-way that keeps both the server and the client unaware of the broken state of the
-connection (e.g. when pulling the cord).
-
-In these cases ping messages can be used as a means to verify that the remote
-endpoint is still responsive.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-function noop() {}
-
-function heartbeat() {
-  this.isAlive = true;
-}
-
-wss.on('connection', function connection(ws) {
-  ws.isAlive = true;
-  ws.on('pong', heartbeat);
-});
-
-const interval = setInterval(function ping() {
-  wss.clients.forEach(function each(ws) {
-    if (ws.isAlive === false) return ws.terminate();
-
-    ws.isAlive = false;
-    ws.ping(noop);
-  });
-}, 30000);
-```
-
-Pong messages are automatically sent in response to ping messages as required
-by the spec.
-
-### How to connect via a proxy?
-
-Use a custom `http.Agent` implementation like [https-proxy-agent][] or
-[socks-proxy-agent][].
-
-## Changelog
-
-We're using the GitHub [releases][changelog] for changelog entries.
-
-## License
-
-[MIT](LICENSE)
-
-[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent
-[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent
-[client-report]: http://websockets.github.io/ws/autobahn/clients/
-[server-report]: http://websockets.github.io/ws/autobahn/servers/
-[permessage-deflate]: https://tools.ietf.org/html/rfc7692
-[changelog]: https://github.com/websockets/ws/releases
-[node-zlib-bug]: https://github.com/nodejs/node/issues/8871
-[node-zlib-deflaterawdocs]: https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options
-[ws-server-options]: https://github.com/websockets/ws/blob/master/doc/ws.md#new-websocketserveroptions-callback
diff --git a/signaling_server/service/node_modules/ws/index.js b/signaling_server/service/node_modules/ws/index.js
deleted file mode 100644 (file)
index b8d6be1..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-const WebSocket = require('./lib/websocket');
-
-WebSocket.Server = require('./lib/websocket-server');
-WebSocket.Receiver = require('./lib/receiver');
-WebSocket.Sender = require('./lib/sender');
-
-module.exports = WebSocket;
diff --git a/signaling_server/service/node_modules/ws/lib/buffer-util.js b/signaling_server/service/node_modules/ws/lib/buffer-util.js
deleted file mode 100644 (file)
index 6974dd6..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-'use strict';
-
-/**
- * Merges an array of buffers into a new buffer.
- *
- * @param {Buffer[]} list The array of buffers to concat
- * @param {Number} totalLength The total length of buffers in the list
- * @return {Buffer} The resulting buffer
- * @public
- */
-function concat (list, totalLength) {
-  const target = Buffer.allocUnsafe(totalLength);
-  var offset = 0;
-
-  for (var i = 0; i < list.length; i++) {
-    const buf = list[i];
-    buf.copy(target, offset);
-    offset += buf.length;
-  }
-
-  return target;
-}
-
-/**
- * Masks a buffer using the given mask.
- *
- * @param {Buffer} source The buffer to mask
- * @param {Buffer} mask The mask to use
- * @param {Buffer} output The buffer where to store the result
- * @param {Number} offset The offset at which to start writing
- * @param {Number} length The number of bytes to mask.
- * @public
- */
-function _mask (source, mask, output, offset, length) {
-  for (var i = 0; i < length; i++) {
-    output[offset + i] = source[i] ^ mask[i & 3];
-  }
-}
-
-/**
- * Unmasks a buffer using the given mask.
- *
- * @param {Buffer} buffer The buffer to unmask
- * @param {Buffer} mask The mask to use
- * @public
- */
-function _unmask (buffer, mask) {
-  // Required until https://github.com/nodejs/node/issues/9006 is resolved.
-  const length = buffer.length;
-  for (var i = 0; i < length; i++) {
-    buffer[i] ^= mask[i & 3];
-  }
-}
-
-try {
-  const bufferUtil = require('bufferutil');
-  const bu = bufferUtil.BufferUtil || bufferUtil;
-
-  module.exports = {
-    mask (source, mask, output, offset, length) {
-      if (length < 48) _mask(source, mask, output, offset, length);
-      else bu.mask(source, mask, output, offset, length);
-    },
-    unmask (buffer, mask) {
-      if (buffer.length < 32) _unmask(buffer, mask);
-      else bu.unmask(buffer, mask);
-    },
-    concat
-  };
-} catch (e) /* istanbul ignore next */ {
-  module.exports = { concat, mask: _mask, unmask: _unmask };
-}
diff --git a/signaling_server/service/node_modules/ws/lib/event-target.js b/signaling_server/service/node_modules/ws/lib/event-target.js
deleted file mode 100644 (file)
index 574e908..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-'use strict';
-
-/**
- * Class representing an event.
- *
- * @private
- */
-class Event {
-  /**
-   * Create a new `Event`.
-   *
-   * @param {String} type The name of the event
-   * @param {Object} target A reference to the target to which the event was dispatched
-   */
-  constructor (type, target) {
-    this.target = target;
-    this.type = type;
-  }
-}
-
-/**
- * Class representing a message event.
- *
- * @extends Event
- * @private
- */
-class MessageEvent extends Event {
-  /**
-   * Create a new `MessageEvent`.
-   *
-   * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data
-   * @param {WebSocket} target A reference to the target to which the event was dispatched
-   */
-  constructor (data, target) {
-    super('message', target);
-
-    this.data = data;
-  }
-}
-
-/**
- * Class representing a close event.
- *
- * @extends Event
- * @private
- */
-class CloseEvent extends Event {
-  /**
-   * Create a new `CloseEvent`.
-   *
-   * @param {Number} code The status code explaining why the connection is being closed
-   * @param {String} reason A human-readable string explaining why the connection is closing
-   * @param {WebSocket} target A reference to the target to which the event was dispatched
-   */
-  constructor (code, reason, target) {
-    super('close', target);
-
-    this.wasClean = target._closeFrameReceived && target._closeFrameSent;
-    this.reason = reason;
-    this.code = code;
-  }
-}
-
-/**
- * Class representing an open event.
- *
- * @extends Event
- * @private
- */
-class OpenEvent extends Event {
-  /**
-   * Create a new `OpenEvent`.
-   *
-   * @param {WebSocket} target A reference to the target to which the event was dispatched
-   */
-  constructor (target) {
-    super('open', target);
-  }
-}
-
-/**
- * Class representing an error event.
- *
- * @extends Event
- * @private
- */
-class ErrorEvent extends Event {
-  /**
-   * Create a new `ErrorEvent`.
-   *
-   * @param {Object} error The error that generated this event
-   * @param {WebSocket} target A reference to the target to which the event was dispatched
-   */
-  constructor (error, target) {
-    super('error', target);
-
-    this.message = error.message;
-    this.error = error;
-  }
-}
-
-/**
- * This provides methods for emulating the `EventTarget` interface. It's not
- * meant to be used directly.
- *
- * @mixin
- */
-const EventTarget = {
-  /**
-   * Register an event listener.
-   *
-   * @param {String} method A string representing the event type to listen for
-   * @param {Function} listener The listener to add
-   * @public
-   */
-  addEventListener (method, listener) {
-    if (typeof listener !== 'function') return;
-
-    function onMessage (data) {
-      listener.call(this, new MessageEvent(data, this));
-    }
-
-    function onClose (code, message) {
-      listener.call(this, new CloseEvent(code, message, this));
-    }
-
-    function onError (error) {
-      listener.call(this, new ErrorEvent(error, this));
-    }
-
-    function onOpen () {
-      listener.call(this, new OpenEvent(this));
-    }
-
-    if (method === 'message') {
-      onMessage._listener = listener;
-      this.on(method, onMessage);
-    } else if (method === 'close') {
-      onClose._listener = listener;
-      this.on(method, onClose);
-    } else if (method === 'error') {
-      onError._listener = listener;
-      this.on(method, onError);
-    } else if (method === 'open') {
-      onOpen._listener = listener;
-      this.on(method, onOpen);
-    } else {
-      this.on(method, listener);
-    }
-  },
-
-  /**
-   * Remove an event listener.
-   *
-   * @param {String} method A string representing the event type to remove
-   * @param {Function} listener The listener to remove
-   * @public
-   */
-  removeEventListener (method, listener) {
-    const listeners = this.listeners(method);
-
-    for (var i = 0; i < listeners.length; i++) {
-      if (listeners[i] === listener || listeners[i]._listener === listener) {
-        this.removeListener(method, listeners[i]);
-      }
-    }
-  }
-};
-
-module.exports = EventTarget;
diff --git a/signaling_server/service/node_modules/ws/lib/extension.js b/signaling_server/service/node_modules/ws/lib/extension.js
deleted file mode 100644 (file)
index 3f48d75..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-'use strict';
-
-//
-// Allowed token characters:
-//
-// '!', '#', '$', '%', '&', ''', '*', '+', '-',
-// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'
-//
-// tokenChars[32] === 0 // ' '
-// tokenChars[33] === 1 // '!'
-// tokenChars[34] === 0 // '"'
-// ...
-//
-const tokenChars = [
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
-  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63
-  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127
-];
-
-/**
- * Adds an offer to the map of extension offers or a parameter to the map of
- * parameters.
- *
- * @param {Object} dest The map of extension offers or parameters
- * @param {String} name The extension or parameter name
- * @param {(Object|Boolean|String)} elem The extension parameters or the
- *     parameter value
- * @private
- */
-function push (dest, name, elem) {
-  if (Object.prototype.hasOwnProperty.call(dest, name)) dest[name].push(elem);
-  else dest[name] = [elem];
-}
-
-/**
- * Parses the `Sec-WebSocket-Extensions` header into an object.
- *
- * @param {String} header The field value of the header
- * @return {Object} The parsed object
- * @public
- */
-function parse (header) {
-  const offers = {};
-
-  if (header === undefined || header === '') return offers;
-
-  var params = {};
-  var mustUnescape = false;
-  var isEscaping = false;
-  var inQuotes = false;
-  var extensionName;
-  var paramName;
-  var start = -1;
-  var end = -1;
-
-  for (var i = 0; i < header.length; i++) {
-    const code = header.charCodeAt(i);
-
-    if (extensionName === undefined) {
-      if (end === -1 && tokenChars[code] === 1) {
-        if (start === -1) start = i;
-      } else if (code === 0x20/* ' ' */|| code === 0x09/* '\t' */) {
-        if (end === -1 && start !== -1) end = i;
-      } else if (code === 0x3b/* ';' */ || code === 0x2c/* ',' */) {
-        if (start === -1) {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-
-        if (end === -1) end = i;
-        const name = header.slice(start, end);
-        if (code === 0x2c) {
-          push(offers, name, params);
-          params = {};
-        } else {
-          extensionName = name;
-        }
-
-        start = end = -1;
-      } else {
-        throw new SyntaxError(`Unexpected character at index ${i}`);
-      }
-    } else if (paramName === undefined) {
-      if (end === -1 && tokenChars[code] === 1) {
-        if (start === -1) start = i;
-      } else if (code === 0x20 || code === 0x09) {
-        if (end === -1 && start !== -1) end = i;
-      } else if (code === 0x3b || code === 0x2c) {
-        if (start === -1) {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-
-        if (end === -1) end = i;
-        push(params, header.slice(start, end), true);
-        if (code === 0x2c) {
-          push(offers, extensionName, params);
-          params = {};
-          extensionName = undefined;
-        }
-
-        start = end = -1;
-      } else if (code === 0x3d/* '=' */&& start !== -1 && end === -1) {
-        paramName = header.slice(start, i);
-        start = end = -1;
-      } else {
-        throw new SyntaxError(`Unexpected character at index ${i}`);
-      }
-    } else {
-      //
-      // The value of a quoted-string after unescaping must conform to the
-      // token ABNF, so only token characters are valid.
-      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1
-      //
-      if (isEscaping) {
-        if (tokenChars[code] !== 1) {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-        if (start === -1) start = i;
-        else if (!mustUnescape) mustUnescape = true;
-        isEscaping = false;
-      } else if (inQuotes) {
-        if (tokenChars[code] === 1) {
-          if (start === -1) start = i;
-        } else if (code === 0x22/* '"' */ && start !== -1) {
-          inQuotes = false;
-          end = i;
-        } else if (code === 0x5c/* '\' */) {
-          isEscaping = true;
-        } else {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {
-        inQuotes = true;
-      } else if (end === -1 && tokenChars[code] === 1) {
-        if (start === -1) start = i;
-      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {
-        if (end === -1) end = i;
-      } else if (code === 0x3b || code === 0x2c) {
-        if (start === -1) {
-          throw new SyntaxError(`Unexpected character at index ${i}`);
-        }
-
-        if (end === -1) end = i;
-        var value = header.slice(start, end);
-        if (mustUnescape) {
-          value = value.replace(/\\/g, '');
-          mustUnescape = false;
-        }
-        push(params, paramName, value);
-        if (code === 0x2c) {
-          push(offers, extensionName, params);
-          params = {};
-          extensionName = undefined;
-        }
-
-        paramName = undefined;
-        start = end = -1;
-      } else {
-        throw new SyntaxError(`Unexpected character at index ${i}`);
-      }
-    }
-  }
-
-  if (start === -1 || inQuotes) {
-    throw new SyntaxError('Unexpected end of input');
-  }
-
-  if (end === -1) end = i;
-  const token = header.slice(start, end);
-  if (extensionName === undefined) {
-    push(offers, token, {});
-  } else {
-    if (paramName === undefined) {
-      push(params, token, true);
-    } else if (mustUnescape) {
-      push(params, paramName, token.replace(/\\/g, ''));
-    } else {
-      push(params, paramName, token);
-    }
-    push(offers, extensionName, params);
-  }
-
-  return offers;
-}
-
-/**
- * Builds the `Sec-WebSocket-Extensions` header field value.
- *
- * @param {Object} extensions The map of extensions and parameters to format
- * @return {String} A string representing the given object
- * @public
- */
-function format (extensions) {
-  return Object.keys(extensions).map((extension) => {
-    var configurations = extensions[extension];
-    if (!Array.isArray(configurations)) configurations = [configurations];
-    return configurations.map((params) => {
-      return [extension].concat(Object.keys(params).map((k) => {
-        var values = params[k];
-        if (!Array.isArray(values)) values = [values];
-        return values.map((v) => v === true ? k : `${k}=${v}`).join('; ');
-      })).join('; ');
-    }).join(', ');
-  }).join(', ');
-}
-
-module.exports = { format, parse };
diff --git a/signaling_server/service/node_modules/ws/lib/permessage-deflate.js b/signaling_server/service/node_modules/ws/lib/permessage-deflate.js
deleted file mode 100644 (file)
index 0d54f03..0000000
+++ /dev/null
@@ -1,516 +0,0 @@
-'use strict';
-
-const Limiter = require('async-limiter');
-const zlib = require('zlib');
-
-const bufferUtil = require('./buffer-util');
-const constants = require('./constants');
-
-const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);
-const EMPTY_BLOCK = Buffer.from([0x00]);
-
-const kPerMessageDeflate = Symbol('permessage-deflate');
-const kWriteInProgress = Symbol('write-in-progress');
-const kPendingClose = Symbol('pending-close');
-const kTotalLength = Symbol('total-length');
-const kCallback = Symbol('callback');
-const kBuffers = Symbol('buffers');
-const kError = Symbol('error');
-
-//
-// We limit zlib concurrency, which prevents severe memory fragmentation
-// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913
-// and https://github.com/websockets/ws/issues/1202
-//
-// Intentionally global; it's the global thread pool that's an issue.
-//
-let zlibLimiter;
-
-/**
- * permessage-deflate implementation.
- */
-class PerMessageDeflate {
-  /**
-   * Creates a PerMessageDeflate instance.
-   *
-   * @param {Object} options Configuration options
-   * @param {Boolean} options.serverNoContextTakeover Request/accept disabling
-   *     of server context takeover
-   * @param {Boolean} options.clientNoContextTakeover Advertise/acknowledge
-   *     disabling of client context takeover
-   * @param {(Boolean|Number)} options.serverMaxWindowBits Request/confirm the
-   *     use of a custom server window size
-   * @param {(Boolean|Number)} options.clientMaxWindowBits Advertise support
-   *     for, or request, a custom client window size
-   * @param {Object} options.zlibDeflateOptions Options to pass to zlib on deflate
-   * @param {Object} options.zlibInflateOptions Options to pass to zlib on inflate
-   * @param {Number} options.threshold Size (in bytes) below which messages
-   *     should not be compressed
-   * @param {Number} options.concurrencyLimit The number of concurrent calls to
-   *     zlib
-   * @param {Boolean} isServer Create the instance in either server or client
-   *     mode
-   * @param {Number} maxPayload The maximum allowed message length
-   */
-  constructor (options, isServer, maxPayload) {
-    this._maxPayload = maxPayload | 0;
-    this._options = options || {};
-    this._threshold = this._options.threshold !== undefined
-      ? this._options.threshold
-      : 1024;
-    this._isServer = !!isServer;
-    this._deflate = null;
-    this._inflate = null;
-
-    this.params = null;
-
-    if (!zlibLimiter) {
-      const concurrency = this._options.concurrencyLimit !== undefined
-        ? this._options.concurrencyLimit
-        : 10;
-      zlibLimiter = new Limiter({ concurrency });
-    }
-  }
-
-  /**
-   * @type {String}
-   */
-  static get extensionName () {
-    return 'permessage-deflate';
-  }
-
-  /**
-   * Create an extension negotiation offer.
-   *
-   * @return {Object} Extension parameters
-   * @public
-   */
-  offer () {
-    const params = {};
-
-    if (this._options.serverNoContextTakeover) {
-      params.server_no_context_takeover = true;
-    }
-    if (this._options.clientNoContextTakeover) {
-      params.client_no_context_takeover = true;
-    }
-    if (this._options.serverMaxWindowBits) {
-      params.server_max_window_bits = this._options.serverMaxWindowBits;
-    }
-    if (this._options.clientMaxWindowBits) {
-      params.client_max_window_bits = this._options.clientMaxWindowBits;
-    } else if (this._options.clientMaxWindowBits == null) {
-      params.client_max_window_bits = true;
-    }
-
-    return params;
-  }
-
-  /**
-   * Accept an extension negotiation offer/response.
-   *
-   * @param {Array} configurations The extension negotiation offers/reponse
-   * @return {Object} Accepted configuration
-   * @public
-   */
-  accept (configurations) {
-    configurations = this.normalizeParams(configurations);
-
-    this.params = this._isServer
-      ? this.acceptAsServer(configurations)
-      : this.acceptAsClient(configurations);
-
-    return this.params;
-  }
-
-  /**
-   * Releases all resources used by the extension.
-   *
-   * @public
-   */
-  cleanup () {
-    if (this._inflate) {
-      if (this._inflate[kWriteInProgress]) {
-        this._inflate[kPendingClose] = true;
-      } else {
-        this._inflate.close();
-        this._inflate = null;
-      }
-    }
-    if (this._deflate) {
-      if (this._deflate[kWriteInProgress]) {
-        this._deflate[kPendingClose] = true;
-      } else {
-        this._deflate.close();
-        this._deflate = null;
-      }
-    }
-  }
-
-  /**
-   *  Accept an extension negotiation offer.
-   *
-   * @param {Array} offers The extension negotiation offers
-   * @return {Object} Accepted configuration
-   * @private
-   */
-  acceptAsServer (offers) {
-    const opts = this._options;
-    const accepted = offers.find((params) => {
-      if (
-        (opts.serverNoContextTakeover === false &&
-          params.server_no_context_takeover) ||
-        (params.server_max_window_bits &&
-          (opts.serverMaxWindowBits === false ||
-            (typeof opts.serverMaxWindowBits === 'number' &&
-              opts.serverMaxWindowBits > params.server_max_window_bits))) ||
-        (typeof opts.clientMaxWindowBits === 'number' &&
-          !params.client_max_window_bits)
-      ) {
-        return false;
-      }
-
-      return true;
-    });
-
-    if (!accepted) {
-      throw new Error('None of the extension offers can be accepted');
-    }
-
-    if (opts.serverNoContextTakeover) {
-      accepted.server_no_context_takeover = true;
-    }
-    if (opts.clientNoContextTakeover) {
-      accepted.client_no_context_takeover = true;
-    }
-    if (typeof opts.serverMaxWindowBits === 'number') {
-      accepted.server_max_window_bits = opts.serverMaxWindowBits;
-    }
-    if (typeof opts.clientMaxWindowBits === 'number') {
-      accepted.client_max_window_bits = opts.clientMaxWindowBits;
-    } else if (
-      accepted.client_max_window_bits === true ||
-      opts.clientMaxWindowBits === false
-    ) {
-      delete accepted.client_max_window_bits;
-    }
-
-    return accepted;
-  }
-
-  /**
-   * Accept the extension negotiation response.
-   *
-   * @param {Array} response The extension negotiation response
-   * @return {Object} Accepted configuration
-   * @private
-   */
-  acceptAsClient (response) {
-    const params = response[0];
-
-    if (
-      this._options.clientNoContextTakeover === false &&
-      params.client_no_context_takeover
-    ) {
-      throw new Error('Unexpected parameter "client_no_context_takeover"');
-    }
-
-    if (!params.client_max_window_bits) {
-      if (typeof this._options.clientMaxWindowBits === 'number') {
-        params.client_max_window_bits = this._options.clientMaxWindowBits;
-      }
-    } else if (
-      this._options.clientMaxWindowBits === false ||
-      (typeof this._options.clientMaxWindowBits === 'number' &&
-        params.client_max_window_bits > this._options.clientMaxWindowBits)
-    ) {
-      throw new Error(
-        'Unexpected or invalid parameter "client_max_window_bits"'
-      );
-    }
-
-    return params;
-  }
-
-  /**
-   * Normalize parameters.
-   *
-   * @param {Array} configurations The extension negotiation offers/reponse
-   * @return {Array} The offers/response with normalized parameters
-   * @private
-   */
-  normalizeParams (configurations) {
-    configurations.forEach((params) => {
-      Object.keys(params).forEach((key) => {
-        var value = params[key];
-
-        if (value.length > 1) {
-          throw new Error(`Parameter "${key}" must have only a single value`);
-        }
-
-        value = value[0];
-
-        if (key === 'client_max_window_bits') {
-          if (value !== true) {
-            const num = +value;
-            if (!Number.isInteger(num) || num < 8 || num > 15) {
-              throw new TypeError(
-                `Invalid value for parameter "${key}": ${value}`
-              );
-            }
-            value = num;
-          } else if (!this._isServer) {
-            throw new TypeError(
-              `Invalid value for parameter "${key}": ${value}`
-            );
-          }
-        } else if (key === 'server_max_window_bits') {
-          const num = +value;
-          if (!Number.isInteger(num) || num < 8 || num > 15) {
-            throw new TypeError(
-              `Invalid value for parameter "${key}": ${value}`
-            );
-          }
-          value = num;
-        } else if (
-          key === 'client_no_context_takeover' ||
-          key === 'server_no_context_takeover'
-        ) {
-          if (value !== true) {
-            throw new TypeError(
-              `Invalid value for parameter "${key}": ${value}`
-            );
-          }
-        } else {
-          throw new Error(`Unknown parameter "${key}"`);
-        }
-
-        params[key] = value;
-      });
-    });
-
-    return configurations;
-  }
-
-  /**
-   * Decompress data. Concurrency limited by async-limiter.
-   *
-   * @param {Buffer} data Compressed data
-   * @param {Boolean} fin Specifies whether or not this is the last fragment
-   * @param {Function} callback Callback
-   * @public
-   */
-  decompress (data, fin, callback) {
-    zlibLimiter.push((done) => {
-      this._decompress(data, fin, (err, result) => {
-        done();
-        callback(err, result);
-      });
-    });
-  }
-
-  /**
-   * Compress data. Concurrency limited by async-limiter.
-   *
-   * @param {Buffer} data Data to compress
-   * @param {Boolean} fin Specifies whether or not this is the last fragment
-   * @param {Function} callback Callback
-   * @public
-   */
-  compress (data, fin, callback) {
-    zlibLimiter.push((done) => {
-      this._compress(data, fin, (err, result) => {
-        done();
-        callback(err, result);
-      });
-    });
-  }
-
-  /**
-   * Decompress data.
-   *
-   * @param {Buffer} data Compressed data
-   * @param {Boolean} fin Specifies whether or not this is the last fragment
-   * @param {Function} callback Callback
-   * @private
-   */
-  _decompress (data, fin, callback) {
-    const endpoint = this._isServer ? 'client' : 'server';
-
-    if (!this._inflate) {
-      const key = `${endpoint}_max_window_bits`;
-      const windowBits = typeof this.params[key] !== 'number'
-        ? zlib.Z_DEFAULT_WINDOWBITS
-        : this.params[key];
-
-      this._inflate = zlib.createInflateRaw(
-        Object.assign({}, this._options.zlibInflateOptions, { windowBits })
-      );
-      this._inflate[kPerMessageDeflate] = this;
-      this._inflate[kTotalLength] = 0;
-      this._inflate[kBuffers] = [];
-      this._inflate.on('error', inflateOnError);
-      this._inflate.on('data', inflateOnData);
-    }
-
-    this._inflate[kCallback] = callback;
-    this._inflate[kWriteInProgress] = true;
-
-    this._inflate.write(data);
-    if (fin) this._inflate.write(TRAILER);
-
-    this._inflate.flush(() => {
-      const err = this._inflate[kError];
-
-      if (err) {
-        this._inflate.close();
-        this._inflate = null;
-        callback(err);
-        return;
-      }
-
-      const data = bufferUtil.concat(
-        this._inflate[kBuffers],
-        this._inflate[kTotalLength]
-      );
-
-      if (
-        (fin && this.params[`${endpoint}_no_context_takeover`]) ||
-        this._inflate[kPendingClose]
-      ) {
-        this._inflate.close();
-        this._inflate = null;
-      } else {
-        this._inflate[kWriteInProgress] = false;
-        this._inflate[kTotalLength] = 0;
-        this._inflate[kBuffers] = [];
-      }
-
-      callback(null, data);
-    });
-  }
-
-  /**
-   * Compress data.
-   *
-   * @param {Buffer} data Data to compress
-   * @param {Boolean} fin Specifies whether or not this is the last fragment
-   * @param {Function} callback Callback
-   * @private
-   */
-  _compress (data, fin, callback) {
-    if (!data || data.length === 0) {
-      process.nextTick(callback, null, EMPTY_BLOCK);
-      return;
-    }
-
-    const endpoint = this._isServer ? 'server' : 'client';
-
-    if (!this._deflate) {
-      const key = `${endpoint}_max_window_bits`;
-      const windowBits = typeof this.params[key] !== 'number'
-        ? zlib.Z_DEFAULT_WINDOWBITS
-        : this.params[key];
-
-      this._deflate = zlib.createDeflateRaw(
-        Object.assign(
-          // TODO deprecate memLevel/level and recommend zlibDeflateOptions instead
-          {
-            memLevel: this._options.memLevel,
-            level: this._options.level
-          },
-          this._options.zlibDeflateOptions,
-          { windowBits }
-        )
-      );
-
-      this._deflate[kTotalLength] = 0;
-      this._deflate[kBuffers] = [];
-
-      //
-      // `zlib.DeflateRaw` emits an `'error'` event only when an attempt to use
-      // it is made after it has already been closed. This cannot happen here,
-      // so we only add a listener for the `'data'` event.
-      //
-      this._deflate.on('data', deflateOnData);
-    }
-
-    this._deflate[kWriteInProgress] = true;
-
-    this._deflate.write(data);
-    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {
-      var data = bufferUtil.concat(
-        this._deflate[kBuffers],
-        this._deflate[kTotalLength]
-      );
-
-      if (fin) data = data.slice(0, data.length - 4);
-
-      if (
-        (fin && this.params[`${endpoint}_no_context_takeover`]) ||
-        this._deflate[kPendingClose]
-      ) {
-        this._deflate.close();
-        this._deflate = null;
-      } else {
-        this._deflate[kWriteInProgress] = false;
-        this._deflate[kTotalLength] = 0;
-        this._deflate[kBuffers] = [];
-      }
-
-      callback(null, data);
-    });
-  }
-}
-
-module.exports = PerMessageDeflate;
-
-/**
- * The listener of the `zlib.DeflateRaw` stream `'data'` event.
- *
- * @param {Buffer} chunk A chunk of data
- * @private
- */
-function deflateOnData (chunk) {
-  this[kBuffers].push(chunk);
-  this[kTotalLength] += chunk.length;
-}
-
-/**
- * The listener of the `zlib.InflateRaw` stream `'data'` event.
- *
- * @param {Buffer} chunk A chunk of data
- * @private
- */
-function inflateOnData (chunk) {
-  this[kTotalLength] += chunk.length;
-
-  if (
-    this[kPerMessageDeflate]._maxPayload < 1 ||
-    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload
-  ) {
-    this[kBuffers].push(chunk);
-    return;
-  }
-
-  this[kError] = new RangeError('Max payload size exceeded');
-  this[kError][constants.kStatusCode] = 1009;
-  this.removeListener('data', inflateOnData);
-  this.reset();
-}
-
-/**
- * The listener of the `zlib.InflateRaw` stream `'error'` event.
- *
- * @param {Error} err The emitted error
- * @private
- */
-function inflateOnError (err) {
-  //
-  // There is no need to call `Zlib#close()` as the handle is automatically
-  // closed when an error is emitted.
-  //
-  this[kPerMessageDeflate]._inflate = null;
-  err[constants.kStatusCode] = 1007;
-  this[kCallback](err);
-}
diff --git a/signaling_server/service/node_modules/ws/lib/receiver.js b/signaling_server/service/node_modules/ws/lib/receiver.js
deleted file mode 100644 (file)
index 81dc0bf..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-'use strict';
-
-const stream = require('stream');
-
-const PerMessageDeflate = require('./permessage-deflate');
-const bufferUtil = require('./buffer-util');
-const validation = require('./validation');
-const constants = require('./constants');
-
-const GET_INFO = 0;
-const GET_PAYLOAD_LENGTH_16 = 1;
-const GET_PAYLOAD_LENGTH_64 = 2;
-const GET_MASK = 3;
-const GET_DATA = 4;
-const INFLATING = 5;
-
-/**
- * HyBi Receiver implementation.
- *
- * @extends stream.Writable
- */
-class Receiver extends stream.Writable {
-  /**
-   * Creates a Receiver instance.
-   *
-   * @param {String} binaryType The type for binary data
-   * @param {Object} extensions An object containing the negotiated extensions
-   * @param {Number} maxPayload The maximum allowed message length
-   */
-  constructor (binaryType, extensions, maxPayload) {
-    super();
-
-    this._binaryType = binaryType || constants.BINARY_TYPES[0];
-    this[constants.kWebSocket] = undefined;
-    this._extensions = extensions || {};
-    this._maxPayload = maxPayload | 0;
-
-    this._bufferedBytes = 0;
-    this._buffers = [];
-
-    this._compressed = false;
-    this._payloadLength = 0;
-    this._mask = undefined;
-    this._fragmented = 0;
-    this._masked = false;
-    this._fin = false;
-    this._opcode = 0;
-
-    this._totalPayloadLength = 0;
-    this._messageLength = 0;
-    this._fragments = [];
-
-    this._state = GET_INFO;
-    this._loop = false;
-  }
-
-  /**
-   * Implements `Writable.prototype._write()`.
-   *
-   * @param {Buffer} chunk The chunk of data to write
-   * @param {String} encoding The character encoding of `chunk`
-   * @param {Function} cb Callback
-   */
-  _write (chunk, encoding, cb) {
-    if (this._opcode === 0x08) return cb();
-
-    this._bufferedBytes += chunk.length;
-    this._buffers.push(chunk);
-    this.startLoop(cb);
-  }
-
-  /**
-   * Consumes `n` bytes from the buffered data.
-   *
-   * @param {Number} n The number of bytes to consume
-   * @return {Buffer} The consumed bytes
-   * @private
-   */
-  consume (n) {
-    this._bufferedBytes -= n;
-
-    if (n === this._buffers[0].length) return this._buffers.shift();
-
-    if (n < this._buffers[0].length) {
-      const buf = this._buffers[0];
-      this._buffers[0] = buf.slice(n);
-      return buf.slice(0, n);
-    }
-
-    const dst = Buffer.allocUnsafe(n);
-
-    do {
-      const buf = this._buffers[0];
-
-      if (n >= buf.length) {
-        this._buffers.shift().copy(dst, dst.length - n);
-      } else {
-        buf.copy(dst, dst.length - n, 0, n);
-        this._buffers[0] = buf.slice(n);
-      }
-
-      n -= buf.length;
-    } while (n > 0);
-
-    return dst;
-  }
-
-  /**
-   * Starts the parsing loop.
-   *
-   * @param {Function} cb Callback
-   * @private
-   */
-  startLoop (cb) {
-    var err;
-    this._loop = true;
-
-    do {
-      switch (this._state) {
-        case GET_INFO:
-          err = this.getInfo();
-          break;
-        case GET_PAYLOAD_LENGTH_16:
-          err = this.getPayloadLength16();
-          break;
-        case GET_PAYLOAD_LENGTH_64:
-          err = this.getPayloadLength64();
-          break;
-        case GET_MASK:
-          this.getMask();
-          break;
-        case GET_DATA:
-          err = this.getData(cb);
-          break;
-        default: // `INFLATING`
-          this._loop = false;
-          return;
-      }
-    } while (this._loop);
-
-    cb(err);
-  }
-
-  /**
-   * Reads the first two bytes of a frame.
-   *
-   * @return {(RangeError|undefined)} A possible error
-   * @private
-   */
-  getInfo () {
-    if (this._bufferedBytes < 2) {
-      this._loop = false;
-      return;
-    }
-
-    const buf = this.consume(2);
-
-    if ((buf[0] & 0x30) !== 0x00) {
-      this._loop = false;
-      return error(RangeError, 'RSV2 and RSV3 must be clear', true, 1002);
-    }
-
-    const compressed = (buf[0] & 0x40) === 0x40;
-
-    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {
-      this._loop = false;
-      return error(RangeError, 'RSV1 must be clear', true, 1002);
-    }
-
-    this._fin = (buf[0] & 0x80) === 0x80;
-    this._opcode = buf[0] & 0x0f;
-    this._payloadLength = buf[1] & 0x7f;
-
-    if (this._opcode === 0x00) {
-      if (compressed) {
-        this._loop = false;
-        return error(RangeError, 'RSV1 must be clear', true, 1002);
-      }
-
-      if (!this._fragmented) {
-        this._loop = false;
-        return error(RangeError, 'invalid opcode 0', true, 1002);
-      }
-
-      this._opcode = this._fragmented;
-    } else if (this._opcode === 0x01 || this._opcode === 0x02) {
-      if (this._fragmented) {
-        this._loop = false;
-        return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
-      }
-
-      this._compressed = compressed;
-    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {
-      if (!this._fin) {
-        this._loop = false;
-        return error(RangeError, 'FIN must be set', true, 1002);
-      }
-
-      if (compressed) {
-        this._loop = false;
-        return error(RangeError, 'RSV1 must be clear', true, 1002);
-      }
-
-      if (this._payloadLength > 0x7d) {
-        this._loop = false;
-        return error(
-          RangeError,
-          `invalid payload length ${this._payloadLength}`,
-          true,
-          1002
-        );
-      }
-    } else {
-      this._loop = false;
-      return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
-    }
-
-    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;
-    this._masked = (buf[1] & 0x80) === 0x80;
-
-    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;
-    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;
-    else return this.haveLength();
-  }
-
-  /**
-   * Gets extended payload length (7+16).
-   *
-   * @return {(RangeError|undefined)} A possible error
-   * @private
-   */
-  getPayloadLength16 () {
-    if (this._bufferedBytes < 2) {
-      this._loop = false;
-      return;
-    }
-
-    this._payloadLength = this.consume(2).readUInt16BE(0);
-    return this.haveLength();
-  }
-
-  /**
-   * Gets extended payload length (7+64).
-   *
-   * @return {(RangeError|undefined)} A possible error
-   * @private
-   */
-  getPayloadLength64 () {
-    if (this._bufferedBytes < 8) {
-      this._loop = false;
-      return;
-    }
-
-    const buf = this.consume(8);
-    const num = buf.readUInt32BE(0);
-
-    //
-    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned
-    // if payload length is greater than this number.
-    //
-    if (num > Math.pow(2, 53 - 32) - 1) {
-      this._loop = false;
-      return error(
-        RangeError,
-        'Unsupported WebSocket frame: payload length > 2^53 - 1',
-        false,
-        1009
-      );
-    }
-
-    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);
-    return this.haveLength();
-  }
-
-  /**
-   * Payload length has been read.
-   *
-   * @return {(RangeError|undefined)} A possible error
-   * @private
-   */
-  haveLength () {
-    if (this._payloadLength && this._opcode < 0x08) {
-      this._totalPayloadLength += this._payloadLength;
-      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {
-        this._loop = false;
-        return error(RangeError, 'Max payload size exceeded', false, 1009);
-      }
-    }
-
-    if (this._masked) this._state = GET_MASK;
-    else this._state = GET_DATA;
-  }
-
-  /**
-   * Reads mask bytes.
-   *
-   * @private
-   */
-  getMask () {
-    if (this._bufferedBytes < 4) {
-      this._loop = false;
-      return;
-    }
-
-    this._mask = this.consume(4);
-    this._state = GET_DATA;
-  }
-
-  /**
-   * Reads data bytes.
-   *
-   * @param {Function} cb Callback
-   * @return {(Error|RangeError|undefined)} A possible error
-   * @private
-   */
-  getData (cb) {
-    var data = constants.EMPTY_BUFFER;
-
-    if (this._payloadLength) {
-      if (this._bufferedBytes < this._payloadLength) {
-        this._loop = false;
-        return;
-      }
-
-      data = this.consume(this._payloadLength);
-      if (this._masked) bufferUtil.unmask(data, this._mask);
-    }
-
-    if (this._opcode > 0x07) return this.controlMessage(data);
-
-    if (this._compressed) {
-      this._state = INFLATING;
-      this.decompress(data, cb);
-      return;
-    }
-
-    if (data.length) {
-      //
-      // This message is not compressed so its lenght is the sum of the payload
-      // length of all fragments.
-      //
-      this._messageLength = this._totalPayloadLength;
-      this._fragments.push(data);
-    }
-
-    return this.dataMessage();
-  }
-
-  /**
-   * Decompresses data.
-   *
-   * @param {Buffer} data Compressed data
-   * @param {Function} cb Callback
-   * @private
-   */
-  decompress (data, cb) {
-    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
-
-    perMessageDeflate.decompress(data, this._fin, (err, buf) => {
-      if (err) return cb(err);
-
-      if (buf.length) {
-        this._messageLength += buf.length;
-        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {
-          return cb(error(RangeError, 'Max payload size exceeded', false, 1009));
-        }
-
-        this._fragments.push(buf);
-      }
-
-      const er = this.dataMessage();
-      if (er) return cb(er);
-
-      this.startLoop(cb);
-    });
-  }
-
-  /**
-   * Handles a data message.
-   *
-   * @return {(Error|undefined)} A possible error
-   * @private
-   */
-  dataMessage () {
-    if (this._fin) {
-      const messageLength = this._messageLength;
-      const fragments = this._fragments;
-
-      this._totalPayloadLength = 0;
-      this._messageLength = 0;
-      this._fragmented = 0;
-      this._fragments = [];
-
-      if (this._opcode === 2) {
-        var data;
-
-        if (this._binaryType === 'nodebuffer') {
-          data = toBuffer(fragments, messageLength);
-        } else if (this._binaryType === 'arraybuffer') {
-          data = toArrayBuffer(toBuffer(fragments, messageLength));
-        } else {
-          data = fragments;
-        }
-
-        this.emit('message', data);
-      } else {
-        const buf = toBuffer(fragments, messageLength);
-
-        if (!validation.isValidUTF8(buf)) {
-          this._loop = false;
-          return error(Error, 'invalid UTF-8 sequence', true, 1007);
-        }
-
-        this.emit('message', buf.toString());
-      }
-    }
-
-    this._state = GET_INFO;
-  }
-
-  /**
-   * Handles a control message.
-   *
-   * @param {Buffer} data Data to handle
-   * @return {(Error|RangeError|undefined)} A possible error
-   * @private
-   */
-  controlMessage (data) {
-    if (this._opcode === 0x08) {
-      this._loop = false;
-
-      if (data.length === 0) {
-        this.emit('conclude', 1005, '');
-        this.end();
-      } else if (data.length === 1) {
-        return error(RangeError, 'invalid payload length 1', true, 1002);
-      } else {
-        const code = data.readUInt16BE(0);
-
-        if (!validation.isValidStatusCode(code)) {
-          return error(RangeError, `invalid status code ${code}`, true, 1002);
-        }
-
-        const buf = data.slice(2);
-
-        if (!validation.isValidUTF8(buf)) {
-          return error(Error, 'invalid UTF-8 sequence', true, 1007);
-        }
-
-        this.emit('conclude', code, buf.toString());
-        this.end();
-      }
-
-      return;
-    }
-
-    if (this._opcode === 0x09) this.emit('ping', data);
-    else this.emit('pong', data);
-
-    this._state = GET_INFO;
-  }
-}
-
-module.exports = Receiver;
-
-/**
- * Builds an error object.
- *
- * @param {(Error|RangeError)} ErrorCtor The error constructor
- * @param {String} message The error message
- * @param {Boolean} prefix Specifies whether or not to add a default prefix to
- *     `message`
- * @param {Number} statusCode The status code
- * @return {(Error|RangeError)} The error
- * @private
- */
-function error (ErrorCtor, message, prefix, statusCode) {
-  const err = new ErrorCtor(
-    prefix ? `Invalid WebSocket frame: ${message}` : message
-  );
-
-  Error.captureStackTrace(err, error);
-  err[constants.kStatusCode] = statusCode;
-  return err;
-}
-
-/**
- * Makes a buffer from a list of fragments.
- *
- * @param {Buffer[]} fragments The list of fragments composing the message
- * @param {Number} messageLength The length of the message
- * @return {Buffer}
- * @private
- */
-function toBuffer (fragments, messageLength) {
-  if (fragments.length === 1) return fragments[0];
-  if (fragments.length > 1) return bufferUtil.concat(fragments, messageLength);
-  return constants.EMPTY_BUFFER;
-}
-
-/**
- * Converts a buffer to an `ArrayBuffer`.
- *
- * @param {Buffer} The buffer to convert
- * @return {ArrayBuffer} Converted buffer
- */
-function toArrayBuffer (buf) {
-  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
-    return buf.buffer;
-  }
-
-  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
-}
diff --git a/signaling_server/service/node_modules/ws/lib/sender.js b/signaling_server/service/node_modules/ws/lib/sender.js
deleted file mode 100644 (file)
index 060e553..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-'use strict';
-
-const crypto = require('crypto');
-
-const PerMessageDeflate = require('./permessage-deflate');
-const bufferUtil = require('./buffer-util');
-const validation = require('./validation');
-const constants = require('./constants');
-
-/**
- * HyBi Sender implementation.
- */
-class Sender {
-  /**
-   * Creates a Sender instance.
-   *
-   * @param {net.Socket} socket The connection socket
-   * @param {Object} extensions An object containing the negotiated extensions
-   */
-  constructor (socket, extensions) {
-    this._extensions = extensions || {};
-    this._socket = socket;
-
-    this._firstFragment = true;
-    this._compress = false;
-
-    this._bufferedBytes = 0;
-    this._deflating = false;
-    this._queue = [];
-  }
-
-  /**
-   * Frames a piece of data according to the HyBi WebSocket protocol.
-   *
-   * @param {Buffer} data The data to frame
-   * @param {Object} options Options object
-   * @param {Number} options.opcode The opcode
-   * @param {Boolean} options.readOnly Specifies whether `data` can be modified
-   * @param {Boolean} options.fin Specifies whether or not to set the FIN bit
-   * @param {Boolean} options.mask Specifies whether or not to mask `data`
-   * @param {Boolean} options.rsv1 Specifies whether or not to set the RSV1 bit
-   * @return {Buffer[]} The framed data as a list of `Buffer` instances
-   * @public
-   */
-  static frame (data, options) {
-    const merge = data.length < 1024 || (options.mask && options.readOnly);
-    var offset = options.mask ? 6 : 2;
-    var payloadLength = data.length;
-
-    if (data.length >= 65536) {
-      offset += 8;
-      payloadLength = 127;
-    } else if (data.length > 125) {
-      offset += 2;
-      payloadLength = 126;
-    }
-
-    const target = Buffer.allocUnsafe(merge ? data.length + offset : offset);
-
-    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;
-    if (options.rsv1) target[0] |= 0x40;
-
-    if (payloadLength === 126) {
-      target.writeUInt16BE(data.length, 2);
-    } else if (payloadLength === 127) {
-      target.writeUInt32BE(0, 2);
-      target.writeUInt32BE(data.length, 6);
-    }
-
-    if (!options.mask) {
-      target[1] = payloadLength;
-      if (merge) {
-        data.copy(target, offset);
-        return [target];
-      }
-
-      return [target, data];
-    }
-
-    const mask = crypto.randomBytes(4);
-
-    target[1] = payloadLength | 0x80;
-    target[offset - 4] = mask[0];
-    target[offset - 3] = mask[1];
-    target[offset - 2] = mask[2];
-    target[offset - 1] = mask[3];
-
-    if (merge) {
-      bufferUtil.mask(data, mask, target, offset, data.length);
-      return [target];
-    }
-
-    bufferUtil.mask(data, mask, data, 0, data.length);
-    return [target, data];
-  }
-
-  /**
-   * Sends a close message to the other peer.
-   *
-   * @param {(Number|undefined)} code The status code component of the body
-   * @param {String} data The message component of the body
-   * @param {Boolean} mask Specifies whether or not to mask the message
-   * @param {Function} cb Callback
-   * @public
-   */
-  close (code, data, mask, cb) {
-    var buf;
-
-    if (code === undefined) {
-      buf = constants.EMPTY_BUFFER;
-    } else if (typeof code !== 'number' || !validation.isValidStatusCode(code)) {
-      throw new TypeError('First argument must be a valid error code number');
-    } else if (data === undefined || data === '') {
-      buf = Buffer.allocUnsafe(2);
-      buf.writeUInt16BE(code, 0);
-    } else {
-      buf = Buffer.allocUnsafe(2 + Buffer.byteLength(data));
-      buf.writeUInt16BE(code, 0);
-      buf.write(data, 2);
-    }
-
-    if (this._deflating) {
-      this.enqueue([this.doClose, buf, mask, cb]);
-    } else {
-      this.doClose(buf, mask, cb);
-    }
-  }
-
-  /**
-   * Frames and sends a close message.
-   *
-   * @param {Buffer} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback
-   * @private
-   */
-  doClose (data, mask, cb) {
-    this.sendFrame(Sender.frame(data, {
-      fin: true,
-      rsv1: false,
-      opcode: 0x08,
-      mask,
-      readOnly: false
-    }), cb);
-  }
-
-  /**
-   * Sends a ping message to the other peer.
-   *
-   * @param {*} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback
-   * @public
-   */
-  ping (data, mask, cb) {
-    var readOnly = true;
-
-    if (!Buffer.isBuffer(data)) {
-      if (data instanceof ArrayBuffer) {
-        data = Buffer.from(data);
-      } else if (ArrayBuffer.isView(data)) {
-        data = viewToBuffer(data);
-      } else {
-        data = Buffer.from(data);
-        readOnly = false;
-      }
-    }
-
-    if (this._deflating) {
-      this.enqueue([this.doPing, data, mask, readOnly, cb]);
-    } else {
-      this.doPing(data, mask, readOnly, cb);
-    }
-  }
-
-  /**
-   * Frames and sends a ping message.
-   *
-   * @param {*} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Boolean} readOnly Specifies whether `data` can be modified
-   * @param {Function} cb Callback
-   * @private
-   */
-  doPing (data, mask, readOnly, cb) {
-    this.sendFrame(Sender.frame(data, {
-      fin: true,
-      rsv1: false,
-      opcode: 0x09,
-      mask,
-      readOnly
-    }), cb);
-  }
-
-  /**
-   * Sends a pong message to the other peer.
-   *
-   * @param {*} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback
-   * @public
-   */
-  pong (data, mask, cb) {
-    var readOnly = true;
-
-    if (!Buffer.isBuffer(data)) {
-      if (data instanceof ArrayBuffer) {
-        data = Buffer.from(data);
-      } else if (ArrayBuffer.isView(data)) {
-        data = viewToBuffer(data);
-      } else {
-        data = Buffer.from(data);
-        readOnly = false;
-      }
-    }
-
-    if (this._deflating) {
-      this.enqueue([this.doPong, data, mask, readOnly, cb]);
-    } else {
-      this.doPong(data, mask, readOnly, cb);
-    }
-  }
-
-  /**
-   * Frames and sends a pong message.
-   *
-   * @param {*} data The message to send
-   * @param {Boolean} mask Specifies whether or not to mask `data`
-   * @param {Boolean} readOnly Specifies whether `data` can be modified
-   * @param {Function} cb Callback
-   * @private
-   */
-  doPong (data, mask, readOnly, cb) {
-    this.sendFrame(Sender.frame(data, {
-      fin: true,
-      rsv1: false,
-      opcode: 0x0a,
-      mask,
-      readOnly
-    }), cb);
-  }
-
-  /**
-   * Sends a data message to the other peer.
-   *
-   * @param {*} data The message to send
-   * @param {Object} options Options object
-   * @param {Boolean} options.compress Specifies whether or not to compress `data`
-   * @param {Boolean} options.binary Specifies whether `data` is binary or text
-   * @param {Boolean} options.fin Specifies whether the fragment is the last one
-   * @param {Boolean} options.mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback
-   * @public
-   */
-  send (data, options, cb) {
-    var opcode = options.binary ? 2 : 1;
-    var rsv1 = options.compress;
-    var readOnly = true;
-
-    if (!Buffer.isBuffer(data)) {
-      if (data instanceof ArrayBuffer) {
-        data = Buffer.from(data);
-      } else if (ArrayBuffer.isView(data)) {
-        data = viewToBuffer(data);
-      } else {
-        data = Buffer.from(data);
-        readOnly = false;
-      }
-    }
-
-    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
-
-    if (this._firstFragment) {
-      this._firstFragment = false;
-      if (rsv1 && perMessageDeflate) {
-        rsv1 = data.length >= perMessageDeflate._threshold;
-      }
-      this._compress = rsv1;
-    } else {
-      rsv1 = false;
-      opcode = 0;
-    }
-
-    if (options.fin) this._firstFragment = true;
-
-    if (perMessageDeflate) {
-      const opts = {
-        fin: options.fin,
-        rsv1,
-        opcode,
-        mask: options.mask,
-        readOnly
-      };
-
-      if (this._deflating) {
-        this.enqueue([this.dispatch, data, this._compress, opts, cb]);
-      } else {
-        this.dispatch(data, this._compress, opts, cb);
-      }
-    } else {
-      this.sendFrame(Sender.frame(data, {
-        fin: options.fin,
-        rsv1: false,
-        opcode,
-        mask: options.mask,
-        readOnly
-      }), cb);
-    }
-  }
-
-  /**
-   * Dispatches a data message.
-   *
-   * @param {Buffer} data The message to send
-   * @param {Boolean} compress Specifies whether or not to compress `data`
-   * @param {Object} options Options object
-   * @param {Number} options.opcode The opcode
-   * @param {Boolean} options.readOnly Specifies whether `data` can be modified
-   * @param {Boolean} options.fin Specifies whether or not to set the FIN bit
-   * @param {Boolean} options.mask Specifies whether or not to mask `data`
-   * @param {Boolean} options.rsv1 Specifies whether or not to set the RSV1 bit
-   * @param {Function} cb Callback
-   * @private
-   */
-  dispatch (data, compress, options, cb) {
-    if (!compress) {
-      this.sendFrame(Sender.frame(data, options), cb);
-      return;
-    }
-
-    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
-
-    this._deflating = true;
-    perMessageDeflate.compress(data, options.fin, (_, buf) => {
-      options.readOnly = false;
-      this.sendFrame(Sender.frame(buf, options), cb);
-      this._deflating = false;
-      this.dequeue();
-    });
-  }
-
-  /**
-   * Executes queued send operations.
-   *
-   * @private
-   */
-  dequeue () {
-    while (!this._deflating && this._queue.length) {
-      const params = this._queue.shift();
-
-      this._bufferedBytes -= params[1].length;
-      params[0].apply(this, params.slice(1));
-    }
-  }
-
-  /**
-   * Enqueues a send operation.
-   *
-   * @param {Array} params Send operation parameters.
-   * @private
-   */
-  enqueue (params) {
-    this._bufferedBytes += params[1].length;
-    this._queue.push(params);
-  }
-
-  /**
-   * Sends a frame.
-   *
-   * @param {Buffer[]} list The frame to send
-   * @param {Function} cb Callback
-   * @private
-   */
-  sendFrame (list, cb) {
-    if (list.length === 2) {
-      this._socket.write(list[0]);
-      this._socket.write(list[1], cb);
-    } else {
-      this._socket.write(list[0], cb);
-    }
-  }
-}
-
-module.exports = Sender;
-
-/**
- * Converts an `ArrayBuffer` view into a buffer.
- *
- * @param {(DataView|TypedArray)} view The view to convert
- * @return {Buffer} Converted view
- * @private
- */
-function viewToBuffer (view) {
-  const buf = Buffer.from(view.buffer);
-
-  if (view.byteLength !== view.buffer.byteLength) {
-    return buf.slice(view.byteOffset, view.byteOffset + view.byteLength);
-  }
-
-  return buf;
-}
diff --git a/signaling_server/service/node_modules/ws/lib/validation.js b/signaling_server/service/node_modules/ws/lib/validation.js
deleted file mode 100644 (file)
index 06269fc..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-'use strict';
-
-try {
-  const isValidUTF8 = require('utf-8-validate');
-
-  exports.isValidUTF8 = typeof isValidUTF8 === 'object'
-    ? isValidUTF8.Validation.isValidUTF8 // utf-8-validate@<3.0.0
-    : isValidUTF8;
-} catch (e) /* istanbul ignore next */ {
-  exports.isValidUTF8 = () => true;
-}
-
-/**
- * Checks if a status code is allowed in a close frame.
- *
- * @param {Number} code The status code
- * @return {Boolean} `true` if the status code is valid, else `false`
- * @public
- */
-exports.isValidStatusCode = (code) => {
-  return (
-    (code >= 1000 &&
-      code <= 1013 &&
-      code !== 1004 &&
-      code !== 1005 &&
-      code !== 1006) ||
-    (code >= 3000 && code <= 4999)
-  );
-};
diff --git a/signaling_server/service/node_modules/ws/lib/websocket-server.js b/signaling_server/service/node_modules/ws/lib/websocket-server.js
deleted file mode 100644 (file)
index 70513ed..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-'use strict';
-
-const EventEmitter = require('events');
-const crypto = require('crypto');
-const http = require('http');
-const url = require('url');
-
-const PerMessageDeflate = require('./permessage-deflate');
-const extension = require('./extension');
-const constants = require('./constants');
-const WebSocket = require('./websocket');
-
-/**
- * Class representing a WebSocket server.
- *
- * @extends EventEmitter
- */
-class WebSocketServer extends EventEmitter {
-  /**
-   * Create a `WebSocketServer` instance.
-   *
-   * @param {Object} options Configuration options
-   * @param {String} options.host The hostname where to bind the server
-   * @param {Number} options.port The port where to bind the server
-   * @param {http.Server} options.server A pre-created HTTP/S server to use
-   * @param {Function} options.verifyClient An hook to reject connections
-   * @param {Function} options.handleProtocols An hook to handle protocols
-   * @param {String} options.path Accept only connections matching this path
-   * @param {Boolean} options.noServer Enable no server mode
-   * @param {Boolean} options.clientTracking Specifies whether or not to track clients
-   * @param {(Boolean|Object)} options.perMessageDeflate Enable/disable permessage-deflate
-   * @param {Number} options.maxPayload The maximum allowed message size
-   * @param {Function} callback A listener for the `listening` event
-   */
-  constructor (options, callback) {
-    super();
-
-    options = Object.assign({
-      maxPayload: 100 * 1024 * 1024,
-      perMessageDeflate: false,
-      handleProtocols: null,
-      clientTracking: true,
-      verifyClient: null,
-      noServer: false,
-      backlog: null, // use default (511 as implemented in net.js)
-      server: null,
-      host: null,
-      path: null,
-      port: null
-    }, options);
-
-    if (options.port == null && !options.server && !options.noServer) {
-      throw new TypeError(
-        'One of the "port", "server", or "noServer" options must be specified'
-      );
-    }
-
-    if (options.port != null) {
-      this._server = http.createServer((req, res) => {
-        const body = http.STATUS_CODES[426];
-
-        res.writeHead(426, {
-          'Content-Length': body.length,
-          'Content-Type': 'text/plain'
-        });
-        res.end(body);
-      });
-      this._server.listen(options.port, options.host, options.backlog, callback);
-    } else if (options.server) {
-      this._server = options.server;
-    }
-
-    if (this._server) {
-      this._removeListeners = addListeners(this._server, {
-        listening: this.emit.bind(this, 'listening'),
-        error: this.emit.bind(this, 'error'),
-        upgrade: (req, socket, head) => {
-          this.handleUpgrade(req, socket, head, (ws) => {
-            this.emit('connection', ws, req);
-          });
-        }
-      });
-    }
-
-    if (options.perMessageDeflate === true) options.perMessageDeflate = {};
-    if (options.clientTracking) this.clients = new Set();
-    this.options = options;
-  }
-
-  /**
-   * Returns the bound address, the address family name, and port of the server
-   * as reported by the operating system if listening on an IP socket.
-   * If the server is listening on a pipe or UNIX domain socket, the name is
-   * returned as a string.
-   *
-   * @return {(Object|String|null)} The address of the server
-   * @public
-   */
-  address () {
-    if (this.options.noServer) {
-      throw new Error('The server is operating in "noServer" mode');
-    }
-
-    if (!this._server) return null;
-    return this._server.address();
-  }
-
-  /**
-   * Close the server.
-   *
-   * @param {Function} cb Callback
-   * @public
-   */
-  close (cb) {
-    //
-    // Terminate all associated clients.
-    //
-    if (this.clients) {
-      for (const client of this.clients) client.terminate();
-    }
-
-    const server = this._server;
-
-    if (server) {
-      this._removeListeners();
-      this._removeListeners = this._server = null;
-
-      //
-      // Close the http server if it was internally created.
-      //
-      if (this.options.port != null) return server.close(cb);
-    }
-
-    if (cb) cb();
-  }
-
-  /**
-   * See if a given request should be handled by this server instance.
-   *
-   * @param {http.IncomingMessage} req Request object to inspect
-   * @return {Boolean} `true` if the request is valid, else `false`
-   * @public
-   */
-  shouldHandle (req) {
-    if (this.options.path && url.parse(req.url).pathname !== this.options.path) {
-      return false;
-    }
-
-    return true;
-  }
-
-  /**
-   * Handle a HTTP Upgrade request.
-   *
-   * @param {http.IncomingMessage} req The request object
-   * @param {net.Socket} socket The network socket between the server and client
-   * @param {Buffer} head The first packet of the upgraded stream
-   * @param {Function} cb Callback
-   * @public
-   */
-  handleUpgrade (req, socket, head, cb) {
-    socket.on('error', socketOnError);
-
-    const version = +req.headers['sec-websocket-version'];
-    const extensions = {};
-
-    if (
-      req.method !== 'GET' || req.headers.upgrade.toLowerCase() !== 'websocket' ||
-      !req.headers['sec-websocket-key'] || (version !== 8 && version !== 13) ||
-      !this.shouldHandle(req)
-    ) {
-      return abortHandshake(socket, 400);
-    }
-
-    if (this.options.perMessageDeflate) {
-      const perMessageDeflate = new PerMessageDeflate(
-        this.options.perMessageDeflate,
-        true,
-        this.options.maxPayload
-      );
-
-      try {
-        const offers = extension.parse(
-          req.headers['sec-websocket-extensions']
-        );
-
-        if (offers[PerMessageDeflate.extensionName]) {
-          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);
-          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
-        }
-      } catch (err) {
-        return abortHandshake(socket, 400);
-      }
-    }
-
-    //
-    // Optionally call external client verification handler.
-    //
-    if (this.options.verifyClient) {
-      const info = {
-        origin: req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],
-        secure: !!(req.connection.authorized || req.connection.encrypted),
-        req
-      };
-
-      if (this.options.verifyClient.length === 2) {
-        this.options.verifyClient(info, (verified, code, message, headers) => {
-          if (!verified) {
-            return abortHandshake(socket, code || 401, message, headers);
-          }
-
-          this.completeUpgrade(extensions, req, socket, head, cb);
-        });
-        return;
-      }
-
-      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);
-    }
-
-    this.completeUpgrade(extensions, req, socket, head, cb);
-  }
-
-  /**
-   * Upgrade the connection to WebSocket.
-   *
-   * @param {Object} extensions The accepted extensions
-   * @param {http.IncomingMessage} req The request object
-   * @param {net.Socket} socket The network socket between the server and client
-   * @param {Buffer} head The first packet of the upgraded stream
-   * @param {Function} cb Callback
-   * @private
-   */
-  completeUpgrade (extensions, req, socket, head, cb) {
-    //
-    // Destroy the socket if the client has already sent a FIN packet.
-    //
-    if (!socket.readable || !socket.writable) return socket.destroy();
-
-    const key = crypto.createHash('sha1')
-      .update(req.headers['sec-websocket-key'] + constants.GUID, 'binary')
-      .digest('base64');
-
-    const headers = [
-      'HTTP/1.1 101 Switching Protocols',
-      'Upgrade: websocket',
-      'Connection: Upgrade',
-      `Sec-WebSocket-Accept: ${key}`
-    ];
-
-    const ws = new WebSocket(null);
-    var protocol = req.headers['sec-websocket-protocol'];
-
-    if (protocol) {
-      protocol = protocol.trim().split(/ *, */);
-
-      //
-      // Optionally call external protocol selection handler.
-      //
-      if (this.options.handleProtocols) {
-        protocol = this.options.handleProtocols(protocol, req);
-      } else {
-        protocol = protocol[0];
-      }
-
-      if (protocol) {
-        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);
-        ws.protocol = protocol;
-      }
-    }
-
-    if (extensions[PerMessageDeflate.extensionName]) {
-      const params = extensions[PerMessageDeflate.extensionName].params;
-      const value = extension.format({
-        [PerMessageDeflate.extensionName]: [params]
-      });
-      headers.push(`Sec-WebSocket-Extensions: ${value}`);
-      ws._extensions = extensions;
-    }
-
-    //
-    // Allow external modification/inspection of handshake headers.
-    //
-    this.emit('headers', headers, req);
-
-    socket.write(headers.concat('\r\n').join('\r\n'));
-    socket.removeListener('error', socketOnError);
-
-    ws.setSocket(socket, head, this.options.maxPayload);
-
-    if (this.clients) {
-      this.clients.add(ws);
-      ws.on('close', () => this.clients.delete(ws));
-    }
-
-    cb(ws);
-  }
-}
-
-module.exports = WebSocketServer;
-
-/**
- * Add event listeners on an `EventEmitter` using a map of <event, listener>
- * pairs.
- *
- * @param {EventEmitter} server The event emitter
- * @param {Object.<String, Function>} map The listeners to add
- * @return {Function} A function that will remove the added listeners when called
- * @private
- */
-function addListeners (server, map) {
-  for (const event of Object.keys(map)) server.on(event, map[event]);
-
-  return function removeListeners () {
-    for (const event of Object.keys(map)) {
-      server.removeListener(event, map[event]);
-    }
-  };
-}
-
-/**
- * Handle premature socket errors.
- *
- * @private
- */
-function socketOnError () {
-  this.destroy();
-}
-
-/**
- * Close the connection when preconditions are not fulfilled.
- *
- * @param {net.Socket} socket The socket of the upgrade request
- * @param {Number} code The HTTP response status code
- * @param {String} [message] The HTTP response body
- * @param {Object} [headers] Additional HTTP response headers
- * @private
- */
-function abortHandshake (socket, code, message, headers) {
-  if (socket.writable) {
-    message = message || http.STATUS_CODES[code];
-    headers = Object.assign({
-      'Connection': 'close',
-      'Content-type': 'text/html',
-      'Content-Length': Buffer.byteLength(message)
-    }, headers);
-
-    socket.write(
-      `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` +
-      Object.keys(headers).map(h => `${h}: ${headers[h]}`).join('\r\n') +
-      '\r\n\r\n' +
-      message
-    );
-  }
-
-  socket.removeListener('error', socketOnError);
-  socket.destroy();
-}
diff --git a/signaling_server/service/node_modules/ws/lib/websocket.js b/signaling_server/service/node_modules/ws/lib/websocket.js
deleted file mode 100644 (file)
index f2bdf0d..0000000
+++ /dev/null
@@ -1,828 +0,0 @@
-'use strict';
-
-const EventEmitter = require('events');
-const crypto = require('crypto');
-const https = require('https');
-const http = require('http');
-const net = require('net');
-const tls = require('tls');
-const url = require('url');
-
-const PerMessageDeflate = require('./permessage-deflate');
-const EventTarget = require('./event-target');
-const extension = require('./extension');
-const constants = require('./constants');
-const Receiver = require('./receiver');
-const Sender = require('./sender');
-
-const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
-const kWebSocket = constants.kWebSocket;
-const protocolVersions = [8, 13];
-const closeTimeout = 30 * 1000; // Allow 30 seconds to terminate the connection cleanly.
-
-/**
- * Class representing a WebSocket.
- *
- * @extends EventEmitter
- */
-class WebSocket extends EventEmitter {
-  /**
-   * Create a new `WebSocket`.
-   *
-   * @param {(String|url.Url|url.URL)} address The URL to which to connect
-   * @param {(String|String[])} protocols The subprotocols
-   * @param {Object} options Connection options
-   */
-  constructor (address, protocols, options) {
-    super();
-
-    this.readyState = WebSocket.CONNECTING;
-    this.protocol = '';
-
-    this._binaryType = constants.BINARY_TYPES[0];
-    this._closeFrameReceived = false;
-    this._closeFrameSent = false;
-    this._closeMessage = '';
-    this._closeTimer = null;
-    this._closeCode = 1006;
-    this._extensions = {};
-    this._isServer = true;
-    this._receiver = null;
-    this._sender = null;
-    this._socket = null;
-
-    if (address !== null) {
-      if (Array.isArray(protocols)) {
-        protocols = protocols.join(', ');
-      } else if (typeof protocols === 'object' && protocols !== null) {
-        options = protocols;
-        protocols = undefined;
-      }
-
-      initAsClient.call(this, address, protocols, options);
-    }
-  }
-
-  get CONNECTING () { return WebSocket.CONNECTING; }
-  get CLOSING () { return WebSocket.CLOSING; }
-  get CLOSED () { return WebSocket.CLOSED; }
-  get OPEN () { return WebSocket.OPEN; }
-
-  /**
-   * This deviates from the WHATWG interface since ws doesn't support the required
-   * default "blob" type (instead we define a custom "nodebuffer" type).
-   *
-   * @type {String}
-   */
-  get binaryType () {
-    return this._binaryType;
-  }
-
-  set binaryType (type) {
-    if (constants.BINARY_TYPES.indexOf(type) < 0) return;
-
-    this._binaryType = type;
-
-    //
-    // Allow to change `binaryType` on the fly.
-    //
-    if (this._receiver) this._receiver._binaryType = type;
-  }
-
-  /**
-   * @type {Number}
-   */
-  get bufferedAmount () {
-    if (!this._socket) return 0;
-
-    //
-    // `socket.bufferSize` is `undefined` if the socket is closed.
-    //
-    return (this._socket.bufferSize || 0) + this._sender._bufferedBytes;
-  }
-
-  /**
-   * @type {String}
-   */
-  get extensions () {
-    return Object.keys(this._extensions).join();
-  }
-
-  /**
-   * Set up the socket and the internal resources.
-   *
-   * @param {net.Socket} socket The network socket between the server and client
-   * @param {Buffer} head The first packet of the upgraded stream
-   * @param {Number} maxPayload The maximum allowed message size
-   * @private
-   */
-  setSocket (socket, head, maxPayload) {
-    const receiver = new Receiver(
-      this._binaryType,
-      this._extensions,
-      maxPayload
-    );
-
-    this._sender = new Sender(socket, this._extensions);
-    this._receiver = receiver;
-    this._socket = socket;
-
-    receiver[kWebSocket] = this;
-    socket[kWebSocket] = this;
-
-    receiver.on('conclude', receiverOnConclude);
-    receiver.on('drain', receiverOnDrain);
-    receiver.on('error', receiverOnError);
-    receiver.on('message', receiverOnMessage);
-    receiver.on('ping', receiverOnPing);
-    receiver.on('pong', receiverOnPong);
-
-    socket.setTimeout(0);
-    socket.setNoDelay();
-
-    if (head.length > 0) socket.unshift(head);
-
-    socket.on('close', socketOnClose);
-    socket.on('data', socketOnData);
-    socket.on('end', socketOnEnd);
-    socket.on('error', socketOnError);
-
-    this.readyState = WebSocket.OPEN;
-    this.emit('open');
-  }
-
-  /**
-   * Emit the `'close'` event.
-   *
-   * @private
-   */
-  emitClose () {
-    this.readyState = WebSocket.CLOSED;
-
-    if (!this._socket) {
-      this.emit('close', this._closeCode, this._closeMessage);
-      return;
-    }
-
-    if (this._extensions[PerMessageDeflate.extensionName]) {
-      this._extensions[PerMessageDeflate.extensionName].cleanup();
-    }
-
-    this._receiver.removeAllListeners();
-    this.emit('close', this._closeCode, this._closeMessage);
-  }
-
-  /**
-   * Start a closing handshake.
-   *
-   *          +----------+   +-----------+   +----------+
-   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -
-   *    |     +----------+   +-----------+   +----------+     |
-   *          +----------+   +-----------+         |
-   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING
-   *          +----------+   +-----------+   |
-   *    |           |                        |   +---+        |
-   *                +------------------------+-->|fin| - - - -
-   *    |         +---+                      |   +---+
-   *     - - - - -|fin|<---------------------+
-   *              +---+
-   *
-   * @param {Number} code Status code explaining why the connection is closing
-   * @param {String} data A string explaining why the connection is closing
-   * @public
-   */
-  close (code, data) {
-    if (this.readyState === WebSocket.CLOSED) return;
-    if (this.readyState === WebSocket.CONNECTING) {
-      const msg = 'WebSocket was closed before the connection was established';
-      return abortHandshake(this, this._req, msg);
-    }
-
-    if (this.readyState === WebSocket.CLOSING) {
-      if (this._closeFrameSent && this._closeFrameReceived) this._socket.end();
-      return;
-    }
-
-    this.readyState = WebSocket.CLOSING;
-    this._sender.close(code, data, !this._isServer, (err) => {
-      //
-      // This error is handled by the `'error'` listener on the socket. We only
-      // want to know if the close frame has been sent here.
-      //
-      if (err) return;
-
-      this._closeFrameSent = true;
-
-      if (this._socket.writable) {
-        if (this._closeFrameReceived) this._socket.end();
-
-        //
-        // Ensure that the connection is closed even if the closing handshake
-        // fails.
-        //
-        this._closeTimer = setTimeout(
-          this._socket.destroy.bind(this._socket),
-          closeTimeout
-        );
-      }
-    });
-  }
-
-  /**
-   * Send a ping.
-   *
-   * @param {*} data The data to send
-   * @param {Boolean} mask Indicates whether or not to mask `data`
-   * @param {Function} cb Callback which is executed when the ping is sent
-   * @public
-   */
-  ping (data, mask, cb) {
-    if (typeof data === 'function') {
-      cb = data;
-      data = mask = undefined;
-    } else if (typeof mask === 'function') {
-      cb = mask;
-      mask = undefined;
-    }
-
-    if (this.readyState !== WebSocket.OPEN) {
-      const err = new Error(
-        `WebSocket is not open: readyState ${this.readyState} ` +
-          `(${readyStates[this.readyState]})`
-      );
-
-      if (cb) return cb(err);
-      throw err;
-    }
-
-    if (typeof data === 'number') data = data.toString();
-    if (mask === undefined) mask = !this._isServer;
-    this._sender.ping(data || constants.EMPTY_BUFFER, mask, cb);
-  }
-
-  /**
-   * Send a pong.
-   *
-   * @param {*} data The data to send
-   * @param {Boolean} mask Indicates whether or not to mask `data`
-   * @param {Function} cb Callback which is executed when the pong is sent
-   * @public
-   */
-  pong (data, mask, cb) {
-    if (typeof data === 'function') {
-      cb = data;
-      data = mask = undefined;
-    } else if (typeof mask === 'function') {
-      cb = mask;
-      mask = undefined;
-    }
-
-    if (this.readyState !== WebSocket.OPEN) {
-      const err = new Error(
-        `WebSocket is not open: readyState ${this.readyState} ` +
-          `(${readyStates[this.readyState]})`
-      );
-
-      if (cb) return cb(err);
-      throw err;
-    }
-
-    if (typeof data === 'number') data = data.toString();
-    if (mask === undefined) mask = !this._isServer;
-    this._sender.pong(data || constants.EMPTY_BUFFER, mask, cb);
-  }
-
-  /**
-   * Send a data message.
-   *
-   * @param {*} data The message to send
-   * @param {Object} options Options object
-   * @param {Boolean} options.compress Specifies whether or not to compress `data`
-   * @param {Boolean} options.binary Specifies whether `data` is binary or text
-   * @param {Boolean} options.fin Specifies whether the fragment is the last one
-   * @param {Boolean} options.mask Specifies whether or not to mask `data`
-   * @param {Function} cb Callback which is executed when data is written out
-   * @public
-   */
-  send (data, options, cb) {
-    if (typeof options === 'function') {
-      cb = options;
-      options = {};
-    }
-
-    if (this.readyState !== WebSocket.OPEN) {
-      const err = new Error(
-        `WebSocket is not open: readyState ${this.readyState} ` +
-          `(${readyStates[this.readyState]})`
-      );
-
-      if (cb) return cb(err);
-      throw err;
-    }
-
-    if (typeof data === 'number') data = data.toString();
-
-    const opts = Object.assign({
-      binary: typeof data !== 'string',
-      mask: !this._isServer,
-      compress: true,
-      fin: true
-    }, options);
-
-    if (!this._extensions[PerMessageDeflate.extensionName]) {
-      opts.compress = false;
-    }
-
-    this._sender.send(data || constants.EMPTY_BUFFER, opts, cb);
-  }
-
-  /**
-   * Forcibly close the connection.
-   *
-   * @public
-   */
-  terminate () {
-    if (this.readyState === WebSocket.CLOSED) return;
-    if (this.readyState === WebSocket.CONNECTING) {
-      const msg = 'WebSocket was closed before the connection was established';
-      return abortHandshake(this, this._req, msg);
-    }
-
-    if (this._socket) {
-      this.readyState = WebSocket.CLOSING;
-      this._socket.destroy();
-    }
-  }
-}
-
-readyStates.forEach((readyState, i) => {
-  WebSocket[readyStates[i]] = i;
-});
-
-//
-// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.
-// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface
-//
-['open', 'error', 'close', 'message'].forEach((method) => {
-  Object.defineProperty(WebSocket.prototype, `on${method}`, {
-    /**
-     * Return the listener of the event.
-     *
-     * @return {(Function|undefined)} The event listener or `undefined`
-     * @public
-     */
-    get () {
-      const listeners = this.listeners(method);
-      for (var i = 0; i < listeners.length; i++) {
-        if (listeners[i]._listener) return listeners[i]._listener;
-      }
-    },
-    /**
-     * Add a listener for the event.
-     *
-     * @param {Function} listener The listener to add
-     * @public
-     */
-    set (listener) {
-      const listeners = this.listeners(method);
-      for (var i = 0; i < listeners.length; i++) {
-        //
-        // Remove only the listeners added via `addEventListener`.
-        //
-        if (listeners[i]._listener) this.removeListener(method, listeners[i]);
-      }
-      this.addEventListener(method, listener);
-    }
-  });
-});
-
-WebSocket.prototype.addEventListener = EventTarget.addEventListener;
-WebSocket.prototype.removeEventListener = EventTarget.removeEventListener;
-
-module.exports = WebSocket;
-
-/**
- * Initialize a WebSocket client.
- *
- * @param {(String|url.Url|url.URL)} address The URL to which to connect
- * @param {String} protocols The subprotocols
- * @param {Object} options Connection options
- * @param {(Boolean|Object)} options.perMessageDeflate Enable/disable permessage-deflate
- * @param {Number} options.handshakeTimeout Timeout in milliseconds for the handshake request
- * @param {Number} options.protocolVersion Value of the `Sec-WebSocket-Version` header
- * @param {String} options.origin Value of the `Origin` or `Sec-WebSocket-Origin` header
- * @private
- */
-function initAsClient (address, protocols, options) {
-  options = Object.assign({
-    protocolVersion: protocolVersions[1],
-    perMessageDeflate: true
-  }, options, {
-    createConnection: undefined,
-    socketPath: undefined,
-    hostname: undefined,
-    protocol: undefined,
-    timeout: undefined,
-    method: undefined,
-    auth: undefined,
-    host: undefined,
-    path: undefined,
-    port: undefined
-  });
-
-  if (protocolVersions.indexOf(options.protocolVersion) === -1) {
-    throw new RangeError(
-      `Unsupported protocol version: ${options.protocolVersion} ` +
-        `(supported versions: ${protocolVersions.join(', ')})`
-    );
-  }
-
-  this._isServer = false;
-
-  var parsedUrl;
-
-  if (typeof address === 'object' && address.href !== undefined) {
-    parsedUrl = address;
-    this.url = address.href;
-  } else {
-    parsedUrl = url.parse(address);
-    this.url = address;
-  }
-
-  const isUnixSocket = parsedUrl.protocol === 'ws+unix:';
-
-  if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {
-    throw new Error(`Invalid URL: ${this.url}`);
-  }
-
-  const isSecure = parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';
-  const key = crypto.randomBytes(16).toString('base64');
-  const httpObj = isSecure ? https : http;
-  const path = parsedUrl.search
-    ? `${parsedUrl.pathname || '/'}${parsedUrl.search}`
-    : parsedUrl.pathname || '/';
-  var perMessageDeflate;
-
-  options.createConnection = isSecure ? tlsConnect : netConnect;
-  options.port = parsedUrl.port || (isSecure ? 443 : 80);
-  options.host = parsedUrl.hostname.startsWith('[')
-    ? parsedUrl.hostname.slice(1, -1)
-    : parsedUrl.hostname;
-  options.headers = Object.assign({
-    'Sec-WebSocket-Version': options.protocolVersion,
-    'Sec-WebSocket-Key': key,
-    'Connection': 'Upgrade',
-    'Upgrade': 'websocket'
-  }, options.headers);
-  options.path = path;
-
-  if (options.perMessageDeflate) {
-    perMessageDeflate = new PerMessageDeflate(
-      options.perMessageDeflate !== true ? options.perMessageDeflate : {},
-      false
-    );
-    options.headers['Sec-WebSocket-Extensions'] = extension.format({
-      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()
-    });
-  }
-  if (protocols) {
-    options.headers['Sec-WebSocket-Protocol'] = protocols;
-  }
-  if (options.origin) {
-    if (options.protocolVersion < 13) {
-      options.headers['Sec-WebSocket-Origin'] = options.origin;
-    } else {
-      options.headers.Origin = options.origin;
-    }
-  }
-  if (parsedUrl.auth) {
-    options.auth = parsedUrl.auth;
-  } else if (parsedUrl.username || parsedUrl.password) {
-    options.auth = `${parsedUrl.username}:${parsedUrl.password}`;
-  }
-
-  if (isUnixSocket) {
-    const parts = path.split(':');
-
-    if (options.agent == null && process.versions.modules < 57) {
-      //
-      // Setting `socketPath` in conjunction with `createConnection` without an
-      // agent throws an error on Node.js < 8. Work around the issue by using a
-      // different property.
-      //
-      options._socketPath = parts[0];
-    } else {
-      options.socketPath = parts[0];
-    }
-
-    options.path = parts[1];
-  }
-
-  var req = this._req = httpObj.get(options);
-
-  if (options.handshakeTimeout) {
-    req.setTimeout(
-      options.handshakeTimeout,
-      () => abortHandshake(this, req, 'Opening handshake has timed out')
-    );
-  }
-
-  req.on('error', (err) => {
-    if (this._req.aborted) return;
-
-    req = this._req = null;
-    this.readyState = WebSocket.CLOSING;
-    this.emit('error', err);
-    this.emitClose();
-  });
-
-  req.on('response', (res) => {
-    if (this.emit('unexpected-response', req, res)) return;
-
-    abortHandshake(this, req, `Unexpected server response: ${res.statusCode}`);
-  });
-
-  req.on('upgrade', (res, socket, head) => {
-    this.emit('upgrade', res);
-
-    //
-    // The user may have closed the connection from a listener of the `upgrade`
-    // event.
-    //
-    if (this.readyState !== WebSocket.CONNECTING) return;
-
-    req = this._req = null;
-
-    const digest = crypto.createHash('sha1')
-      .update(key + constants.GUID, 'binary')
-      .digest('base64');
-
-    if (res.headers['sec-websocket-accept'] !== digest) {
-      abortHandshake(this, socket, 'Invalid Sec-WebSocket-Accept header');
-      return;
-    }
-
-    const serverProt = res.headers['sec-websocket-protocol'];
-    const protList = (protocols || '').split(/, */);
-    var protError;
-
-    if (!protocols && serverProt) {
-      protError = 'Server sent a subprotocol but none was requested';
-    } else if (protocols && !serverProt) {
-      protError = 'Server sent no subprotocol';
-    } else if (serverProt && protList.indexOf(serverProt) === -1) {
-      protError = 'Server sent an invalid subprotocol';
-    }
-
-    if (protError) {
-      abortHandshake(this, socket, protError);
-      return;
-    }
-
-    if (serverProt) this.protocol = serverProt;
-
-    if (perMessageDeflate) {
-      try {
-        const extensions = extension.parse(
-          res.headers['sec-websocket-extensions']
-        );
-
-        if (extensions[PerMessageDeflate.extensionName]) {
-          perMessageDeflate.accept(
-            extensions[PerMessageDeflate.extensionName]
-          );
-          this._extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
-        }
-      } catch (err) {
-        abortHandshake(this, socket, 'Invalid Sec-WebSocket-Extensions header');
-        return;
-      }
-    }
-
-    this.setSocket(socket, head, 0);
-  });
-}
-
-/**
- * Create a `net.Socket` and initiate a connection.
- *
- * @param {Object} options Connection options
- * @return {net.Socket} The newly created socket used to start the connection
- * @private
- */
-function netConnect (options) {
-  options.path = options.socketPath || options._socketPath || undefined;
-  return net.connect(options);
-}
-
-/**
- * Create a `tls.TLSSocket` and initiate a connection.
- *
- * @param {Object} options Connection options
- * @return {tls.TLSSocket} The newly created socket used to start the connection
- * @private
- */
-function tlsConnect (options) {
-  options.path = options.socketPath || options._socketPath || undefined;
-  options.servername = options.servername || options.host;
-  return tls.connect(options);
-}
-
-/**
- * Abort the handshake and emit an error.
- *
- * @param {WebSocket} websocket The WebSocket instance
- * @param {(http.ClientRequest|net.Socket)} stream The request to abort or the
- *     socket to destroy
- * @param {String} message The error message
- * @private
- */
-function abortHandshake (websocket, stream, message) {
-  websocket.readyState = WebSocket.CLOSING;
-
-  const err = new Error(message);
-  Error.captureStackTrace(err, abortHandshake);
-
-  if (stream.setHeader) {
-    stream.abort();
-    stream.once('abort', websocket.emitClose.bind(websocket));
-    websocket.emit('error', err);
-  } else {
-    stream.destroy(err);
-    stream.once('error', websocket.emit.bind(websocket, 'error'));
-    stream.once('close', websocket.emitClose.bind(websocket));
-  }
-}
-
-/**
- * The listener of the `Receiver` `'conclude'` event.
- *
- * @param {Number} code The status code
- * @param {String} reason The reason for closing
- * @private
- */
-function receiverOnConclude (code, reason) {
-  const websocket = this[kWebSocket];
-
-  websocket._socket.removeListener('data', socketOnData);
-  websocket._socket.resume();
-
-  websocket._closeFrameReceived = true;
-  websocket._closeMessage = reason;
-  websocket._closeCode = code;
-
-  if (code === 1005) websocket.close();
-  else websocket.close(code, reason);
-}
-
-/**
- * The listener of the `Receiver` `'drain'` event.
- *
- * @private
- */
-function receiverOnDrain () {
-  this[kWebSocket]._socket.resume();
-}
-
-/**
- * The listener of the `Receiver` `'error'` event.
- *
- * @param {(RangeError|Error)} err The emitted error
- * @private
- */
-function receiverOnError (err) {
-  const websocket = this[kWebSocket];
-
-  websocket._socket.removeListener('data', socketOnData);
-
-  websocket.readyState = WebSocket.CLOSING;
-  websocket._closeCode = err[constants.kStatusCode];
-  websocket.emit('error', err);
-  websocket._socket.destroy();
-}
-
-/**
- * The listener of the `Receiver` `'finish'` event.
- *
- * @private
- */
-function receiverOnFinish () {
-  this[kWebSocket].emitClose();
-}
-
-/**
- * The listener of the `Receiver` `'message'` event.
- *
- * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message
- * @private
- */
-function receiverOnMessage (data) {
-  this[kWebSocket].emit('message', data);
-}
-
-/**
- * The listener of the `Receiver` `'ping'` event.
- *
- * @param {Buffer} data The data included in the ping frame
- * @private
- */
-function receiverOnPing (data) {
-  const websocket = this[kWebSocket];
-
-  websocket.pong(data, !websocket._isServer, constants.NOOP);
-  websocket.emit('ping', data);
-}
-
-/**
- * The listener of the `Receiver` `'pong'` event.
- *
- * @param {Buffer} data The data included in the pong frame
- * @private
- */
-function receiverOnPong (data) {
-  this[kWebSocket].emit('pong', data);
-}
-
-/**
- * The listener of the `net.Socket` `'close'` event.
- *
- * @private
- */
-function socketOnClose () {
-  const websocket = this[kWebSocket];
-
-  this.removeListener('close', socketOnClose);
-  this.removeListener('end', socketOnEnd);
-
-  websocket.readyState = WebSocket.CLOSING;
-
-  //
-  // The close frame might not have been received or the `'end'` event emitted,
-  // for example, if the socket was destroyed due to an error. Ensure that the
-  // `receiver` stream is closed after writing any remaining buffered data to
-  // it. If the readable side of the socket is in flowing mode then there is no
-  // buffered data as everything has been already written and `readable.read()`
-  // will return `null`. If instead, the socket is paused, any possible buffered
-  // data will be read as a single chunk and emitted synchronously in a single
-  // `'data'` event.
-  //
-  websocket._socket.read();
-  websocket._receiver.end();
-
-  this.removeListener('data', socketOnData);
-  this[kWebSocket] = undefined;
-
-  clearTimeout(websocket._closeTimer);
-
-  if (
-    websocket._receiver._writableState.finished ||
-    websocket._receiver._writableState.errorEmitted
-  ) {
-    websocket.emitClose();
-  } else {
-    websocket._receiver.on('error', receiverOnFinish);
-    websocket._receiver.on('finish', receiverOnFinish);
-  }
-}
-
-/**
- * The listener of the `net.Socket` `'data'` event.
- *
- * @param {Buffer} chunk A chunk of data
- * @private
- */
-function socketOnData (chunk) {
-  if (!this[kWebSocket]._receiver.write(chunk)) {
-    this.pause();
-  }
-}
-
-/**
- * The listener of the `net.Socket` `'end'` event.
- *
- * @private
- */
-function socketOnEnd () {
-  const websocket = this[kWebSocket];
-
-  websocket.readyState = WebSocket.CLOSING;
-  websocket._receiver.end();
-  this.end();
-}
-
-/**
- * The listener of the `net.Socket` `'error'` event.
- *
- * @private
- */
-function socketOnError () {
-  const websocket = this[kWebSocket];
-
-  this.removeListener('error', socketOnError);
-  this.on('error', constants.NOOP);
-
-  if (websocket) {
-    websocket.readyState = WebSocket.CLOSING;
-    this.destroy();
-  }
-}
diff --git a/signaling_server/service/node_modules/ws/node_modules/async-limiter/.eslintignore b/signaling_server/service/node_modules/ws/node_modules/async-limiter/.eslintignore
deleted file mode 100644 (file)
index e1661e5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-coverage
-.nyc_output
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/ws/node_modules/async-limiter/.nycrc b/signaling_server/service/node_modules/ws/node_modules/async-limiter/.nycrc
deleted file mode 100644 (file)
index 874c1de..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "check-coverage": false,
-  "lines": 99,
-  "statements": 99,
-  "functions": 99,
-  "branches": 99,
-  "include": [
-     "index.js"
-  ]
-}
\ No newline at end of file
diff --git a/signaling_server/service/node_modules/ws/node_modules/async-limiter/.travis.yml b/signaling_server/service/node_modules/ws/node_modules/async-limiter/.travis.yml
deleted file mode 100644 (file)
index 37026e2..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-language: node_js
-node_js:
-  - "6"
-  - "8"
-  - "10"
-  - "node"
-script: npm run travis
-cache:
-  yarn: true
diff --git a/signaling_server/service/node_modules/ws/node_modules/async-limiter/LICENSE b/signaling_server/service/node_modules/ws/node_modules/async-limiter/LICENSE
deleted file mode 100644 (file)
index 9c91fb2..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-The MIT License (MIT)
-Copyright (c) 2017 Samuel Reed <samuel.trace.reed@gmail.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/signaling_server/service/node_modules/ws/node_modules/async-limiter/index.js b/signaling_server/service/node_modules/ws/node_modules/async-limiter/index.js
deleted file mode 100644 (file)
index c9bd2f9..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-'use strict';
-
-function Queue(options) {
-  if (!(this instanceof Queue)) {
-    return new Queue(options);
-  }
-
-  options = options || {};
-  this.concurrency = options.concurrency || Infinity;
-  this.pending = 0;
-  this.jobs = [];
-  this.cbs = [];
-  this._done = done.bind(this);
-}
-
-var arrayAddMethods = [
-  'push',
-  'unshift',
-  'splice'
-];
-
-arrayAddMethods.forEach(function(method) {
-  Queue.prototype[method] = function() {
-    var methodResult = Array.prototype[method].apply(this.jobs, arguments);
-    this._run();
-    return methodResult;
-  };
-});
-
-Object.defineProperty(Queue.prototype, 'length', {
-  get: function() {
-    return this.pending + this.jobs.length;
-  }
-});
-
-Queue.prototype._run = function() {
-  if (this.pending === this.concurrency) {
-    return;
-  }
-  if (this.jobs.length) {
-    var job = this.jobs.shift();
-    this.pending++;
-    job(this._done);
-    this._run();
-  }
-
-  if (this.pending === 0) {
-    while (this.cbs.length !== 0) {
-      var cb = this.cbs.pop();
-      process.nextTick(cb);
-    }
-  }
-};
-
-Queue.prototype.onDone = function(cb) {
-  if (typeof cb === 'function') {
-    this.cbs.push(cb);
-    this._run();
-  }
-};
-
-function done() {
-  this.pending--;
-  this._run();
-}
-
-module.exports = Queue;
diff --git a/signaling_server/service/node_modules/ws/node_modules/async-limiter/package.json b/signaling_server/service/node_modules/ws/node_modules/async-limiter/package.json
deleted file mode 100644 (file)
index 0574c55..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "_from": "async-limiter@~1.0.0",
-  "_id": "async-limiter@1.0.1",
-  "_inBundle": false,
-  "_integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
-  "_location": "/async-limiter",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "async-limiter@~1.0.0",
-    "name": "async-limiter",
-    "escapedName": "async-limiter",
-    "rawSpec": "~1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "~1.0.0"
-  },
-  "_requiredBy": [
-    "/ws"
-  ],
-  "_resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
-  "_shasum": "dd379e94f0db8310b08291f9d64c3209766617fd",
-  "_spec": "async-limiter@~1.0.0",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes/node_modules/ws",
-  "author": {
-    "name": "Samuel Reed"
-  },
-  "bugs": {
-    "url": "https://github.com/strml/async-limiter/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "asynchronous function queue with adjustable concurrency",
-  "devDependencies": {
-    "coveralls": "^3.0.3",
-    "eslint": "^5.16.0",
-    "eslint-plugin-mocha": "^5.3.0",
-    "intelli-espower-loader": "^1.0.1",
-    "mocha": "^6.1.4",
-    "nyc": "^14.1.1",
-    "power-assert": "^1.6.1"
-  },
-  "homepage": "https://github.com/strml/async-limiter#readme",
-  "keywords": [
-    "throttle",
-    "async",
-    "limiter",
-    "asynchronous",
-    "job",
-    "task",
-    "concurrency",
-    "concurrent"
-  ],
-  "license": "MIT",
-  "name": "async-limiter",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/strml/async-limiter.git"
-  },
-  "scripts": {
-    "coverage": "nyc npm test && nyc report --reporter=text-lcov | coveralls",
-    "example": "node example",
-    "lint": "eslint .",
-    "test": "mocha --require intelli-espower-loader test/",
-    "travis": "npm run lint && npm run test"
-  },
-  "version": "1.0.1"
-}
diff --git a/signaling_server/service/node_modules/ws/node_modules/async-limiter/readme.md b/signaling_server/service/node_modules/ws/node_modules/async-limiter/readme.md
deleted file mode 100644 (file)
index fcaa22f..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-# Async-Limiter
-
-A module for limiting concurrent asynchronous actions in flight. Forked from [queue](https://github.com/jessetane/queue).
-
-[![npm](http://img.shields.io/npm/v/async-limiter.svg?style=flat-square)](http://www.npmjs.org/async-limiter)
-[![tests](https://img.shields.io/travis/STRML/async-limiter.svg?style=flat-square&branch=master)](https://travis-ci.org/STRML/async-limiter)
-[![coverage](https://img.shields.io/coveralls/STRML/async-limiter.svg?style=flat-square&branch=master)](https://coveralls.io/r/STRML/async-limiter)
-
-This module exports a class `Limiter` that implements some of the `Array` API.
-Pass async functions (ones that accept a callback or return a promise) to an instance's additive array methods.
-
-## Motivation
-
-Certain functions, like `zlib`, have [undesirable behavior](https://github.com/nodejs/node/issues/8871#issuecomment-250915913) when
-run at infinite concurrency.
-
-In this case, it is actually faster, and takes far less memory, to limit concurrency.
-
-This module should do the absolute minimum work necessary to queue up functions. PRs are welcome that would
-make this module faster or lighter, but new functionality is not desired.
-
-Style should confirm to nodejs/node style.
-
-## Example
-
-``` javascript
-var Limiter = require('async-limiter')
-
-var t = new Limiter({concurrency: 2});
-var results = []
-
-// add jobs using the familiar Array API
-t.push(function (cb) {
-  results.push('two')
-  cb()
-})
-
-t.push(
-  function (cb) {
-    results.push('four')
-    cb()
-  },
-  function (cb) {
-    results.push('five')
-    cb()
-  }
-)
-
-t.unshift(function (cb) {
-  results.push('one')
-  cb()
-})
-
-t.splice(2, 0, function (cb) {
-  results.push('three')
-  cb()
-})
-
-// Jobs run automatically. If you want a callback when all are done,
-// call 'onDone()'.
-t.onDone(function () {
-  console.log('all done:', results)
-})
-```
-
-## Zlib Example
-
-```js
-const zlib = require('zlib');
-const Limiter = require('async-limiter');
-
-const message = {some: "data"};
-const payload = new Buffer(JSON.stringify(message));
-
-// Try with different concurrency values to see how this actually
-// slows significantly with higher concurrency!
-//
-// 5:        1398.607ms
-// 10:       1375.668ms
-// Infinity: 4423.300ms
-//
-const t = new Limiter({concurrency: 5});
-function deflate(payload, cb) {
-  t.push(function(done) {
-    zlib.deflate(payload, function(err, buffer) {
-      done();
-      cb(err, buffer);
-    });
-  });
-}
-
-console.time('deflate');
-for(let i = 0; i < 30000; ++i) {
-  deflate(payload, function (err, buffer) {});
-}
-t.onDone(function() {
-  console.timeEnd('deflate');
-});
-```
-
-## Install
-
-`npm install async-limiter`
-
-## Test
-
-`npm test`
-
-## API
-
-### `var t = new Limiter([opts])`
-Constructor. `opts` may contain inital values for:
-* `t.concurrency`
-
-## Instance methods
-
-### `t.onDone(fn)`
-`fn` will be called once and only once, when the queue is empty.
-
-## Instance methods mixed in from `Array`
-Mozilla has docs on how these methods work [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).
-### `t.push(element1, ..., elementN)`
-### `t.unshift(element1, ..., elementN)`
-### `t.splice(index , howMany[, element1[, ...[, elementN]]])`
-
-## Properties
-### `t.concurrency`
-Max number of jobs the queue should process concurrently, defaults to `Infinity`.
-
-### `t.length`
-Jobs pending + jobs to process (readonly).
-
diff --git a/signaling_server/service/node_modules/ws/package.json b/signaling_server/service/node_modules/ws/package.json
deleted file mode 100644 (file)
index a9748e9..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "_from": "ws@^5.1.1",
-  "_id": "ws@5.2.2",
-  "_inBundle": false,
-  "_integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
-  "_location": "/ws",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "range",
-    "registry": true,
-    "raw": "ws@^5.1.1",
-    "name": "ws",
-    "escapedName": "ws",
-    "rawSpec": "^5.1.1",
-    "saveSpec": null,
-    "fetchSpec": "^5.1.1"
-  },
-  "_requiredBy": [
-    "/"
-  ],
-  "_resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
-  "_shasum": "dffef14866b8e8dc9133582514d1befaf96e980f",
-  "_spec": "ws@^5.1.1",
-  "_where": "/home/hyunduk/opensource/external/HappyFunTimes",
-  "author": {
-    "name": "Einar Otto Stangvik",
-    "email": "einaros@gmail.com",
-    "url": "http://2x.io"
-  },
-  "bugs": {
-    "url": "https://github.com/websockets/ws/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {
-    "async-limiter": "~1.0.0"
-  },
-  "deprecated": false,
-  "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js",
-  "devDependencies": {
-    "benchmark": "~2.1.2",
-    "bufferutil": "~3.0.0",
-    "eslint": "~4.19.0",
-    "eslint-config-standard": "~11.0.0",
-    "eslint-plugin-import": "~2.12.0",
-    "eslint-plugin-node": "~6.0.0",
-    "eslint-plugin-promise": "~3.8.0",
-    "eslint-plugin-standard": "~3.0.0",
-    "mocha": "~5.2.0",
-    "nyc": "~12.0.2",
-    "utf-8-validate": "~4.0.0"
-  },
-  "files": [
-    "index.js",
-    "lib"
-  ],
-  "homepage": "https://github.com/websockets/ws",
-  "keywords": [
-    "HyBi",
-    "Push",
-    "RFC-6455",
-    "WebSocket",
-    "WebSockets",
-    "real-time"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "ws",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/websockets/ws.git"
-  },
-  "scripts": {
-    "integration": "eslint . && mocha test/*.integration.js",
-    "lint": "eslint .",
-    "test": "eslint . && nyc --reporter=html --reporter=text mocha test/*.test.js"
-  },
-  "version": "5.2.2"
-}
diff --git a/signaling_server/service/node_modules/xmlhttprequest-ssl/package.json b/signaling_server/service/node_modules/xmlhttprequest-ssl/package.json
new file mode 100644 (file)
index 0000000..7d7a656
--- /dev/null
@@ -0,0 +1,66 @@
+{
+  "_args": [
+    [
+      "xmlhttprequest-ssl@1.5.5",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "xmlhttprequest-ssl@1.5.5",
+  "_id": "xmlhttprequest-ssl@1.5.5",
+  "_inBundle": false,
+  "_integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+  "_location": "/xmlhttprequest-ssl",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "xmlhttprequest-ssl@1.5.5",
+    "name": "xmlhttprequest-ssl",
+    "escapedName": "xmlhttprequest-ssl",
+    "rawSpec": "1.5.5",
+    "saveSpec": null,
+    "fetchSpec": "1.5.5"
+  },
+  "_requiredBy": [
+    "/engine.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+  "_spec": "1.5.5",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Michael de Wit"
+  },
+  "bugs": {
+    "url": "http://github.com/mjwwit/node-XMLHttpRequest/issues"
+  },
+  "dependencies": {},
+  "description": "XMLHttpRequest for Node",
+  "directories": {
+    "lib": "./lib",
+    "example": "./example"
+  },
+  "engines": {
+    "node": ">=0.4.0"
+  },
+  "homepage": "https://github.com/mjwwit/node-XMLHttpRequest#readme",
+  "keywords": [
+    "xhr",
+    "ajax"
+  ],
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "http://creativecommons.org/licenses/MIT/"
+    }
+  ],
+  "main": "./lib/XMLHttpRequest.js",
+  "name": "xmlhttprequest-ssl",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/mjwwit/node-XMLHttpRequest.git"
+  },
+  "scripts": {
+    "test": "cd ./tests && node test-constants.js && node test-events.js && node test-exceptions.js && node test-headers.js && node test-redirect-302.js && node test-redirect-303.js && node test-redirect-307.js && node test-request-methods.js && node test-request-protocols.js"
+  },
+  "version": "1.5.5"
+}
diff --git a/signaling_server/service/node_modules/y18n/package.json b/signaling_server/service/node_modules/y18n/package.json
new file mode 100644 (file)
index 0000000..c8109c3
--- /dev/null
@@ -0,0 +1,70 @@
+{
+  "_args": [
+    [
+      "y18n@4.0.1",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "y18n@4.0.1",
+  "_id": "y18n@4.0.1",
+  "_inBundle": false,
+  "_integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
+  "_location": "/y18n",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "y18n@4.0.1",
+    "name": "y18n",
+    "escapedName": "y18n",
+    "rawSpec": "4.0.1",
+    "saveSpec": null,
+    "fetchSpec": "4.0.1"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
+  "_spec": "4.0.1",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Ben Coe",
+    "email": "ben@npmjs.com"
+  },
+  "bugs": {
+    "url": "https://github.com/yargs/y18n/issues"
+  },
+  "description": "the bare-bones internationalization library used by yargs",
+  "devDependencies": {
+    "chai": "^4.0.1",
+    "coveralls": "^3.0.0",
+    "mocha": "^4.0.1",
+    "nyc": "^11.0.1",
+    "rimraf": "^2.5.0",
+    "standard": "^10.0.0-beta.0",
+    "standard-version": "^4.2.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/yargs/y18n",
+  "keywords": [
+    "i18n",
+    "internationalization",
+    "yargs"
+  ],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "y18n",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/yargs/y18n.git"
+  },
+  "scripts": {
+    "coverage": "nyc report --reporter=text-lcov | coveralls",
+    "pretest": "standard",
+    "release": "standard-version",
+    "test": "nyc mocha"
+  },
+  "version": "4.0.1"
+}
diff --git a/signaling_server/service/node_modules/yargs-parser/package.json b/signaling_server/service/node_modules/yargs-parser/package.json
new file mode 100644 (file)
index 0000000..e0f16c6
--- /dev/null
@@ -0,0 +1,82 @@
+{
+  "_args": [
+    [
+      "yargs-parser@13.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "yargs-parser@13.1.2",
+  "_id": "yargs-parser@13.1.2",
+  "_inBundle": false,
+  "_integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+  "_location": "/yargs-parser",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "yargs-parser@13.1.2",
+    "name": "yargs-parser",
+    "escapedName": "yargs-parser",
+    "rawSpec": "13.1.2",
+    "saveSpec": null,
+    "fetchSpec": "13.1.2"
+  },
+  "_requiredBy": [
+    "/yargs"
+  ],
+  "_resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+  "_spec": "13.1.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Ben Coe",
+    "email": "ben@npmjs.com"
+  },
+  "bugs": {
+    "url": "https://github.com/yargs/yargs-parser/issues"
+  },
+  "dependencies": {
+    "camelcase": "^5.0.0",
+    "decamelize": "^1.2.0"
+  },
+  "description": "the mighty option parser used by yargs",
+  "devDependencies": {
+    "chai": "^4.2.0",
+    "coveralls": "^3.0.2",
+    "mocha": "^5.2.0",
+    "nyc": "^14.1.0",
+    "standard": "^12.0.1",
+    "standard-version": "^6.0.0"
+  },
+  "engine": {
+    "node": ">=6"
+  },
+  "files": [
+    "lib",
+    "index.js"
+  ],
+  "homepage": "https://github.com/yargs/yargs-parser#readme",
+  "keywords": [
+    "argument",
+    "parser",
+    "yargs",
+    "command",
+    "cli",
+    "parsing",
+    "option",
+    "args",
+    "argument"
+  ],
+  "license": "ISC",
+  "main": "index.js",
+  "name": "yargs-parser",
+  "repository": {
+    "url": "git+ssh://git@github.com/yargs/yargs-parser.git"
+  },
+  "scripts": {
+    "coverage": "nyc report --reporter=text-lcov | coveralls",
+    "posttest": "standard",
+    "release": "standard-version",
+    "test": "nyc mocha test/*.js"
+  },
+  "version": "13.1.2"
+}
diff --git a/signaling_server/service/node_modules/yargs/package.json b/signaling_server/service/node_modules/yargs/package.json
new file mode 100644 (file)
index 0000000..b36b874
--- /dev/null
@@ -0,0 +1,109 @@
+{
+  "_args": [
+    [
+      "yargs@13.3.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "yargs@13.3.2",
+  "_id": "yargs@13.3.2",
+  "_inBundle": false,
+  "_integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+  "_location": "/yargs",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "yargs@13.3.2",
+    "name": "yargs",
+    "escapedName": "yargs",
+    "rawSpec": "13.3.2",
+    "saveSpec": null,
+    "fetchSpec": "13.3.2"
+  },
+  "_requiredBy": [
+    "/qrcode"
+  ],
+  "_resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+  "_spec": "13.3.2",
+  "_where": "/opt/source/offload.js",
+  "bugs": {
+    "url": "https://github.com/yargs/yargs/issues"
+  },
+  "contributors": [
+    {
+      "name": "Yargs Contributors",
+      "url": "https://github.com/yargs/yargs/graphs/contributors"
+    }
+  ],
+  "dependencies": {
+    "cliui": "^5.0.0",
+    "find-up": "^3.0.0",
+    "get-caller-file": "^2.0.1",
+    "require-directory": "^2.1.1",
+    "require-main-filename": "^2.0.0",
+    "set-blocking": "^2.0.0",
+    "string-width": "^3.0.0",
+    "which-module": "^2.0.0",
+    "y18n": "^4.0.0",
+    "yargs-parser": "^13.1.2"
+  },
+  "description": "yargs the modern, pirate-themed, successor to optimist.",
+  "devDependencies": {
+    "chai": "^4.2.0",
+    "chalk": "^2.4.2",
+    "coveralls": "^3.0.3",
+    "cpr": "^3.0.1",
+    "cross-spawn": "^6.0.4",
+    "es6-promise": "^4.2.5",
+    "hashish": "0.0.4",
+    "mocha": "^5.2.0",
+    "nyc": "^14.1.0",
+    "rimraf": "^2.6.3",
+    "standard": "^12.0.1",
+    "standard-version": "^6.0.1",
+    "which": "^1.3.1",
+    "yargs-test-extends": "^1.0.1"
+  },
+  "engine": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "yargs.js",
+    "lib",
+    "locales",
+    "completion.sh.hbs",
+    "completion.zsh.hbs",
+    "LICENSE"
+  ],
+  "homepage": "https://yargs.js.org/",
+  "keywords": [
+    "argument",
+    "args",
+    "option",
+    "parser",
+    "parsing",
+    "cli",
+    "command"
+  ],
+  "license": "MIT",
+  "main": "./index.js",
+  "name": "yargs",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/yargs/yargs.git"
+  },
+  "scripts": {
+    "coverage": "nyc report --reporter=text-lcov | coveralls",
+    "pretest": "standard",
+    "release": "standard-version",
+    "test": "nyc --cache mocha --require ./test/before.js --timeout=12000 --check-leaks"
+  },
+  "standard": {
+    "ignore": [
+      "**/example/**"
+    ]
+  },
+  "version": "13.3.2"
+}
diff --git a/signaling_server/service/node_modules/yeast/package.json b/signaling_server/service/node_modules/yeast/package.json
new file mode 100644 (file)
index 0000000..2a7fe52
--- /dev/null
@@ -0,0 +1,67 @@
+{
+  "_args": [
+    [
+      "yeast@0.1.2",
+      "/opt/source/offload.js"
+    ]
+  ],
+  "_from": "yeast@0.1.2",
+  "_id": "yeast@0.1.2",
+  "_inBundle": false,
+  "_integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+  "_location": "/yeast",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "yeast@0.1.2",
+    "name": "yeast",
+    "escapedName": "yeast",
+    "rawSpec": "0.1.2",
+    "saveSpec": null,
+    "fetchSpec": "0.1.2"
+  },
+  "_requiredBy": [
+    "/engine.io-client"
+  ],
+  "_resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+  "_spec": "0.1.2",
+  "_where": "/opt/source/offload.js",
+  "author": {
+    "name": "Arnout Kazemier"
+  },
+  "bugs": {
+    "url": "https://github.com/unshiftio/yeast/issues"
+  },
+  "description": "Tiny but linear growing unique id generator",
+  "devDependencies": {
+    "assume": "1.3.x",
+    "istanbul": "0.3.x",
+    "mocha": "2.3.x",
+    "pre-commit": "1.1.x",
+    "zuul": "3.4.x"
+  },
+  "homepage": "https://github.com/unshiftio/yeast",
+  "keywords": [
+    "yeast",
+    "id",
+    "generator",
+    "unique"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "yeast",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/unshiftio/yeast.git"
+  },
+  "scripts": {
+    "100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100",
+    "coverage": "istanbul cover _mocha -- test.js",
+    "test": "mocha test.js",
+    "test-browser": "zuul -- test.js",
+    "test-node": "istanbul cover _mocha --report lcovonly -- test.js",
+    "watch": "mocha --watch test.js"
+  },
+  "version": "0.1.2"
+}