diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..3f430af --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v18 diff --git a/README.md b/README.md index 3fda9df..45589be 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ This repo is being restructured! For now, check out the following folders for th - `/core` for the Core module necessary for any app using Extensions - `/extensions` for the Extensions themselves +These can all be managed using Yarn Workspaces. To install all dependencies, just run `yarn install` from the root folder of this project. + +To try a particular extension, you can run its workspace `dev` script. For example, run `yarn workspaces @daily-labs/miro-extension dev` to start the dev server for the Miro extension, then visit `http://localhost:5173/demo/miro.html` to try it. (You may need a different port number, depending on what the terminal says.) + --- Extensions are JavaScript modules that extend the functionality of [Daily Prebuilt](https://docs.daily.co/guides/products/prebuilt). Want to put a whiteboard next to Prebuilt in your app? Try the Miro or Whiteboard.chat extension. Want to use CometChat instead of Daily's built-in chat? There's an extension for that (soon). diff --git a/core/package-lock.json b/core/package-lock.json deleted file mode 100644 index 49fe741..0000000 --- a/core/package-lock.json +++ /dev/null @@ -1,978 +0,0 @@ -{ - "name": "@daily-labs/daily", - "version": "0.1.7", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@daily-labs/daily", - "version": "0.1.7", - "dependencies": { - "@daily-co/daily-js": "0.30.0" - }, - "devDependencies": { - "typescript": "^4.7.4", - "vite": "^3.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@daily-co/daily-js": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.30.0.tgz", - "integrity": "sha512-5OSek5owy/43RvXw8VUlQBFN6qj2ZvwZs0RmKTazrRZ13PiLwL70dlVdV9zILUoPZZVYGay3BTnOpG6zrLsoYw==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "bowser": "^2.8.1", - "events": "^3.1.0", - "fast-equals": "^1.6.3", - "lodash": "^4.17.15" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-equals": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-1.6.3.tgz", - "integrity": "sha512-4WKW0AL5+WEqO0zWavAfYGY1qwLsBgE//DN4TTcVEN2UlINgkv9b3vm2iHicoenWKSX9mKWmGOsU/iI5IST7pQ==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/vite": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.8.tgz", - "integrity": "sha512-AOZ4eN7mrkJiOLuw8IA7piS4IdOQyQCA81GxGsAQvAZzMRi9ZwGB3TOaYsj4uLAWK46T5L4AfQ6InNGlxX30IQ==", - "dev": true, - "dependencies": { - "esbuild": "^0.14.47", - "postcss": "^8.4.16", - "resolve": "^1.22.1", - "rollup": ">=2.75.6 <2.77.0 || ~2.77.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "less": "*", - "sass": "*", - "stylus": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "terser": { - "optional": true - } - } - } - }, - "dependencies": { - "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@daily-co/daily-js": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.30.0.tgz", - "integrity": "sha512-5OSek5owy/43RvXw8VUlQBFN6qj2ZvwZs0RmKTazrRZ13PiLwL70dlVdV9zILUoPZZVYGay3BTnOpG6zrLsoYw==", - "requires": { - "@babel/runtime": "^7.12.5", - "bowser": "^2.8.1", - "events": "^3.1.0", - "fast-equals": "^1.6.3", - "lodash": "^4.17.15" - } - }, - "@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "dev": true, - "optional": true - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "dev": true, - "requires": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" - } - }, - "esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "dev": true, - "optional": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "fast-equals": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-1.6.3.tgz", - "integrity": "sha512-4WKW0AL5+WEqO0zWavAfYGY1qwLsBgE//DN4TTcVEN2UlINgkv9b3vm2iHicoenWKSX9mKWmGOsU/iI5IST7pQ==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "vite": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.8.tgz", - "integrity": "sha512-AOZ4eN7mrkJiOLuw8IA7piS4IdOQyQCA81GxGsAQvAZzMRi9ZwGB3TOaYsj4uLAWK46T5L4AfQ6InNGlxX30IQ==", - "dev": true, - "requires": { - "esbuild": "^0.14.47", - "fsevents": "~2.3.2", - "postcss": "^8.4.16", - "resolve": "^1.22.1", - "rollup": ">=2.75.6 <2.77.0 || ~2.77.0" - } - } - } -} diff --git a/core/package.json b/core/package.json index c96dbba..036c104 100644 --- a/core/package.json +++ b/core/package.json @@ -20,6 +20,6 @@ "vite": "^3.0.0" }, "dependencies": { - "@daily-co/daily-js": "0.x" + "@daily-co/daily-js": "file:./" } } diff --git a/core/src/core.js b/core/src/core.js index 394dcd4..409fabb 100644 --- a/core/src/core.js +++ b/core/src/core.js @@ -1,8 +1,6 @@ import DailyIframe, { DailyCall, DailyCallOptions } from "@daily-co/daily-js"; import callstate from "./callstate.js"; -import flexpanel from "./flexpanel.js"; -import iframe from "./iframe.js"; function createFrame(parentEl, properties) { const { dailyConfig = {} } = properties; @@ -18,7 +16,6 @@ function createFrame(parentEl, properties) { console.log("extensions: ", extensions); // configure core components - [parentEl, properties] = iframe.beforeCreateFrame(parentEl, properties); // now handle registered extensions extensions.forEach((extension) => { @@ -34,11 +31,13 @@ function createFrame(parentEl, properties) { }); const dailyCall = DailyIframe.createFrame(parentEl, properties); + console.log( + "updateCustomIntegrations function is: ", + dailyCall.updateCustomIntegrations + ); // configure core components callstate.afterCreateFrame(dailyCall); - flexpanel.afterCreateFrame(dailyCall); - iframe.afterCreateFrame(dailyCall); extensions.forEach((extension) => { const ext = "extension" in extension ? extension.extension : extension; @@ -49,7 +48,6 @@ function createFrame(parentEl, properties) { }); Object.assign(dailyCall, callstate.instanceMethods); - Object.assign(dailyCall, iframe.instanceMethods); return dailyCall; } diff --git a/core/src/iframe.js b/core/src/iframe.js index 1426c47..74691aa 100644 --- a/core/src/iframe.js +++ b/core/src/iframe.js @@ -1,7 +1,6 @@ //import daily from "./core.js"; import flexpanel from "./flexpanel.js"; import callstate from "./callstate.js"; -import localstate from "./localstate.js"; let fp, iframeEl, locationEl, call, state; let open = false; @@ -33,7 +32,7 @@ export default self = { afterCreateFrame, configure: function (p) { Object.assign(props, p); - state = props.broadcast === true ? callstate : localstate; + state = callstate; }, instanceMethods: { iframeState: function () { diff --git a/extensions/iframe/package-lock.json b/extensions/iframe/package-lock.json deleted file mode 100644 index 88de5ac..0000000 --- a/extensions/iframe/package-lock.json +++ /dev/null @@ -1,1022 +0,0 @@ -{ - "name": "@daily-labs/iframe-extension", - "version": "0.1.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@daily-labs/iframe-extension", - "version": "0.1.1", - "devDependencies": { - "typescript": "^4.7.4", - "vite": "^3.0.0" - }, - "peerDependencies": { - "@daily-labs/daily": "^0.1.6" - } - }, - "../../core": { - "name": "@daily-labs/daily", - "version": "0.1.6", - "extraneous": true, - "dependencies": { - "@daily-co/daily-js": "0.29.0" - }, - "devDependencies": { - "typescript": "^4.7.4", - "vite": "^3.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "peer": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@daily-co/daily-js": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.29.0.tgz", - "integrity": "sha512-aVILEVQEvpNT3jJ4XWIUXQjs6f/wxTUCPCqqKomsB0nq9aouGGOqJ0NIXFvD3r5gi6eLPvNS/kv6b52VPwD9yA==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "bowser": "^2.8.1", - "events": "^3.1.0", - "fast-equals": "^1.6.3", - "lodash": "^4.17.15" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@daily-labs/daily": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@daily-labs/daily/-/daily-0.1.6.tgz", - "integrity": "sha512-lTC5ZvQZncEr9UFFVqzRGHm7CfNH8Hej3XGhJa+gOhZlkzas1hbHKWf6XvT7zCC+Ax18tDsiJbpKOuaC7R8I9A==", - "peer": true, - "dependencies": { - "@daily-co/daily-js": "0.29.0" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "peer": true - }, - "node_modules/esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-equals": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-1.6.3.tgz", - "integrity": "sha512-4WKW0AL5+WEqO0zWavAfYGY1qwLsBgE//DN4TTcVEN2UlINgkv9b3vm2iHicoenWKSX9mKWmGOsU/iI5IST7pQ==", - "peer": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "peer": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "peer": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/vite": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.9.tgz", - "integrity": "sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==", - "dev": true, - "dependencies": { - "esbuild": "^0.14.47", - "postcss": "^8.4.16", - "resolve": "^1.22.1", - "rollup": ">=2.75.6 <2.77.0 || ~2.77.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "less": "*", - "sass": "*", - "stylus": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "terser": { - "optional": true - } - } - } - }, - "dependencies": { - "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "peer": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@daily-co/daily-js": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.29.0.tgz", - "integrity": "sha512-aVILEVQEvpNT3jJ4XWIUXQjs6f/wxTUCPCqqKomsB0nq9aouGGOqJ0NIXFvD3r5gi6eLPvNS/kv6b52VPwD9yA==", - "peer": true, - "requires": { - "@babel/runtime": "^7.12.5", - "bowser": "^2.8.1", - "events": "^3.1.0", - "fast-equals": "^1.6.3", - "lodash": "^4.17.15" - } - }, - "@daily-labs/daily": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@daily-labs/daily/-/daily-0.1.6.tgz", - "integrity": "sha512-lTC5ZvQZncEr9UFFVqzRGHm7CfNH8Hej3XGhJa+gOhZlkzas1hbHKWf6XvT7zCC+Ax18tDsiJbpKOuaC7R8I9A==", - "peer": true, - "requires": { - "@daily-co/daily-js": "0.29.0" - } - }, - "@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "dev": true, - "optional": true - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "peer": true - }, - "esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "dev": true, - "requires": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" - } - }, - "esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "dev": true, - "optional": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "peer": true - }, - "fast-equals": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-1.6.3.tgz", - "integrity": "sha512-4WKW0AL5+WEqO0zWavAfYGY1qwLsBgE//DN4TTcVEN2UlINgkv9b3vm2iHicoenWKSX9mKWmGOsU/iI5IST7pQ==", - "peer": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "peer": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "peer": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", - "dev": true - }, - "vite": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.9.tgz", - "integrity": "sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==", - "dev": true, - "requires": { - "esbuild": "^0.14.47", - "fsevents": "~2.3.2", - "postcss": "^8.4.16", - "resolve": "^1.22.1", - "rollup": ">=2.75.6 <2.77.0 || ~2.77.0" - } - } - } -} diff --git a/extensions/miro/demo/daily-iframe-esm.js b/extensions/miro/demo/daily-iframe-esm.js new file mode 100644 index 0000000..246f401 --- /dev/null +++ b/extensions/miro/demo/daily-iframe-esm.js @@ -0,0 +1,12875 @@ +import EventEmitter$1, { EventEmitter } from 'events'; + +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; +} + +var objectWithoutPropertiesLoose = _objectWithoutPropertiesLoose; + +function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + var target = objectWithoutPropertiesLoose(source, excluded); + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + + return target; +} + +var objectWithoutProperties = _objectWithoutProperties; + +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { + try { + var info = gen[key](arg); + var value = info.value; + } catch (error) { + reject(error); + return; + } + + if (info.done) { + resolve(value); + } else { + Promise.resolve(value).then(_next, _throw); + } +} + +function _asyncToGenerator(fn) { + return function () { + var self = this, + args = arguments; + return new Promise(function (resolve, reject) { + var gen = fn.apply(self, args); + + function _next(value) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); + } + + function _throw(err) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); + } + + _next(undefined); + }); + }; +} + +var asyncToGenerator = _asyncToGenerator; + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +var classCallCheck = _classCallCheck; + +function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; +} + +var assertThisInitialized = _assertThisInitialized; + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +var createClass = _createClass; + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var setPrototypeOf = createCommonjsModule(function (module) { +function _setPrototypeOf(o, p) { + module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +module.exports = _setPrototypeOf; +}); + +function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function"); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + writable: true, + configurable: true + } + }); + if (superClass) setPrototypeOf(subClass, superClass); +} + +var inherits = _inherits; + +var _typeof_1 = createCommonjsModule(function (module) { +function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + module.exports = _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + module.exports = _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); +} + +module.exports = _typeof; +}); + +function _possibleConstructorReturn(self, call) { + if (call && (_typeof_1(call) === "object" || typeof call === "function")) { + return call; + } + + return assertThisInitialized(self); +} + +var possibleConstructorReturn = _possibleConstructorReturn; + +var getPrototypeOf = createCommonjsModule(function (module) { +function _getPrototypeOf(o) { + module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); +} + +module.exports = _getPrototypeOf; +}); + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +var defineProperty = _defineProperty; + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} + +var arrayWithHoles = _arrayWithHoles; + +function _iterableToArrayLimit(arr, i) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +var iterableToArrayLimit = _iterableToArrayLimit; + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; +} + +var arrayLikeToArray = _arrayLikeToArray; + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen); +} + +var unsupportedIterableToArray = _unsupportedIterableToArray; + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +var nonIterableRest = _nonIterableRest; + +function _slicedToArray(arr, i) { + return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest(); +} + +var slicedToArray = _slicedToArray; + +/** + * @constant {boolean} HAS_MAP_SUPPORT + */ +var HAS_MAP_SUPPORT = typeof Map === 'function'; +/** + * @constant {boolean} HAS_SET_SUPPORT + */ + +var HAS_SET_SUPPORT = typeof Set === 'function'; +/** + * @constant {boolean} HAS_WEAKSET_SUPPORT + */ + +var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function'; + +// constants +var keys = Object.keys; +/** + * @function addObjectToCache + * + * @description + * add object to cache if it is indeed an object + * + * @param {any} object the object to potentially add to the cache + * @param {Object|WeakSet} cache the cache to add to + * @returns {void} + */ + +var addObjectToCache = function addObjectToCache(object, cache) { + return object && typeof object === 'object' && cache.add(object); +}; +/** + * + * @param {Array>} pairs the pairs to check in + * @param {Array} pairToMatch the pair to check if exists + * @param {function} isEqual the equality comparator + * @param {any} meta the meta item to pass through + * @returns {boolean} does the pair exist in the pairs + */ + +var hasPair = function hasPair(pairs, pairToMatch, isEqual, meta) { + var pair; + + for (var index = 0; index < pairs.length; index++) { + pair = pairs[index]; + + if (isEqual(pair[0], pairToMatch[0], meta) && isEqual(pair[1], pairToMatch[1], meta)) { + return true; + } + } + + return false; +}; +/** + * @function hasValue + * + * @description + * does the values include the vakye passed + * + * @param {Array} values the values to check in + * @param {any} item the value to locate + * @param {function} isEqual the equality comparator + * @param {any} meta the meta item to pass through + * @returns {boolean} does the value exist in the values + */ + +var hasValue = function hasValue(values, item, isEqual, meta) { + for (var index = 0; index < values.length; index++) { + if (isEqual(values[index], item, meta)) { + return true; + } + } + + return false; +}; +/** + * @function sameValueZeroEqual + * + * @description + * are the objects passed strictly equal or both NaN + * + * @param {any} objectA the object to compare against + * @param {any} objectB the object to test + * @returns {boolean} are the objects equal by the SameValueZero principle + */ + +var sameValueZeroEqual = function sameValueZeroEqual(objectA, objectB) { + return objectA === objectB || objectA !== objectA && objectB !== objectB; +}; +/** + * @function isPlainObject + * + * @description + * is the object a plain object + * + * @param {any} object the object to test + * @returns {boolean} is the object a plain object + */ + +var isPlainObject = function isPlainObject(object) { + return object.constructor === Object; +}; +/** + * @function isPromiseLike + * + * @description + * is the object promise-like (thenable) + * + * @param {any} object the object to test + * @returns {boolean} is the object promise-like + */ + +var isPromiseLike = function isPromiseLike(object) { + return typeof object.then === 'function'; +}; +/** + * @function isReactElement + * + * @description + * is the object passed a react element + * + * @param {any} object the object to test + * @returns {boolean} is the object a react element + */ + +var isReactElement = function isReactElement(object) { + return !!(object.$$typeof && object._store); +}; +/** + * @function getNewCache + * + * @description + * get a new cache object to prevent circular references + * + * @returns {Object|Weakset} the new cache object + */ + +var getNewCache = function getNewCache() { + return HAS_WEAKSET_SUPPORT ? new WeakSet() : Object.create({ + _values: [], + add: function add(value) { + this._values.push(value); + }, + has: function has(value) { + return !!~this._values.indexOf(value); + } + }); +}; +/** + * @function createCircularEqual + * + * @description + * create a custom isEqual handler specific to circular objects + * + * @param {funtion} [isEqual] the isEqual comparator to use instead of isDeepEqual + * @returns {function(any, any): boolean} + */ + +var createCircularEqual = function createCircularEqual(isEqual) { + return function (isDeepEqual) { + var comparator = isEqual || isDeepEqual; + return function (objectA, objectB, cache) { + if (cache === void 0) { + cache = getNewCache(); + } + + var cacheHasA = cache.has(objectA); + var cacheHasB = cache.has(objectB); + + if (cacheHasA || cacheHasB) { + return cacheHasA && cacheHasB; + } + + addObjectToCache(objectA, cache); + addObjectToCache(objectB, cache); + return comparator(objectA, objectB, cache); + }; + }; +}; +/** + * @function toPairs + * + * @param {Map} map the map to convert to [key, value] pairs (entries) + * @returns {Array>} the [key, value] pairs + */ + +var toPairs = function toPairs(map) { + var pairs = []; + map.forEach(function (value, key) { + return pairs.push([key, value]); + }); + return pairs; +}; +/** + * @function toValues + * + * @param {Set} set the set to convert to values + * @returns {Array<*>} the values + */ + +var toValues = function toValues(set) { + var values = []; + set.forEach(function (value) { + return values.push(value); + }); + return values; +}; +/** + * @function areArraysEqual + * + * @description + * are the arrays equal in value + * + * @param {Array} arrayA the array to test + * @param {Array} arrayB the array to test against + * @param {function} isEqual the comparator to determine equality + * @param {any} meta the meta object to pass through + * @returns {boolean} are the arrays equal + */ + +var areArraysEqual = function areArraysEqual(arrayA, arrayB, isEqual, meta) { + if (arrayA.length !== arrayB.length) { + return false; + } + + for (var index = 0; index < arrayA.length; index++) { + if (!isEqual(arrayA[index], arrayB[index], meta)) { + return false; + } + } + + return true; +}; +/** + * @function areMapsEqual + * + * @description + * are the maps equal in value + * + * @param {Map} mapA the map to test + * @param {Map} mapB the map to test against + * @param {function} isEqual the comparator to determine equality + * @param {any} meta the meta map to pass through + * @returns {boolean} are the maps equal + */ + +var areMapsEqual = function areMapsEqual(mapA, mapB, isEqual, meta) { + if (mapA.size !== mapB.size) { + return false; + } + + var pairsA = toPairs(mapA); + var pairsB = toPairs(mapB); + + for (var index = 0; index < pairsA.length; index++) { + if (!hasPair(pairsB, pairsA[index], isEqual, meta) || !hasPair(pairsA, pairsB[index], isEqual, meta)) { + return false; + } + } + + return true; +}; +/** + * @function areObjectsEqual + * + * @description + * are the objects equal in value + * + * @param {Object} objectA the object to test + * @param {Object} objectB the object to test against + * @param {function} isEqual the comparator to determine equality + * @param {any} meta the meta object to pass through + * @returns {boolean} are the objects equal + */ + +var areObjectsEqual = function areObjectsEqual(objectA, objectB, isEqual, meta) { + var keysA = keys(objectA); + var keysB = keys(objectB); + + if (keysA.length !== keysB.length) { + return false; + } + + var key; + + for (var index = 0; index < keysA.length; index++) { + key = keysA[index]; + + if (!hasValue(keysB, key, sameValueZeroEqual)) { + return false; + } // if a react element, ignore the "_owner" key because its not necessary for equality comparisons + + + if (key === '_owner' && isReactElement(objectA) && isReactElement(objectB)) { + continue; + } + + if (!isEqual(objectA[key], objectB[key], meta)) { + return false; + } + } + + return true; +}; +/** + * @function areRegExpsEqual + * + * @description + * are the regExps equal in value + * + * @param {RegExp} regExpA the regExp to test + * @param {RegExp} regExpB the regExp to test agains + * @returns {boolean} are the regExps equal + */ + +var areRegExpsEqual = function areRegExpsEqual(regExpA, regExpB) { + return regExpA.source === regExpB.source && regExpA.global === regExpB.global && regExpA.ignoreCase === regExpB.ignoreCase && regExpA.multiline === regExpB.multiline && regExpA.unicode === regExpB.unicode && regExpA.sticky === regExpB.sticky && regExpA.lastIndex === regExpB.lastIndex; +}; +/** + * @function areSetsEqual + * + * @description + * are the sets equal in value + * + * @param {Set} setA the set to test + * @param {Set} setB the set to test against + * @param {function} isEqual the comparator to determine equality + * @param {any} meta the meta set to pass through + * @returns {boolean} are the sets equal + */ + +var areSetsEqual = function areSetsEqual(setA, setB, isEqual, meta) { + if (setA.size !== setB.size) { + return false; + } + + var valuesA = toValues(setA); + var valuesB = toValues(setB); + + for (var index = 0; index < valuesA.length; index++) { + if (!hasValue(valuesB, valuesA[index], isEqual, meta) || !hasValue(valuesA, valuesB[index], isEqual, meta)) { + return false; + } + } + + return true; +}; + +// constants +var isArray = Array.isArray; + +var createComparator = function createComparator(createIsEqual) { + // eslint-disable-next-line no-use-before-define + var isEqual = typeof createIsEqual === 'function' ? createIsEqual(comparator) : comparator; + /** + * @function comparator + * + * @description + * compare the value of the two objects and return true if they are equivalent in values + * + * @param {any} objectA the object to test against + * @param {any} objectB the object to test + * @param {any} [meta] an optional meta object that is passed through to all equality test calls + * @returns {boolean} are objectA and objectB equivalent in value + */ + + function comparator(objectA, objectB, meta) { + if (sameValueZeroEqual(objectA, objectB)) { + return true; + } + + var typeOfA = typeof objectA; + + if (typeOfA !== typeof objectB || typeOfA !== 'object' || !objectA || !objectB) { + return false; + } + + if (isPlainObject(objectA) && isPlainObject(objectB)) { + return areObjectsEqual(objectA, objectB, isEqual, meta); + } + + var arrayA = isArray(objectA); + var arrayB = isArray(objectB); + + if (arrayA || arrayB) { + return arrayA === arrayB && areArraysEqual(objectA, objectB, isEqual, meta); + } + + var dateA = objectA instanceof Date; + var dateB = objectB instanceof Date; + + if (dateA || dateB) { + return dateA === dateB && sameValueZeroEqual(objectA.getTime(), objectB.getTime()); + } + + var regexpA = objectA instanceof RegExp; + var regexpB = objectB instanceof RegExp; + + if (regexpA || regexpB) { + return regexpA === regexpB && areRegExpsEqual(objectA, objectB); + } + + if (isPromiseLike(objectA) || isPromiseLike(objectB)) { + return objectA === objectB; + } + + if (HAS_MAP_SUPPORT) { + var mapA = objectA instanceof Map; + var mapB = objectB instanceof Map; + + if (mapA || mapB) { + return mapA === mapB && areMapsEqual(objectA, objectB, isEqual, meta); + } + } + + if (HAS_SET_SUPPORT) { + var setA = objectA instanceof Set; + var setB = objectB instanceof Set; + + if (setA || setB) { + return setA === setB && areSetsEqual(objectA, objectB, isEqual, meta); + } + } + + return areObjectsEqual(objectA, objectB, isEqual, meta); + } + + return comparator; +}; + +// comparator +var circularDeepEqual = createComparator(createCircularEqual()); +var circularShallowEqual = createComparator(createCircularEqual(sameValueZeroEqual)); +var deepEqual = createComparator(); +var shallowEqual = createComparator(function () { + return sameValueZeroEqual; +}); + +// NOTE: this list must be up-to-date with browsers listed in +// test/acceptance/useragentstrings.yml +const BROWSER_ALIASES_MAP = { + 'Amazon Silk': 'amazon_silk', + 'Android Browser': 'android', + Bada: 'bada', + BlackBerry: 'blackberry', + Chrome: 'chrome', + Chromium: 'chromium', + Electron: 'electron', + Epiphany: 'epiphany', + Firefox: 'firefox', + Focus: 'focus', + Generic: 'generic', + 'Google Search': 'google_search', + Googlebot: 'googlebot', + 'Internet Explorer': 'ie', + 'K-Meleon': 'k_meleon', + Maxthon: 'maxthon', + 'Microsoft Edge': 'edge', + 'MZ Browser': 'mz', + 'NAVER Whale Browser': 'naver', + Opera: 'opera', + 'Opera Coast': 'opera_coast', + PhantomJS: 'phantomjs', + Puffin: 'puffin', + QupZilla: 'qupzilla', + QQ: 'qq', + QQLite: 'qqlite', + Safari: 'safari', + Sailfish: 'sailfish', + 'Samsung Internet for Android': 'samsung_internet', + SeaMonkey: 'seamonkey', + Sleipnir: 'sleipnir', + Swing: 'swing', + Tizen: 'tizen', + 'UC Browser': 'uc', + Vivaldi: 'vivaldi', + 'WebOS Browser': 'webos', + WeChat: 'wechat', + 'Yandex Browser': 'yandex', + Roku: 'roku', +}; + +const BROWSER_MAP = { + amazon_silk: 'Amazon Silk', + android: 'Android Browser', + bada: 'Bada', + blackberry: 'BlackBerry', + chrome: 'Chrome', + chromium: 'Chromium', + electron: 'Electron', + epiphany: 'Epiphany', + firefox: 'Firefox', + focus: 'Focus', + generic: 'Generic', + googlebot: 'Googlebot', + google_search: 'Google Search', + ie: 'Internet Explorer', + k_meleon: 'K-Meleon', + maxthon: 'Maxthon', + edge: 'Microsoft Edge', + mz: 'MZ Browser', + naver: 'NAVER Whale Browser', + opera: 'Opera', + opera_coast: 'Opera Coast', + phantomjs: 'PhantomJS', + puffin: 'Puffin', + qupzilla: 'QupZilla', + qq: 'QQ Browser', + qqlite: 'QQ Browser Lite', + safari: 'Safari', + sailfish: 'Sailfish', + samsung_internet: 'Samsung Internet for Android', + seamonkey: 'SeaMonkey', + sleipnir: 'Sleipnir', + swing: 'Swing', + tizen: 'Tizen', + uc: 'UC Browser', + vivaldi: 'Vivaldi', + webos: 'WebOS Browser', + wechat: 'WeChat', + yandex: 'Yandex Browser', +}; + +const PLATFORMS_MAP = { + tablet: 'tablet', + mobile: 'mobile', + desktop: 'desktop', + tv: 'tv', +}; + +const OS_MAP = { + WindowsPhone: 'Windows Phone', + Windows: 'Windows', + MacOS: 'macOS', + iOS: 'iOS', + Android: 'Android', + WebOS: 'WebOS', + BlackBerry: 'BlackBerry', + Bada: 'Bada', + Tizen: 'Tizen', + Linux: 'Linux', + ChromeOS: 'Chrome OS', + PlayStation4: 'PlayStation 4', + Roku: 'Roku', +}; + +const ENGINE_MAP = { + EdgeHTML: 'EdgeHTML', + Blink: 'Blink', + Trident: 'Trident', + Presto: 'Presto', + Gecko: 'Gecko', + WebKit: 'WebKit', +}; + +class Utils { + /** + * Get first matched item for a string + * @param {RegExp} regexp + * @param {String} ua + * @return {Array|{index: number, input: string}|*|boolean|string} + */ + static getFirstMatch(regexp, ua) { + const match = ua.match(regexp); + return (match && match.length > 0 && match[1]) || ''; + } + + /** + * Get second matched item for a string + * @param regexp + * @param {String} ua + * @return {Array|{index: number, input: string}|*|boolean|string} + */ + static getSecondMatch(regexp, ua) { + const match = ua.match(regexp); + return (match && match.length > 1 && match[2]) || ''; + } + + /** + * Match a regexp and return a constant or undefined + * @param {RegExp} regexp + * @param {String} ua + * @param {*} _const Any const that will be returned if regexp matches the string + * @return {*} + */ + static matchAndReturnConst(regexp, ua, _const) { + if (regexp.test(ua)) { + return _const; + } + return void (0); + } + + static getWindowsVersionName(version) { + switch (version) { + case 'NT': return 'NT'; + case 'XP': return 'XP'; + case 'NT 5.0': return '2000'; + case 'NT 5.1': return 'XP'; + case 'NT 5.2': return '2003'; + case 'NT 6.0': return 'Vista'; + case 'NT 6.1': return '7'; + case 'NT 6.2': return '8'; + case 'NT 6.3': return '8.1'; + case 'NT 10.0': return '10'; + default: return undefined; + } + } + + /** + * Get macOS version name + * 10.5 - Leopard + * 10.6 - Snow Leopard + * 10.7 - Lion + * 10.8 - Mountain Lion + * 10.9 - Mavericks + * 10.10 - Yosemite + * 10.11 - El Capitan + * 10.12 - Sierra + * 10.13 - High Sierra + * 10.14 - Mojave + * 10.15 - Catalina + * + * @example + * getMacOSVersionName("10.14") // 'Mojave' + * + * @param {string} version + * @return {string} versionName + */ + static getMacOSVersionName(version) { + const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0); + v.push(0); + if (v[0] !== 10) return undefined; + switch (v[1]) { + case 5: return 'Leopard'; + case 6: return 'Snow Leopard'; + case 7: return 'Lion'; + case 8: return 'Mountain Lion'; + case 9: return 'Mavericks'; + case 10: return 'Yosemite'; + case 11: return 'El Capitan'; + case 12: return 'Sierra'; + case 13: return 'High Sierra'; + case 14: return 'Mojave'; + case 15: return 'Catalina'; + default: return undefined; + } + } + + /** + * Get Android version name + * 1.5 - Cupcake + * 1.6 - Donut + * 2.0 - Eclair + * 2.1 - Eclair + * 2.2 - Froyo + * 2.x - Gingerbread + * 3.x - Honeycomb + * 4.0 - Ice Cream Sandwich + * 4.1 - Jelly Bean + * 4.4 - KitKat + * 5.x - Lollipop + * 6.x - Marshmallow + * 7.x - Nougat + * 8.x - Oreo + * 9.x - Pie + * + * @example + * getAndroidVersionName("7.0") // 'Nougat' + * + * @param {string} version + * @return {string} versionName + */ + static getAndroidVersionName(version) { + const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0); + v.push(0); + if (v[0] === 1 && v[1] < 5) return undefined; + if (v[0] === 1 && v[1] < 6) return 'Cupcake'; + if (v[0] === 1 && v[1] >= 6) return 'Donut'; + if (v[0] === 2 && v[1] < 2) return 'Eclair'; + if (v[0] === 2 && v[1] === 2) return 'Froyo'; + if (v[0] === 2 && v[1] > 2) return 'Gingerbread'; + if (v[0] === 3) return 'Honeycomb'; + if (v[0] === 4 && v[1] < 1) return 'Ice Cream Sandwich'; + if (v[0] === 4 && v[1] < 4) return 'Jelly Bean'; + if (v[0] === 4 && v[1] >= 4) return 'KitKat'; + if (v[0] === 5) return 'Lollipop'; + if (v[0] === 6) return 'Marshmallow'; + if (v[0] === 7) return 'Nougat'; + if (v[0] === 8) return 'Oreo'; + if (v[0] === 9) return 'Pie'; + return undefined; + } + + /** + * Get version precisions count + * + * @example + * getVersionPrecision("1.10.3") // 3 + * + * @param {string} version + * @return {number} + */ + static getVersionPrecision(version) { + return version.split('.').length; + } + + /** + * Calculate browser version weight + * + * @example + * compareVersions('1.10.2.1', '1.8.2.1.90') // 1 + * compareVersions('1.010.2.1', '1.09.2.1.90'); // 1 + * compareVersions('1.10.2.1', '1.10.2.1'); // 0 + * compareVersions('1.10.2.1', '1.0800.2'); // -1 + * compareVersions('1.10.2.1', '1.10', true); // 0 + * + * @param {String} versionA versions versions to compare + * @param {String} versionB versions versions to compare + * @param {boolean} [isLoose] enable loose comparison + * @return {Number} comparison result: -1 when versionA is lower, + * 1 when versionA is bigger, 0 when both equal + */ + /* eslint consistent-return: 1 */ + static compareVersions(versionA, versionB, isLoose = false) { + // 1) get common precision for both versions, for example for "10.0" and "9" it should be 2 + const versionAPrecision = Utils.getVersionPrecision(versionA); + const versionBPrecision = Utils.getVersionPrecision(versionB); + + let precision = Math.max(versionAPrecision, versionBPrecision); + let lastPrecision = 0; + + const chunks = Utils.map([versionA, versionB], (version) => { + const delta = precision - Utils.getVersionPrecision(version); + + // 2) "9" -> "9.0" (for precision = 2) + const _version = version + new Array(delta + 1).join('.0'); + + // 3) "9.0" -> ["000000000"", "000000009"] + return Utils.map(_version.split('.'), chunk => new Array(20 - chunk.length).join('0') + chunk).reverse(); + }); + + // adjust precision for loose comparison + if (isLoose) { + lastPrecision = precision - Math.min(versionAPrecision, versionBPrecision); + } + + // iterate in reverse order by reversed chunks array + precision -= 1; + while (precision >= lastPrecision) { + // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true) + if (chunks[0][precision] > chunks[1][precision]) { + return 1; + } + + if (chunks[0][precision] === chunks[1][precision]) { + if (precision === lastPrecision) { + // all version chunks are same + return 0; + } + + precision -= 1; + } else if (chunks[0][precision] < chunks[1][precision]) { + return -1; + } + } + + return undefined; + } + + /** + * Array::map polyfill + * + * @param {Array} arr + * @param {Function} iterator + * @return {Array} + */ + static map(arr, iterator) { + const result = []; + let i; + if (Array.prototype.map) { + return Array.prototype.map.call(arr, iterator); + } + for (i = 0; i < arr.length; i += 1) { + result.push(iterator(arr[i])); + } + return result; + } + + /** + * Array::find polyfill + * + * @param {Array} arr + * @param {Function} predicate + * @return {Array} + */ + static find(arr, predicate) { + let i; + let l; + if (Array.prototype.find) { + return Array.prototype.find.call(arr, predicate); + } + for (i = 0, l = arr.length; i < l; i += 1) { + const value = arr[i]; + if (predicate(value, i)) { + return value; + } + } + return undefined; + } + + /** + * Object::assign polyfill + * + * @param {Object} obj + * @param {Object} ...objs + * @return {Object} + */ + static assign(obj, ...assigners) { + const result = obj; + let i; + let l; + if (Object.assign) { + return Object.assign(obj, ...assigners); + } + for (i = 0, l = assigners.length; i < l; i += 1) { + const assigner = assigners[i]; + if (typeof assigner === 'object' && assigner !== null) { + const keys = Object.keys(assigner); + keys.forEach((key) => { + result[key] = assigner[key]; + }); + } + } + return obj; + } + + /** + * Get short version/alias for a browser name + * + * @example + * getBrowserAlias('Microsoft Edge') // edge + * + * @param {string} browserName + * @return {string} + */ + static getBrowserAlias(browserName) { + return BROWSER_ALIASES_MAP[browserName]; + } + + /** + * Get short version/alias for a browser name + * + * @example + * getBrowserAlias('edge') // Microsoft Edge + * + * @param {string} browserAlias + * @return {string} + */ + static getBrowserTypeByAlias(browserAlias) { + return BROWSER_MAP[browserAlias] || ''; + } +} + +/** + * Browsers' descriptors + * + * The idea of descriptors is simple. You should know about them two simple things: + * 1. Every descriptor has a method or property called `test` and a `describe` method. + * 2. Order of descriptors is important. + * + * More details: + * 1. Method or property `test` serves as a way to detect whether the UA string + * matches some certain browser or not. The `describe` method helps to make a result + * object with params that show some browser-specific things: name, version, etc. + * 2. Order of descriptors is important because a Parser goes through them one by one + * in course. For example, if you insert Chrome's descriptor as the first one, + * more then a half of browsers will be described as Chrome, because they will pass + * the Chrome descriptor's test. + * + * Descriptor's `test` could be a property with an array of RegExps, where every RegExp + * will be applied to a UA string to test it whether it matches or not. + * If a descriptor has two or more regexps in the `test` array it tests them one by one + * with a logical sum operation. Parser stops if it has found any RegExp that matches the UA. + * + * Or `test` could be a method. In that case it gets a Parser instance and should + * return true/false to get the Parser know if this browser descriptor matches the UA or not. + */ + +const commonVersionIdentifier = /version\/(\d+(\.?_?\d+)+)/i; + +const browsersList = [ + /* Googlebot */ + { + test: [/googlebot/i], + describe(ua) { + const browser = { + name: 'Googlebot', + }; + const version = Utils.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Opera < 13.0 */ + { + test: [/opera/i], + describe(ua) { + const browser = { + name: 'Opera', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Opera > 13.0 */ + { + test: [/opr\/|opios/i], + describe(ua) { + const browser = { + name: 'Opera', + }; + const version = Utils.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/SamsungBrowser/i], + describe(ua) { + const browser = { + name: 'Samsung Internet for Android', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/Whale/i], + describe(ua) { + const browser = { + name: 'NAVER Whale Browser', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/MZBrowser/i], + describe(ua) { + const browser = { + name: 'MZ Browser', + }; + const version = Utils.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/focus/i], + describe(ua) { + const browser = { + name: 'Focus', + }; + const version = Utils.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/swing/i], + describe(ua) { + const browser = { + name: 'Swing', + }; + const version = Utils.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/coast/i], + describe(ua) { + const browser = { + name: 'Opera Coast', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/yabrowser/i], + describe(ua) { + const browser = { + name: 'Yandex Browser', + }; + const version = Utils.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/ucbrowser/i], + describe(ua) { + const browser = { + name: 'UC Browser', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/Maxthon|mxios/i], + describe(ua) { + const browser = { + name: 'Maxthon', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/epiphany/i], + describe(ua) { + const browser = { + name: 'Epiphany', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/puffin/i], + describe(ua) { + const browser = { + name: 'Puffin', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/sleipnir/i], + describe(ua) { + const browser = { + name: 'Sleipnir', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/k-meleon/i], + describe(ua) { + const browser = { + name: 'K-Meleon', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/micromessenger/i], + describe(ua) { + const browser = { + name: 'WeChat', + }; + const version = Utils.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/qqbrowser/i], + describe(ua) { + const browser = { + name: (/qqbrowserlite/i).test(ua) ? 'QQ Browser Lite' : 'QQ Browser', + }; + const version = Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/msie|trident/i], + describe(ua) { + const browser = { + name: 'Internet Explorer', + }; + const version = Utils.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/\sedg\//i], + describe(ua) { + const browser = { + name: 'Microsoft Edge', + }; + + const version = Utils.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/edg([ea]|ios)/i], + describe(ua) { + const browser = { + name: 'Microsoft Edge', + }; + + const version = Utils.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/vivaldi/i], + describe(ua) { + const browser = { + name: 'Vivaldi', + }; + const version = Utils.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/seamonkey/i], + describe(ua) { + const browser = { + name: 'SeaMonkey', + }; + const version = Utils.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/sailfish/i], + describe(ua) { + const browser = { + name: 'Sailfish', + }; + + const version = Utils.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/silk/i], + describe(ua) { + const browser = { + name: 'Amazon Silk', + }; + const version = Utils.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/phantom/i], + describe(ua) { + const browser = { + name: 'PhantomJS', + }; + const version = Utils.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/slimerjs/i], + describe(ua) { + const browser = { + name: 'SlimerJS', + }; + const version = Utils.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/blackberry|\bbb\d+/i, /rim\stablet/i], + describe(ua) { + const browser = { + name: 'BlackBerry', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/(web|hpw)[o0]s/i], + describe(ua) { + const browser = { + name: 'WebOS Browser', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/bada/i], + describe(ua) { + const browser = { + name: 'Bada', + }; + const version = Utils.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/tizen/i], + describe(ua) { + const browser = { + name: 'Tizen', + }; + const version = Utils.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/qupzilla/i], + describe(ua) { + const browser = { + name: 'QupZilla', + }; + const version = Utils.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/firefox|iceweasel|fxios/i], + describe(ua) { + const browser = { + name: 'Firefox', + }; + const version = Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/electron/i], + describe(ua) { + const browser = { + name: 'Electron', + }; + const version = Utils.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/chromium/i], + describe(ua) { + const browser = { + name: 'Chromium', + }; + const version = Utils.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/chrome|crios|crmo/i], + describe(ua) { + const browser = { + name: 'Chrome', + }; + const version = Utils.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/GSA/i], + describe(ua) { + const browser = { + name: 'Google Search', + }; + const version = Utils.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Android Browser */ + { + test(parser) { + const notLikeAndroid = !parser.test(/like android/i); + const butAndroid = parser.test(/android/i); + return notLikeAndroid && butAndroid; + }, + describe(ua) { + const browser = { + name: 'Android Browser', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* PlayStation 4 */ + { + test: [/playstation 4/i], + describe(ua) { + const browser = { + name: 'PlayStation 4', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Safari */ + { + test: [/safari|applewebkit/i], + describe(ua) { + const browser = { + name: 'Safari', + }; + const version = Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Something else */ + { + test: [/.*/i], + describe(ua) { + /* Here we try to make sure that there are explicit details about the device + * in order to decide what regexp exactly we want to apply + * (as there is a specific decision based on that conclusion) + */ + const regexpWithoutDeviceSpec = /^(.*)\/(.*) /; + const regexpWithDeviceSpec = /^(.*)\/(.*)[ \t]\((.*)/; + const hasDeviceSpec = ua.search('\\(') !== -1; + const regexp = hasDeviceSpec ? regexpWithDeviceSpec : regexpWithoutDeviceSpec; + return { + name: Utils.getFirstMatch(regexp, ua), + version: Utils.getSecondMatch(regexp, ua), + }; + }, + }, +]; + +var osParsersList = [ + /* Roku */ + { + test: [/Roku\/DVP/], + describe(ua) { + const version = Utils.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, ua); + return { + name: OS_MAP.Roku, + version, + }; + }, + }, + + /* Windows Phone */ + { + test: [/windows phone/i], + describe(ua) { + const version = Utils.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, ua); + return { + name: OS_MAP.WindowsPhone, + version, + }; + }, + }, + + /* Windows */ + { + test: [/windows /i], + describe(ua) { + const version = Utils.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, ua); + const versionName = Utils.getWindowsVersionName(version); + + return { + name: OS_MAP.Windows, + version, + versionName, + }; + }, + }, + + /* Firefox on iPad */ + { + test: [/Macintosh(.*?) FxiOS(.*?) Version\//], + describe(ua) { + const version = Utils.getSecondMatch(/(Version\/)(\d[\d.]+)/, ua); + return { + name: OS_MAP.iOS, + version, + }; + }, + }, + + /* macOS */ + { + test: [/macintosh/i], + describe(ua) { + const version = Utils.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, ua).replace(/[_\s]/g, '.'); + const versionName = Utils.getMacOSVersionName(version); + + const os = { + name: OS_MAP.MacOS, + version, + }; + if (versionName) { + os.versionName = versionName; + } + return os; + }, + }, + + /* iOS */ + { + test: [/(ipod|iphone|ipad)/i], + describe(ua) { + const version = Utils.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, ua).replace(/[_\s]/g, '.'); + + return { + name: OS_MAP.iOS, + version, + }; + }, + }, + + /* Android */ + { + test(parser) { + const notLikeAndroid = !parser.test(/like android/i); + const butAndroid = parser.test(/android/i); + return notLikeAndroid && butAndroid; + }, + describe(ua) { + const version = Utils.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, ua); + const versionName = Utils.getAndroidVersionName(version); + const os = { + name: OS_MAP.Android, + version, + }; + if (versionName) { + os.versionName = versionName; + } + return os; + }, + }, + + /* WebOS */ + { + test: [/(web|hpw)[o0]s/i], + describe(ua) { + const version = Utils.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, ua); + const os = { + name: OS_MAP.WebOS, + }; + + if (version && version.length) { + os.version = version; + } + return os; + }, + }, + + /* BlackBerry */ + { + test: [/blackberry|\bbb\d+/i, /rim\stablet/i], + describe(ua) { + const version = Utils.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, ua) + || Utils.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, ua) + || Utils.getFirstMatch(/\bbb(\d+)/i, ua); + + return { + name: OS_MAP.BlackBerry, + version, + }; + }, + }, + + /* Bada */ + { + test: [/bada/i], + describe(ua) { + const version = Utils.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, ua); + + return { + name: OS_MAP.Bada, + version, + }; + }, + }, + + /* Tizen */ + { + test: [/tizen/i], + describe(ua) { + const version = Utils.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, ua); + + return { + name: OS_MAP.Tizen, + version, + }; + }, + }, + + /* Linux */ + { + test: [/linux/i], + describe() { + return { + name: OS_MAP.Linux, + }; + }, + }, + + /* Chrome OS */ + { + test: [/CrOS/], + describe() { + return { + name: OS_MAP.ChromeOS, + }; + }, + }, + + /* Playstation 4 */ + { + test: [/PlayStation 4/], + describe(ua) { + const version = Utils.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, ua); + return { + name: OS_MAP.PlayStation4, + version, + }; + }, + }, +]; + +/* + * Tablets go first since usually they have more specific + * signs to detect. + */ + +var platformParsersList = [ + /* Googlebot */ + { + test: [/googlebot/i], + describe() { + return { + type: 'bot', + vendor: 'Google', + }; + }, + }, + + /* Huawei */ + { + test: [/huawei/i], + describe(ua) { + const model = Utils.getFirstMatch(/(can-l01)/i, ua) && 'Nova'; + const platform = { + type: PLATFORMS_MAP.mobile, + vendor: 'Huawei', + }; + if (model) { + platform.model = model; + } + return platform; + }, + }, + + /* Nexus Tablet */ + { + test: [/nexus\s*(?:7|8|9|10).*/i], + describe() { + return { + type: PLATFORMS_MAP.tablet, + vendor: 'Nexus', + }; + }, + }, + + /* iPad */ + { + test: [/ipad/i], + describe() { + return { + type: PLATFORMS_MAP.tablet, + vendor: 'Apple', + model: 'iPad', + }; + }, + }, + + /* Firefox on iPad */ + { + test: [/Macintosh(.*?) FxiOS(.*?) Version\//], + describe() { + return { + type: PLATFORMS_MAP.tablet, + vendor: 'Apple', + model: 'iPad', + }; + }, + }, + + /* Amazon Kindle Fire */ + { + test: [/kftt build/i], + describe() { + return { + type: PLATFORMS_MAP.tablet, + vendor: 'Amazon', + model: 'Kindle Fire HD 7', + }; + }, + }, + + /* Another Amazon Tablet with Silk */ + { + test: [/silk/i], + describe() { + return { + type: PLATFORMS_MAP.tablet, + vendor: 'Amazon', + }; + }, + }, + + /* Tablet */ + { + test: [/tablet(?! pc)/i], + describe() { + return { + type: PLATFORMS_MAP.tablet, + }; + }, + }, + + /* iPod/iPhone */ + { + test(parser) { + const iDevice = parser.test(/ipod|iphone/i); + const likeIDevice = parser.test(/like (ipod|iphone)/i); + return iDevice && !likeIDevice; + }, + describe(ua) { + const model = Utils.getFirstMatch(/(ipod|iphone)/i, ua); + return { + type: PLATFORMS_MAP.mobile, + vendor: 'Apple', + model, + }; + }, + }, + + /* Nexus Mobile */ + { + test: [/nexus\s*[0-6].*/i, /galaxy nexus/i], + describe() { + return { + type: PLATFORMS_MAP.mobile, + vendor: 'Nexus', + }; + }, + }, + + /* Mobile */ + { + test: [/[^-]mobi/i], + describe() { + return { + type: PLATFORMS_MAP.mobile, + }; + }, + }, + + /* BlackBerry */ + { + test(parser) { + return parser.getBrowserName(true) === 'blackberry'; + }, + describe() { + return { + type: PLATFORMS_MAP.mobile, + vendor: 'BlackBerry', + }; + }, + }, + + /* Bada */ + { + test(parser) { + return parser.getBrowserName(true) === 'bada'; + }, + describe() { + return { + type: PLATFORMS_MAP.mobile, + }; + }, + }, + + /* Windows Phone */ + { + test(parser) { + return parser.getBrowserName() === 'windows phone'; + }, + describe() { + return { + type: PLATFORMS_MAP.mobile, + vendor: 'Microsoft', + }; + }, + }, + + /* Android Tablet */ + { + test(parser) { + const osMajorVersion = Number(String(parser.getOSVersion()).split('.')[0]); + return parser.getOSName(true) === 'android' && (osMajorVersion >= 3); + }, + describe() { + return { + type: PLATFORMS_MAP.tablet, + }; + }, + }, + + /* Android Mobile */ + { + test(parser) { + return parser.getOSName(true) === 'android'; + }, + describe() { + return { + type: PLATFORMS_MAP.mobile, + }; + }, + }, + + /* desktop */ + { + test(parser) { + return parser.getOSName(true) === 'macos'; + }, + describe() { + return { + type: PLATFORMS_MAP.desktop, + vendor: 'Apple', + }; + }, + }, + + /* Windows */ + { + test(parser) { + return parser.getOSName(true) === 'windows'; + }, + describe() { + return { + type: PLATFORMS_MAP.desktop, + }; + }, + }, + + /* Linux */ + { + test(parser) { + return parser.getOSName(true) === 'linux'; + }, + describe() { + return { + type: PLATFORMS_MAP.desktop, + }; + }, + }, + + /* PlayStation 4 */ + { + test(parser) { + return parser.getOSName(true) === 'playstation 4'; + }, + describe() { + return { + type: PLATFORMS_MAP.tv, + }; + }, + }, + + /* Roku */ + { + test(parser) { + return parser.getOSName(true) === 'roku'; + }, + describe() { + return { + type: PLATFORMS_MAP.tv, + }; + }, + }, +]; + +/* + * More specific goes first + */ +var enginesParsersList = [ + /* EdgeHTML */ + { + test(parser) { + return parser.getBrowserName(true) === 'microsoft edge'; + }, + describe(ua) { + const isBlinkBased = /\sedg\//i.test(ua); + + // return blink if it's blink-based one + if (isBlinkBased) { + return { + name: ENGINE_MAP.Blink, + }; + } + + // otherwise match the version and return EdgeHTML + const version = Utils.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, ua); + + return { + name: ENGINE_MAP.EdgeHTML, + version, + }; + }, + }, + + /* Trident */ + { + test: [/trident/i], + describe(ua) { + const engine = { + name: ENGINE_MAP.Trident, + }; + + const version = Utils.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + engine.version = version; + } + + return engine; + }, + }, + + /* Presto */ + { + test(parser) { + return parser.test(/presto/i); + }, + describe(ua) { + const engine = { + name: ENGINE_MAP.Presto, + }; + + const version = Utils.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + engine.version = version; + } + + return engine; + }, + }, + + /* Gecko */ + { + test(parser) { + const isGecko = parser.test(/gecko/i); + const likeGecko = parser.test(/like gecko/i); + return isGecko && !likeGecko; + }, + describe(ua) { + const engine = { + name: ENGINE_MAP.Gecko, + }; + + const version = Utils.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + engine.version = version; + } + + return engine; + }, + }, + + /* Blink */ + { + test: [/(apple)?webkit\/537\.36/i], + describe() { + return { + name: ENGINE_MAP.Blink, + }; + }, + }, + + /* WebKit */ + { + test: [/(apple)?webkit/i], + describe(ua) { + const engine = { + name: ENGINE_MAP.WebKit, + }; + + const version = Utils.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + engine.version = version; + } + + return engine; + }, + }, +]; + +/** + * The main class that arranges the whole parsing process. + */ +class Parser { + /** + * Create instance of Parser + * + * @param {String} UA User-Agent string + * @param {Boolean} [skipParsing=false] parser can skip parsing in purpose of performance + * improvements if you need to make a more particular parsing + * like {@link Parser#parseBrowser} or {@link Parser#parsePlatform} + * + * @throw {Error} in case of empty UA String + * + * @constructor + */ + constructor(UA, skipParsing = false) { + if (UA === void (0) || UA === null || UA === '') { + throw new Error("UserAgent parameter can't be empty"); + } + + this._ua = UA; + + /** + * @typedef ParsedResult + * @property {Object} browser + * @property {String|undefined} [browser.name] + * Browser name, like `"Chrome"` or `"Internet Explorer"` + * @property {String|undefined} [browser.version] Browser version as a String `"12.01.45334.10"` + * @property {Object} os + * @property {String|undefined} [os.name] OS name, like `"Windows"` or `"macOS"` + * @property {String|undefined} [os.version] OS version, like `"NT 5.1"` or `"10.11.1"` + * @property {String|undefined} [os.versionName] OS name, like `"XP"` or `"High Sierra"` + * @property {Object} platform + * @property {String|undefined} [platform.type] + * platform type, can be either `"desktop"`, `"tablet"` or `"mobile"` + * @property {String|undefined} [platform.vendor] Vendor of the device, + * like `"Apple"` or `"Samsung"` + * @property {String|undefined} [platform.model] Device model, + * like `"iPhone"` or `"Kindle Fire HD 7"` + * @property {Object} engine + * @property {String|undefined} [engine.name] + * Can be any of this: `WebKit`, `Blink`, `Gecko`, `Trident`, `Presto`, `EdgeHTML` + * @property {String|undefined} [engine.version] String version of the engine + */ + this.parsedResult = {}; + + if (skipParsing !== true) { + this.parse(); + } + } + + /** + * Get UserAgent string of current Parser instance + * @return {String} User-Agent String of the current object + * + * @public + */ + getUA() { + return this._ua; + } + + /** + * Test a UA string for a regexp + * @param {RegExp} regex + * @return {Boolean} + */ + test(regex) { + return regex.test(this._ua); + } + + /** + * Get parsed browser object + * @return {Object} + */ + parseBrowser() { + this.parsedResult.browser = {}; + + const browserDescriptor = Utils.find(browsersList, (_browser) => { + if (typeof _browser.test === 'function') { + return _browser.test(this); + } + + if (_browser.test instanceof Array) { + return _browser.test.some(condition => this.test(condition)); + } + + throw new Error("Browser's test function is not valid"); + }); + + if (browserDescriptor) { + this.parsedResult.browser = browserDescriptor.describe(this.getUA()); + } + + return this.parsedResult.browser; + } + + /** + * Get parsed browser object + * @return {Object} + * + * @public + */ + getBrowser() { + if (this.parsedResult.browser) { + return this.parsedResult.browser; + } + + return this.parseBrowser(); + } + + /** + * Get browser's name + * @return {String} Browser's name or an empty string + * + * @public + */ + getBrowserName(toLowerCase) { + if (toLowerCase) { + return String(this.getBrowser().name).toLowerCase() || ''; + } + return this.getBrowser().name || ''; + } + + + /** + * Get browser's version + * @return {String} version of browser + * + * @public + */ + getBrowserVersion() { + return this.getBrowser().version; + } + + /** + * Get OS + * @return {Object} + * + * @example + * this.getOS(); + * { + * name: 'macOS', + * version: '10.11.12' + * } + */ + getOS() { + if (this.parsedResult.os) { + return this.parsedResult.os; + } + + return this.parseOS(); + } + + /** + * Parse OS and save it to this.parsedResult.os + * @return {*|{}} + */ + parseOS() { + this.parsedResult.os = {}; + + const os = Utils.find(osParsersList, (_os) => { + if (typeof _os.test === 'function') { + return _os.test(this); + } + + if (_os.test instanceof Array) { + return _os.test.some(condition => this.test(condition)); + } + + throw new Error("Browser's test function is not valid"); + }); + + if (os) { + this.parsedResult.os = os.describe(this.getUA()); + } + + return this.parsedResult.os; + } + + /** + * Get OS name + * @param {Boolean} [toLowerCase] return lower-cased value + * @return {String} name of the OS — macOS, Windows, Linux, etc. + */ + getOSName(toLowerCase) { + const { name } = this.getOS(); + + if (toLowerCase) { + return String(name).toLowerCase() || ''; + } + + return name || ''; + } + + /** + * Get OS version + * @return {String} full version with dots ('10.11.12', '5.6', etc) + */ + getOSVersion() { + return this.getOS().version; + } + + /** + * Get parsed platform + * @return {{}} + */ + getPlatform() { + if (this.parsedResult.platform) { + return this.parsedResult.platform; + } + + return this.parsePlatform(); + } + + /** + * Get platform name + * @param {Boolean} [toLowerCase=false] + * @return {*} + */ + getPlatformType(toLowerCase = false) { + const { type } = this.getPlatform(); + + if (toLowerCase) { + return String(type).toLowerCase() || ''; + } + + return type || ''; + } + + /** + * Get parsed platform + * @return {{}} + */ + parsePlatform() { + this.parsedResult.platform = {}; + + const platform = Utils.find(platformParsersList, (_platform) => { + if (typeof _platform.test === 'function') { + return _platform.test(this); + } + + if (_platform.test instanceof Array) { + return _platform.test.some(condition => this.test(condition)); + } + + throw new Error("Browser's test function is not valid"); + }); + + if (platform) { + this.parsedResult.platform = platform.describe(this.getUA()); + } + + return this.parsedResult.platform; + } + + /** + * Get parsed engine + * @return {{}} + */ + getEngine() { + if (this.parsedResult.engine) { + return this.parsedResult.engine; + } + + return this.parseEngine(); + } + + /** + * Get engines's name + * @return {String} Engines's name or an empty string + * + * @public + */ + getEngineName(toLowerCase) { + if (toLowerCase) { + return String(this.getEngine().name).toLowerCase() || ''; + } + return this.getEngine().name || ''; + } + + /** + * Get parsed platform + * @return {{}} + */ + parseEngine() { + this.parsedResult.engine = {}; + + const engine = Utils.find(enginesParsersList, (_engine) => { + if (typeof _engine.test === 'function') { + return _engine.test(this); + } + + if (_engine.test instanceof Array) { + return _engine.test.some(condition => this.test(condition)); + } + + throw new Error("Browser's test function is not valid"); + }); + + if (engine) { + this.parsedResult.engine = engine.describe(this.getUA()); + } + + return this.parsedResult.engine; + } + + /** + * Parse full information about the browser + */ + parse() { + this.parseBrowser(); + this.parseOS(); + this.parsePlatform(); + this.parseEngine(); + + return this; + } + + /** + * Get parsed result + * @return {ParsedResult} + */ + getResult() { + return Utils.assign({}, this.parsedResult); + } + + /** + * Check if parsed browser matches certain conditions + * + * @param {Object} checkTree It's one or two layered object, + * which can include a platform or an OS on the first layer + * and should have browsers specs on the bottom-laying layer + * + * @returns {Boolean|undefined} Whether the browser satisfies the set conditions or not. + * Returns `undefined` when the browser is no described in the checkTree object. + * + * @example + * const browser = Bowser.getParser(window.navigator.userAgent); + * if (browser.satisfies({chrome: '>118.01.1322' })) + * // or with os + * if (browser.satisfies({windows: { chrome: '>118.01.1322' } })) + * // or with platforms + * if (browser.satisfies({desktop: { chrome: '>118.01.1322' } })) + */ + satisfies(checkTree) { + const platformsAndOSes = {}; + let platformsAndOSCounter = 0; + const browsers = {}; + let browsersCounter = 0; + + const allDefinitions = Object.keys(checkTree); + + allDefinitions.forEach((key) => { + const currentDefinition = checkTree[key]; + if (typeof currentDefinition === 'string') { + browsers[key] = currentDefinition; + browsersCounter += 1; + } else if (typeof currentDefinition === 'object') { + platformsAndOSes[key] = currentDefinition; + platformsAndOSCounter += 1; + } + }); + + if (platformsAndOSCounter > 0) { + const platformsAndOSNames = Object.keys(platformsAndOSes); + const OSMatchingDefinition = Utils.find(platformsAndOSNames, name => (this.isOS(name))); + + if (OSMatchingDefinition) { + const osResult = this.satisfies(platformsAndOSes[OSMatchingDefinition]); + + if (osResult !== void 0) { + return osResult; + } + } + + const platformMatchingDefinition = Utils.find( + platformsAndOSNames, + name => (this.isPlatform(name)), + ); + if (platformMatchingDefinition) { + const platformResult = this.satisfies(platformsAndOSes[platformMatchingDefinition]); + + if (platformResult !== void 0) { + return platformResult; + } + } + } + + if (browsersCounter > 0) { + const browserNames = Object.keys(browsers); + const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true))); + + if (matchingDefinition !== void 0) { + return this.compareVersion(browsers[matchingDefinition]); + } + } + + return undefined; + } + + /** + * Check if the browser name equals the passed string + * @param browserName The string to compare with the browser name + * @param [includingAlias=false] The flag showing whether alias will be included into comparison + * @returns {boolean} + */ + isBrowser(browserName, includingAlias = false) { + const defaultBrowserName = this.getBrowserName().toLowerCase(); + let browserNameLower = browserName.toLowerCase(); + const alias = Utils.getBrowserTypeByAlias(browserNameLower); + + if (includingAlias && alias) { + browserNameLower = alias.toLowerCase(); + } + return browserNameLower === defaultBrowserName; + } + + compareVersion(version) { + let expectedResults = [0]; + let comparableVersion = version; + let isLoose = false; + + const currentBrowserVersion = this.getBrowserVersion(); + + if (typeof currentBrowserVersion !== 'string') { + return void 0; + } + + if (version[0] === '>' || version[0] === '<') { + comparableVersion = version.substr(1); + if (version[1] === '=') { + isLoose = true; + comparableVersion = version.substr(2); + } else { + expectedResults = []; + } + if (version[0] === '>') { + expectedResults.push(1); + } else { + expectedResults.push(-1); + } + } else if (version[0] === '=') { + comparableVersion = version.substr(1); + } else if (version[0] === '~') { + isLoose = true; + comparableVersion = version.substr(1); + } + + return expectedResults.indexOf( + Utils.compareVersions(currentBrowserVersion, comparableVersion, isLoose), + ) > -1; + } + + isOS(osName) { + return this.getOSName(true) === String(osName).toLowerCase(); + } + + isPlatform(platformType) { + return this.getPlatformType(true) === String(platformType).toLowerCase(); + } + + isEngine(engineName) { + return this.getEngineName(true) === String(engineName).toLowerCase(); + } + + /** + * Is anything? Check if the browser is called "anything", + * the OS called "anything" or the platform called "anything" + * @param {String} anything + * @returns {Boolean} + */ + is(anything) { + return this.isBrowser(anything) || this.isOS(anything) || this.isPlatform(anything); + } + + /** + * Check if any of the given values satisfies this.is(anything) + * @param {String[]} anythings + * @returns {Boolean} + */ + some(anythings = []) { + return anythings.some(anything => this.is(anything)); + } +} + +/*! + * Bowser - a browser detector + * https://github.com/lancedikson/bowser + * MIT License | (c) Dustin Diaz 2012-2015 + * MIT License | (c) Denis Demchenko 2015-2019 + */ + +/** + * Bowser class. + * Keep it simple as much as it can be. + * It's supposed to work with collections of {@link Parser} instances + * rather then solve one-instance problems. + * All the one-instance stuff is located in Parser class. + * + * @class + * @classdesc Bowser is a static object, that provides an API to the Parsers + * @hideconstructor + */ +class Bowser { + /** + * Creates a {@link Parser} instance + * + * @param {String} UA UserAgent string + * @param {Boolean} [skipParsing=false] Will make the Parser postpone parsing until you ask it + * explicitly. Same as `skipParsing` for {@link Parser}. + * @returns {Parser} + * @throws {Error} when UA is not a String + * + * @example + * const parser = Bowser.getParser(window.navigator.userAgent); + * const result = parser.getResult(); + */ + static getParser(UA, skipParsing = false) { + if (typeof UA !== 'string') { + throw new Error('UserAgent should be a string'); + } + return new Parser(UA, skipParsing); + } + + /** + * Creates a {@link Parser} instance and runs {@link Parser.getResult} immediately + * + * @param UA + * @return {ParsedResult} + * + * @example + * const result = Bowser.parse(window.navigator.userAgent); + */ + static parse(UA) { + return (new Parser(UA)).getResult(); + } + + static get BROWSER_MAP() { + return BROWSER_MAP; + } + + static get ENGINE_MAP() { + return ENGINE_MAP; + } + + static get OS_MAP() { + return OS_MAP; + } + + static get PLATFORMS_MAP() { + return PLATFORMS_MAP; + } +} + +// +// external - exported from module.js +// +// meeting states +var DAILY_STATE_NEW = 'new'; +var DAILY_STATE_LOADING = 'loading'; +var DAILY_STATE_LOADED = 'loaded'; +var DAILY_STATE_JOINING = 'joining-meeting'; +var DAILY_STATE_JOINED = 'joined-meeting'; +var DAILY_STATE_LEFT = 'left-meeting'; +var DAILY_STATE_ERROR = 'error'; // track states + +var DAILY_TRACK_STATE_BLOCKED = 'blocked'; +var DAILY_TRACK_STATE_OFF = 'off'; +var DAILY_TRACK_STATE_SENDABLE = 'sendable'; +var DAILY_TRACK_STATE_LOADING = 'loading'; +var DAILY_TRACK_STATE_INTERRUPTED = 'interrupted'; +var DAILY_TRACK_STATE_PLAYABLE = 'playable'; // meeting access + +var DAILY_ACCESS_UNKNOWN = 'unknown'; +var DAILY_ACCESS_LEVEL_FULL = 'full'; +var DAILY_ACCESS_LEVEL_LOBBY = 'lobby'; +var DAILY_ACCESS_LEVEL_NONE = 'none'; // receive settings + +var DAILY_RECEIVE_SETTINGS_BASE_KEY = 'base'; +var DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY = '*'; // error types + +var DAILY_FATAL_ERROR_EJECTED = 'ejected'; +var DAILY_FATAL_ERROR_NBF_ROOM = 'nbf-room'; +var DAILY_FATAL_ERROR_NBF_TOKEN = 'nbf-token'; +var DAILY_FATAL_ERROR_EXP_ROOM = 'exp-room'; +var DAILY_FATAL_ERROR_EXP_TOKEN = 'exp-token'; +var DAILY_FATAL_ERROR_MEETING_FULL = 'meeting-full'; +var DAILY_CAMERA_ERROR_CAM_IN_USE = 'cam-in-use'; +var DAILY_CAMERA_ERROR_MIC_IN_USE = 'mic-in-use'; +var DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE = 'cam-mic-in-use'; +var DAILY_CAMERA_ERROR_PERMISSIONS = 'permissions'; +var DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES = 'undefined-mediadevices'; +var DAILY_CAMERA_ERROR_NOT_FOUND = 'not-found'; +var DAILY_CAMERA_ERROR_CONSTRAINTS = 'constraints'; +var DAILY_CAMERA_ERROR_UNKNOWN = 'unknown'; // events + +var DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG = 'iframe-ready-for-launch-config'; +var DAILY_EVENT_IFRAME_LAUNCH_CONFIG = 'iframe-launch-config'; +var DAILY_EVENT_THEME_UPDATED = 'theme-updated'; +var DAILY_EVENT_LOADING = 'loading'; +var DAILY_EVENT_LOAD_ATTEMPT_FAILED = 'load-attempt-failed'; +var DAILY_EVENT_LOADED = 'loaded'; +var DAILY_EVENT_STARTED_CAMERA = 'started-camera'; +var DAILY_EVENT_CAMERA_ERROR = 'camera-error'; +var DAILY_EVENT_JOINING_MEETING = 'joining-meeting'; +var DAILY_EVENT_JOINED_MEETING = 'joined-meeting'; +var DAILY_EVENT_LEFT_MEETING = 'left-meeting'; +var DAILY_EVENT_AVAILABLE_DEVICES_UPDATED = 'available-devices-updated'; +var DAILY_EVENT_SELECTED_DEVICES_UPDATED = 'selected-devices-updated'; +var DAILY_EVENT_PARTICIPANT_JOINED = 'participant-joined'; +var DAILY_EVENT_PARTICIPANT_UPDATED = 'participant-updated'; +var DAILY_EVENT_PARTICIPANT_LEFT = 'participant-left'; +var DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED = 'participant-counts-updated'; +var DAILY_EVENT_ACCESS_STATE_UPDATED = 'access-state-updated'; +var DAILY_EVENT_MEETING_SESSION_UPDATED = 'meeting-session-updated'; +var DAILY_EVENT_MEETING_SESSION_STATE_UPDATED = 'meeting-session-state-updated'; +var DAILY_EVENT_MEETING_SESSION_DATA_ERROR = 'meeting-session-data-error'; +var DAILY_EVENT_WAITING_PARTICIPANT_ADDED = 'waiting-participant-added'; +var DAILY_EVENT_WAITING_PARTICIPANT_UPDATED = 'waiting-participant-updated'; +var DAILY_EVENT_WAITING_PARTICIPANT_REMOVED = 'waiting-participant-removed'; +var DAILY_EVENT_TRACK_STARTED = 'track-started'; +var DAILY_EVENT_TRACK_STOPPED = 'track-stopped'; +var DAILY_EVENT_TRANSCRIPTION_STARTED = 'transcription-started'; +var DAILY_EVENT_TRANSCRIPTION_STOPPED = 'transcription-stopped'; +var DAILY_EVENT_TRANSCRIPTION_ERROR = 'transcription-error'; +var DAILY_EVENT_RECORDING_STARTED = 'recording-started'; +var DAILY_EVENT_RECORDING_STOPPED = 'recording-stopped'; +var DAILY_EVENT_RECORDING_STATS = 'recording-stats'; +var DAILY_EVENT_RECORDING_ERROR = 'recording-error'; +var DAILY_EVENT_RECORDING_UPLOAD_COMPLETED = 'recording-upload-completed'; +var DAILY_EVENT_RECORDING_DATA = 'recording-data'; +var DAILY_EVENT_APP_MSG = 'app-message'; +var DAILY_EVENT_INPUT_EVENT = 'input-event'; +var DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED = 'remote-media-player-started'; +var DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED = 'remote-media-player-updated'; +var DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED = 'remote-media-player-stopped'; +var DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED = 'local-screen-share-started'; +var DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED = 'local-screen-share-stopped'; +var DAILY_EVENT_ACTIVE_SPEAKER_CHANGE = 'active-speaker-change'; +var DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE = 'active-speaker-mode-change'; +var DAILY_EVENT_NETWORK_QUALITY_CHANGE = 'network-quality-change'; +var DAILY_EVENT_NETWORK_CONNECTION = 'network-connection'; +var DAILY_EVENT_FULLSCREEN = 'fullscreen'; +var DAILY_EVENT_EXIT_FULLSCREEN = 'exited-fullscreen'; +var DAILY_EVENT_LIVE_STREAMING_STARTED = 'live-streaming-started'; +var DAILY_EVENT_LIVE_STREAMING_STOPPED = 'live-streaming-stopped'; +var DAILY_EVENT_LIVE_STREAMING_ERROR = 'live-streaming-error'; +var DAILY_EVENT_LANG_UPDATED = 'lang-updated'; +var DAILY_EVENT_SHOW_LOCAL_VIDEO_CHANGED = 'show-local-video-changed'; +var DAILY_EVENT_RECEIVE_SETTINGS_UPDATED = 'receive-settings-updated'; +var DAILY_EVENT_INPUT_SETTINGS_UPDATED = 'input-settings-updated'; +var DAILY_EVENT_NONFATAL_ERROR = 'nonfatal-error'; +var DAILY_EVENT_ERROR = 'error'; +var DAILY_EVENT_CUSTOM_BUTTON_CLICK = 'custom-button-click'; // +// internal +// + +var MAX_APP_MSG_SIZE = 1024 * 4; +var MAX_SESSION_DATA_SIZE = 1024 * 4 * 25; +var MAX_USER_DATA_SIZE = 1024 * 4; +var IFRAME_MESSAGE_MARKER = 'iframe-call-message'; +var DAILY_METHOD_UPDATE_CUSTOM_INTEGRATIONS = 'update-custom-integrations'; +var DAILY_METHOD_UPDATE_CUSTOM_TRAY_BUTTONS = 'update-custom-tray-buttons'; +var DAILY_METHOD_SET_THEME = 'set-theme'; +var DAILY_METHOD_START_CAMERA = 'start-camera'; +var DAILY_METHOD_SET_INPUT_DEVICES = 'set-input-devices'; +var DAILY_METHOD_SET_OUTPUT_DEVICE = 'set-output-device'; +var DAILY_METHOD_GET_INPUT_DEVICES = 'get-input-devices'; +var DAILY_METHOD_JOIN = 'join-meeting'; +var DAILY_METHOD_LEAVE = 'leave-meeting'; +var DAILY_METHOD_UPDATE_PARTICIPANT = 'update-participant'; +var DAILY_METHOD_UPDATE_PARTICIPANTS = 'update-participants'; +var DAILY_METHOD_LOCAL_AUDIO = 'local-audio'; +var DAILY_METHOD_LOCAL_VIDEO = 'local-video'; +var DAILY_METHOD_START_SCREENSHARE = 'local-screen-start'; +var DAILY_METHOD_STOP_SCREENSHARE = 'local-screen-stop'; +var DAILY_METHOD_START_RECORDING = 'local-recording-start'; +var DAILY_METHOD_UPDATE_RECORDING = 'daily-method-update-recording'; +var DAILY_METHOD_STOP_RECORDING = 'local-recording-stop'; +var DAILY_METHOD_LOAD_CSS = 'load-css'; +var DAILY_METHOD_SET_BANDWIDTH = 'set-bandwidth'; +var DAILY_METHOD_GET_CALC_STATS = 'get-calc-stats'; +var DAILY_METHOD_ENUMERATE_DEVICES = 'enumerate-devices'; +var DAILY_METHOD_CYCLE_CAMERA = 'cycle-camera'; +var DAILY_METHOD_SET_CAMERA = 'set-camera'; +var DAILY_METHOD_START_CUSTOM_TRACK = 'start-custom-track'; +var DAILY_METHOD_STOP_CUSTOM_TRACK = 'stop-custom-track'; +var DAILY_METHOD_CYCLE_MIC = 'cycle-mic'; +var DAILY_METHOD_GET_CAMERA_FACING_MODE = 'get-camera-facing-mode'; +var DAILY_METHOD_APP_MSG = 'app-msg'; +var DAILY_METHOD_ADD_FAKE_PARTICIPANT = 'add-fake-participant'; +var DAILY_METHOD_SET_SHOW_NAMES = 'set-show-names'; +var DAILY_METHOD_SET_SHOW_LOCAL_VIDEO = 'set-show-local-video'; +var DAILY_METHOD_SET_SHOW_PARTICIPANTS_BAR = 'set-show-participants-bar'; +var DAILY_METHOD_SET_ACTIVE_SPEAKER_MODE = 'set-active-speaker-mode'; +var DAILY_METHOD_REGISTER_INPUT_HANDLER = 'register-input-handler'; +var DAILY_METHOD_GET_LANG = 'get-daily-lang'; +var DAILY_METHOD_SET_LANG = 'set-daily-lang'; +var DAILY_METHOD_GET_MEETING_SESSION = 'get-meeting-session'; +var DAILY_METHOD_SET_SESSION_DATA = 'set-session-data'; +var DAILY_METHOD_SET_USER_NAME = 'set-user-name'; +var DAILY_METHOD_SET_USER_DATA = 'set-user-data'; +var DAILY_METHOD_DETECT_ALL_FACES = 'detect-all-faces'; +var DAILY_METHOD_ROOM = 'lib-room-info'; +var DAILY_METHOD_GET_NETWORK_TOPOLOGY = 'get-network-topology'; +var DAILY_METHOD_SET_NETWORK_TOPOLOGY = 'set-network-topology'; +var DAILY_METHOD_SET_PLAY_DING = 'daily-method-set-play-ding'; +var DAILY_METHOD_SET_SUBSCRIBE_TO_TRACKS_AUTOMATICALLY = 'daily-method-subscribe-to-tracks-automatically'; +var DAILY_METHOD_START_LIVE_STREAMING = 'daily-method-start-live-streaming'; +var DAILY_METHOD_UPDATE_LIVE_STREAMING = 'daily-method-update-live-streaming'; +var DAILY_METHOD_UPDATE_LIVE_STREAMING_ENDPOINTS = 'daily-method-update-live-streaming-endpoints'; +var DAILY_METHOD_STOP_LIVE_STREAMING = 'daily-method-stop-live-streaming'; +var DAILY_METHOD_START_REMOTE_MEDIA_PLAYER = 'daily-method-start-remote-media-player'; +var DAILY_METHOD_STOP_REMOTE_MEDIA_PLAYER = 'daily-method-stop-remote-media-player'; +var DAILY_METHOD_UPDATE_REMOTE_MEDIA_PLAYER = 'daily-method-update-remote-media-player'; +var DAILY_METHOD_START_TRANSCRIPTION = 'daily-method-start-transcription'; +var DAILY_METHOD_STOP_TRANSCRIPTION = 'daily-method-stop-transcription'; +var DAILY_METHOD_PREAUTH = 'daily-method-preauth'; +var DAILY_METHOD_REQUEST_ACCESS = 'daily-method-request-access'; +var DAILY_METHOD_UPDATE_WAITING_PARTICIPANT = 'daily-method-update-waiting-participant'; +var DAILY_METHOD_UPDATE_WAITING_PARTICIPANTS = 'daily-method-update-waiting-participants'; +var DAILY_METHOD_GET_SINGLE_PARTICIPANT_RECEIVE_SETTINGS = 'get-single-participant-receive-settings'; +var DAILY_METHOD_UPDATE_RECEIVE_SETTINGS = 'update-receive-settings'; +var DAILY_METHOD_UPDATE_INPUT_SETTINGS = 'update-input-settings'; +var DAILY_CUSTOM_TRACK = 'daily-custom-track'; +var DAILY_UI_REQUEST_FULLSCREEN = 'request-fullscreen'; +var DAILY_UI_EXIT_FULLSCREEN = 'request-exit-fullscreen'; + +var DAILY_JS_VIDEO_PROCESSOR_TYPES = { + NONE: 'none', + BGBLUR: 'background-blur', + BGIMAGE: 'background-image' // CUSTOM: 'custom', + +}; +var DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING = { + PLAY: 'play', + PAUSE: 'pause' +}; +var DAILY_PRESELECTED_BG_IMAGE_URLS_LENGTH = 10; +var DAILY_SUPPORTED_BG_IMG_TYPES = ['jpg', 'png', 'jpeg']; +var UPDATE_LIVE_STREAMING_ENDPOINTS_OP = { + ADD_ENDPOINTS: 'add-endpoints', + REMOVE_ENDPOINTS: 'remove-endpoints' +}; + +// Note: Bowser is only used for OS detection, not Browser detection +// is not defined in React Native and results in an error. +// (Actually, if it *is* defined in React Native, it's not meant for us, but +// for our customer's code; that's why we don't just simply override it globally). + +function getUserAgent() { + if (!isReactNative() && typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) { + return window.navigator.userAgent; + } + + return ''; +} +function isReactNative() { + return typeof navigator !== 'undefined' && navigator.product && navigator.product === 'ReactNative'; +} +function isIOS() { + var userAgent = getUserAgent(); + return !!userAgent.match(/iPad|iPhone|iPod/i); +} // Only valid if cam/mic are accessible from browser + +function isUserMediaAccessible() { + return navigator && navigator.mediaDevices && navigator.mediaDevices.getUserMedia; +} // Returns whether we should allow screen sharing from this browser. +// +// Note: technically we *could* try to support screen sharing from any browser where +// isDisplayMediaAccessible() is true (PeerToPeer.js is mostly set up to do so). +// However, limiting screen sharing to only those that support the Unified Plan SDP +// format lets us simplify code paths on the receiving end of screen shares: in order +// to check whether to always expect a single inbound video track, we simply have to +// check whether we're a browser that only supports the older Plan B SDP format (see below). +// Additionally, limiting screen sharing this way reduces our test matrix. + +function isScreenSharingSupported() { + return isDisplayMediaAccessible() && canUnifiedPlan(); +} +function isFullscreenSupported() { + if (isReactNative()) return false; + if (!document) return false; + var iframe = document.createElement('iframe'); + return !!iframe.requestFullscreen || !!iframe.webkitRequestFullscreen; +} +var supportedBrowsersForVideoProcessors = ['Chrome', 'Firefox']; +function isVideoProcessingSupported() { + if (isReactNative()) return false; + if (browserMobile_p()) return false; + return supportedBrowsersForVideoProcessors.includes(getBrowserName()); +} +function canUnifiedPlan() { + return browserCanUnifiedPlan(getBrowserName(), getBrowserVersion()); +} +function browserCanUnifiedPlan(browserName, browserVersion) { + if (!(browserName && browserVersion)) { + return true; + } + + switch (browserName) { + case 'Chrome': + return browserVersion.major >= 75; + + case 'Safari': + // This is the check that Apple suggests in https://webkit.org/blog/8672/on-the-road-to-webrtc-1-0-including-vp8/, + // plus a workaround that was already in place here for a Safari 13.0.0 bug, forcing it into Plan B. + return RTCRtpTransceiver.prototype.hasOwnProperty('currentDirection') && !(browserVersion.major === 13 && browserVersion.minor === 0 && browserVersion.point === 0); + // Note: We now only support Firefox 80+ so this should always be true + + case 'Firefox': + return browserVersion.major >= 67; + } + + return true; +} +function browserVideoSupported_p() { + return isUserMediaAccessible() && !browserNeedsUpgrade(); +} +function isAndroidApp() { + return getUserAgent().match(/DailyAnd\//); +} +function browserMobile_p() { + var userAgent = getUserAgent(); + + if (userAgent.match(/Mobi/) || userAgent.match(/Android/)) { + return true; + } + + if (isAndroidApp()) { + return true; + } +} +function browserNeedsUpgrade() { + var browser = getBrowserName(), + ua = getUserAgent(), + version; + + if (!ua) { + return true; + } + + switch (browser) { + case 'Chrome': + // Includes Chromium-based browsers + version = getChromeVersion(); + return version.major && version.major > 0 && version.major < 61; + + case 'Firefox': + version = getFirefoxVersion(); + return version.major < 78; + + case 'Safari': + version = getSafariVersion(); + return version.major < 12; + + default: + return true; + } +} +function getBrowserName() { + if (typeof window !== 'undefined') { + var userAgent = getUserAgent(); // Treat supported WKWebView as Safari. Check for this first just in case + // 3rd-party browsers on iOS decide to customize their user agent strings to + // match the other conditions. + + if (isSupportedIOSEnvironment()) { + return 'Safari'; + } else if (userAgent.indexOf('Edge') > -1) { + // Note: check will (purposefully) fail for chromium-based Edge + // since the user-agent for chromium-based Edge reports `Edg` + // (or EdgA (android) or EdgiOS) + // Also note: getBrowserName is primarily used for internal + // logic, so this should go away eventually. However, it is used + // in the old prebuilt UI for some upgrade messaging so leaving + // it in until Edge or the old prebuilt is really no longer a thing + return 'Edge'; // } else if (userAgent.indexOf('OPR') > -1 || + // userAgent.indexOf('Opera') > -1) { + // return 'Opera'; + } else if (userAgent.match(/Chrome\//)) { + // Includes Chromium-based browsers + return 'Chrome'; + } else if (userAgent.indexOf('Safari') > -1) { + return 'Safari'; + } else if (userAgent.indexOf('Firefox') > -1) { + return 'Firefox'; + } else if (userAgent.indexOf('MSIE') > -1 || userAgent.indexOf('.NET') > -1) { + return 'IE'; + } else { + return 'Unknown Browser'; + } + } +} +function getBrowserVersion() { + var name = getBrowserName(); + + switch (name) { + case 'Chrome': + // Includes Chromium-based browsers + return getChromeVersion(); + + case 'Safari': + return getSafariVersion(); + + case 'Firefox': + return getFirefoxVersion(); + + case 'Edge': + return getEdgeVersion(); + } +} +function getChromeVersion() { + var major = 0, + minor = 0, + build = 0, + patch = 0, + opera = false; + + if (typeof window !== 'undefined') { + var userAgent = getUserAgent(), + match = userAgent.match(/Chrome\/(\d+).(\d+).(\d+).(\d+)/); + + if (match) { + try { + major = parseInt(match[1]); + minor = parseInt(match[2]); + build = parseInt(match[3]); + patch = parseInt(match[4]); + opera = userAgent.indexOf('OPR/') > -1; + } catch (e) {} + } + } + + return { + major: major, + minor: minor, + build: build, + patch: patch, + opera: opera + }; +} // Mobile Safari or WKWebView on iOS/iPadOS >= 14.3 + +function isSupportedIOSEnvironment() { + return isIOS() && isUserMediaAccessible(); +} + +function isDisplayMediaAccessible() { + return !!(navigator && navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia); +} + +function getSafariVersion() { + var major = 0, + minor = 0, + point = 0; + + if (typeof window !== 'undefined') { + var userAgent = getUserAgent(), + match = userAgent.match(/Version\/(\d+).(\d+)(.(\d+))?/); + + if (match) { + try { + major = parseInt(match[1]); + minor = parseInt(match[2]); + point = parseInt(match[4]); + } catch (e) {} + } else if (isSupportedIOSEnvironment()) { + // Hack: treat supported WKWebView like Safari 14.0.3 (no need to be + // precise; just needs to be new enough to appear supported, and this was + // the Safari version around the time WKWebView WebRTC support was added) + major = 14; + minor = 0; + point = 3; + } + } + + return { + major: major, + minor: minor, + point: point + }; +} + +function getFirefoxVersion() { + var major = 0, + minor = 0; + + if (typeof window !== 'undefined') { + var userAgent = getUserAgent(), + match = userAgent.match(/Firefox\/(\d+).(\d+)/); + + if (match) { + try { + major = parseInt(match[1]); + minor = parseInt(match[2]); + } catch (e) {} + } + } + + return { + major: major, + minor: minor + }; +} + +function getEdgeVersion() { + var major = 0, + minor = 0; + + if (typeof window !== 'undefined') { + var userAgent = getUserAgent(), + match = userAgent.match(/Edge\/(\d+).(\d+)/); + + if (match) { + try { + major = parseInt(match[1]); + minor = parseInt(match[2]); + } catch (e) {} + } + } + + return { + major: major, + minor: minor + }; +} + +function randomStringId() { + return Date.now() + Math.random().toString(); +} +function notImplementedError() { + throw new Error('Method must be implemented in subclass'); +} +function callObjectBundleUrl() { + // ADVANCED: if a custom bundle URL override is specified, use that. + if (window._dailyConfig && window._dailyConfig.callObjectBundleUrlOverride) { + return window._dailyConfig.callObjectBundleUrlOverride; + } // 1. Dev build of daily-js --> load bundle from "https://khk-local.wss.daily.co:8000/static/call-machine-object-bundle.js", which + // is either: + // - DEV_CALL_MACHINE_URL env variable (read at build time) + // - default local dev URL + // See webpack or rollup config for details. + // 2. Prod build of daily-js --> load bundle from version-specific prod URL. + + + return "https://khk-local.wss.daily.co:8000/static/call-machine-object-bundle.js" ; +} +function validateHttpUrl(string) { + try { + var url = new URL(string); + } catch (_) { + return false; + } + + return true; +} + +/** + * A two-way message channel between daily-js and the call machine (pluot-core). + */ + +var ScriptMessageChannel = /*#__PURE__*/function () { + function ScriptMessageChannel() { + classCallCheck(this, ScriptMessageChannel); + } + + createClass(ScriptMessageChannel, [{ + key: "addListenerForMessagesFromCallMachine", + + /** + * Adds a listener for messages from the call machine (pluot-core). + * For use by daily-js. + */ + value: function addListenerForMessagesFromCallMachine(listener, callFrameId, thisValue) { + notImplementedError(); + } + /** + * Adds a listener for messages from daily-js. + * For use by the call machine (pluot-core). + */ + + }, { + key: "addListenerForMessagesFromDailyJs", + value: function addListenerForMessagesFromDailyJs(listener, callFrameId, thisValue) { + notImplementedError(); + } + /** + * Send a message to the call machine (pluot-core). + * For use by daily-js. + */ + + }, { + key: "sendMessageToCallMachine", + value: function sendMessageToCallMachine(message, callback, iframe, callFrameId) { + notImplementedError(); + } + /** + * Send a message to daily-js. + * For use by the call machine (pluot-core). + */ + + }, { + key: "sendMessageToDailyJs", + value: function sendMessageToDailyJs(message, isCallObject, callFrameId) { + notImplementedError(); + } + /** + * Remove an added listener. + */ + + }, { + key: "removeListener", + value: function removeListener(listener) { + notImplementedError(); + } + }]); + + return ScriptMessageChannel; +}(); + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +/** + * A two-way message channel between daily-js and the call machine (pluot-core), + * when running in a web context (in a browser or Electron). + */ + +var WebMessageChannel = /*#__PURE__*/function (_ScriptMessageChannel) { + inherits(WebMessageChannel, _ScriptMessageChannel); + + var _super = _createSuper(WebMessageChannel); + + function WebMessageChannel() { + var _this; + + classCallCheck(this, WebMessageChannel); + + _this = _super.call(this); + _this._wrappedListeners = {}; // Mapping between listeners and wrapped listeners + + _this._messageCallbacks = {}; + return _this; + } + + createClass(WebMessageChannel, [{ + key: "addListenerForMessagesFromCallMachine", + value: function addListenerForMessagesFromCallMachine(listener, callFrameId, thisValue) { + var _this2 = this; + + var wrappedListener = function wrappedListener(evt) { + if (evt.data && evt.data.what === 'iframe-call-message' && ( // make callFrameId addressing backwards-compatible with + // old versions of the library, which didn't have it + evt.data.callFrameId ? evt.data.callFrameId === callFrameId : true) && (evt.data.from ? evt.data.from !== 'module' : true)) { + var msg = _objectSpread({}, evt.data); // console.log('[WebMessageChannel] received call machine message', msg); + + + delete msg.from; // messages could be completely handled by callbacks + + if (msg.callbackStamp && _this2._messageCallbacks[msg.callbackStamp]) { + // console.log('[WebMessageChannel] handling message as callback', msg); + var callbackStamp = msg.callbackStamp; // Storing here since the callback could delete msg.callbackStamp + + _this2._messageCallbacks[callbackStamp].call(thisValue, msg); + + delete _this2._messageCallbacks[callbackStamp]; + } // or perhaps we should handle this message based on its + // msg.action tag. first we'll delete internal fields so the + // listener function has the option of just emitting the raw + // message as an event + + + delete msg.what; + delete msg.callbackStamp; + listener.call(thisValue, msg); + } + }; + + this._wrappedListeners[listener] = wrappedListener; + window.addEventListener('message', wrappedListener); + } + }, { + key: "addListenerForMessagesFromDailyJs", + value: function addListenerForMessagesFromDailyJs(listener, callFrameId, thisValue) { + var wrappedListener = function wrappedListener(evt) { + if (!(evt.data && evt.data.what === IFRAME_MESSAGE_MARKER && evt.data.action && (!evt.data.from || evt.data.from === 'module') && (evt.data.callFrameId && callFrameId ? evt.data.callFrameId === callFrameId : true))) { + return; + } + + var msg = evt.data; // console.log('[WebMessageChannel] received daily-js message', msg); + + listener.call(thisValue, msg); + }; + + this._wrappedListeners[listener] = wrappedListener; + window.addEventListener('message', wrappedListener); + } + }, { + key: "sendMessageToCallMachine", + value: function sendMessageToCallMachine(message, callback, iframe, callFrameId) { + var msg = _objectSpread({}, message); + + msg.what = IFRAME_MESSAGE_MARKER; + msg.from = 'module'; + msg.callFrameId = callFrameId; + + if (callback) { + var stamp = randomStringId(); + this._messageCallbacks[stamp] = callback; + msg.callbackStamp = stamp; + } + + var w = iframe ? iframe.contentWindow : window; // console.log('[WebMessageChannel] sending message to call machine', msg); + + w.postMessage(msg, '*'); + } + }, { + key: "sendMessageToDailyJs", + value: function sendMessageToDailyJs(message, isCallObject, callFrameId) { + message.what = IFRAME_MESSAGE_MARKER; + message.callFrameId = callFrameId; + message.from = 'embedded'; + var w = isCallObject ? window : window.parent; // console.log('[WebMessageChannel] sending message to daily-js', message); + + w.postMessage(message, '*'); + } + }, { + key: "removeListener", + value: function removeListener(listener) { + var wrappedListener = this._wrappedListeners[listener]; + + if (wrappedListener) { + window.removeEventListener('message', wrappedListener); + delete this._wrappedListeners[listener]; + } + } // Expects msg to already be packaged with all internal metadata fields + // (what, from, callFrameId, etc.) + + }, { + key: "forwardPackagedMessageToCallMachine", + value: function forwardPackagedMessageToCallMachine(msg, iframe, newCallFrameId) { + var newMsg = _objectSpread({}, msg); + + newMsg.callFrameId = newCallFrameId; + var w = iframe ? iframe.contentWindow : window; // console.log( + // '[WebMessageChannel] forwarding packaged message to call machine', + // msg + // ); + + w.postMessage(newMsg, '*'); + } // Listener will be given packaged message with all internal metadata fields + // (what, from, callFrameId, etc.) + + }, { + key: "addListenerForPackagedMessagesFromCallMachine", + value: function addListenerForPackagedMessagesFromCallMachine(listener, callFrameId) { + var wrappedListener = function wrappedListener(evt) { + // console.log( + // '[WebMessageChannel] received packaged call machine message', + // msg + // ); + if (evt.data && evt.data.what === 'iframe-call-message' && ( // make callFrameId addressing backwards-compatible with + // old versions of the library, which didn't have it + evt.data.callFrameId ? evt.data.callFrameId === callFrameId : true) && (evt.data.from ? evt.data.from !== 'module' : true)) { + var msg = evt.data; + listener(msg); + } + }; // For now we're still using the listener itself as the key, like in the + // other addListener* methods. We should probably change this everywhere to + // use a proper unique id. + + + this._wrappedListeners[listener] = wrappedListener; + window.addEventListener('message', wrappedListener); + return listener; + } + }, { + key: "removeListenerForPackagedMessagesFromCallMachine", + value: function removeListenerForPackagedMessagesFromCallMachine(listenerId) { + var wrappedListener = this._wrappedListeners[listenerId]; + + if (wrappedListener) { + window.removeEventListener('message', wrappedListener); + delete this._wrappedListeners[listenerId]; + } + } + }]); + + return WebMessageChannel; +}(ScriptMessageChannel); + +function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +/** + * A two-way message channel between daily-js and the call machine (pluot-core), + * when running in a React Native context. + */ + +var ReactNativeMessageChannel = /*#__PURE__*/function (_ScriptMessageChannel) { + inherits(ReactNativeMessageChannel, _ScriptMessageChannel); + + var _super = _createSuper$1(ReactNativeMessageChannel); + + function ReactNativeMessageChannel() { + var _this; + + classCallCheck(this, ReactNativeMessageChannel); + + _this = _super.call(this); // A ReactNativeMessageChannel is constructed both in daily-js and the call + // machine. Make sure we only instantiate emitters once. + + global.callMachineToDailyJsEmitter = global.callMachineToDailyJsEmitter || new EventEmitter(); + global.dailyJsToCallMachineEmitter = global.dailyJsToCallMachineEmitter || new EventEmitter(); + _this._wrappedListeners = {}; // Mapping between listeners and wrapped listeners + + _this._messageCallbacks = {}; + return _this; + } + + createClass(ReactNativeMessageChannel, [{ + key: "addListenerForMessagesFromCallMachine", + value: function addListenerForMessagesFromCallMachine(listener, callFrameId, thisValue) { + this._addListener(listener, global.callMachineToDailyJsEmitter, thisValue, 'received call machine message'); + } + }, { + key: "addListenerForMessagesFromDailyJs", + value: function addListenerForMessagesFromDailyJs(listener, callFrameId, thisValue) { + this._addListener(listener, global.dailyJsToCallMachineEmitter, thisValue, 'received daily-js message'); + } + }, { + key: "sendMessageToCallMachine", + value: function sendMessageToCallMachine(message, callback) { + this._sendMessage(message, global.dailyJsToCallMachineEmitter, 'sending message to call machine', callback); + } + }, { + key: "sendMessageToDailyJs", + value: function sendMessageToDailyJs(message) { + this._sendMessage(message, global.callMachineToDailyJsEmitter, 'sending message to daily-js'); + } + }, { + key: "removeListener", + value: function removeListener(listener) { + var wrappedListener = this._wrappedListeners[listener]; + + if (wrappedListener) { + // The listener was added to one of these. Might as well try removing + // from both (otherwise we would've needed two remove methods in this + // class, targeting each side of the channel). + global.callMachineToDailyJsEmitter.removeListener('message', wrappedListener); + global.dailyJsToCallMachineEmitter.removeListener('message', wrappedListener); + delete this._wrappedListeners[listener]; + } + } + }, { + key: "_addListener", + value: function _addListener(listener, messageEmitter, thisValue, logMessage) { + var _this2 = this; + + var wrappedListener = function wrappedListener(msg) { + // console.log(`[ReactNativeMessageChannel] ${logMessage}`, msg); + if (msg.callbackStamp && _this2._messageCallbacks[msg.callbackStamp]) { + // console.log('[ReactNativeMessageChannel] handling message as callback', msg); + var callbackStamp = msg.callbackStamp; // Storing here since the callback could delete msg.callbackStamp + + _this2._messageCallbacks[callbackStamp].call(thisValue, msg); + + delete _this2._messageCallbacks[callbackStamp]; + } + + listener.call(thisValue, msg); + }; + + this._wrappedListeners[listener] = wrappedListener; + messageEmitter.addListener('message', wrappedListener); + } + }, { + key: "_sendMessage", + value: function _sendMessage(message, messageEmitter, logMessage, callback) { + if (callback) { + var stamp = randomStringId(); + this._messageCallbacks[stamp] = callback; + message.callbackStamp = stamp; + } // console.log(`[ReactNativeMessageChannel] ${logMessage}`, message); + + + messageEmitter.emit('message', message); + } + }]); + + return ReactNativeMessageChannel; +}(ScriptMessageChannel); + +var has = Object.prototype.hasOwnProperty; + +function find(iter, tar, key) { + for (key of iter.keys()) { + if (dequal(key, tar)) return key; + } +} + +function dequal(foo, bar) { + var ctor, len, tmp; + if (foo === bar) return true; + + if (foo && bar && (ctor=foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + + if (ctor === Array) { + if ((len=foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])); + } + return len === -1; + } + + if (ctor === Set) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len; + if (tmp && typeof tmp === 'object') { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!bar.has(tmp)) return false; + } + return true; + } + + if (ctor === Map) { + if (foo.size !== bar.size) { + return false; + } + for (len of foo) { + tmp = len[0]; + if (tmp && typeof tmp === 'object') { + tmp = find(bar, tmp); + if (!tmp) return false; + } + if (!dequal(len[1], bar.get(tmp))) { + return false; + } + } + return true; + } + + if (ctor === ArrayBuffer) { + foo = new Uint8Array(foo); + bar = new Uint8Array(bar); + } else if (ctor === DataView) { + if ((len=foo.byteLength) === bar.byteLength) { + while (len-- && foo.getInt8(len) === bar.getInt8(len)); + } + return len === -1; + } + + if (ArrayBuffer.isView(foo)) { + if ((len=foo.byteLength) === bar.byteLength) { + while (len-- && foo[len] === bar[len]); + } + return len === -1; + } + + if (!ctor || typeof foo === 'object') { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + + return foo !== foo && bar !== bar; +} + +var REPLACE_STRATEGY = 'replace'; +var SHALLOW_MERGE_STRATEGY = 'shallow-merge'; +var MERGE_STRATEGIES = [REPLACE_STRATEGY, SHALLOW_MERGE_STRATEGY]; // Explanation of public meeting-session-data-related classes: +// - Client side (this file): +// - SessionDataUpdate: used on the client side to validate & encapsulate +// user-specified updates to meeting session data. +// - SessionDataClientUpdateQueue: used on the client side to enqueue multiple +// user-specified updates before flushing them to the server as a single +// payload. +// - Server side (other file, skyliner-express/app/SessionDataServerStore.js): +// - SessionDataServerStore: used on the SFU side to interact with stored +// meeting session data, including updating the data and listening to +// changes to that data (which may have been updated via a different SFU). +// Check whether data is a Plain Old JavaScript Object (a map-like object), +// which can be shallow-merged with another. +// From https://masteringjs.io/tutorials/fundamentals/pojo. + +function isPlainOldJavaScriptObject(data) { + if (data == null || _typeof_1(data) !== 'object') { + return false; + } + + var proto = Object.getPrototypeOf(data); + + if (proto == null) { + return true; + } + + return proto === Object.prototype; +} // Meeting session data. +// Guaranteed to be valid upon construction, which means: +// - mergeStrategy is either 'replace' or 'shallow-merge' +// - data is a plain (map-like) object +// - data isn't too big + +var SessionDataUpdate = /*#__PURE__*/function () { + function SessionDataUpdate() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + data = _ref.data, + _ref$mergeStrategy = _ref.mergeStrategy, + mergeStrategy = _ref$mergeStrategy === void 0 ? REPLACE_STRATEGY : _ref$mergeStrategy; + + classCallCheck(this, SessionDataUpdate); + + SessionDataUpdate._validateMergeStrategy(mergeStrategy); + + SessionDataUpdate._validateData(data, mergeStrategy); + + this.mergeStrategy = mergeStrategy; + this.data = data; + } // Whether this update is a no-op. + + + createClass(SessionDataUpdate, [{ + key: "isNoOp", + value: function isNoOp() { + return SessionDataUpdate.isNoOpUpdate(this.data, this.mergeStrategy); + } // Whether an update comprised of the given data and mergeStrategy would be a + // no-op. + + }], [{ + key: "isNoOpUpdate", + value: function isNoOpUpdate(data, mergeStrategy) { + return Object.keys(data).length === 0 && mergeStrategy === SHALLOW_MERGE_STRATEGY; + } // Validate merge strategy, throwing an error if invalid. + // Assumes mergeStrategy is not undefined. + + }, { + key: "_validateMergeStrategy", + value: function _validateMergeStrategy(mergeStrategy) { + if (!MERGE_STRATEGIES.includes(mergeStrategy)) { + throw Error("Unrecognized mergeStrategy provided. Options are: [".concat(MERGE_STRATEGIES, "]")); + } + } // Validate data with the given merge strategy, throwing an error if invalid. + // Assumes mergeStrategy is valid. + + }, { + key: "_validateData", + value: function _validateData(data, mergeStrategy) { + // Data must be a plain (map-like) object. + if (!isPlainOldJavaScriptObject(data)) { + throw Error("Meeting session data must be a plain (map-like) object"); + } // Check that what goes in will be the same coming out :) + // (Make an exception for top-level 'undefined's with 'shallow-merge', + // though, since those are meaningful and will be translated into key + // deletions). + + + var dataStr; + + try { + dataStr = JSON.stringify(data); + + if (mergeStrategy === REPLACE_STRATEGY) { + var out = JSON.parse(dataStr); + + if (!dequal(out, data)) { + console.warn("The meeting session data provided will be modified when serialized.", out, data); + } + } else if (mergeStrategy === SHALLOW_MERGE_STRATEGY) { + for (var key in data) { + if (Object.hasOwnProperty.call(data, key)) { + if (data[key] !== undefined) { + var _out = JSON.parse(JSON.stringify(data[key])); + + if (!dequal(data[key], _out)) { + console.warn("At least one key in the meeting session data provided will be modified when serialized.", _out, data[key]); + } + } + } + } + } + } catch (e) { + throw Error("Meeting session data must be serializable to JSON: ".concat(e)); + } // Check the size of the payload + + + if (dataStr.length > MAX_SESSION_DATA_SIZE) { + throw Error("Meeting session data is too large (".concat(dataStr.length, " characters). Maximum size suppported is ").concat(MAX_SESSION_DATA_SIZE, ".")); + } + } + }]); + + return SessionDataUpdate; +}(); // The client-side update "queue" where meeting session data updates temporarily + +function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; +} + +var isNativeFunction = _isNativeFunction; + +function _isNativeReflectConstruct$2() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } +} + +var isNativeReflectConstruct = _isNativeReflectConstruct$2; + +var construct = createCommonjsModule(function (module) { +function _construct(Parent, args, Class) { + if (isNativeReflectConstruct()) { + module.exports = _construct = Reflect.construct; + } else { + module.exports = _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); +} + +module.exports = _construct; +}); + +var wrapNativeSuper = createCommonjsModule(function (module) { +function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return construct(Class, arguments, getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); +} + +module.exports = _wrapNativeSuper; +}); + +function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function _createSuperInternal() { var Super = getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct$3() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function prepareDailyConfig(callFrameId, avoidEval) { + // Add a global callFrameId so we can have both iframes and one + // call object mode calls live at the same time + if (!window._dailyConfig) { + window._dailyConfig = {}; + } + + window._dailyConfig.callFrameId = callFrameId; + window._dailyConfig.avoidEval = avoidEval; +} + +var CallObjectLoader = /*#__PURE__*/function () { + function CallObjectLoader() { + classCallCheck(this, CallObjectLoader); + + this._currentLoad = null; + } + /** + * Loads the call object bundle (if needed), then invokes the callback + * function, which takes one boolean argument whose value is true if the + * load was a no-op. + * + * No-op loads can happen when leaving a meeting and then later joining one. + * Since the call object bundle sets up global state in the same scope as the + * app code consuming it, it only needs to be loaded and executed once ever. + * + * @param callFrameId A string identifying this "call frame", to distinguish it + * from other iframe-based calls for message channel purposes. + * @param avoidEval Whether to use the new eval-less loading mechanism on web + * (LoadAttempt_Web) instead of the legacy loading mechanism + * (LoadAttempt_ReactNative). + * @param successCallback Callback function that takes a wasNoOp argument + * (true if call object script was ever loaded once before). + * @param failureCallback Callback function that takes an error message and a + * boolean indicating whether an automatic retry is slated to occur. + */ + + + createClass(CallObjectLoader, [{ + key: "load", + value: function load(callFrameId, avoidEval, successCallback, failureCallback) { + if (this.loaded) { + window._dailyCallObjectSetup(callFrameId); + + successCallback(true); // true = "this load() was a no-op" + + return; + } + + prepareDailyConfig(callFrameId, avoidEval); // Cancel current load, if any + + this._currentLoad && this._currentLoad.cancel(); // Start a new load + + this._currentLoad = new LoadOperation(function () { + successCallback(false); // false = "this load() wasn't a no-op" + }, failureCallback); + + this._currentLoad.start(); + } + /** + * Cancel loading the call object bundle. No callbacks will be invoked. + */ + + }, { + key: "cancel", + value: function cancel() { + this._currentLoad && this._currentLoad.cancel(); + } + /** + * Returns a boolean indicating whether the call object bundle has been + * loaded and executed. + */ + + }, { + key: "loaded", + get: function get() { + return this._currentLoad && this._currentLoad.succeeded; + } + }]); + + return CallObjectLoader; +}(); +var LOAD_ATTEMPTS = 3; +var LOAD_ATTEMPT_DELAY = 3 * 1000; +/** + * Represents a call machine bundle load. + * + * Since a load may fail, it may need to retry a few times. It delegates each + * attempt to the LoadAttempt class. + */ + +var LoadOperation = /*#__PURE__*/function () { + // Here failureCallback takes the same parameters as CallObjectLoader.load, + // and successCallback takes no parameters. + function LoadOperation(successCallback, failureCallback) { + classCallCheck(this, LoadOperation); + + this._attemptsRemaining = LOAD_ATTEMPTS; + this._currentAttempt = null; + this._successCallback = successCallback; + this._failureCallback = failureCallback; + } + + createClass(LoadOperation, [{ + key: "start", + value: function start() { + var _this = this; + + // Bail if this load has already started + if (this._currentAttempt) { + return; + } // console.log("[LoadOperation] starting..."); + + + var retryOrFailureCallback = function retryOrFailureCallback(errorMessage) { + if (_this._currentAttempt.cancelled) { + // console.log("[LoadOperation] cancelled"); + return; + } + + _this._attemptsRemaining--; + + _this._failureCallback(errorMessage, _this._attemptsRemaining > 0); // true = "will retry" + + + if (_this._attemptsRemaining <= 0) { + // Should never be <0, but just being extra careful here + // console.log("[LoadOperation] ran out of attempts"); + return; + } + + setTimeout(function () { + if (_this._currentAttempt.cancelled) { + // console.log("[LoadOperation] cancelled"); + return; + } + + _this._currentAttempt = new LoadAttempt(_this._successCallback, retryOrFailureCallback); + + _this._currentAttempt.start(); + }, LOAD_ATTEMPT_DELAY); + }; + + this._currentAttempt = new LoadAttempt(this._successCallback, retryOrFailureCallback); + + this._currentAttempt.start(); + } + }, { + key: "cancel", + value: function cancel() { + this._currentAttempt && this._currentAttempt.cancel(); + } + }, { + key: "cancelled", + get: function get() { + return this._currentAttempt && this._currentAttempt.cancelled; + } + }, { + key: "succeeded", + get: function get() { + return this._currentAttempt && this._currentAttempt.succeeded; + } + }]); + + return LoadOperation; +}(); + +var LoadAttemptAbortedError = /*#__PURE__*/function (_Error) { + inherits(LoadAttemptAbortedError, _Error); + + var _super = _createSuper$2(LoadAttemptAbortedError); + + function LoadAttemptAbortedError() { + classCallCheck(this, LoadAttemptAbortedError); + + return _super.apply(this, arguments); + } + + return LoadAttemptAbortedError; +}( /*#__PURE__*/wrapNativeSuper(Error)); + +var LOAD_ATTEMPT_NETWORK_TIMEOUT = 20 * 1000; +/** + * Represents a single call machine bundle load attempt. + * + * The LoadOperation does the heavy lifting in terms of coordinating different + * LoadAttempts (i.e. kicking off retries and handling interruptions by, say, a + * user calling leave()). It will ask each LoadAttempt to start() and, if + * necessary, cancel(). + * + * The LoadAttempt itself only needs to concern itself with obeying those + * requests, invoking the success or failure callbacks at the end of an attempt, + * and setting its cancelled and succeeded flags as appropriate. + * + * Since we support running both on Web and React Native and there are slightly + * different constraints on each, there are two different implementations of + * LoadAttempt: + * - On Web, we use an HTMLScriptElement to load the bundle in order + * to allow our users to set a CSP (Content Security Policy) without + * 'unsafe-eval'. The alternative would be using fetch() + Function()/eval(). + * - On React Native, we use fetch() + Function(). There is no HTMLScriptElement + * in React Native and also no CSP consideration to contend with. + */ + +var LoadAttempt = /*#__PURE__*/function () { + function LoadAttempt(successCallback, failureCallback) { + classCallCheck(this, LoadAttempt); + + this._loadAttemptImpl = isReactNative() || !_dailyConfig.avoidEval ? new LoadAttempt_ReactNative(successCallback, failureCallback) : new LoadAttempt_Web(successCallback, failureCallback); + } + + createClass(LoadAttempt, [{ + key: "start", + value: function () { + var _start = asyncToGenerator(function* () { + return this._loadAttemptImpl.start(); + }); + + function start() { + return _start.apply(this, arguments); + } + + return start; + }() + }, { + key: "cancel", + value: function cancel() { + this._loadAttemptImpl.cancel(); + } + }, { + key: "cancelled", + get: function get() { + return this._loadAttemptImpl.cancelled; + } + }, { + key: "succeeded", + get: function get() { + return this._loadAttemptImpl.succeeded; + } + }]); + + return LoadAttempt; +}(); +/** + * Represents a single call machine bundle load attempt in React Native. + * + * NOTE: this is also the legacy web code path, when avoidEval is not set. + */ + + +var LoadAttempt_ReactNative = /*#__PURE__*/function () { + // Here successCallback takes no parameters, and failureCallback takes a + // single error message parameter. + function LoadAttempt_ReactNative(successCallback, failureCallback) { + classCallCheck(this, LoadAttempt_ReactNative); + + this.cancelled = false; + this.succeeded = false; + this._networkTimedOut = false; + this._networkTimeout = null; + this._iosCache = typeof iOSCallObjectBundleCache !== 'undefined' && iOSCallObjectBundleCache; + this._refetchHeaders = null; + this._successCallback = successCallback; + this._failureCallback = failureCallback; + } + + createClass(LoadAttempt_ReactNative, [{ + key: "start", + value: function () { + var _start2 = asyncToGenerator(function* () { + // console.log("[LoadAttempt_ReactNative] starting..."); + var url = callObjectBundleUrl(); + var loadedFromIOSCache = yield this._tryLoadFromIOSCache(url); + !loadedFromIOSCache && this._loadFromNetwork(url); + }); + + function start() { + return _start2.apply(this, arguments); + } + + return start; + }() + }, { + key: "cancel", + value: function cancel() { + clearTimeout(this._networkTimeout); + this.cancelled = true; + } + /** + * Try to load the call object bundle from the iOS cache. + * This is a React Native-specific workaround for the fact that the iOS HTTP + * cache won't cache the call object bundle due to size. + * + * @param {string} url The url of the call object bundle to try to load. + * @returns A Promise that resolves to false if the load failed or true + * otherwise (if it succeeded or was cancelled), indicating whether a network + * load attempt is needed. + */ + + }, { + key: "_tryLoadFromIOSCache", + value: function () { + var _tryLoadFromIOSCache2 = asyncToGenerator(function* (url) { + // console.log("[LoadAttempt_ReactNative] trying to load from iOS cache..."); + // Bail if we're not running in iOS + if (!this._iosCache) { + // console.log("[LoadAttempt_ReactNative] not iOS, so not checking iOS cache"); + return false; + } + + try { + var cacheResponse = yield this._iosCache.get(url); // If load has been cancelled, report work complete (no network load + // needed) + + if (this.cancelled) { + return true; + } // If cache miss, report failure (network load needed) + + + if (!cacheResponse) { + // console.log("[LoadAttempt_ReactNative] iOS cache miss"); + return false; + } // If cache expired, store refetch headers to use later and report + // failure (network load needed) + + + if (!cacheResponse.code) { + // console.log( + // "[LoadAttempt_ReactNative] iOS cache expired, setting refetch headers", + // cacheResponse.refetchHeaders + // ); + this._refetchHeaders = cacheResponse.refetchHeaders; + return false; + } // Cache is fresh, so run code and success callback, and report work + // complete (no network load needed) + // console.log("[LoadAttempt_ReactNative] iOS cache hit"); + + + Function('"use strict";' + cacheResponse.code)(); + this.succeeded = true; + + this._successCallback(); + + return true; + } catch (e) { + // Report failure + // console.log("[LoadAttempt_ReactNative] failure running bundle from iOS cache", e); + return false; + } + }); + + function _tryLoadFromIOSCache(_x) { + return _tryLoadFromIOSCache2.apply(this, arguments); + } + + return _tryLoadFromIOSCache; + }() + /** + * Try to load the call object bundle from the network. + * @param {string} url The url of the call object bundle to load. + */ + + }, { + key: "_loadFromNetwork", + value: function () { + var _loadFromNetwork2 = asyncToGenerator(function* (url) { + var _this2 = this; + + // console.log("[LoadAttempt_ReactNative] trying to load from network..."); + this._networkTimeout = setTimeout(function () { + _this2._networkTimedOut = true; + + _this2._failureCallback("Timed out (>".concat(LOAD_ATTEMPT_NETWORK_TIMEOUT, " ms) when loading call object bundle ").concat(url)); + }, LOAD_ATTEMPT_NETWORK_TIMEOUT); + + try { + var fetchOptions = this._refetchHeaders ? { + headers: this._refetchHeaders + } : {}; + var response = yield fetch(url, fetchOptions); + clearTimeout(this._networkTimeout); // Check that load wasn't cancelled or timed out during fetch + + if (this.cancelled || this._networkTimedOut) { + throw new LoadAttemptAbortedError(); + } + + var code = yield this._getBundleCodeFromResponse(url, response); // Check again that load wasn't cancelled during reading response + + if (this.cancelled) { + throw new LoadAttemptAbortedError(); + } // Execute bundle code + + + Function('"use strict";' + code)(); // Since code ran successfully (no errors thrown), cache it and call + // success callback + // console.log("[LoadAttempt_ReactNative] succeeded..."); + + this._iosCache && this._iosCache.set(url, code, response.headers); + this.succeeded = true; + + this._successCallback(); + } catch (e) { + clearTimeout(this._networkTimeout); // We need to check all these conditions since long outstanding + // requests can fail *after* cancellation or timeout (i.e. checking for + // LoadAttemptAbortedError is not enough). + + if (e instanceof LoadAttemptAbortedError || this.cancelled || this._networkTimedOut) { + // console.log("[LoadAttempt_ReactNative] cancelled or timed out"); + return; + } + + this._failureCallback("Failed to load call object bundle ".concat(url, ": ").concat(e)); + } + }); + + function _loadFromNetwork(_x2) { + return _loadFromNetwork2.apply(this, arguments); + } + + return _loadFromNetwork; + }() + }, { + key: "_getBundleCodeFromResponse", + value: function () { + var _getBundleCodeFromResponse2 = asyncToGenerator(function* (url, response) { + // Normal success case + if (response.ok) { + return yield response.text(); + } // React Native iOS-specific case: 304 Not-Modified response + // (Since we're doing manual cache management for iOS, the fetch mechanism + // doesn't opaquely handle 304s for us) + + + if (this._iosCache && response.status === 304) { + var cacheResponse = yield this._iosCache.renew(url, response.headers); + return cacheResponse.code; + } + + throw new Error("Received ".concat(response.status, " response")); + }); + + function _getBundleCodeFromResponse(_x3, _x4) { + return _getBundleCodeFromResponse2.apply(this, arguments); + } + + return _getBundleCodeFromResponse; + }() + }]); + + return LoadAttempt_ReactNative; +}(); +/** + * Represents a single call machine bundle load attempt on Web. + * + * While this attempt is active - that is, it hasn't been cancelled or hasn't + * timed out - it signs itself up to be on a global "call machine load + * waitlist", which represents the set of load attempts that want the call + * machine to finish loading. + * + * Because... + * a) ..."finishing loading" is something that happens on the call machine + * bundle side (i.e. not in this code) once it's been downloaded and is + * executing, and... + * b) ...we actually *can't* stop the call machine bundle from running after an + * attempt has been cancelled or timed out, if the bundle finishes + * downloading (HTMLScriptElement doesn't have a cancel() method)... + * ...we need a way of telling the call machine bundle "hey someone's still + * interested in you loading". + * + * Note that there really shouldn't be more than one active load attempt at a + * time. But this load attempt doesn't know that! Hence the waitlist being a + * Set() and each attempt being responsible only for adding/removing itself from + * the waitlist. This approach - as opposed to a global boolean or counter - + * felt like the most bulletproof (i.e. future- and race-condition-proof) way + * of implementing this synchronization. + */ + + +var LoadAttempt_Web = /*#__PURE__*/function () { + function LoadAttempt_Web(successCallback, failureCallback) { + classCallCheck(this, LoadAttempt_Web); + + this.cancelled = false; + this.succeeded = false; + this._successCallback = successCallback; + this._failureCallback = failureCallback; + this._attemptId = randomStringId(); + this._networkTimeout = null; + this._scriptElement = null; + } + + createClass(LoadAttempt_Web, [{ + key: "start", + value: function () { + var _start3 = asyncToGenerator(function* () { + // Initialize global state tracking active load attempts + if (!window._dailyCallMachineLoadWaitlist) { + window._dailyCallMachineLoadWaitlist = new Set(); + } // Get call machine bundle URL + + + var url = callObjectBundleUrl(); // Sanity check that we're running in a DOM/web context + + if ((typeof document === "undefined" ? "undefined" : _typeof_1(document)) !== 'object') { + this._failureCallback("Call object bundle must be loaded in a DOM/web context"); + + return; + } + + this._startLoading(url); + }); + + function start() { + return _start3.apply(this, arguments); + } + + return start; + }() + }, { + key: "cancel", + value: function cancel() { + // console.log('[LoadAttempt_Web] cancelled'); + this._stopLoading(); + + this.cancelled = true; + } + }, { + key: "_startLoading", + value: function _startLoading(url) { + var _this3 = this; + + // console.log('[LoadAttempt_Web] trying to load...'); + this._signUpForCallMachineLoadWaitlist(); // Start a timeout, after which we'll consider this attempt a failure + + + this._networkTimeout = setTimeout(function () { + // console.log('[LoadAttempt_Web] timed out'); + _this3._stopLoading(); + + _this3._failureCallback("Timed out (>".concat(LOAD_ATTEMPT_NETWORK_TIMEOUT, " ms) when loading call object bundle ").concat(url)); + }, LOAD_ATTEMPT_NETWORK_TIMEOUT); // Create a script tag to download the call machine bundle + + var head = document.getElementsByTagName('head')[0], + script = document.createElement('script'); + this._scriptElement = script; // On load, consider this attempt a success + + script.onload = /*#__PURE__*/asyncToGenerator(function* () { + // console.log('[LoadAttempt_Web] succeeded'); + _this3._stopLoading(); + + _this3.succeeded = true; + + _this3._successCallback(); + }); // On error, consider this attempt a failure + + script.onerror = /*#__PURE__*/function () { + var _ref2 = asyncToGenerator(function* (e) { + // console.log('[LoadAttempt_Web] failed'); + _this3._stopLoading(); + + _this3._failureCallback("Failed to load call object bundle ".concat(e.target.src)); + }); + + return function (_x5) { + return _ref2.apply(this, arguments); + }; + }(); // Start the download + + + script.src = url; + head.appendChild(script); + } + }, { + key: "_stopLoading", + value: function _stopLoading() { + this._withdrawFromCallMachineLoadWaitlist(); + + clearTimeout(this._networkTimeout); + + if (this._scriptElement) { + this._scriptElement.onload = null; + this._scriptElement.onerror = null; + } + } + }, { + key: "_signUpForCallMachineLoadWaitlist", + value: function _signUpForCallMachineLoadWaitlist() { + window._dailyCallMachineLoadWaitlist.add(this._attemptId); + } + }, { + key: "_withdrawFromCallMachineLoadWaitlist", + value: function _withdrawFromCallMachineLoadWaitlist() { + window._dailyCallMachineLoadWaitlist.delete(this._attemptId); + } + }]); + + return LoadAttempt_Web; +}(); + +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +var _arrayFilter = arrayFilter; + +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +var _createBaseFor = createBaseFor; + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +var _baseFor = baseFor; + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +var _baseTimes = baseTimes; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + +var _freeGlobal = freeGlobal; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = _freeGlobal || freeSelf || Function('return this')(); + +var _root = root; + +/** Built-in value references. */ +var Symbol$1 = _root.Symbol; + +var _Symbol = Symbol$1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +var _getRawTag = getRawTag; + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$1.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString$1.call(value); +} + +var _objectToString = objectToString; + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag$1 && symToStringTag$1 in Object(value)) + ? _getRawTag(value) + : _objectToString(value); +} + +var _baseGetTag = baseGetTag; + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +var isObjectLike_1 = isObjectLike; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike_1(value) && _baseGetTag(value) == argsTag; +} + +var _baseIsArguments = baseIsArguments; + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$2.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) { + return isObjectLike_1(value) && hasOwnProperty$1.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +var isArguments_1 = isArguments; + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray$1 = Array.isArray; + +var isArray_1 = isArray$1; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +var stubFalse_1 = stubFalse; + +var isBuffer_1 = createCommonjsModule(function (module, exports) { +/** Detect free variable `exports`. */ +var freeExports = exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse_1; + +module.exports = isBuffer; +}); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +var _isIndex = isIndex; + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; +} + +var isLength_1 = isLength; + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike_1(value) && + isLength_1(value.length) && !!typedArrayTags[_baseGetTag(value)]; +} + +var _baseIsTypedArray = baseIsTypedArray; + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +var _baseUnary = baseUnary; + +var _nodeUtil = createCommonjsModule(function (module, exports) { +/** Detect free variable `exports`. */ +var freeExports = exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && _freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +module.exports = nodeUtil; +}); + +/* Node.js helper references. */ +var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray; + +var isTypedArray_1 = isTypedArray; + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray_1(value), + isArg = !isArr && isArguments_1(value), + isBuff = !isArr && !isArg && isBuffer_1(value), + isType = !isArr && !isArg && !isBuff && isTypedArray_1(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$2.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + _isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +var _arrayLikeKeys = arrayLikeKeys; + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; + + return value === proto; +} + +var _isPrototype = isPrototype; + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +var _overArg = overArg; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = _overArg(Object.keys, Object); + +var _nativeKeys = nativeKeys; + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$5.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!_isPrototype(object)) { + return _nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$3.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +var _baseKeys = baseKeys; + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +var isObject_1 = isObject; + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject_1(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = _baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +var isFunction_1 = isFunction; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength_1(value.length) && !isFunction_1(value); +} + +var isArrayLike_1 = isArrayLike; + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys$1(object) { + return isArrayLike_1(object) ? _arrayLikeKeys(object) : _baseKeys(object); +} + +var keys_1 = keys$1; + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && _baseFor(object, iteratee, keys_1); +} + +var _baseForOwn = baseForOwn; + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike_1(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +var _createBaseEach = createBaseEach; + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn); + +var _baseEach = baseEach; + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + _baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +var _baseFilter = baseFilter; + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +var _listCacheClear = listCacheClear; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +var eq_1 = eq; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq_1(array[length][0], key)) { + return length; + } + } + return -1; +} + +var _assocIndexOf = assocIndexOf; + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +var _listCacheDelete = listCacheDelete; + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +var _listCacheGet = listCacheGet; + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return _assocIndexOf(this.__data__, key) > -1; +} + +var _listCacheHas = listCacheHas; + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +var _listCacheSet = listCacheSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = _listCacheClear; +ListCache.prototype['delete'] = _listCacheDelete; +ListCache.prototype.get = _listCacheGet; +ListCache.prototype.has = _listCacheHas; +ListCache.prototype.set = _listCacheSet; + +var _ListCache = ListCache; + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache; + this.size = 0; +} + +var _stackClear = stackClear; + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +var _stackDelete = stackDelete; + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +var _stackGet = stackGet; + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +var _stackHas = stackHas; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = _root['__core-js_shared__']; + +var _coreJsData = coreJsData; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +var _isMasked = isMasked; + +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +var _toSource = toSource; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto$1 = Function.prototype, + objectProto$6 = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString$1 = funcProto$1.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty$4 = objectProto$6.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString$1.call(hasOwnProperty$4).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject_1(value) || _isMasked(value)) { + return false; + } + var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); +} + +var _baseIsNative = baseIsNative; + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +var _getValue = getValue; + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = _getValue(object, key); + return _baseIsNative(value) ? value : undefined; +} + +var _getNative = getNative; + +/* Built-in method references that are verified to be native. */ +var Map$1 = _getNative(_root, 'Map'); + +var _Map = Map$1; + +/* Built-in method references that are verified to be native. */ +var nativeCreate = _getNative(Object, 'create'); + +var _nativeCreate = nativeCreate; + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; + this.size = 0; +} + +var _hashClear = hashClear; + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +var _hashDelete = hashDelete; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto$7 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$5 = objectProto$7.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (_nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty$5.call(data, key) ? data[key] : undefined; +} + +var _hashGet = hashGet; + +/** Used for built-in method references. */ +var objectProto$8 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$6 = objectProto$8.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return _nativeCreate ? (data[key] !== undefined) : hasOwnProperty$6.call(data, key); +} + +var _hashHas = hashHas; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (_nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value; + return this; +} + +var _hashSet = hashSet; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = _hashClear; +Hash.prototype['delete'] = _hashDelete; +Hash.prototype.get = _hashGet; +Hash.prototype.has = _hashHas; +Hash.prototype.set = _hashSet; + +var _Hash = Hash; + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new _Hash, + 'map': new (_Map || _ListCache), + 'string': new _Hash + }; +} + +var _mapCacheClear = mapCacheClear; + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +var _isKeyable = isKeyable; + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return _isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +var _getMapData = getMapData; + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = _getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +var _mapCacheDelete = mapCacheDelete; + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return _getMapData(this, key).get(key); +} + +var _mapCacheGet = mapCacheGet; + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return _getMapData(this, key).has(key); +} + +var _mapCacheHas = mapCacheHas; + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = _getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +var _mapCacheSet = mapCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = _mapCacheClear; +MapCache.prototype['delete'] = _mapCacheDelete; +MapCache.prototype.get = _mapCacheGet; +MapCache.prototype.has = _mapCacheHas; +MapCache.prototype.set = _mapCacheSet; + +var _MapCache = MapCache; + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache) { + var pairs = data.__data__; + if (!_Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +var _stackSet = stackSet; + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +var _Stack = Stack; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED$2); + return this; +} + +var _setCacheAdd = setCacheAdd; + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +var _setCacheHas = setCacheHas; + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +var _SetCache = SetCache; + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +var _arraySome = arraySome; + +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +var _cacheHas = cacheHas; + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!_cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +var _equalArrays = equalArrays; + +/** Built-in value references. */ +var Uint8Array$1 = _root.Uint8Array; + +var _Uint8Array = Uint8Array$1; + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +var _mapToArray = mapToArray; + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +var _setToArray = setToArray; + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$1 = 1, + COMPARE_UNORDERED_FLAG$1 = 2; + +/** `Object#toString` result references. */ +var boolTag$1 = '[object Boolean]', + dateTag$1 = '[object Date]', + errorTag$1 = '[object Error]', + mapTag$1 = '[object Map]', + numberTag$1 = '[object Number]', + regexpTag$1 = '[object RegExp]', + setTag$1 = '[object Set]', + stringTag$1 = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag$1 = '[object ArrayBuffer]', + dataViewTag$1 = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol ? _Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag$1: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag$1: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array(object), new _Uint8Array(other))) { + return false; + } + return true; + + case boolTag$1: + case dateTag$1: + case numberTag$1: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq_1(+object, +other); + + case errorTag$1: + return object.name == other.name && object.message == other.message; + + case regexpTag$1: + case stringTag$1: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag$1: + var convert = _mapToArray; + + case setTag$1: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1; + convert || (convert = _setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG$1; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +var _equalByTag = equalByTag; + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +var _arrayPush = arrayPush; + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray_1(object) ? result : _arrayPush(result, symbolsFunc(object)); +} + +var _baseGetAllKeys = baseGetAllKeys; + +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +var stubArray_1 = stubArray; + +/** Used for built-in method references. */ +var objectProto$9 = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable$1 = objectProto$9.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray_1 : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return _arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable$1.call(object, symbol); + }); +}; + +var _getSymbols = getSymbols; + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return _baseGetAllKeys(object, keys_1, _getSymbols); +} + +var _getAllKeys = getAllKeys; + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$2 = 1; + +/** Used for built-in method references. */ +var objectProto$a = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$7 = objectProto$a.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2, + objProps = _getAllKeys(object), + objLength = objProps.length, + othProps = _getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty$7.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +var _equalObjects = equalObjects; + +/* Built-in method references that are verified to be native. */ +var DataView$1 = _getNative(_root, 'DataView'); + +var _DataView = DataView$1; + +/* Built-in method references that are verified to be native. */ +var Promise$1 = _getNative(_root, 'Promise'); + +var _Promise = Promise$1; + +/* Built-in method references that are verified to be native. */ +var Set$1 = _getNative(_root, 'Set'); + +var _Set = Set$1; + +/* Built-in method references that are verified to be native. */ +var WeakMap = _getNative(_root, 'WeakMap'); + +var _WeakMap = WeakMap; + +/** `Object#toString` result references. */ +var mapTag$2 = '[object Map]', + objectTag$1 = '[object Object]', + promiseTag = '[object Promise]', + setTag$2 = '[object Set]', + weakMapTag$1 = '[object WeakMap]'; + +var dataViewTag$2 = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = _toSource(_DataView), + mapCtorString = _toSource(_Map), + promiseCtorString = _toSource(_Promise), + setCtorString = _toSource(_Set), + weakMapCtorString = _toSource(_WeakMap); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = _baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != dataViewTag$2) || + (_Map && getTag(new _Map) != mapTag$2) || + (_Promise && getTag(_Promise.resolve()) != promiseTag) || + (_Set && getTag(new _Set) != setTag$2) || + (_WeakMap && getTag(new _WeakMap) != weakMapTag$1)) { + getTag = function(value) { + var result = _baseGetTag(value), + Ctor = result == objectTag$1 ? value.constructor : undefined, + ctorString = Ctor ? _toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag$2; + case mapCtorString: return mapTag$2; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag$2; + case weakMapCtorString: return weakMapTag$1; + } + } + return result; + }; +} + +var _getTag = getTag; + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$3 = 1; + +/** `Object#toString` result references. */ +var argsTag$2 = '[object Arguments]', + arrayTag$1 = '[object Array]', + objectTag$2 = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto$b = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$8 = objectProto$b.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray_1(object), + othIsArr = isArray_1(other), + objTag = objIsArr ? arrayTag$1 : _getTag(object), + othTag = othIsArr ? arrayTag$1 : _getTag(other); + + objTag = objTag == argsTag$2 ? objectTag$2 : objTag; + othTag = othTag == argsTag$2 ? objectTag$2 : othTag; + + var objIsObj = objTag == objectTag$2, + othIsObj = othTag == objectTag$2, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer_1(object)) { + if (!isBuffer_1(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack); + return (objIsArr || isTypedArray_1(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG$3)) { + var objIsWrapped = objIsObj && hasOwnProperty$8.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty$8.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +var _baseIsEqualDeep = baseIsEqualDeep; + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike_1(value) && !isObjectLike_1(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +var _baseIsEqual = baseIsEqual; + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$4 = 1, + COMPARE_UNORDERED_FLAG$2 = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$4 | COMPARE_UNORDERED_FLAG$2, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +var _baseIsMatch = baseIsMatch; + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject_1(value); +} + +var _isStrictComparable = isStrictComparable; + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys_1(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +var _getMatchData = getMatchData; + +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +var _matchesStrictComparable = matchesStrictComparable; + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +var _baseMatches = baseMatches; + +/** `Object#toString` result references. */ +var symbolTag$1 = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike_1(value) && _baseGetTag(value) == symbolTag$1); +} + +var isSymbol_1 = isSymbol; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray_1(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol_1(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +var _isKey = isKey; + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || _MapCache); + return memoized; +} + +// Expose `MapCache`. +memoize.Cache = _MapCache; + +var memoize_1 = memoize; + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize_1(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +var _memoizeCapped = memoizeCapped; + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +var _stringToPath = stringToPath; + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +var _arrayMap = arrayMap; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto$1 = _Symbol ? _Symbol.prototype : undefined, + symbolToString = symbolProto$1 ? symbolProto$1.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray_1(value)) { + // Recursively convert values (susceptible to call stack limits). + return _arrayMap(value, baseToString) + ''; + } + if (isSymbol_1(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +var _baseToString = baseToString; + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : _baseToString(value); +} + +var toString_1 = toString; + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray_1(value)) { + return value; + } + return _isKey(value, object) ? [value] : _stringToPath(toString_1(value)); +} + +var _castPath = castPath; + +/** Used as references for various `Number` constants. */ +var INFINITY$1 = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol_1(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; +} + +var _toKey = toKey; + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = _castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[_toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +var _baseGet = baseGet; + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : _baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +var get_1 = get; + +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +var _baseHasIn = baseHasIn; + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = _castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = _toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength_1(length) && _isIndex(key, length) && + (isArray_1(object) || isArguments_1(object)); +} + +var _hasPath = hasPath; + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && _hasPath(object, path, _baseHasIn); +} + +var hasIn_1 = hasIn; + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$5 = 1, + COMPARE_UNORDERED_FLAG$3 = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (_isKey(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable(_toKey(path), srcValue); + } + return function(object) { + var objValue = get_1(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn_1(object, path) + : _baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$5 | COMPARE_UNORDERED_FLAG$3); + }; +} + +var _baseMatchesProperty = baseMatchesProperty; + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +var identity_1 = identity; + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +var _baseProperty = baseProperty; + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return _baseGet(object, path); + }; +} + +var _basePropertyDeep = basePropertyDeep; + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return _isKey(path) ? _baseProperty(_toKey(path)) : _basePropertyDeep(path); +} + +var property_1 = property; + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity_1; + } + if (typeof value == 'object') { + return isArray_1(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return property_1(value); +} + +var _baseIteratee = baseIteratee; + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = isArray_1(collection) ? _arrayFilter : _baseFilter; + return func(collection, _baseIteratee(predicate)); +} + +var filter_1 = filter; + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike_1(collection) ? Array(collection.length) : []; + + _baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +var _baseMap = baseMap; + +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +var _baseSortBy = baseSortBy; + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol_1(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol_1(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +var _compareAscending = compareAscending; + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +var _compareMultiple = compareMultiple; + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = _arrayMap(iteratees, function(iteratee) { + if (isArray_1(iteratee)) { + return function(value) { + return _baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity_1]; + } + + var index = -1; + iteratees = _arrayMap(iteratees, _baseUnary(_baseIteratee)); + + var result = _baseMap(collection, function(value, key, collection) { + var criteria = _arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +var _baseOrderBy = baseOrderBy; + +/** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ +function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray_1(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray_1(orders)) { + orders = orders == null ? [] : [orders]; + } + return _baseOrderBy(collection, iteratees, orders); +} + +var orderBy_1 = orderBy; + +var getLocalIsSubscribedToTrack = function getLocalIsSubscribedToTrack(state, id, mediaTag) { + return _getSubscriptionToTrack(state.local, id, mediaTag) === true; +}; // NOTE: only meant for use in P2P mode, where we have access to remote +// kind is "video" or "audio" + +var getLocalTrack = function getLocalTrack(state, type, kind) { + return state.local.streams && state.local.streams[type] && state.local.streams[type].stream && state.local.streams[type].stream["get".concat(kind === 'video' ? 'Video' : 'Audio', "Tracks")]()[0]; +}; // kind is "video" or "audio" +// for standard tracks, type is "cam" or "screen" +// for custom tracks, type is the mediaTag + +var getRemoteTrack = function getRemoteTrack(state, participantId, type, kind) { + var streamEntry = _getRemoteStreamEntry(state, participantId, type, kind); + + return streamEntry && streamEntry.pendingTrack; +}; // type is "cam" or "screen" +// and is currently accessed directly from redux anyway (not via this selector) +// where it's needed. + +var _getSubscriptionToTrack = function _getSubscriptionToTrack(subscriber, subscribeeId, mediaTag) { + // if we don't have a participant record at all, assume that + // false is the safest thing to return, here + if (!subscriber) { + return false; + } + + var mapToTrueFalseStaged = function mapToTrueFalseStaged(subscription) { + switch (subscription) { + case 'avatar': + return true; + + case 'staged': + return subscription; + + default: + // boolean or undefined + return !!subscription; + } + }; + + var sTracks = subscriber.public.subscribedTracks; // Below shows the return values for all the various versions of sTracks + // { ALL: true } -> true + // { ALL: false } -> false + // { ALL: 'staged' } -> 'staged' + // { ALL: 'avatar' } -> true + // undefined -> true // this should never happen + // {}, -> false + // { p2id: { }} -> false + // { p2id: { mediaTag: true }} -> true + // { p2id: { mediaTag: false }} -> false + // { p2id: { mediaTag: 'staged' }} -> 'staged' + // { p2id: { mediaTag: 'avatar' }} -> true + + if (!(sTracks && sTracks[subscribeeId])) { + return sTracks ? mapToTrueFalseStaged(sTracks.ALL) : true; + } + + var isCustomTrack = ['cam-audio', 'cam-video', 'screen-video', 'screen-audio', 'rmpAudio', 'rmpVideo'].indexOf(mediaTag) === -1; + var result; + + if (isCustomTrack && sTracks[subscribeeId]['custom']) { + result = [true, 'staged'].includes(sTracks[subscribeeId]['custom']) ? mapToTrueFalseStaged(sTracks[subscribeeId]['custom']) : mapToTrueFalseStaged(sTracks[subscribeeId]['custom'][mediaTag]); + } else { + result = mapToTrueFalseStaged(sTracks[subscribeeId][mediaTag]); + } + + return result; +}; + +var _getRemoteStreamEntry = function _getRemoteStreamEntry(state, participantId, type, kind) { + var streams = orderBy_1(filter_1(state.streams, function (s) { + return s.participantId === participantId && s.type === type && s.pendingTrack && s.pendingTrack.kind === kind; + }), 'starttime', 'desc'); + return streams && streams[0]; +}; + +var getLocalCustomTrack = function getLocalCustomTrack(state, trackEntryKey) { + var trackEntries = state.local.public.customTracks; + + if (!(trackEntries && trackEntries[trackEntryKey])) { + return; + } + + return trackEntries[trackEntryKey].track; +}; + +function addTracks(p) { + var state = store.getState(); + + for (var _i = 0, _arr = ['cam', 'screen']; _i < _arr.length; _i++) { + var type = _arr[_i]; + + for (var _i2 = 0, _arr2 = ['video', 'audio']; _i2 < _arr2.length; _i2++) { + var kind = _arr2[_i2]; + var key = type === 'cam' ? kind : "screen".concat(kind.charAt(0).toUpperCase() + kind.slice(1)); + var trackInfo = p.tracks[key]; + + if (trackInfo) { + var track = p.local ? getLocalTrack(state, type, kind) : getRemoteTrack(state, p.session_id, type, kind); + + if (trackInfo.state === 'playable') { + trackInfo.track = track; + } // Set "persistent" track field where track is present even if not "playable" + + + trackInfo.persistentTrack = track; + } + } + } +} // todo: refactor so that his logic is part of addTracks and friends() + +function addCustomTracks(p) { + try { + var state = store.getState(); + + for (var trackEntryKey in p.tracks) { + if (isPredefinedTrack(trackEntryKey)) { + continue; + } + + var kind = p.tracks[trackEntryKey].kind; + + if (!kind) { + console.error('unknown type for custom track'); + continue; + } + + var trackInfo = p.tracks[trackEntryKey]; + + if (trackInfo) { + var track = p.local ? getLocalCustomTrack(state, trackEntryKey, kind) : getRemoteTrack(state, p.session_id, trackEntryKey, kind); + + if (trackInfo.state === 'playable') { + p.tracks[trackEntryKey].track = track; + } + + trackInfo.persistentTrack = track; + } + } + } catch (e) { + console.error(e); + } +} +function isPredefinedTrack(trackEntryKey) { + return ['video', 'audio', 'screenVideo', 'screenAudio'].includes(trackEntryKey); +} // Adds tracks to daily-js Participant object. + +function addLegacyTracks(p, prevP) { + var state = store.getState(); + + if (p.local) { + if (p.audio) { + try { + p.audioTrack = state.local.streams.cam.stream.getAudioTracks()[0]; + + if (!p.audioTrack) { + p.audio = false; + } + } catch (e) {} + } + + if (p.video) { + try { + p.videoTrack = state.local.streams.cam.stream.getVideoTracks()[0]; + + if (!p.videoTrack) { + p.video = false; + } + } catch (e) {} + } + + if (p.screen) { + try { + p.screenVideoTrack = state.local.streams.screen.stream.getVideoTracks()[0]; + p.screenAudioTrack = state.local.streams.screen.stream.getAudioTracks()[0]; + + if (!(p.screenVideoTrack || p.screenAudioTrack)) { + p.screen = false; + } + } catch (e) {} + } + + return; + } + + var connected = true; // default to true to minimize impact of new bugs + // as of 11/20/2019 when this block of code was + // first written + + try { + var sp = state.participants[p.session_id]; + + if (sp && sp.public && sp.public.rtcType && sp.public.rtcType.impl === 'peer-to-peer') { + if (sp.private && !['connected', 'completed'].includes(sp.private.peeringState)) { + connected = false; + } + } + } catch (e) { + console.error(e); + } + + if (!connected) { + p.audio = false; + p.audioTrack = false; + p.video = false; + p.videoTrack = false; + p.screen = false; + p.screenTrack = false; + return; + } + + try { + var allStreams = state.streams; // find audio track + + if (p.audio && getLocalIsSubscribedToTrack(state, p.session_id, 'cam-audio')) { + var audioTrack = getRemoteTrack(state, p.session_id, 'cam', 'audio'); + + if (audioTrack) { + if (prevP && prevP.audioTrack && prevP.audioTrack.id === audioTrack.id) { + // if we have an apparently identical audio track already in + // our participant struct leave it in place to avoid flicker + // during quick muted/unmuted PeerConnection cycles. we'll update + // audio/video muted at the app level via signaling + p.audioTrack = audioTrack; + } else if (!audioTrack.muted) { + // otherwise, add the found track if it's not muted + p.audioTrack = audioTrack; + } + } + + if (!p.audioTrack) { + p.audio = false; + } + } // find video track + + + if (p.video && getLocalIsSubscribedToTrack(state, p.session_id, 'cam-video')) { + var videoTrack = getRemoteTrack(state, p.session_id, 'cam', 'video'); + + if (videoTrack) { + if (prevP && prevP.videoTrack && prevP.videoTrack.id === videoTrack.id) { + p.videoTrack = videoTrack; + } else if (!videoTrack.muted) { + // otherwise, add the found track if it's not muted + p.videoTrack = videoTrack; + } + } + + if (!p.videoTrack) { + p.video = false; + } + } // find screen-share audio track + + + if (p.screen && getLocalIsSubscribedToTrack(state, p.session_id, 'screen-audio')) { + var screenAudioTrack = getRemoteTrack(state, p.session_id, 'screen', 'audio'); + + if (screenAudioTrack) { + if (prevP && prevP.screenAudioTrack && prevP.screenAudioTrack.id === screenAudioTrack.id) { + p.screenAudioTrack = screenAudioTrack; + } else if (!screenAudioTrack.muted) { + // otherwise, add the found track if it's not muted + p.screenAudioTrack = screenAudioTrack; + } + } + } // find screen-share video track + + + if (p.screen && getLocalIsSubscribedToTrack(state, p.session_id, 'screen-video')) { + var screenVideoTrack = getRemoteTrack(state, p.session_id, 'screen', 'video'); + + if (screenVideoTrack) { + if (prevP && prevP.screenVideoTrack && prevP.screenVideoTrack.id === screenVideoTrack.id) { + p.screenVideoTrack = screenVideoTrack; + } else if (!screenVideoTrack.muted) { + // otherwise, add the found track if it's not muted + // note: there is an issue here with timing ... Chrome (and + // possibly other browsers), gets a video track that's initially + // not muted, for an audio-only screenshare. The track + // switches to muted fairly quickly, but we don't have any + // logic in place to respond to that. todo: fix this so that, + // at the very least we get a track-stopped event when the + // "empty" track switches to muted. + p.screenVideoTrack = screenVideoTrack; + } + } + } + + if (!(p.screenVideoTrack || p.screenAudioTrack)) { + p.screen = false; + } + } catch (e) { + console.error('unexpected error matching up tracks', e); + } +} + +function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$4(); return function _createSuperInternal() { var Super = getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return possibleConstructorReturn(this, result); }; } + +function _isNativeReflectConstruct$4() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray$1(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray$1(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray$1(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen); } + +function _arrayLikeToArray$1(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } +// calls or audio calls (i.e. whether we should use speakerphone). + +var NATIVE_AUDIO_MODE_VIDEO_CALL = 'video'; +var NATIVE_AUDIO_MODE_VOICE_CALL = 'voice'; +var NATIVE_AUDIO_MODE_IDLE = 'idle'; +var MAX_RMP_FPS = 30; +var MIN_RMP_FPS = 1; +var MAX_SIMULCAST_LAYERS = 3; +var MAX_SCALE_RESOLUTION_BY = 8; +var MAX_LAYER_BITRATE = 2500000; +var MIN_LAYER_BITRATE = 100000; +var DEFAULT_SESSION_STATE = isReactNative() ? { + data: {} +} : { + data: {}, + topology: 'none' +}; +var EMPTY_PARTICIPANT_COUNTS = { + present: 0, + hidden: 0 +}; +var simulcastEncodingsValidRanges = { + maxBitrate: { + min: MIN_LAYER_BITRATE, + max: MAX_LAYER_BITRATE + }, + maxFramerate: { + min: MIN_RMP_FPS, + max: MAX_RMP_FPS + }, + scaleResolutionDownBy: { + min: 1, + max: MAX_SCALE_RESOLUTION_BY + } +}; +var startRmpSettingsValidKeys = ['state', 'volume', 'simulcastEncodings']; // +// +// + +var reactNativeConfigType = { + androidInCallNotification: { + title: 'string', + subtitle: 'string', + iconName: 'string', + disableForCustomOverride: 'boolean' + }, + disableAutoDeviceManagement: { + audio: 'boolean', + video: 'boolean' + } +}; +var customTrayButtonsType = { + id: { + iconPath: 'string', + iconPathDarkMode: 'string', + label: 'string', + tooltip: 'string' + } +}; +var FRAME_PROPS = { + customIntegrations: true, + customTrayButtons: { + validate: validateCustomTrayButtons, + help: "customTrayButtons should be a dictionary of the type ".concat(JSON.stringify(customTrayButtonsType)) + }, + url: { + validate: function validate(url) { + return typeof url === 'string'; + }, + help: 'url should be a string' + }, + baseUrl: { + validate: function validate(url) { + return typeof url === 'string'; + }, + help: 'baseUrl should be a string' + }, + token: { + validate: function validate(token) { + return typeof token === 'string'; + }, + help: 'token should be a string', + queryString: 't' + }, + dailyConfig: { + // only for call object mode, for now + validate: function validate(config) { + if (!window._dailyConfig) { + window._dailyConfig = {}; + } + + window._dailyConfig.experimentalGetUserMediaConstraintsModify = config.experimentalGetUserMediaConstraintsModify; + window._dailyConfig.userMediaVideoConstraints = config.userMediaVideoConstraints; + window._dailyConfig.userMediaAudioConstraints = config.userMediaAudioConstraints; + window._dailyConfig.callObjectBundleUrlOverride = config.callObjectBundleUrlOverride; + return true; + } + }, + reactNativeConfig: { + validate: validateReactNativeConfig, + help: "reactNativeConfig should look like ".concat(JSON.stringify(reactNativeConfigType), ", all fields optional") + }, + lang: { + validate: function validate(lang) { + return ['de', 'en-us', // Here for backwards compatibility, but not encouraged (just maps to 'en' anyway) + 'en', 'es', 'fi', 'fr', 'it', 'jp', 'ka', 'nl', 'no', 'pl', 'pt', 'ru', 'sv', 'tr', 'user'].includes(lang); + }, + help: 'language not supported. Options are: de, en-us, en, es, fi, fr, it, jp, ka, nl, no, pl, pt, ru, sv, tr, user' + }, + userName: true, + // ignored if there's a token + userData: { + validate: function validate(data) { + try { + validateUserData(data); + return true; + } catch (e) { + console.error(e); + return false; + } + }, + help: 'invalid userData type provided' + }, + startVideoOff: true, + startAudioOff: true, + activeSpeakerMode: true, + showLeaveButton: true, + showLocalVideo: true, + showParticipantsBar: true, + showFullscreenButton: true, + showUserNameChangeUI: true, + // style to apply to iframe in createFrame factory method + iframeStyle: true, + // styles passed through to video calls inside the iframe + customLayout: true, + cssFile: true, + cssText: true, + bodyClass: true, + videoSource: { + validate: function validate(s, callObject) { + callObject._preloadCache.videoDeviceId = s; + return true; + } + }, + audioSource: { + validate: function validate(s, callObject) { + callObject._preloadCache.audioDeviceId = s; + return true; + } + }, + subscribeToTracksAutomatically: { + validate: function validate(s, callObject) { + callObject._preloadCache.subscribeToTracksAutomatically = s; + return true; + } + }, + theme: { + validate: function validate(o) { + var validColors = ['accent', 'accentText', 'background', 'backgroundAccent', 'baseText', 'border', 'mainAreaBg', 'mainAreaBgAccent', 'mainAreaText', 'supportiveText']; + + var containsValidColors = function containsValidColors(colors) { + for (var _i = 0, _Object$keys = Object.keys(colors); _i < _Object$keys.length; _i++) { + var key = _Object$keys[_i]; + + if (!validColors.includes(key)) { + // Key is not a supported theme color + console.error("unsupported color \"".concat(key, "\". Valid colors: ").concat(validColors.join(', '))); + return false; + } + + if (!colors[key].match(/^#[0-9a-f]{6}|#[0-9a-f]{3}$/i)) { + // Color is not in hex format + console.error("".concat(key, " theme color should be provided in valid hex color format. Received: \"").concat(colors[key], "\"")); + return false; + } + } + + return true; + }; + + if (_typeof_1(o) !== 'object' || !('light' in o && 'dark' in o || 'colors' in o)) { + // Must define either both themes or colors + console.error('Theme must contain either both "light" and "dark" properties, or "colors".', o); + return false; + } + + if ('light' in o && 'dark' in o) { + if (!('colors' in o.light)) { + console.error('Light theme is missing "colors" property.', o); + return false; + } + + if (!('colors' in o.dark)) { + console.error('Dark theme is missing "colors" property.', o); + return false; + } + + return containsValidColors(o.light.colors) && containsValidColors(o.dark.colors); + } + + return containsValidColors(o.colors); + }, + help: 'unsupported theme configuration. Check error logs for detailed info.' + }, + layoutConfig: { + validate: function validate(layoutConfig) { + if ('grid' in layoutConfig) { + var gridConfig = layoutConfig.grid; + + if ('maxTilesPerPage' in gridConfig) { + if (!Number.isInteger(gridConfig.maxTilesPerPage)) { + console.error("grid.maxTilesPerPage should be an integer. You passed ".concat(gridConfig.maxTilesPerPage, ".")); + return false; + } + + if (gridConfig.maxTilesPerPage > 49) { + console.error("grid.maxTilesPerPage can't be larger than 49 without sacrificing browser performance. Please contact us at https://www.daily.co/contact to talk about your use case."); + return false; + } + } + + if ('minTilesPerPage' in gridConfig) { + if (!Number.isInteger(gridConfig.minTilesPerPage)) { + console.error("grid.minTilesPerPage should be an integer. You passed ".concat(gridConfig.minTilesPerPage, ".")); + return false; + } + + if (gridConfig.minTilesPerPage < 1) { + console.error("grid.minTilesPerPage can't be lower than 1."); + return false; + } + + if ('maxTilesPerPage' in gridConfig && gridConfig.minTilesPerPage > gridConfig.maxTilesPerPage) { + console.error("grid.minTilesPerPage can't be higher than grid.maxTilesPerPage."); + return false; + } + } + } + + return true; + }, + help: 'unsupported layoutConfig. Check error logs for detailed info.' + }, + receiveSettings: { + // Disallow "*" shorthand key since it's a shorthand for participants + // currently connected *to you* (i.e. participants already in + // participants()), which is necessarily empty at join time. Allowing this + // key might only sow confusion: it might lead people to think it's a + // shorthand for participants currently connected *to the room*. + validate: function validate(receiveSettings) { + return validateReceiveSettings(receiveSettings, { + allowAllParticipantsKey: false + }); + }, + help: receiveSettingsValidationHelpMsg({ + allowAllParticipantsKey: false + }) + }, + inputSettings: { + validate: function validate(inputSettings) { + return validateInputSettings(inputSettings); + }, + help: inputSettingsValidationHelpMsg() + }, + // used internally + layout: { + validate: function validate(layout) { + return layout === 'custom-v1' || layout === 'browser' || layout === 'none'; + }, + help: 'layout may only be set to "custom-v1"', + queryString: 'layout' + }, + emb: { + queryString: 'emb' + }, + embHref: { + queryString: 'embHref' + }, + dailyJsVersion: { + queryString: 'dailyJsVersion' + } +}; // todo: more validation? + +var PARTICIPANT_PROPS = { + styles: { + validate: function validate(styles) { + for (var k in styles) { + if (k !== 'cam' && k !== 'screen') { + return false; + } + } + + if (styles.cam) { + for (var k in styles.cam) { + if (k !== 'div' && k !== 'video') { + return false; + } + } + } + + if (styles.screen) { + for (var k in styles.screen) { + if (k !== 'div' && k !== 'video') { + return false; + } + } + } + + return true; + }, + help: 'styles format should be a subset of: ' + '{ cam: {div: {}, video: {}}, screen: {div: {}, video: {}} }' + }, + setSubscribedTracks: { + validate: function validate(subs, callObject, participant) { + if (callObject._preloadCache.subscribeToTracksAutomatically) { + return false; + } + + var validPrimitiveValues = [true, false, 'staged']; + + if (validPrimitiveValues.includes(subs) || !isReactNative() && subs === 'avatar') { + return true; + } + + var knownTracks = ['audio', 'video', 'screenAudio', 'screenVideo', 'rmpAudio', 'rmpVideo']; + + var validateTrackSubs = function validateTrackSubs(subs) { + var custom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + for (var s in subs) { + if (s === 'custom') { + var containsValidValue = validPrimitiveValues.includes(subs[s]); + + if (!containsValidValue && !validateTrackSubs(subs[s], true)) { + return false; + } + } else { + var isUnexpectedTrackType = !custom && !knownTracks.includes(s); + var isUnexpectedValue = !validPrimitiveValues.includes(subs[s]); + + if (isUnexpectedTrackType || isUnexpectedValue) { + return false; + } + } + } + + return true; + }; + + return validateTrackSubs(subs); + }, + help: 'setSubscribedTracks cannot be used when setSubscribeToTracksAutomatically is enabled, and should be of the form: ' + "true".concat(!isReactNative() ? " | 'avatar'" : '', " | false | 'staged' | { [audio: true|false|'staged'], [video: true|false|'staged'], [screenAudio: true|false|'staged'], [screenVideo: true|false|'staged'] }") + }, + setAudio: true, + setVideo: true, + eject: true, + updatePermissions: { + validate: function validate(permissionsUpdate) { + // Note: this validation logic should probably be moved into + // Permissions.js, which should then be used by this file. It'd be a first + // for us to depend on a file outside daily-js, though. + for (var _i2 = 0, _Object$entries = Object.entries(permissionsUpdate); _i2 < _Object$entries.length; _i2++) { + var _Object$entries$_i = slicedToArray(_Object$entries[_i2], 2), + permissionName = _Object$entries$_i[0], + permission = _Object$entries$_i[1]; + + switch (permissionName) { + case 'hasPresence': + if (typeof permission !== 'boolean') { + return false; + } + + break; + + case 'canSend': + if (permission instanceof Set) { + var knownMediaTypes = ['video', 'audio', 'screenVideo', 'screenAudio', 'customVideo', 'customAudio']; + + var _iterator = _createForOfIteratorHelper(permission), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var mediaType = _step.value; + + if (!knownMediaTypes.includes(mediaType)) { + return false; + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } else if (typeof permission !== 'boolean') { + return false; + } + + break; + + default: + return false; + } + } + + return true; + }, + help: 'updatePermissions can take hasPresence and canSend permissions. hasPresence must be a boolean. canSend can be a boolean or an array of media types (video, audio, screenVideo, screenAudio, customVideo, customAudio).' + } +}; // +// +// + +var DailyIframe = /*#__PURE__*/function (_EventEmitter) { + inherits(DailyIframe, _EventEmitter); + + var _super = _createSuper$3(DailyIframe); + + createClass(DailyIframe, null, [{ + key: "supportedBrowser", + // + // static methods + // + value: function supportedBrowser() { + if (isReactNative()) { + return { + supported: true, + mobile: true, + name: 'React Native', + version: null, + supportsScreenShare: false, + supportsSfu: true, + supportsVideoProcessing: false + }; + } + + var browser = Bowser.getParser(getUserAgent()); + return { + supported: !!browserVideoSupported_p(), + mobile: browser.getPlatformType() === 'mobile', + name: browser.getBrowserName(), + version: browser.getBrowserVersion(), + supportsFullscreen: !!isFullscreenSupported(), + supportsScreenShare: !!isScreenSharingSupported(), + supportsSfu: !!browserVideoSupported_p(), + supportsVideoProcessing: isVideoProcessingSupported() + }; + } + }, { + key: "version", + value: function version() { + return "0.35.1-internal.1"; + } // + // constructors + // + + }, { + key: "createCallObject", + value: function createCallObject() { + var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + properties.layout = 'none'; + return new DailyIframe(null, properties); + } + }, { + key: "wrap", + value: function wrap(iframeish) { + var properties = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + methodNotSupportedInReactNative(); + + if (!iframeish || !iframeish.contentWindow || 'string' !== typeof iframeish.src) { + throw new Error('DailyIframe::Wrap needs an iframe-like first argument'); + } + + if (!properties.layout) { + if (properties.customLayout) { + properties.layout = 'custom-v1'; + } else { + properties.layout = 'browser'; + } + } + + return new DailyIframe(iframeish, properties); + } + }, { + key: "createFrame", + value: function createFrame(arg1, arg2) { + methodNotSupportedInReactNative(); + var parentEl, properties; + + if (arg1 && arg2) { + parentEl = arg1; + properties = arg2; + } else if (arg1 && arg1.append) { + parentEl = arg1; + properties = {}; + } else { + parentEl = document.body; + properties = arg1 || {}; + } + + var iframeStyle = properties.iframeStyle; + + if (!iframeStyle) { + if (parentEl === document.body) { + iframeStyle = { + position: 'fixed', + border: '1px solid black', + backgroundColor: 'white', + width: '375px', + height: '450px', + right: '1em', + bottom: '1em' + }; + } else { + iframeStyle = { + border: 0, + width: '100%', + height: '100%' + }; + } + } + + var iframeEl = document.createElement('iframe'); // special-case for old Electron for Figma + + if (window.navigator && window.navigator.userAgent.match(/Chrome\/61\./)) { + iframeEl.allow = 'microphone, camera'; + } else { + iframeEl.allow = 'microphone; camera; autoplay; display-capture'; + } + + iframeEl.style.visibility = 'hidden'; + parentEl.appendChild(iframeEl); + iframeEl.style.visibility = null; + Object.keys(iframeStyle).forEach(function (k) { + return iframeEl.style[k] = iframeStyle[k]; + }); + + if (!properties.layout) { + if (properties.customLayout) { + properties.layout = 'custom-v1'; + } else { + properties.layout = 'browser'; + } + } + + try { + var callFrame = new DailyIframe(iframeEl, properties); + return callFrame; + } catch (e) { + // something when wrong while constructing the object. so let's clean + // up by removing ourselves from the page, then rethrow the error. + parentEl.removeChild(iframeEl); + throw e; + } + } + }, { + key: "createTransparentFrame", + value: function createTransparentFrame() { + var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + methodNotSupportedInReactNative(); + var iframeEl = document.createElement('iframe'); + iframeEl.allow = 'microphone; camera; autoplay'; + iframeEl.style.cssText = "\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n pointer-events: none;\n "; + document.body.appendChild(iframeEl); + + if (!properties.layout) { + properties.layout = 'custom-v1'; + } + + return DailyIframe.wrap(iframeEl, properties); + } + }]); + + function DailyIframe(iframeish) { + var _this; + + var properties = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + classCallCheck(this, DailyIframe); + + _this = _super.call(this); + + defineProperty(assertThisInitialized(_this), "startListeningForDeviceChanges", function () { + if (typeof navigator.mediaDevices.ondevicechange !== 'undefined' || isReactNative()) { + // Desktop web, iOS web, and React Native support the 'devicechange' event + navigator.mediaDevices.addEventListener('devicechange', _this.deviceChangeListener); + } else { + // Android Chrome/Samsung Internet doesn't support the 'devicechange' + // event, so do polling instead + _this.startPollingForDeviceChanges(); + } + }); + + defineProperty(assertThisInitialized(_this), "stopListeningForDeviceChanges", function () { + if (typeof navigator.mediaDevices.ondevicechange !== 'undefined' || isReactNative()) { + // Desktop web, iOS web, and React Native support the 'devicechange' event + navigator.mediaDevices.removeEventListener('devicechange', _this.deviceChangeListener); + } else { + // Android Chrome/Samsung Internet doesn't support the 'devicechange' + // event, so do polling instead + _this.stopPollingForDeviceChanges(); + } + }); + + defineProperty(assertThisInitialized(_this), "deviceChangeListener", /*#__PURE__*/asyncToGenerator(function* () { + // Let our own enumerateDevices() method be the source of truth + var devicesInfo = yield _this.enumerateDevices(); + + _this.handleDeviceChange(devicesInfo.devices); + })); + + defineProperty(assertThisInitialized(_this), "handleDeviceChange", function (newDevices) { + _this.emit(DAILY_EVENT_AVAILABLE_DEVICES_UPDATED, { + action: DAILY_EVENT_AVAILABLE_DEVICES_UPDATED, + availableDevices: newDevices + }); + }); + + defineProperty(assertThisInitialized(_this), "startPollingForDeviceChanges", function () { + if (_this._deviceChangeInterval) return; + _this._deviceChangeInterval = setInterval( /*#__PURE__*/asyncToGenerator(function* () { + // Let our own enumerateDevices() method be the source of truth + var devicesInfo = yield _this.enumerateDevices(); + var devicesJSON = JSON.stringify(devicesInfo); + + if (_this._lastDevicesJSON && devicesJSON !== _this._lastDevicesJSON) { + _this.handleDeviceChange(devicesInfo.devices); + } + + _this._lastDevicesJSON = devicesJSON; + }), 3000); + }); + + defineProperty(assertThisInitialized(_this), "stopPollingForDeviceChanges", function () { + if (!_this._deviceChangeInterval) return; + clearInterval(_this._deviceChangeInterval); + _this._deviceChangeInterval = null; + _this._lastDevicesJSON = null; + }); + + defineProperty(assertThisInitialized(_this), "handleNativeAppActiveStateChange", function (isActive) { + // If automatic video device management is disabled, bail + if (_this.disableReactNativeAutoDeviceManagement('video')) { + return; + } + + if (isActive) { + // If cam was unmuted before losing focus, unmute + // (Note this is assumption is not perfect, since theoretically an app + // could unmute while in the background, but it's decent for now) + if (_this.camUnmutedBeforeLosingNativeActiveState) { + _this.setLocalVideo(true); + } + } else { + _this.camUnmutedBeforeLosingNativeActiveState = _this.localVideo(); // Mute cam, but check first whether we have local video in the first + // place: if we don't, we may still be in the gUM process, with the app + // "inactive" simply because it's behind the permissions dialogs. + + if (_this.camUnmutedBeforeLosingNativeActiveState) { + _this.setLocalVideo(false); + } + } + }); + + defineProperty(assertThisInitialized(_this), "handleNativeAudioFocusChange", function (hasFocus) { + // If automatic audio device management is disabled, bail + if (_this.disableReactNativeAutoDeviceManagement('audio')) { + return; + } + + _this._hasNativeAudioFocus = hasFocus; // toggle participant audio if needed + + _this.toggleParticipantAudioBasedOnNativeAudioFocus(); // toggle mic mute if needed + + + if (_this._hasNativeAudioFocus) { + // If mic was unmuted before losing focus, unmute + // (Note this is assumption is not perfect, since theoretically an app + // could unmute while in the background, but it's decent for now) + if (_this.micUnmutedBeforeLosingNativeAudioFocus) { + _this.setLocalAudio(true); + } + } else { + _this.micUnmutedBeforeLosingNativeAudioFocus = _this.localAudio(); + + _this.setLocalAudio(false); + } + }); + + properties.dailyJsVersion = DailyIframe.version(); + _this._iframe = iframeish; + _this._callObjectMode = properties.layout === 'none' && !_this._iframe; + _this._preloadCache = initializePreloadCache(); + + if (_this._callObjectMode) { + window._dailyPreloadCache = _this._preloadCache; + } + + if (properties.showLocalVideo !== undefined) { + if (_this._callObjectMode) { + console.error('showLocalVideo is not available in call object mode'); + } else { + _this._showLocalVideo = !!properties.showLocalVideo; + } + } else { + _this._showLocalVideo = true; + } + + if (properties.showParticipantsBar !== undefined) { + if (_this._callObjectMode) { + console.error('showParticipantsBar is not available in call object mode'); + } else { + _this._showParticipantsBar = !!properties.showParticipantsBar; + } + } else { + _this._showParticipantsBar = true; + } + + if (properties.customIntegrations !== undefined) { + if (_this._callObjectMode) { + console.error('customIntegrations is not available in call object mode'); + } else { + _this._customIntegrations = properties.customIntegrations; + } + } else { + _this._customIntegrations = {}; + } + + if (properties.customTrayButtons !== undefined) { + if (_this._callObjectMode) { + console.error('customTrayButtons is not available in call object mode'); + } else { + _this._customTrayButtons = properties.customTrayButtons; + } + } else { + _this._customTrayButtons = {}; + } + + if (properties.activeSpeakerMode !== undefined) { + if (_this._callObjectMode) { + console.error('activeSpeakerMode is not available in call object mode'); + } else { + _this._activeSpeakerMode = !!properties.activeSpeakerMode; + } + } else { + _this._activeSpeakerMode = false; + } + + if (properties.receiveSettings) { + if (_this._callObjectMode) { + _this._receiveSettings = properties.receiveSettings; + } else { + console.error('receiveSettings is only available in call object mode'); + } + } else { + // Here we avoid falling back to defaults, instead letting the call + // machine decide on defaults when its loaded and telling us about them + // via a DAILY_EVENT_RECEIVE_SETTINGS_UPDATED event. This will make it + // easier to update defaults in the future, eliminating the worry of + // daily-js getting out of sync with the call machine. + _this._receiveSettings = {}; + } + + _this._inputSettings = {}; + + if (properties.inputSettings) { + // #Question: Do I need the call-object check here? + _this._inputSettings = properties.inputSettings; + } + + _this.validateProperties(properties); + + _this.properties = _objectSpread$1({}, properties); + _this._callObjectLoader = _this._callObjectMode ? new CallObjectLoader() : null; + _this._callState = DAILY_STATE_NEW; // only update via updateIsPreparingToJoin() or _updateCallState() + + _this._isPreparingToJoin = false; // only update via _updateCallState() + + _this._accessState = { + access: DAILY_ACCESS_UNKNOWN + }; + _this._meetingSessionState = DEFAULT_SESSION_STATE; + _this._nativeInCallAudioMode = NATIVE_AUDIO_MODE_VIDEO_CALL; + _this._participants = {}; + _this._participantCounts = EMPTY_PARTICIPANT_COUNTS; + _this._rmpPlayerState = {}; + _this._waitingParticipants = {}; + _this._inputEventsOn = {}; // need to cache these until loaded + + _this._network = { + threshold: 'good', + quality: 100 + }; + _this._activeSpeaker = {}; + _this._callFrameId = randomStringId(); + _this._messageChannel = isReactNative() ? new ReactNativeMessageChannel() : new WebMessageChannel(); // fullscreen event listener + + if (_this._iframe) { + if (_this._iframe.requestFullscreen) { + // chrome (not safari) + _this._iframe.addEventListener('fullscreenchange', function (e) { + if (document.fullscreenElement === _this._iframe) { + _this.emit(DAILY_EVENT_FULLSCREEN, { + action: DAILY_EVENT_FULLSCREEN + }); + + _this.sendMessageToCallMachine({ + action: DAILY_EVENT_FULLSCREEN + }); + } else { + _this.emit(DAILY_EVENT_EXIT_FULLSCREEN, { + action: DAILY_EVENT_EXIT_FULLSCREEN + }); + + _this.sendMessageToCallMachine({ + action: DAILY_EVENT_EXIT_FULLSCREEN + }); + } + }); + } else if (_this._iframe.webkitRequestFullscreen) { + // safari + _this._iframe.addEventListener('webkitfullscreenchange', function (e) { + if (document.webkitFullscreenElement === _this._iframe) { + _this.emit(DAILY_EVENT_FULLSCREEN, { + action: DAILY_EVENT_FULLSCREEN + }); + + _this.sendMessageToCallMachine({ + action: DAILY_EVENT_FULLSCREEN + }); + } else { + _this.emit(DAILY_EVENT_EXIT_FULLSCREEN, { + action: DAILY_EVENT_EXIT_FULLSCREEN + }); + + _this.sendMessageToCallMachine({ + action: DAILY_EVENT_EXIT_FULLSCREEN + }); + } + }); + } + } // add native event listeners + + + if (isReactNative()) { + var nativeUtils = _this.nativeUtils(); + + if (!(nativeUtils.addAudioFocusChangeListener && nativeUtils.removeAudioFocusChangeListener && nativeUtils.addAppActiveStateChangeListener && nativeUtils.removeAppActiveStateChangeListener)) { + console.warn('expected (add|remove)(AudioFocus|AppActiveState)ChangeListener to be available in React Native'); + } // audio focus event, used for auto-muting mic + + + _this._hasNativeAudioFocus = true; + nativeUtils.addAudioFocusChangeListener(_this.handleNativeAudioFocusChange); // app active state event, used for auto-muting cam + + nativeUtils.addAppActiveStateChangeListener(_this.handleNativeAppActiveStateChange); + } // start available device change listener in call object mode (including RN). + // note: in iframe mode, Prebuilt's internal call object will handle this, + // and the events it sends will propagate up appropriately. + + + if (_this._callObjectMode) { + _this.startListeningForDeviceChanges(); + } + + _this._messageChannel.addListenerForMessagesFromCallMachine(_this.handleMessageFromCallMachine, _this._callFrameId, assertThisInitialized(_this)); + + return _this; + } // + // instance methods + // + + + createClass(DailyIframe, [{ + key: "destroy", + value: function () { + var _destroy = asyncToGenerator(function* () { + try { + if ([DAILY_STATE_JOINED, DAILY_STATE_LOADING].includes(this._callState)) { + yield this.leave(); + } + } catch (e) {} + + var iframe = this._iframe; + + if (iframe) { + var parent = iframe.parentElement; + + if (parent) { + parent.removeChild(iframe); + } + } + + this._messageChannel.removeListener(this.handleMessageFromCallMachine); // tear down native event listeners + + + if (isReactNative()) { + var nativeUtils = this.nativeUtils(); + nativeUtils.removeAudioFocusChangeListener(this.handleNativeAudioFocusChange); + nativeUtils.removeAppActiveStateChangeListener(this.handleNativeAppActiveStateChange); + } // tear down available device change listener + + + if (this._callObjectMode) { + this.stopListeningForDeviceChanges(); + } + + this.resetMeetingDependentVars(); + }); + + function destroy() { + return _destroy.apply(this, arguments); + } + + return destroy; + }() + }, { + key: "loadCss", + value: function loadCss(_ref3) { + var bodyClass = _ref3.bodyClass, + cssFile = _ref3.cssFile, + cssText = _ref3.cssText; + methodNotSupportedInReactNative(); + this.sendMessageToCallMachine({ + action: DAILY_METHOD_LOAD_CSS, + cssFile: this.absoluteUrl(cssFile), + bodyClass: bodyClass, + cssText: cssText + }); + return this; + } + }, { + key: "iframe", + value: function iframe() { + methodNotSupportedInReactNative(); + return this._iframe; + } + }, { + key: "meetingState", + value: function meetingState() { + // TODO: This function will be deprecated and renamed to callState() + // for better consistency in naming + return this._callState; + } + }, { + key: "accessState", + value: function accessState() { + if (!this._callObjectMode) { + throw new Error('accessState() currently only supported in call object mode'); + } + + return this._accessState; + } + }, { + key: "participants", + value: function participants() { + return this._participants; + } + }, { + key: "participantCounts", + value: function participantCounts() { + return this._participantCounts; + } + }, { + key: "waitingParticipants", + value: function waitingParticipants() { + if (!this._callObjectMode) { + throw new Error('waitingParticipants() currently only supported in call object mode'); + } + + return this._waitingParticipants; + } + }, { + key: "validateParticipantProperties", + value: function validateParticipantProperties(sessionId, properties) { + for (var prop in properties) { + if (!PARTICIPANT_PROPS[prop]) { + throw new Error("unrecognized updateParticipant property ".concat(prop)); + } + + if (PARTICIPANT_PROPS[prop].validate) { + if (!PARTICIPANT_PROPS[prop].validate(properties[prop], this, this._participants[sessionId])) { + throw new Error(PARTICIPANT_PROPS[prop].help); + } + } + } + } + }, { + key: "updateParticipant", + value: function updateParticipant(sessionId, properties) { + if (this._participants.local && this._participants.local.session_id === sessionId) { + sessionId = 'local'; + } + + if (sessionId && properties) { + this.validateParticipantProperties(sessionId, properties); + this.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_PARTICIPANT, + id: sessionId, + properties: properties + }); + } + + return this; + } + }, { + key: "updateParticipants", + value: function updateParticipants(properties) { + var localId = this._participants.local && this._participants.local.session_id; + + for (var sessionId in properties) { + if (sessionId === localId) { + sessionId = 'local'; + } + + if (sessionId && properties[sessionId]) { + this.validateParticipantProperties(sessionId, properties[sessionId]); + } + } + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_PARTICIPANTS, + participants: properties + }); + return this; + } + }, { + key: "updateWaitingParticipant", + value: function () { + var _updateWaitingParticipant = asyncToGenerator(function* () { + var _this2 = this; + + var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var updates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + // Validate mode. + if (!this._callObjectMode) { + throw new Error('updateWaitingParticipant() currently only supported in call object mode'); + } // Validate call state: only allowed once you've joined. + + + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('updateWaitingParticipant() only supported for joined meetings'); + } // Validate argument presence. + + + if (!(typeof id === 'string' && _typeof_1(updates) === 'object')) { + throw new Error('updateWaitingParticipant() must take an id string and a updates object'); + } + + return new Promise(function (resolve, reject) { + var k = function k(msg) { + if (msg.error) { + reject(msg.error); + } + + if (!msg.id) { + reject(new Error('unknown error in updateWaitingParticipant()')); + } + + resolve({ + id: msg.id + }); + }; + + _this2.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_WAITING_PARTICIPANT, + id: id, + updates: updates + }, k); + }); + }); + + function updateWaitingParticipant() { + return _updateWaitingParticipant.apply(this, arguments); + } + + return updateWaitingParticipant; + }() + }, { + key: "updateWaitingParticipants", + value: function () { + var _updateWaitingParticipants = asyncToGenerator(function* () { + var _this3 = this; + + var updatesById = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + // Validate mode. + if (!this._callObjectMode) { + throw new Error('updateWaitingParticipants() currently only supported in call object mode'); + } // Validate call state: only allowed once you've joined. + + + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('updateWaitingParticipants() only supported for joined meetings'); + } // Validate argument presence. + + + if (_typeof_1(updatesById) !== 'object') { + throw new Error('updateWaitingParticipants() must take a mapping between ids and update objects'); + } + + return new Promise(function (resolve, reject) { + var k = function k(msg) { + if (msg.error) { + reject(msg.error); + } + + if (!msg.ids) { + reject(new Error('unknown error in updateWaitingParticipants()')); + } + + resolve({ + ids: msg.ids + }); + }; + + _this3.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_WAITING_PARTICIPANTS, + updatesById: updatesById + }, k); + }); + }); + + function updateWaitingParticipants() { + return _updateWaitingParticipants.apply(this, arguments); + } + + return updateWaitingParticipants; + }() + }, { + key: "requestAccess", + value: function () { + var _requestAccess = asyncToGenerator(function* () { + var _this4 = this; + + var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref4$access = _ref4.access, + access = _ref4$access === void 0 ? { + level: DAILY_ACCESS_LEVEL_FULL + } : _ref4$access, + _ref4$name = _ref4.name, + name = _ref4$name === void 0 ? '' : _ref4$name; + + // Validate mode. + if (!this._callObjectMode) { + throw new Error('requestAccess() currently only supported in call object mode'); + } // Validate call state: access requesting is only allowed once you've + // joined. + + + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('requestAccess() only supported for joined meetings'); + } + + return new Promise(function (resolve, reject) { + var k = function k(msg) { + if (msg.error) { + reject(msg.error); + } + + if (!msg.access) { + reject(new Error('unknown error in requestAccess()')); + } + + resolve({ + access: msg.access, + granted: msg.granted + }); + }; + + _this4.sendMessageToCallMachine({ + action: DAILY_METHOD_REQUEST_ACCESS, + access: access, + name: name + }, k); + }); + }); + + function requestAccess() { + return _requestAccess.apply(this, arguments); + } + + return requestAccess; + }() + }, { + key: "localAudio", + value: function localAudio() { + if (this._participants.local) { + return this._participants.local.audio; + } + + return null; + } + }, { + key: "localVideo", + value: function localVideo() { + if (this._participants.local) { + return this._participants.local.video; + } + + return null; + } + }, { + key: "setLocalAudio", + value: function setLocalAudio(bool) { + this.sendMessageToCallMachine({ + action: DAILY_METHOD_LOCAL_AUDIO, + state: bool + }); + return this; + } + }, { + key: "setLocalVideo", + value: function setLocalVideo(bool) { + this.sendMessageToCallMachine({ + action: DAILY_METHOD_LOCAL_VIDEO, + state: bool + }); + return this; + } // NOTE: "base" receive settings will not appear until the call machine bundle + // is initialized (e.g. after a call to join()). + // Listen for the receive-settings-updated to be notified when those come in. + + }, { + key: "getReceiveSettings", + value: function () { + var _getReceiveSettings = asyncToGenerator(function* (id) { + var _this5 = this; + + var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref5$showInheritedVa = _ref5.showInheritedValues, + showInheritedValues = _ref5$showInheritedVa === void 0 ? false : _ref5$showInheritedVa; + + // Validate mode. + if (!this._callObjectMode) { + throw new Error('getReceiveSettings() only supported in call object mode'); + } // This method can be called in two main ways: + // - it can get receive settings for a specific participant (or "base") + // - it can get *all* receive settings + + + switch (_typeof_1(id)) { + // Case: getting receive settings for a single participant + case 'string': + // Ask call machine to get receive settings for the participant. + // Centralizing this nontrivial fetching logic in the call machine, + // rather than attempting to duplicate it here, avoids the problem of + // daily-js and the call machine getting out of sync. + return new Promise(function (resolve) { + var k = function k(msg) { + resolve(msg.receiveSettings); + }; + + _this5.sendMessageToCallMachine({ + action: DAILY_METHOD_GET_SINGLE_PARTICIPANT_RECEIVE_SETTINGS, + id: id, + showInheritedValues: showInheritedValues + }, k); + }); + // Case: getting all receive settings + + case 'undefined': + return this._receiveSettings; + + default: + throw new Error('first argument to getReceiveSettings() must be a participant id (or "base"), or there should be no arguments'); + } + }); + + function getReceiveSettings(_x) { + return _getReceiveSettings.apply(this, arguments); + } + + return getReceiveSettings; + }() + }, { + key: "updateReceiveSettings", + value: function () { + var _updateReceiveSettings = asyncToGenerator(function* (receiveSettings) { + var _this6 = this; + + // Validate mode. + if (!this._callObjectMode) { + throw new Error('updateReceiveSettings() only supported in call object mode'); + } // Validate receive settings. + + + if (!validateReceiveSettings(receiveSettings, { + allowAllParticipantsKey: true + })) { + throw new Error(receiveSettingsValidationHelpMsg({ + allowAllParticipantsKey: true + })); + } // Validate that call machine is joined. + // (We need the Redux state to be set up first; technically, we could + // proceed if we've either join()ed *or* preAuth()ed *or* startCamera()ed + // but since there's an easy alternative way to specify initial receive + // settings until join(), for simplicity let's just require that we be + // joined). + + + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('updateReceiveSettings() is only allowed when joined. To specify receive settings earlier, use the receiveSettings config property.'); + } // Ask call machine to update receive settings, then await callback. + + + return new Promise(function (resolve) { + var k = function k(msg) { + resolve({ + receiveSettings: msg.receiveSettings + }); + }; + + _this6.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_RECEIVE_SETTINGS, + receiveSettings: receiveSettings + }, k); + }); + }); + + function updateReceiveSettings(_x2) { + return _updateReceiveSettings.apply(this, arguments); + } + + return updateReceiveSettings; + }() // Input Settings Getter + // { video: { processor } } + // In the future: + // { video: {...}, audio: {...}, screenVideo: {...}, screenAudio: {...} } + + }, { + key: "getInputSettings", + value: function getInputSettings() { + var _this7 = this; + + return new Promise(function (resolve) { + resolve(_this7._inputSettings); + }); + } + }, { + key: "updateInputSettings", + value: function () { + var _updateInputSettings = asyncToGenerator(function* (inputSettings) { + var _this8 = this; + + // Ask call machine to update input settings, then await callback. + return new Promise(function (resolve, reject) { + if (!validateInputSettings(inputSettings)) { + console.error(inputSettingsValidationHelpMsg()); + reject(inputSettingsValidationHelpMsg()); + return; + } + + var k = function k(msg) { + if (msg.error) { + reject(msg.error); + } else { + resolve({ + inputSettings: msg.inputSettings + }); + } + }; + + _this8.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_INPUT_SETTINGS, + inputSettings: inputSettings + }, k); + }); + }); + + function updateInputSettings(_x3) { + return _updateInputSettings.apply(this, arguments); + } + + return updateInputSettings; + }() + }, { + key: "setBandwidth", + value: function setBandwidth(_ref6) { + var kbs = _ref6.kbs, + trackConstraints = _ref6.trackConstraints; + methodNotSupportedInReactNative(); + this.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_BANDWIDTH, + kbs: kbs, + trackConstraints: trackConstraints + }); + return this; + } + }, { + key: "getDailyLang", + value: function getDailyLang() { + var _this9 = this; + + methodNotSupportedInReactNative(); + return new Promise( /*#__PURE__*/function () { + var _ref7 = asyncToGenerator(function* (resolve) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + resolve(msg); + }; + + _this9.sendMessageToCallMachine({ + action: DAILY_METHOD_GET_LANG + }, k); + }); + + return function (_x4) { + return _ref7.apply(this, arguments); + }; + }()); + } + }, { + key: "setDailyLang", + value: function setDailyLang(lang) { + methodNotSupportedInReactNative(); + this.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_LANG, + lang: lang + }); + return this; + } + }, { + key: "getMeetingSession", + value: function () { + var _getMeetingSession = asyncToGenerator(function* () { + var _this10 = this; + + // Validate call state: meeting session details are only available + // once you have joined the meeting + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('getMeetingSession() is only allowed when joined'); + } + + return new Promise(function (resolve) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + delete msg.callFrameId; + resolve(msg); + }; + + _this10.sendMessageToCallMachine({ + action: DAILY_METHOD_GET_MEETING_SESSION + }, k); + }); + }); + + function getMeetingSession() { + return _getMeetingSession.apply(this, arguments); + } + + return getMeetingSession; + }() + }, { + key: "meetingSessionState", + value: function meetingSessionState() { + // Validate call state: meeting session details are only available + // once you have joined the meeting + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('meetingSessionState() is only available when joined'); + } // currently only default values returned + + + return this._meetingSessionState; + } + }, { + key: "setMeetingSessionData", + value: function setMeetingSessionData(data) { + var mergeStrategy = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'replace'; + + // Validate call state: session data can only be set once you have + // joined the meeting + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('setMeetingSessionData() is only available when joined'); + } + + try { + validateSessionDataUpdate(data, mergeStrategy); + } catch (e) { + console.error(e); + throw e; + } + + try { + this.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_SESSION_DATA, + data: data, + mergeStrategy: mergeStrategy + }); + } catch (e) { + // Probably data was not structured-clonable and couldn't be sent in the + // message to the call machine... + throw new Error("Error setting meeting session data: ".concat(e)); + } + } + }, { + key: "setUserName", + value: function setUserName(name, options) { + var _this11 = this; + + this.properties.userName = name; + return new Promise(function (resolve) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + resolve(msg); + }; + + _this11.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_USER_NAME, + name: name !== null && name !== void 0 ? name : '', + thisMeetingOnly: isReactNative() || (options ? !!options.thisMeetingOnly : false) + }, k); + }); + } + }, { + key: "setUserData", + value: function () { + var _setUserData = asyncToGenerator(function* (data) { + var _this12 = this; + + try { + validateUserData(data); + } catch (e) { + console.error(e); + throw e; + } + + this.properties.userData = data; + return new Promise(function (resolve) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + delete msg.callFrameId; + resolve(msg); + }; + + try { + _this12.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_USER_DATA, + userData: data + }, k); + } catch (e) { + // Probably userData was not structured-clonable and couldn't be sent in + // a message to the call machine... + throw new Error("Error setting user data: ".concat(e)); + } + }); + }); + + function setUserData(_x5) { + return _setUserData.apply(this, arguments); + } + + return setUserData; + }() + }, { + key: "startCamera", + value: function startCamera() { + var _this13 = this; + + var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + // Validate mode. + if (!this._callObjectMode) { + throw new Error('startCamera() currently only supported in call object mode'); + } // Validate call state: startCamera() is only allowed if you haven't + // already joined (or aren't in the process of joining). + + + if ([DAILY_STATE_JOINING, DAILY_STATE_JOINED].includes(this._callState)) { + throw new Error('startCamera() not supported after joining a meeting: did you mean to use setLocalAudio() and/or setLocalVideo() instead?'); + } + + return new Promise( /*#__PURE__*/function () { + var _ref8 = asyncToGenerator(function* (resolve, reject) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + resolve(msg); + }; + + if (_this13.needsLoad()) { + try { + yield _this13.load(properties); + } catch (e) { + reject(e); + } + } else { + // even if is already loaded, needs to validate the properties, so the dailyConfig properties can be inserted inside window._dailyConfig + _this13.validateProperties(properties); + } + + _this13.sendMessageToCallMachine({ + action: DAILY_METHOD_START_CAMERA, + properties: makeSafeForPostMessage(_this13.properties), + preloadCache: makeSafeForPostMessage(_this13._preloadCache) + }, k); + }); + + return function (_x6, _x7) { + return _ref8.apply(this, arguments); + }; + }()); + } + }, { + key: "validateCustomTrack", + value: function validateCustomTrack(track, mode, trackName) { + if (trackName && trackName.length > 50) { + throw new Error('Custom track `trackName` must not be more than 50 characters'); + } + + if (mode) { + // Since no property from DailyMicAudioModeSettings is required, we are just checking if It is an object + if (mode !== 'music' && mode !== 'speech' && !(mode instanceof Object)) { + throw new Error('Custom track `mode` must be either `music` | `speech` | `DailyMicAudioModeSettings` or `undefined`'); + } + } + + var isUsingReservedTrackName = trackName ? ['cam-audio', 'cam-video', 'screen-video', 'screen-audio', 'rmpAudio', 'rmpVideo'].includes(trackName) : false; + + if (isUsingReservedTrackName) { + throw new Error('Custom track `trackName` must not match a track name already used by daily: ' + 'cam-audio, cam-video, screen-video, screen-audio, rmpAudio, rmpVideo'); + } + + if (!(track instanceof MediaStreamTrack)) { + throw new Error('Custom tracks provided must be instances of MediaStreamTrack'); + } + } + }, { + key: "startCustomTrack", + value: function startCustomTrack() { + var _this14 = this; + + var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { + track: track, + mode: mode, + trackName: trackName + }; + methodNotSupportedInReactNative(); + this.validateCustomTrack(properties.track, properties.mode, properties.trackName); // Validate meeting state: custom tracks are only available + // once you have joined the meeting + + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('startCustomTrack() is only allowed when joined'); + } + + return new Promise(function (resolve, _) { + var k = function k(msg) { + if (msg.error) { + reject({ + error: msg.error + }); + } else { + resolve(msg.mediaTag); + } + }; + + window._dailyPreloadCache.customTrack = properties.track; + properties.track = DAILY_CUSTOM_TRACK; + + _this14.sendMessageToCallMachine({ + action: DAILY_METHOD_START_CUSTOM_TRACK, + properties: properties + }, k); + }); + } + }, { + key: "stopCustomTrack", + value: function stopCustomTrack(trackName) { + var _this15 = this; + + methodNotSupportedInReactNative(); // Validate meeting state: custom tracks are only available + // once you have joined the meeting + + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('stopCustomTrack() is only allowed when joined'); + } + + return new Promise(function (resolve, _) { + var k = function k(msg) { + resolve(msg.mediaTag); + }; + + _this15.sendMessageToCallMachine({ + action: DAILY_METHOD_STOP_CUSTOM_TRACK, + mediaTag: trackName + }, k); + }); + } + }, { + key: "setCamera", + value: function setCamera(cameraDeviceId) { + var _this16 = this; + + methodOnlySupportedInReactNative(); + + if (this.needsLoad()) { + throw new Error('Before you can invoke setCamera, first you need to invoke one of these methods: join, startCamera, or preAuth'); + } + + return new Promise(function (resolve, _) { + var k = function k(msg) { + resolve({ + device: msg.device + }); + }; + + _this16.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_CAMERA, + cameraDeviceId: cameraDeviceId + }, k); + }); + } + }, { + key: "setAudioDevice", + value: function () { + var _setAudioDevice = asyncToGenerator(function* (deviceId) { + methodOnlySupportedInReactNative(); + this.nativeUtils().setAudioDevice(deviceId); + var currentAudioDevice = yield this.nativeUtils().getAudioDevice(); + return { + deviceId: currentAudioDevice + }; + }); + + function setAudioDevice(_x8) { + return _setAudioDevice.apply(this, arguments); + } + + return setAudioDevice; + }() + }, { + key: "cycleCamera", + value: function cycleCamera() { + var _this17 = this; + + return new Promise(function (resolve, _) { + var k = function k(msg) { + resolve({ + device: msg.device + }); + }; + + _this17.sendMessageToCallMachine({ + action: DAILY_METHOD_CYCLE_CAMERA + }, k); + }); + } + }, { + key: "cycleMic", + value: function cycleMic() { + var _this18 = this; + + methodNotSupportedInReactNative(); + return new Promise(function (resolve, _) { + var k = function k(msg) { + resolve({ + device: msg.device + }); + }; + + _this18.sendMessageToCallMachine({ + action: DAILY_METHOD_CYCLE_MIC + }, k); + }); + } + }, { + key: "getCameraFacingMode", + value: function getCameraFacingMode() { + var _this19 = this; + + methodOnlySupportedInReactNative(); + return new Promise(function (resolve, _) { + var k = function k(msg) { + resolve(msg.facingMode); + }; + + _this19.sendMessageToCallMachine({ + action: DAILY_METHOD_GET_CAMERA_FACING_MODE + }, k); + }); + } + }, { + key: "setInputDevices", + value: function setInputDevices(_ref9) { + var audioDeviceId = _ref9.audioDeviceId, + videoDeviceId = _ref9.videoDeviceId, + audioSource = _ref9.audioSource, + videoSource = _ref9.videoSource; + console.warn('setInputDevices() is deprecated: instead use setInputDevicesAsync(), which returns a Promise'); + this.setInputDevicesAsync({ + audioDeviceId: audioDeviceId, + videoDeviceId: videoDeviceId, + audioSource: audioSource, + videoSource: videoSource + }); + return this; + } + }, { + key: "setInputDevicesAsync", + value: function () { + var _setInputDevicesAsync = asyncToGenerator(function* (_ref10) { + var _this20 = this; + + var audioDeviceId = _ref10.audioDeviceId, + videoDeviceId = _ref10.videoDeviceId, + audioSource = _ref10.audioSource, + videoSource = _ref10.videoSource; + methodNotSupportedInReactNative(); // use audioDeviceId and videoDeviceId internally + + if (audioSource !== undefined) { + audioDeviceId = audioSource; + } + + if (videoSource !== undefined) { + videoDeviceId = videoSource; + } // cache these for use in subsequent calls + + + if (audioDeviceId) { + this._preloadCache.audioDeviceId = audioDeviceId; + } + + if (videoDeviceId) { + this._preloadCache.videoDeviceId = videoDeviceId; + } // if we're in callObject mode and not loaded yet, don't do anything + + + if (this._callObjectMode && this.needsLoad()) { + return { + camera: { + deviceId: this._preloadCache.videoDeviceId + }, + mic: { + deviceId: this._preloadCache.audioDeviceId + }, + speaker: { + deviceId: this._preloadCache.outputDeviceId + } + }; + } + + if (audioDeviceId instanceof MediaStreamTrack) { + audioDeviceId = DAILY_CUSTOM_TRACK; + } + + if (videoDeviceId instanceof MediaStreamTrack) { + videoDeviceId = DAILY_CUSTOM_TRACK; + } + + return new Promise(function (resolve) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + + if (msg.returnPreloadCache) { + resolve({ + camera: { + deviceId: _this20._preloadCache.videoDeviceId + }, + mic: { + deviceId: _this20._preloadCache.audioDeviceId + }, + speaker: { + deviceId: _this20._preloadCache.outputDeviceId + } + }); + return; + } + + resolve(msg); + }; + + _this20.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_INPUT_DEVICES, + audioDeviceId: audioDeviceId, + videoDeviceId: videoDeviceId + }, k); + }); + }); + + function setInputDevicesAsync(_x9) { + return _setInputDevicesAsync.apply(this, arguments); + } + + return setInputDevicesAsync; + }() + }, { + key: "setOutputDevice", + value: function setOutputDevice(_ref11) { + var outputDeviceId = _ref11.outputDeviceId; + console.warn('setOutputDevice() is deprecated: instead use setOutputDeviceAsync(), which returns a Promise'); + this.setOutputDeviceAsync({ + outputDeviceId: outputDeviceId + }); + return this; + } + }, { + key: "setOutputDeviceAsync", + value: function () { + var _setOutputDeviceAsync = asyncToGenerator(function* (_ref12) { + var _this21 = this; + + var outputDeviceId = _ref12.outputDeviceId; + methodNotSupportedInReactNative(); // cache this for use later + + if (outputDeviceId) { + this._preloadCache.outputDeviceId = outputDeviceId; + } // if we're in callObject mode and not loaded yet, don't do anything + + + if (this._callObjectMode && this.needsLoad()) { + return { + camera: { + deviceId: this._preloadCache.videoDeviceId + }, + mic: { + deviceId: this._preloadCache.audioDeviceId + }, + speaker: { + deviceId: this._preloadCache.outputDeviceId + } + }; + } + + return new Promise(function (resolve) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + + if (msg.returnPreloadCache) { + resolve({ + camera: { + deviceId: _this21._preloadCache.videoDeviceId + }, + mic: { + deviceId: _this21._preloadCache.audioDeviceId + }, + speaker: { + deviceId: _this21._preloadCache.outputDeviceId + } + }); + return; + } + + resolve(msg); + }; + + _this21.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_OUTPUT_DEVICE, + outputDeviceId: outputDeviceId + }, k); + }); + }); + + function setOutputDeviceAsync(_x10) { + return _setOutputDeviceAsync.apply(this, arguments); + } + + return setOutputDeviceAsync; + }() + }, { + key: "getInputDevices", + value: function () { + var _getInputDevices = asyncToGenerator(function* () { + var _this22 = this; + + if (this._callObjectMode && this.needsLoad()) { + return { + camera: { + deviceId: this._preloadCache.videoDeviceId + }, + mic: { + deviceId: this._preloadCache.audioDeviceId + }, + speaker: { + deviceId: this._preloadCache.outputDeviceId + } + }; + } + + return new Promise(function (resolve, reject) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + + if (msg.returnPreloadCache) { + resolve({ + camera: { + deviceId: _this22._preloadCache.videoDeviceId + }, + mic: { + deviceId: _this22._preloadCache.audioDeviceId + }, + speaker: { + deviceId: _this22._preloadCache.outputDeviceId + } + }); + return; + } + + resolve(msg); + }; + + _this22.sendMessageToCallMachine({ + action: DAILY_METHOD_GET_INPUT_DEVICES + }, k); + }); + }); + + function getInputDevices() { + return _getInputDevices.apply(this, arguments); + } + + return getInputDevices; + }() + }, { + key: "nativeInCallAudioMode", + value: function nativeInCallAudioMode() { + methodOnlySupportedInReactNative(); + return this._nativeInCallAudioMode; + } + }, { + key: "setNativeInCallAudioMode", + value: function setNativeInCallAudioMode(inCallAudioMode) { + methodOnlySupportedInReactNative(); + + if (![NATIVE_AUDIO_MODE_VIDEO_CALL, NATIVE_AUDIO_MODE_VOICE_CALL].includes(inCallAudioMode)) { + console.error('invalid in-call audio mode specified: ', inCallAudioMode); + return; + } + + if (inCallAudioMode === this._nativeInCallAudioMode) { + return; + } // Set new audio mode (video call, audio call) to use when we're in a call + + + this._nativeInCallAudioMode = inCallAudioMode; // If we're in a call now, apply the new audio mode + // (assuming automatic audio device management isn't disabled) + + if (!this.disableReactNativeAutoDeviceManagement('audio') && this._isCallPendingOrOngoing(this._callState, this._isPreparingToJoin)) { + this.nativeUtils().setAudioMode(this._nativeInCallAudioMode); + } + + return this; + } + }, { + key: "preAuth", + value: function () { + var _preAuth = asyncToGenerator(function* () { + var _this23 = this; + + var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + // Validate mode. + if (!this._callObjectMode) { + throw new Error('preAuth() currently only supported in call object mode'); + } // Validate call state: pre-auth is only allowed if you haven't already + // joined (or aren't in the process of joining). + + + if ([DAILY_STATE_JOINING, DAILY_STATE_JOINED].includes(this._callState)) { + throw new Error('preAuth() not supported after joining a meeting'); + } // Load call machine bundle, if needed. + + + if (this.needsLoad()) { + yield this.load(properties); + } // Assign properties, ensuring that at a minimum url is set. + + + if (!properties.url) { + throw new Error('preAuth() requires at least a url to be provided'); + } + + this.validateProperties(properties); + this.properties = _objectSpread$1(_objectSpread$1({}, this.properties), properties); // Pre-auth with the server. + + return new Promise(function (resolve, reject) { + var k = function k(msg) { + if (msg.error) { + return reject(msg.error); + } + + if (!msg.access) { + return reject(new Error('unknown error in preAuth()')); + } // Set a flag indicating that we've pre-authed. + // This flag has the effect of "locking in" url and token, so that they + // can't be changed subsequently on join(), which would invalidate this + // pre-auth. + + + _this23._didPreAuth = true; + resolve({ + access: msg.access + }); + }; + + _this23.sendMessageToCallMachine({ + action: DAILY_METHOD_PREAUTH, + properties: makeSafeForPostMessage(_this23.properties) + }, k); + }); + }); + + function preAuth() { + return _preAuth.apply(this, arguments); + } + + return preAuth; + }() + }, { + key: "load", + value: function () { + var _load = asyncToGenerator(function* (properties) { + var _this24 = this; + + if (!this.needsLoad()) { + return; + } + + if (properties) { + this.validateProperties(properties); + this.properties = _objectSpread$1(_objectSpread$1({}, this.properties), properties); + } // In iframe mode, we *must* have a meeting url + // (As opposed to call object mode, where a meeting url, a base url, or no + // url at all are all valid here) + + + if (!this._callObjectMode && !this.properties.url) { + throw new Error("can't load iframe meeting because url property isn't set"); + } + + this._updateCallState(DAILY_STATE_LOADING); + + try { + this.emit(DAILY_EVENT_LOADING, { + action: DAILY_EVENT_LOADING + }); + } catch (e) { + console.log("could not emit 'loading'", e); + } + + if (this._callObjectMode) { + // non-iframe, callObjectMode + return new Promise(function (resolve, reject) { + _this24._callObjectLoader.cancel(); + + _this24._callObjectLoader.load(_this24._callFrameId, _this24.properties.dailyConfig && _this24.properties.dailyConfig.avoidEval, function (wasNoOp) { + _this24._updateCallState(DAILY_STATE_LOADED); // Only need to emit event if load was a no-op, since the loaded + // bundle won't be emitting it if it's not executed again + + + wasNoOp && _this24.emit(DAILY_EVENT_LOADED, { + action: DAILY_EVENT_LOADED + }); + resolve(); + }, function (errorMsg, willRetry) { + _this24.emit(DAILY_EVENT_LOAD_ATTEMPT_FAILED, { + action: DAILY_EVENT_LOAD_ATTEMPT_FAILED, + errorMsg: errorMsg + }); + + if (!willRetry) { + _this24._updateCallState(DAILY_STATE_ERROR); + + _this24.resetMeetingDependentVars(); + + _this24.emit(DAILY_EVENT_ERROR, { + action: DAILY_EVENT_ERROR, + errorMsg: errorMsg + }); + + reject(errorMsg); + } + }); + }); + } else { + // iframe + this._iframe.src = this.assembleMeetingUrl(); + return new Promise(function (resolve, reject) { + _this24._loadedCallback = function (error) { + if (_this24._callState === DAILY_STATE_ERROR) { + reject(error); + return; + } + + _this24._updateCallState(DAILY_STATE_LOADED); + + if (_this24.properties.cssFile || _this24.properties.cssText) { + _this24.loadCss(_this24.properties); + } + + for (var eventName in _this24._inputEventsOn) { + _this24.sendMessageToCallMachine({ + action: DAILY_METHOD_REGISTER_INPUT_HANDLER, + on: eventName + }); + } + + resolve(); + }; + }); + } + }); + + function load(_x11) { + return _load.apply(this, arguments); + } + + return load; + }() + }, { + key: "join", + value: function () { + var _join = asyncToGenerator(function* () { + var _this25 = this; + + var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var newCss = false; + + if (this.needsLoad()) { + this.updateIsPreparingToJoin(true); + + try { + yield this.load(properties); + } catch (e) { + this.updateIsPreparingToJoin(false); + return Promise.reject(e); + } + } else { + newCss = !!(this.properties.cssFile || this.properties.cssText); // Validate that any provided url or token doesn't conflict with url or + // token already used to preAuth() + + if (this._didPreAuth) { + if (properties.url && properties.url !== this.properties.url) { + console.error("url in join() is different than the one used in preAuth()"); + this.updateIsPreparingToJoin(false); + return Promise.reject(); + } + + if (properties.token && properties.token !== this.properties.token) { + console.error("token in join() is different than the one used in preAuth()"); + this.updateIsPreparingToJoin(false); + return Promise.reject(); + } + } // In iframe mode, validate that url we're using to join() doesn't + // conflict with the url we used to load() + + + if (properties.url && !this._callObjectMode) { + if (properties.url && properties.url !== this.properties.url) { + console.error("url in join() is different than the one used in load() (".concat(this.properties.url, " -> ").concat(properties.url, ")")); + this.updateIsPreparingToJoin(false); + return Promise.reject(); + } + } // Validate and assign properties to this.properties, for use by call + // machine + + + this.validateProperties(properties); + this.properties = _objectSpread$1(_objectSpread$1({}, this.properties), properties); + } // only update if showLocalVideo/showParticipantsBar are being explicitly set + + + if (properties.showLocalVideo !== undefined) { + if (this._callObjectMode) { + console.error('showLocalVideo is not available in callObject mode'); + } else { + this._showLocalVideo = !!properties.showLocalVideo; + } + } + + if (properties.showParticipantsBar !== undefined) { + if (this._callObjectMode) { + console.error('showParticipantsBar is not available in callObject mode'); + } else { + this._showParticipantsBar = !!properties.showParticipantsBar; + } + } + + if (this._callState === DAILY_STATE_JOINED || this._callState === DAILY_STATE_JOINING) { + console.warn('already joined meeting, call leave() before joining again'); + this.updateIsPreparingToJoin(false); + return; + } + + this._updateCallState(DAILY_STATE_JOINING, false); + + try { + this.emit(DAILY_EVENT_JOINING_MEETING, { + action: DAILY_EVENT_JOINING_MEETING + }); + } catch (e) { + console.log("could not emit 'joining-meeting'", e); + } + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_JOIN, + properties: makeSafeForPostMessage(this.properties), + preloadCache: makeSafeForPostMessage(this._preloadCache) + }); + return new Promise(function (resolve, reject) { + _this25._joinedCallback = function (participants, error) { + if (_this25._callState === DAILY_STATE_ERROR) { + reject(error); + return; + } + + _this25._updateCallState(DAILY_STATE_JOINED); + + if (participants) { + for (var id in participants) { + if (_this25._callObjectMode) { + addTracks(participants[id]); + addCustomTracks(participants[id]); + addLegacyTracks(participants[id], _this25._participants[id]); + } + + _this25._participants[id] = _objectSpread$1({}, participants[id]); + + _this25.toggleParticipantAudioBasedOnNativeAudioFocus(); + } + } + + if (newCss) { + _this25.loadCss(_this25.properties); + } + + resolve(participants); + }; + }); + }); + + function join() { + return _join.apply(this, arguments); + } + + return join; + }() + }, { + key: "leave", + value: function () { + var _leave = asyncToGenerator(function* () { + var _this26 = this; + + return new Promise(function (resolve, _) { + if (_this26._callObjectLoader && !_this26._callObjectLoader.loaded) { + // If call object bundle never successfully loaded, cancel load if + // needed and clean up state immediately (without waiting for call + // machine to clean up its state). + _this26._callObjectLoader.cancel(); + + _this26._updateCallState(DAILY_STATE_LEFT); + + _this26.resetMeetingDependentVars(); + + try { + _this26.emit(DAILY_STATE_LEFT, { + action: DAILY_STATE_LEFT + }); + } catch (e) { + console.log("could not emit 'left-meeting'", e); + } + + resolve(); + } else if (_this26._callState === DAILY_STATE_LEFT || _this26._callState === DAILY_STATE_ERROR) { + // nothing to do, here, just resolve + resolve(); + } else { + _this26._resolveLeave = resolve; // TODO: the possibility that the iframe call machine is not yet loaded + // is never handled here... + + _this26.sendMessageToCallMachine({ + action: DAILY_METHOD_LEAVE + }); + } + }); + }); + + function leave() { + return _leave.apply(this, arguments); + } + + return leave; + }() + }, { + key: "startScreenShare", + value: function startScreenShare() { + var captureOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + methodNotSupportedInReactNative(); + + if (captureOptions.mediaStream) { + this._preloadCache.screenMediaStream = captureOptions.mediaStream; + captureOptions.mediaStream = DAILY_CUSTOM_TRACK; + } + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_START_SCREENSHARE, + captureOptions: captureOptions + }); + } + }, { + key: "stopScreenShare", + value: function stopScreenShare() { + methodNotSupportedInReactNative(); + this.sendMessageToCallMachine({ + action: DAILY_METHOD_STOP_SCREENSHARE + }); + } + }, { + key: "startRecording", + value: function startRecording() { + var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.sendMessageToCallMachine(_objectSpread$1({ + action: DAILY_METHOD_START_RECORDING + }, args)); + } + }, { + key: "updateRecording", + value: function updateRecording(_ref13) { + var _ref13$layout = _ref13.layout, + layout = _ref13$layout === void 0 ? { + preset: 'default' + } : _ref13$layout, + instanceId = _ref13.instanceId; + this.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_RECORDING, + layout: layout, + instanceId: instanceId + }); + } + }, { + key: "stopRecording", + value: function stopRecording() { + var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.sendMessageToCallMachine(_objectSpread$1({ + action: DAILY_METHOD_STOP_RECORDING + }, args)); + } + }, { + key: "startLiveStreaming", + value: function startLiveStreaming() { + var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.sendMessageToCallMachine(_objectSpread$1({ + action: DAILY_METHOD_START_LIVE_STREAMING + }, args)); + } + }, { + key: "updateLiveStreaming", + value: function updateLiveStreaming(_ref14) { + var _ref14$layout = _ref14.layout, + layout = _ref14$layout === void 0 ? { + preset: 'default' + } : _ref14$layout, + instanceId = _ref14.instanceId; + this.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_LIVE_STREAMING, + layout: layout, + instanceId: instanceId + }); + } + }, { + key: "addLiveStreamingEndpoints", + value: function addLiveStreamingEndpoints(_ref15) { + var endpoints = _ref15.endpoints, + instanceId = _ref15.instanceId; + this.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_LIVE_STREAMING_ENDPOINTS, + endpointsOp: UPDATE_LIVE_STREAMING_ENDPOINTS_OP.ADD_ENDPOINTS, + endpoints: endpoints, + instanceId: instanceId + }); + } + }, { + key: "removeLiveStreamingEndpoints", + value: function removeLiveStreamingEndpoints(_ref16) { + var endpoints = _ref16.endpoints, + instanceId = _ref16.instanceId; + this.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_LIVE_STREAMING_ENDPOINTS, + endpointsOp: UPDATE_LIVE_STREAMING_ENDPOINTS_OP.REMOVE_ENDPOINTS, + endpoints: endpoints, + instanceId: instanceId + }); + } + }, { + key: "stopLiveStreaming", + value: function stopLiveStreaming() { + var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.sendMessageToCallMachine(_objectSpread$1({ + action: DAILY_METHOD_STOP_LIVE_STREAMING + }, args)); + } + }, { + key: "startRemoteMediaPlayer", + value: function () { + var _startRemoteMediaPlayer = asyncToGenerator(function* (_ref17) { + var _this27 = this; + + var url = _ref17.url, + _ref17$settings = _ref17.settings, + settings = _ref17$settings === void 0 ? { + state: DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING.PLAY + } : _ref17$settings; + + try { + validateRemotePlayerUrl(url); + validateRemotePlayerSettings(settings); + validateRemotePlayerEncodingSettings(settings); + } catch (e) { + console.error("invalid argument Error: ".concat(e)); + console.error(remoteMediaPlayerStartValidationHelpMsg()); + throw e; + } + + return new Promise( /*#__PURE__*/function () { + var _ref18 = asyncToGenerator(function* (resolve, reject) { + var k = function k(msg) { + if (msg.error) { + reject({ + error: msg.error, + errorMsg: msg.errorMsg + }); + } else { + resolve({ + session_id: msg.session_id, + remoteMediaPlayerState: { + state: msg.state, + settings: msg.settings + } + }); + } + }; + + _this27.sendMessageToCallMachine({ + action: DAILY_METHOD_START_REMOTE_MEDIA_PLAYER, + url: url, + settings: settings + }, k); + }); + + return function (_x13, _x14) { + return _ref18.apply(this, arguments); + }; + }()); + }); + + function startRemoteMediaPlayer(_x12) { + return _startRemoteMediaPlayer.apply(this, arguments); + } + + return startRemoteMediaPlayer; + }() + }, { + key: "stopRemoteMediaPlayer", + value: function () { + var _stopRemoteMediaPlayer = asyncToGenerator(function* (session_id) { + var _this28 = this; + + if (typeof session_id !== 'string') throw new Error(' remotePlayerID must be of type string'); + return new Promise( /*#__PURE__*/function () { + var _ref19 = asyncToGenerator(function* (resolve, reject) { + var k = function k(msg) { + if (msg.error) { + reject({ + error: msg.error, + errorMsg: msg.errorMsg + }); + } else { + resolve(); + } + }; + + _this28.sendMessageToCallMachine({ + action: DAILY_METHOD_STOP_REMOTE_MEDIA_PLAYER, + session_id: session_id + }, k); + }); + + return function (_x16, _x17) { + return _ref19.apply(this, arguments); + }; + }()); + }); + + function stopRemoteMediaPlayer(_x15) { + return _stopRemoteMediaPlayer.apply(this, arguments); + } + + return stopRemoteMediaPlayer; + }() + }, { + key: "updateRemoteMediaPlayer", + value: function () { + var _updateRemoteMediaPlayer = asyncToGenerator(function* (_ref20) { + var _this29 = this; + + var session_id = _ref20.session_id, + settings = _ref20.settings; + + // TODO: Add check of the current_state === desired state + // And resolve() from here itself. + try { + validateRemotePlayerSettings(settings); + } catch (e) { + console.error("invalid argument Error: ".concat(e)); + console.error(remoteMediaPlayerUpdateValidationHelpMsg()); + throw e; + } + + return new Promise( /*#__PURE__*/function () { + var _ref21 = asyncToGenerator(function* (resolve, reject) { + var k = function k(msg) { + if (msg.error) { + reject({ + error: msg.error, + errorMsg: msg.errorMsg + }); + } else { + resolve({ + session_id: msg.session_id, + remoteMediaPlayerState: { + state: msg.state, + settings: msg.settings + } + }); + } + }; + + _this29.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_REMOTE_MEDIA_PLAYER, + session_id: session_id, + settings: settings + }, k); + }); + + return function (_x19, _x20) { + return _ref21.apply(this, arguments); + }; + }()); + }); + + function updateRemoteMediaPlayer(_x18) { + return _updateRemoteMediaPlayer.apply(this, arguments); + } + + return updateRemoteMediaPlayer; + }() + }, { + key: "startTranscription", + value: function startTranscription(args) { + this.sendMessageToCallMachine(_objectSpread$1({ + action: DAILY_METHOD_START_TRANSCRIPTION + }, args)); + } + }, { + key: "stopTranscription", + value: function stopTranscription() { + this.sendMessageToCallMachine({ + action: DAILY_METHOD_STOP_TRANSCRIPTION + }); + } + }, { + key: "getNetworkStats", + value: function getNetworkStats() { + var _this30 = this; + + if (this._callState !== DAILY_STATE_JOINED) { + var stats = { + latest: {} + }; + return { + stats: stats + }; + } + + return new Promise(function (resolve, _) { + var k = function k(msg) { + resolve(_objectSpread$1({ + stats: msg.stats + }, _this30._network)); + }; + + _this30.sendMessageToCallMachine({ + action: DAILY_METHOD_GET_CALC_STATS + }, k); + }); + } + }, { + key: "getActiveSpeaker", + value: function getActiveSpeaker() { + methodNotSupportedInReactNative(); + return this._activeSpeaker; + } + }, { + key: "setActiveSpeakerMode", + value: function setActiveSpeakerMode(enabled) { + methodNotSupportedInReactNative(); + this.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_ACTIVE_SPEAKER_MODE, + enabled: enabled + }); + return this; + } + }, { + key: "activeSpeakerMode", + value: function activeSpeakerMode() { + methodNotSupportedInReactNative(); + return this._activeSpeakerMode; + } + }, { + key: "subscribeToTracksAutomatically", + value: function subscribeToTracksAutomatically() { + return this._preloadCache.subscribeToTracksAutomatically; + } + }, { + key: "setSubscribeToTracksAutomatically", + value: function setSubscribeToTracksAutomatically(enabled) { + if (this._callState !== DAILY_STATE_JOINED) { + throw new Error('setSubscribeToTracksAutomatically() is only allowed when joined'); + } + + this._preloadCache.subscribeToTracksAutomatically = enabled; + this.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_SUBSCRIBE_TO_TRACKS_AUTOMATICALLY, + enabled: enabled + }); + return this; + } + }, { + key: "enumerateDevices", + value: function () { + var _enumerateDevices = asyncToGenerator(function* () { + var _this31 = this; + + if (this._callObjectMode) { + var raw = yield navigator.mediaDevices.enumerateDevices(); + return { + devices: raw.map(function (d) { + return JSON.parse(JSON.stringify(d)); + }) + }; + } + + return new Promise(function (resolve, _) { + var k = function k(msg) { + resolve({ + devices: msg.devices + }); + }; + + _this31.sendMessageToCallMachine({ + action: DAILY_METHOD_ENUMERATE_DEVICES + }, k); + }); + }); + + function enumerateDevices() { + return _enumerateDevices.apply(this, arguments); + } + + return enumerateDevices; + }() + }, { + key: "sendAppMessage", + value: function sendAppMessage(data) { + var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '*'; + + if (JSON.stringify(data).length > MAX_APP_MSG_SIZE) { + throw new Error('Message data too large. Max size is ' + MAX_APP_MSG_SIZE); + } + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_APP_MSG, + data: data, + to: to + }); + return this; + } + }, { + key: "addFakeParticipant", + value: function addFakeParticipant(args) { + methodNotSupportedInReactNative(); + this.sendMessageToCallMachine(_objectSpread$1({ + action: DAILY_METHOD_ADD_FAKE_PARTICIPANT + }, args)); + return this; + } + }, { + key: "setShowNamesMode", + value: function setShowNamesMode(mode) { + methodNotSupportedInReactNative(); + + if (mode && !(mode === 'always' || mode === 'never')) { + console.error('setShowNamesMode argument should be "always", "never", or false'); + return this; + } + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_SHOW_NAMES, + mode: mode + }); + return this; + } + }, { + key: "setShowLocalVideo", + value: function setShowLocalVideo() { + var show = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + methodNotSupportedInReactNative(); + + if (typeof show !== 'boolean') { + console.error('setShowLocalVideo only accepts a boolean value'); + return this; + } + + if (this._callObjectMode) { + console.error('setShowLocalVideo is not available in callObject mode'); + return this; + } + + if (this._callState !== DAILY_STATE_JOINED) { + console.error('the meeting must be joined before calling setShowLocalVideo'); + return this; + } + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_SHOW_LOCAL_VIDEO, + show: show + }); + this._showLocalVideo = show; + return this; + } + }, { + key: "showLocalVideo", + value: function showLocalVideo() { + methodNotSupportedInReactNative(); + + if (this._callObjectMode) { + console.error('showLocalVideo is not available in callObject mode'); + return this; + } + + return this._showLocalVideo; + } + }, { + key: "setShowParticipantsBar", + value: function setShowParticipantsBar() { + var show = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + methodNotSupportedInReactNative(); + + if (typeof show !== 'boolean') { + console.error('setShowParticipantsBar only accepts a boolean value'); + return this; + } + + if (this._callObjectMode) { + console.error('setShowParticipantsBar is not available in callObject mode'); + return this; + } + + if (this._callState !== DAILY_STATE_JOINED) { + console.error('the meeting must be joined before calling setShowParticipantsBar'); + return this; + } + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_SHOW_PARTICIPANTS_BAR, + show: show + }); + this._showParticipantsBar = show; + return this; + } + }, { + key: "showParticipantsBar", + value: function showParticipantsBar() { + methodNotSupportedInReactNative(); + + if (this._callObjectMode) { + console.error('showParticipantsBar is not available in callObject mode'); + return this; + } + + return this._showParticipantsBar; + } + }, { + key: "customIntegrations", + value: function customIntegrations() { + methodNotSupportedInReactNative(); + + if (this._callObjectMode) { + console.error('customIntegrations is not available in callObject mode'); + return this; + } + + return this._customIntegrations; + } + }, { + key: "updateCustomIntegrations", + value: function updateCustomIntegrations(integrations) { + methodNotSupportedInReactNative(); + + if (this._callObjectMode) { + console.error('updateCustomIntegrations is not available in callObject mode'); + return this; + } + + if (this._callState !== DAILY_STATE_JOINED) { + console.error('the meeting must be joined before calling updateCustomIntegrations'); + return this; + } // TODO: Write validator for custom integrations. + // if (!validateCustomIntegrations(integrations)) { + // console.error( + // `updateCustomIntegrations only accepts a dictionary of the type ${JSON.stringify( + // customIntegrationsType + // )}` + // ); + // return this; + // } + + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_CUSTOM_INTEGRATIONS, + integrations: integrations + }); + this._customIntegrations = integrations; + return this; + } + }, { + key: "customTrayButtons", + value: function customTrayButtons() { + methodNotSupportedInReactNative(); + + if (this._callObjectMode) { + console.error('customTrayButtons is not available in callObject mode'); + return this; + } + + return this._customTrayButtons; + } + }, { + key: "updateCustomTrayButtons", + value: function updateCustomTrayButtons(btns) { + methodNotSupportedInReactNative(); + + if (this._callObjectMode) { + console.error('updateCustomTrayButtons is not available in callObject mode'); + return this; + } + + if (this._callState !== DAILY_STATE_JOINED) { + console.error('the meeting must be joined before calling updateCustomTrayButtons'); + return this; + } + + if (!validateCustomTrayButtons(btns)) { + console.error("updateCustomTrayButtons only accepts a dictionary of the type ".concat(JSON.stringify(customTrayButtonsType))); + return this; + } + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_UPDATE_CUSTOM_TRAY_BUTTONS, + btns: btns + }); + this._customTrayButtons = btns; + return this; + } + }, { + key: "theme", + value: function theme() { + if (this._callObjectMode) { + console.error('theme is not available in callObject mode'); + return this; + } + + return this.properties.theme; + } + }, { + key: "setTheme", + value: function setTheme(theme) { + var _this32 = this; + + return new Promise(function (resolve, reject) { + if (_this32._callObjectMode) { + reject('setTheme is not available in callObject mode'); + return; + } + + try { + _this32.validateProperties({ + theme: theme + }); + + _this32.properties.theme = _objectSpread$1({}, theme); // Send message to Prebuilt UI Iframe driver + + _this32.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_THEME, + theme: _this32.properties.theme + }); + /** + * For simplicity, emitting theme-updated here rather than + * listening for it from Prebuilt & re-emitting it, since: + * - we've fully validated the theme, so there's no risk of it not being applied + * - we set `this.properties.theme` first, so in a customer's `theme-updated` + * handler, a call to `theme()` will return the latest value + * - this method is the only way `theme-updated` can change + */ + + + try { + _this32.emit(DAILY_EVENT_THEME_UPDATED, { + action: DAILY_EVENT_THEME_UPDATED, + theme: _this32.properties.theme + }); + } catch (e) { + console.log("could not emit 'theme-updated'", e); + } + + resolve(_this32.properties.theme); + } catch (e) { + reject(e); + } + }); + } + }, { + key: "detectAllFaces", + value: function detectAllFaces() { + var _this33 = this; + + methodNotSupportedInReactNative(); + return new Promise(function (resolve, _) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + resolve(msg); + }; + + _this33.sendMessageToCallMachine({ + action: DAILY_METHOD_DETECT_ALL_FACES + }, k); + }); + } + }, { + key: "requestFullscreen", + value: function () { + var _requestFullscreen = asyncToGenerator(function* () { + methodNotSupportedInReactNative(); + + if (!this._iframe || document.fullscreenElement || !isFullscreenSupported()) { + return; + } + + try { + (yield this._iframe.requestFullscreen) ? this._iframe.requestFullscreen() : this._iframe.webkitRequestFullscreen(); + } catch (e) { + console.log('could not make video call fullscreen', e); + } + }); + + function requestFullscreen() { + return _requestFullscreen.apply(this, arguments); + } + + return requestFullscreen; + }() + }, { + key: "exitFullscreen", + value: function exitFullscreen() { + methodNotSupportedInReactNative(); + + if (document.fullscreenElement) { + document.exitFullscreen(); + } else if (document.webkitFullscreenElement) { + document.webkitExitFullscreen(); + } + } + }, { + key: "room", + value: function () { + var _room = asyncToGenerator(function* () { + var _this34 = this; + + var _ref22 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref22$includeRoomCon = _ref22.includeRoomConfigDefaults, + includeRoomConfigDefaults = _ref22$includeRoomCon === void 0 ? true : _ref22$includeRoomCon; + + // The call machine bundle is loaded and it's already given us an access + // state (which is based on room info), so we know it can be queried for + // room info. + if (this._accessState.access !== DAILY_ACCESS_UNKNOWN && !this.needsLoad()) { + // We've succesfully join()ed or preAuth()ed, so we should have room info. + return new Promise(function (resolve, _) { + var k = function k(msg) { + delete msg.action; + delete msg.callbackStamp; + resolve(msg); + }; + + _this34.sendMessageToCallMachine({ + action: DAILY_METHOD_ROOM, + includeRoomConfigDefaults: includeRoomConfigDefaults + }, k); + }); + } else { + // Return the URL of the room we'll be in if/when we successfully join(), + // since we have no other room info to show yet. + if (this.properties.url) { + // NOTE: technically this should be called "roomUrlPendingJoinOrPreauth" + // to indicate that *either* a join() or a preAuth() will allow you to + // access room info, but preAuth() was added later and this name was + // preserved to maintain backward compatibility: if a consumer hasn't + // updated their app to use preAuth(), they'll be none the wiser. + return { + roomUrlPendingJoin: this.properties.url + }; + } + + return null; + } + }); + + function room() { + return _room.apply(this, arguments); + } + + return room; + }() + }, { + key: "geo", + value: function () { + var _geo = asyncToGenerator(function* () { + return new Promise( /*#__PURE__*/function () { + var _ref23 = asyncToGenerator(function* (resolve, _) { + try { + var url = 'https://gs.daily.co/_ks_/x-swsl/:'; + var res = yield fetch(url); + var data = yield res.json(); + resolve({ + current: data.geo + }); + } catch (e) { + console.error('geo lookup failed', e); + resolve({ + current: '' + }); + } + }); + + return function (_x21, _x22) { + return _ref23.apply(this, arguments); + }; + }()); + }); + + function geo() { + return _geo.apply(this, arguments); + } + + return geo; + }() + }, { + key: "setNetworkTopology", + value: function () { + var _setNetworkTopology = asyncToGenerator(function* (opts) { + var _this35 = this; + + methodNotSupportedInReactNative(); + return new Promise( /*#__PURE__*/function () { + var _ref24 = asyncToGenerator(function* (resolve, reject) { + var k = function k(msg) { + if (msg.error) { + reject({ + error: msg.error + }); + } else { + resolve({ + workerId: msg.workerId + }); + } + }; + + _this35.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_NETWORK_TOPOLOGY, + opts: opts + }, k); + }); + + return function (_x24, _x25) { + return _ref24.apply(this, arguments); + }; + }()); + }); + + function setNetworkTopology(_x23) { + return _setNetworkTopology.apply(this, arguments); + } + + return setNetworkTopology; + }() + }, { + key: "getNetworkTopology", + value: function () { + var _getNetworkTopology = asyncToGenerator(function* () { + var _this36 = this; + + return new Promise( /*#__PURE__*/function () { + var _ref25 = asyncToGenerator(function* (resolve, reject) { + var k = function k(msg) { + if (msg.error) { + reject({ + error: msg.error + }); + } else { + resolve({ + topology: msg.topology + }); + } + }; + + _this36.sendMessageToCallMachine({ + action: DAILY_METHOD_GET_NETWORK_TOPOLOGY + }, k); + }); + + return function (_x26, _x27) { + return _ref25.apply(this, arguments); + }; + }()); + }); + + function getNetworkTopology() { + return _getNetworkTopology.apply(this, arguments); + } + + return getNetworkTopology; + }() + }, { + key: "setPlayNewParticipantSound", + value: function setPlayNewParticipantSound(arg) { + methodNotSupportedInReactNative(); + + if (!(typeof arg === 'number' || arg === true || arg === false)) { + throw new Error("argument to setShouldPlayNewParticipantSound should be true, false, or a number, but is ".concat(arg)); + } + + this.sendMessageToCallMachine({ + action: DAILY_METHOD_SET_PLAY_DING, + arg: arg + }); + } + }, { + key: "on", + value: function on(eventName, k) { + this._inputEventsOn[eventName] = {}; + this.sendMessageToCallMachine({ + action: DAILY_METHOD_REGISTER_INPUT_HANDLER, + on: eventName + }); + return EventEmitter$1.prototype.on.call(this, eventName, k); + } // todo: once is almost certainly implemented incorrectly. read the + // EventEmitter source to figure out how to do this properly. since + // overriding on/off/once are optimizations, anyway, we won't worry + // about it right now. + + }, { + key: "once", + value: function once(eventName, k) { + this._inputEventsOn[eventName] = {}; + this.sendMessageToCallMachine({ + action: DAILY_METHOD_REGISTER_INPUT_HANDLER, + on: eventName + }); + return EventEmitter$1.prototype.once.call(this, eventName, k); + } + }, { + key: "off", + value: function off(eventName, k) { + delete this._inputEventsOn[eventName]; + this.sendMessageToCallMachine({ + action: DAILY_METHOD_REGISTER_INPUT_HANDLER, + off: eventName + }); + return EventEmitter$1.prototype.off.call(this, eventName, k); + } // + // internal methods + // + + }, { + key: "validateProperties", + value: function validateProperties(properties) { + for (var k in properties) { + if (!FRAME_PROPS[k]) { + throw new Error("unrecognized property '".concat(k, "'")); + } + + if (FRAME_PROPS[k].validate && !FRAME_PROPS[k].validate(properties[k], this)) { + throw new Error("property '".concat(k, "': ").concat(FRAME_PROPS[k].help)); + } + } + } + }, { + key: "assembleMeetingUrl", + value: function assembleMeetingUrl() { + // handle case of url with query string and without + var props = _objectSpread$1(_objectSpread$1({}, this.properties), {}, { + emb: this._callFrameId, + embHref: encodeURIComponent(window.location.href) + }), + firstSep = props.url.match(/\?/) ? '&' : '?', + url = props.url, + urlProps = Object.keys(FRAME_PROPS).filter(function (p) { + return FRAME_PROPS[p].queryString && props[p] !== undefined; + }); + + var newQueryString = urlProps.map(function (p) { + return "".concat(FRAME_PROPS[p].queryString, "=").concat(props[p]); + }).join('&'); + return url + firstSep + newQueryString; + } // Note that even if the below method returns true, load() may decide that + // there's nothing more to do (e.g. in the case that the call object has + // already been loaded once) and simply carry out the appropriate meeting + // state transition. + + }, { + key: "needsLoad", + value: function needsLoad() { + // NOTE: The *only* reason DAILY_STATE_LOADING is here is to preserve a bug + // that I (@kompfner) am a bit hesitant to fix until more time can be + // dedicated to doing the *right* fix. If we're in DAILY_STATE_LOADING, we + // probably *shouldn't* let you trigger another load() and get into a weird + // state, but this has been long-standing behavior. The alternative would mean + // that, if load() failed silently for some reason, you couldn't re-trigger it + // since we'd be stuck in the DAILY_STATE_LOADING state. + return [DAILY_STATE_NEW, DAILY_STATE_LOADING, DAILY_STATE_LEFT, DAILY_STATE_ERROR].includes(this._callState); + } + }, { + key: "sendMessageToCallMachine", + value: function sendMessageToCallMachine(message, callback) { + this._messageChannel.sendMessageToCallMachine(message, callback, this._iframe, this._callFrameId); + } /// + /// The below *packagedMessage* methods facilitate wiring up a DailyIframe + /// instance as a remote driver of another DailyIframe instance, like in the + /// new prebuilt UI case, where an "outer" callFrame controls an "inner" + /// callObject through an intermediate iframed app. + /// + + }, { + key: "forwardPackagedMessageToCallMachine", + value: function forwardPackagedMessageToCallMachine(msg) { + this._messageChannel.forwardPackagedMessageToCallMachine(msg, this._iframe, this._callFrameId); + } + }, { + key: "addListenerForPackagedMessagesFromCallMachine", + value: function addListenerForPackagedMessagesFromCallMachine(listener) { + return this._messageChannel.addListenerForPackagedMessagesFromCallMachine(listener, this._callFrameId); + } + }, { + key: "removeListenerForPackagedMessagesFromCallMachine", + value: function removeListenerForPackagedMessagesFromCallMachine(listenerId) { + this._messageChannel.removeListenerForPackagedMessagesFromCallMachine(listenerId); + } + }, { + key: "handleMessageFromCallMachine", + value: function handleMessageFromCallMachine(msg) { + switch (msg.action) { + case DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG: + this.sendMessageToCallMachine(_objectSpread$1({ + action: DAILY_EVENT_IFRAME_LAUNCH_CONFIG + }, this.properties)); + break; + + case DAILY_EVENT_LOADED: + if (this._loadedCallback) { + this._loadedCallback(); + + this._loadedCallback = null; + } + + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + + break; + + case DAILY_EVENT_JOINED_MEETING: + if (this._joinedCallback) { + this._joinedCallback(msg.participants); + + this._joinedCallback = null; + } + + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + + break; + + case DAILY_EVENT_PARTICIPANT_JOINED: + case DAILY_EVENT_PARTICIPANT_UPDATED: + if (this._callState === DAILY_STATE_LEFT) { + return; + } + + if (msg.participant && msg.participant.session_id) { + var id = msg.participant.local ? 'local' : msg.participant.session_id; + + if (this._callObjectMode) { + addTracks(msg.participant); + addCustomTracks(msg.participant); + addLegacyTracks(msg.participant, this._participants[id]); + } + + try { + // track events + this.maybeEventTrackStopped(this._participants[id], msg.participant, 'audioTrack'); + this.maybeEventTrackStopped(this._participants[id], msg.participant, 'videoTrack'); + this.maybeEventTrackStopped(this._participants[id], msg.participant, 'screenVideoTrack'); + this.maybeEventTrackStopped(this._participants[id], msg.participant, 'screenAudioTrack'); + this.maybeEventTrackStarted(this._participants[id], msg.participant, 'audioTrack'); + this.maybeEventTrackStarted(this._participants[id], msg.participant, 'videoTrack'); + this.maybeEventTrackStarted(this._participants[id], msg.participant, 'screenVideoTrack'); + this.maybeEventTrackStarted(this._participants[id], msg.participant, 'screenAudioTrack'); // custom tracks (presumably we'll do all tracks consistently in the + // future, refactoring the above maybeEventTrack* events) + + this.maybeEventTrackStoppedForCustomTracks(this._participants[id], msg.participant); + this.maybeEventTrackStartedForCustomTracks(this._participants[id], msg.participant); // recording events + + this.maybeEventRecordingStopped(this._participants[id], msg.participant); + this.maybeEventRecordingStarted(this._participants[id], msg.participant); + } catch (e) { + console.error('track events error', e); + } // participant joined/updated events + + + if (!this.compareEqualForParticipantUpdateEvent(msg.participant, this._participants[id])) { + this._participants[id] = _objectSpread$1({}, msg.participant); + this.toggleParticipantAudioBasedOnNativeAudioFocus(); + + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + } + } + + break; + + case DAILY_EVENT_PARTICIPANT_LEFT: + if (msg.participant && msg.participant.session_id) { + // track events + var prevP = this._participants[msg.participant.session_id]; + + if (prevP) { + this.maybeEventTrackStopped(prevP, null, 'audioTrack'); + this.maybeEventTrackStopped(prevP, null, 'videoTrack'); + this.maybeEventTrackStopped(prevP, null, 'screenVideoTrack'); + this.maybeEventTrackStopped(prevP, null, 'screenAudioTrack'); + this.maybeEventTrackStoppedForCustomTracks(prevP, null); + } // delete from local cach + + + delete this._participants[msg.participant.session_id]; + + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + + case DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED: + if (!deepEqual(this._participantCounts, msg.participantCounts)) { + this._participantCounts = msg.participantCounts; + + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + + case DAILY_EVENT_ACCESS_STATE_UPDATED: + { + var newAccessState = { + access: msg.access + }; + + if (msg.awaitingAccess) { + newAccessState.awaitingAccess = msg.awaitingAccess; + } + + if (!deepEqual(this._accessState, newAccessState)) { + this._accessState = newAccessState; + + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + } + + case DAILY_EVENT_MEETING_SESSION_UPDATED: + if (msg.meetingSession) { + try { + delete msg.callFrameId; + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + + case DAILY_EVENT_ERROR: + if (this._iframe && !msg.preserveIframe) { + this._iframe.src = ''; + } + + this._updateCallState(DAILY_STATE_ERROR); + + this.resetMeetingDependentVars(); + + if (this._loadedCallback) { + this._loadedCallback(msg.errorMsg); + + this._loadedCallback = null; + } + + if (this._joinedCallback) { + this._joinedCallback(null, msg.errorMsg); + + this._joinedCallback = null; + } + + try { + var preserveIframe = msg.preserveIframe, + event = objectWithoutProperties(msg, ["preserveIframe"]); + + this.emit(msg.action, event); + } catch (e) { + console.log('could not emit', msg, e); + } + + break; + + case DAILY_EVENT_LEFT_MEETING: + // if we've left due to error, the error msg should have + // already been handled and we do not want to override + // the state. + if (this._callState !== DAILY_STATE_ERROR) { + this._updateCallState(DAILY_STATE_LEFT); + } + + this.resetMeetingDependentVars(); + + if (this._resolveLeave) { + this._resolveLeave(); + + this._resolveLeave = null; + } + + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + + break; + + case DAILY_EVENT_INPUT_EVENT: + var p = this._participants[msg.session_id]; + + if (!p) { + if (msg.session_id === this._participants.local.session_id) { + p = this._participants.local; + } else { + p = {}; + } + } + + try { + this.emit(msg.event.type, { + action: msg.event.type, + event: msg.event, + participant: _objectSpread$1({}, p) + }); + } catch (e) { + console.log('could not emit', msg, e); + } + + break; + + case DAILY_EVENT_SELECTED_DEVICES_UPDATED: + if (msg.devices) { + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + + case DAILY_EVENT_NETWORK_QUALITY_CHANGE: + var threshold = msg.threshold, + quality = msg.quality; + + if (threshold !== this._network.threshold || quality !== this._network.quality) { + this._network.quality = quality; + this._network.threshold = threshold; + + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + + case DAILY_EVENT_ACTIVE_SPEAKER_CHANGE: + var activeSpeaker = msg.activeSpeaker; + + if (this._activeSpeaker.peerId !== activeSpeaker.peerId) { + this._activeSpeaker.peerId = activeSpeaker.peerId; + + try { + this.emit(msg.action, { + action: msg.action, + activeSpeaker: this._activeSpeaker + }); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + + case DAILY_EVENT_SHOW_LOCAL_VIDEO_CHANGED: + if (this._callObjectMode) return; + var show = msg.show; + this._showLocalVideo = show; + + try { + this.emit(msg.action, { + action: msg.action, + show: show + }); + } catch (e) { + console.log('could not emit', msg, e); + } + + break; + + case DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE: + var enabled = msg.enabled; + + if (this._activeSpeakerMode !== enabled) { + this._activeSpeakerMode = enabled; + + try { + this.emit(msg.action, { + action: msg.action, + enabled: this._activeSpeakerMode + }); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + + case DAILY_EVENT_WAITING_PARTICIPANT_ADDED: + case DAILY_EVENT_WAITING_PARTICIPANT_UPDATED: + case DAILY_EVENT_WAITING_PARTICIPANT_REMOVED: + this._waitingParticipants = msg.allWaitingParticipants; + + try { + this.emit(msg.action, { + action: msg.action, + participant: msg.participant + }); + } catch (e) { + console.log('could not emit', msg, e); + } + + break; + + case DAILY_EVENT_RECEIVE_SETTINGS_UPDATED: + // NOTE: doing equality check here rather than before sending message in + // the first place from call machine, to simplify handling initial + // receive settings + if (!deepEqual(this._receiveSettings, msg.receiveSettings)) { + this._receiveSettings = msg.receiveSettings; + + try { + this.emit(msg.action, { + action: msg.action, + receiveSettings: msg.receiveSettings + }); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + + case DAILY_EVENT_INPUT_SETTINGS_UPDATED: + // NOTE: doing equality check here rather than before sending message in + // the first place from call machine, to simplify handling initial + // input settings + if (!deepEqual(this._inputSettings, msg.inputSettings)) { + this._inputSettings = msg.inputSettings; + + try { + this.emit(msg.action, { + action: msg.action, + inputSettings: msg.inputSettings + }); + } catch (e) { + console.log('could not emit', msg, e); + } + } + + break; + + case DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED: + { + var participantId = msg.session_id; + this._rmpPlayerState[participantId] = msg.playerState; + this.emitDailyJSEvent(msg); + } + break; + + case DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED: + delete this._rmpPlayerState[msg.session_id]; + this.emitDailyJSEvent(msg); + break; + + case DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED: + { + var _participantId = msg.session_id; + var rmpPlayerState = this._rmpPlayerState[_participantId]; + + if (!rmpPlayerState || !this.compareEqualForRMPUpdateEvent(rmpPlayerState, msg.remoteMediaPlayerState)) { + this._rmpPlayerState[_participantId] = msg.remoteMediaPlayerState; + this.emitDailyJSEvent(msg); + } + } + break; + + case DAILY_EVENT_CUSTOM_BUTTON_CLICK: + this.emitDailyJSEvent(msg); + break; + + case DAILY_EVENT_MEETING_SESSION_STATE_UPDATED: + this._meetingSessionState = msg.meetingSessionState; + this.emitDailyJSEvent(msg); + break; + + case DAILY_EVENT_RECORDING_STARTED: + case DAILY_EVENT_RECORDING_STOPPED: + case DAILY_EVENT_RECORDING_STATS: + case DAILY_EVENT_RECORDING_ERROR: + case DAILY_EVENT_RECORDING_UPLOAD_COMPLETED: + case DAILY_EVENT_TRANSCRIPTION_STARTED: + case DAILY_EVENT_TRANSCRIPTION_STOPPED: + case DAILY_EVENT_TRANSCRIPTION_ERROR: + case DAILY_EVENT_STARTED_CAMERA: + case DAILY_EVENT_CAMERA_ERROR: + case DAILY_EVENT_APP_MSG: + case DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED: + case DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED: + case DAILY_EVENT_NETWORK_CONNECTION: + case DAILY_EVENT_RECORDING_DATA: + case DAILY_EVENT_LIVE_STREAMING_STARTED: + case DAILY_EVENT_LIVE_STREAMING_STOPPED: + case DAILY_EVENT_LIVE_STREAMING_ERROR: + case DAILY_EVENT_NONFATAL_ERROR: + case DAILY_EVENT_LANG_UPDATED: + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + + break; + + case DAILY_UI_REQUEST_FULLSCREEN: + this.requestFullscreen(); + break; + + case DAILY_UI_EXIT_FULLSCREEN: + this.exitFullscreen(); + break; + + } + } + }, { + key: "maybeEventRecordingStopped", + value: function maybeEventRecordingStopped(prevP, thisP) { + var key = 'record'; + + if (!prevP) { + return; + } + + if (!thisP.local && thisP[key] === false && prevP[key] !== thisP[key]) { + try { + this.emit(DAILY_EVENT_RECORDING_STOPPED, { + action: DAILY_EVENT_RECORDING_STOPPED + }); + } catch (e) { + console.log('could not emit', e); + } + } + } + }, { + key: "maybeEventRecordingStarted", + value: function maybeEventRecordingStarted(prevP, thisP) { + var key = 'record'; + + if (!prevP) { + return; + } + + if (!thisP.local && thisP[key] === true && prevP[key] !== thisP[key]) { + try { + this.emit(DAILY_EVENT_RECORDING_STARTED, { + action: DAILY_EVENT_RECORDING_STARTED + }); + } catch (e) { + console.log('could not emit', e); + } + } + } + }, { + key: "maybeEventTrackStopped", + value: function maybeEventTrackStopped(prevP, thisP, key) { + if (!prevP) { + return; + } + + if (prevP[key] && prevP[key].readyState === 'ended' || prevP[key] && !(thisP && thisP[key]) || prevP[key] && prevP[key].id !== thisP[key].id) { + try { + this.emit(DAILY_EVENT_TRACK_STOPPED, { + action: DAILY_EVENT_TRACK_STOPPED, + track: prevP[key], + participant: thisP + }); + } catch (e) { + console.log('could not emit', e); + } + } + } + }, { + key: "maybeEventCustomTrackStopped", + value: function maybeEventCustomTrackStopped(prevTrack, thisTrack, thisP) { + if (!prevTrack) { + return; + } + + if (prevTrack && prevTrack.readyState === 'ended' || prevTrack && !thisTrack || prevTrack && prevTrack.id !== thisTrack.id) { + try { + this.emit(DAILY_EVENT_TRACK_STOPPED, { + action: DAILY_EVENT_TRACK_STOPPED, + track: prevTrack, + participant: thisP + }); + } catch (e) { + console.log('maybeEventCustomTrackStopped: could not emit', e); + } + } + } + }, { + key: "maybeEventCustomTrackStarted", + value: function maybeEventCustomTrackStarted(prevTrack, thisTrack, thisP) { + if (thisTrack && !prevTrack || thisTrack && prevTrack.readyState === 'ended' || thisTrack && thisTrack.id !== prevTrack.id) { + try { + this.emit(DAILY_EVENT_TRACK_STARTED, { + action: DAILY_EVENT_TRACK_STARTED, + track: thisTrack, + participant: thisP + }); + } catch (e) { + console.log('maybeEventCustomTrackStarted: could not emit', e); + } + } + } + }, { + key: "maybeEventTrackStarted", + value: function maybeEventTrackStarted(prevP, thisP, key) { + if (thisP[key] && !(prevP && prevP[key]) || thisP[key] && prevP[key].readyState === 'ended' || thisP[key] && thisP[key].id !== prevP[key].id) { + try { + this.emit(DAILY_EVENT_TRACK_STARTED, { + action: DAILY_EVENT_TRACK_STARTED, + track: thisP[key], + participant: thisP + }); + } catch (e) { + console.log('could not emit', e); + } + } + } + }, { + key: "maybeEventTrackStoppedForCustomTracks", + value: function maybeEventTrackStoppedForCustomTracks(prevP, thisP) { + if (!prevP) { + return; + } + + for (var trackKey in prevP.tracks) { + // we might be able to use this logic for all tracks, not just additional, + // non-standard tracks. but for now, we'll only handle the non-standard + // tracks + if (isPredefinedTrack(trackKey)) { + continue; + } + + this.maybeEventCustomTrackStopped(prevP.tracks[trackKey].track, thisP && thisP.tracks[trackKey] ? thisP.tracks[trackKey].track : null, thisP); + } + } + }, { + key: "maybeEventTrackStartedForCustomTracks", + value: function maybeEventTrackStartedForCustomTracks(prevP, thisP) { + if (!thisP) { + return; + } + + for (var trackKey in thisP.tracks) { + // we might be able to use this logic for all tracks, not just additional, + // non-standard tracks. but for now, we'll only handle the non-standard + // tracks + if (isPredefinedTrack(trackKey)) { + continue; + } + + this.maybeEventCustomTrackStarted(prevP && prevP.tracks[trackKey] ? prevP.tracks[trackKey].track : null, thisP.tracks[trackKey].track, thisP); + } + } + }, { + key: "compareEqualForRMPUpdateEvent", + value: function compareEqualForRMPUpdateEvent(a, b) { + var _a$settings, _b$settings; + + if (a.state === b.state && ((_a$settings = a.settings) === null || _a$settings === void 0 ? void 0 : _a$settings.volume) === ((_b$settings = b.settings) === null || _b$settings === void 0 ? void 0 : _b$settings.volume)) { + return true; + } + + return false; + } + }, { + key: "emitDailyJSEvent", + value: function emitDailyJSEvent(msg) { + { + try { + this.emit(msg.action, msg); + } catch (e) { + console.log('could not emit', msg, e); + } + } + } + }, { + key: "compareEqualForParticipantUpdateEvent", + value: function compareEqualForParticipantUpdateEvent(a, b) { + if (!deepEqual(a, b)) { + return false; + } + + if (a.videoTrack && b.videoTrack && (a.videoTrack.id !== b.videoTrack.id || a.videoTrack.muted !== b.videoTrack.muted || a.videoTrack.enabled !== b.videoTrack.enabled)) { + return false; + } + + if (a.audioTrack && b.audioTrack && (a.audioTrack.id !== b.audioTrack.id || a.audioTrack.muted !== b.audioTrack.muted || a.audioTrack.enabled !== b.audioTrack.enabled)) { + return false; + } + + return true; + } + }, { + key: "nativeUtils", + value: function nativeUtils() { + if (!isReactNative()) { + return null; + } + + if (typeof DailyNativeUtils === 'undefined') { + console.warn('in React Native, DailyNativeUtils is expected to be available'); + return null; + } + + return DailyNativeUtils; + } + }, { + key: "updateIsPreparingToJoin", + value: function updateIsPreparingToJoin(isPreparingToJoin) { + this._updateCallState(this._callState, isPreparingToJoin); + } + }, { + key: "_updateCallState", + value: function _updateCallState(callState) { + var isPreparingToJoin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._isPreparingToJoin; + + // If state hasn't changed, bail + if (callState === this._callState && isPreparingToJoin === this._isPreparingToJoin) { + return; + } // Update state + + + var oldMeetingState = this._callState; + var oldIsPreparingToJoin = this._isPreparingToJoin; + this._callState = callState; + this._isPreparingToJoin = isPreparingToJoin; // Update state side-effects (which, for now, all depend on whether + // _isCallPendingOrOngoing) + + var oldIsMeetingPendingOrOngoing = this._isCallPendingOrOngoing(oldMeetingState, oldIsPreparingToJoin); + + var _isCallPendingOrOngoing = this._isCallPendingOrOngoing(this._callState, this._isPreparingToJoin); + + if (oldIsMeetingPendingOrOngoing === _isCallPendingOrOngoing) { + return; + } + + this.updateKeepDeviceAwake(_isCallPendingOrOngoing); + this.updateDeviceAudioMode(_isCallPendingOrOngoing); + this.updateShowAndroidOngoingMeetingNotification(_isCallPendingOrOngoing); + this.updateNoOpRecordingEnsuringBackgroundContinuity(_isCallPendingOrOngoing); + } // To be invoked this when leaving or erroring out of a meeting. + // NOTE (Paul, 2021-01-07): this could probably be expanded to reset *all* + // meeting-dependent vars, but starting with this targeted small set which + // were being reset properly on leave() but not when leaving via prebuilt ui. + + }, { + key: "resetMeetingDependentVars", + value: function resetMeetingDependentVars() { + this._participants = {}; + this._participantCounts = EMPTY_PARTICIPANT_COUNTS; + this._waitingParticipants = {}; + this._activeSpeaker = {}; + this._activeSpeakerMode = false; + this._didPreAuth = false; + this._accessState = { + access: DAILY_ACCESS_UNKNOWN + }; + this._meetingSessionState = DEFAULT_SESSION_STATE; + this._receiveSettings = {}; + this._inputSettings = {}; + resetPreloadCache(this._preloadCache); + } + }, { + key: "updateKeepDeviceAwake", + value: function updateKeepDeviceAwake(keepAwake) { + if (!isReactNative()) { + return; + } + + this.nativeUtils().setKeepDeviceAwake(keepAwake, this._callFrameId); + } + }, { + key: "updateDeviceAudioMode", + value: function updateDeviceAudioMode(useInCallAudioMode) { + if (!isReactNative() || this.disableReactNativeAutoDeviceManagement('audio')) { + return; + } + + var audioMode = useInCallAudioMode ? this._nativeInCallAudioMode : NATIVE_AUDIO_MODE_IDLE; + this.nativeUtils().setAudioMode(audioMode); + } // Note: notification properties can't be changed while it is ongoing + + }, { + key: "updateShowAndroidOngoingMeetingNotification", + value: function updateShowAndroidOngoingMeetingNotification(showNotification) { + // Check that we're React Native and that the Android-only method exists + if (!(isReactNative() && this.nativeUtils().setShowOngoingMeetingNotification)) { + return; + } // Use current this.properties to customize notification behavior + + + var title, subtitle, iconName, disableForCustomOverride; + + if (this.properties.reactNativeConfig && this.properties.reactNativeConfig.androidInCallNotification) { + var _this$properties$reac = this.properties.reactNativeConfig.androidInCallNotification; + title = _this$properties$reac.title; + subtitle = _this$properties$reac.subtitle; + iconName = _this$properties$reac.iconName; + disableForCustomOverride = _this$properties$reac.disableForCustomOverride; + } + + if (disableForCustomOverride) { + showNotification = false; + } + + this.nativeUtils().setShowOngoingMeetingNotification(showNotification, title, subtitle, iconName, this._callFrameId); + } // Whether to enable no-op audio recording to ensure continuity of the app + // when backgrounded. Required in iOS to ensure we can finish joining when the + // app is backgrounded before gUM is called, and to ensure that signaling + // remains connected when we're in an empty room and our own cam and mic are + // off. + + }, { + key: "updateNoOpRecordingEnsuringBackgroundContinuity", + value: function updateNoOpRecordingEnsuringBackgroundContinuity(enableNoOpRecording) { + if (!(isReactNative() && this.nativeUtils().enableNoOpRecordingEnsuringBackgroundContinuity)) { + return; + } + + this.nativeUtils().enableNoOpRecordingEnsuringBackgroundContinuity(enableNoOpRecording); + } + }, { + key: "_isCallPendingOrOngoing", + value: function _isCallPendingOrOngoing(callState, isPreparingToJoin) { + return [DAILY_STATE_JOINING, DAILY_STATE_JOINED].includes(callState) || isPreparingToJoin; + } + }, { + key: "toggleParticipantAudioBasedOnNativeAudioFocus", + value: function toggleParticipantAudioBasedOnNativeAudioFocus() { + if (!isReactNative()) { + return; + } // Need to access store directly since when participant muted their audio we + // don't have access to their audio tracks in this._participants + + + var state = store.getState(); + + for (var streamId in state.streams) { + var streamData = state.streams[streamId]; + + if (streamData && streamData.pendingTrack && streamData.pendingTrack.kind === 'audio') { + streamData.pendingTrack.enabled = this._hasNativeAudioFocus; + } + } + } // type must be either 'audio' or 'video' + + }, { + key: "disableReactNativeAutoDeviceManagement", + value: function disableReactNativeAutoDeviceManagement(type) { + return this.properties.reactNativeConfig && this.properties.reactNativeConfig.disableAutoDeviceManagement && this.properties.reactNativeConfig.disableAutoDeviceManagement[type]; + } + }, { + key: "absoluteUrl", + value: function absoluteUrl(url) { + if ('undefined' === typeof url) { + return undefined; + } + + var a = document.createElement('a'); + a.href = url; + return a.href; + } + }, { + key: "sayHello", + value: function sayHello() { + var str = 'hello, world.'; + console.log(str); + return str; + } + }]); + + return DailyIframe; +}(EventEmitter$1); + +function initializePreloadCache(callObject, properties) { + return { + subscribeToTracksAutomatically: true, + audioDeviceId: null, + videoDeviceId: null, + outputDeviceId: null + }; +} + +function resetPreloadCache(c) {// don't need to do anything, until we add stuff to the preload + // cache that should not persist +} + +function makeSafeForPostMessage(props) { + var safe = {}; + + for (var p in props) { + if (props[p] instanceof MediaStreamTrack) { + // note: could store the track in a global variable for accessing + // on the other side of the postMessage, here, instead of as we + // currently do in the validate-properties routines, which definitely + // is a spooky-action-at-a-distance code anti-pattern + safe[p] = DAILY_CUSTOM_TRACK; + } else if (p === 'dailyConfig') { + if (props[p].modifyLocalSdpHook) { + if (window._dailyConfig) { + window._dailyConfig.modifyLocalSdpHook = props[p].modifyLocalSdpHook; + } + + delete props[p].modifyLocalSdpHook; + } + + if (props[p].modifyRemoteSdpHook) { + if (window._dailyConfig) { + window._dailyConfig.modifyRemoteSdpHook = props[p].modifyRemoteSdpHook; + } + + delete props[p].modifyRemoteSdpHook; + } + + safe[p] = props[p]; + } else { + safe[p] = props[p]; + } + } + + return safe; +} + +function methodNotSupportedInReactNative() { + if (isReactNative()) { + throw new Error('This daily-js method is not currently supported in React Native'); + } +} + +function methodOnlySupportedInReactNative() { + if (!isReactNative()) { + throw new Error('This daily-js method is only supported in React Native'); + } +} + +function validateSessionDataUpdate(data, mergeStrategy) { + // the SessionDataUpdate constructor validates everything and will + // throw the errors necessary if things don't check out + new SessionDataUpdate({ + data: data, + mergeStrategy: mergeStrategy + }); + return true; +} + +function validateUserData(data) { + // undefined is considered valid but would fail the checks below + if (data === undefined) { + return true; + } + + var dataStr; + + if (typeof data === 'string') { + // JSON.stringify adds two characters to the string, so do sizing checks + // on the raw string. + dataStr = data; + } else { + try { + dataStr = JSON.stringify(data); // check that what goes in is the same coming out :) + + if (!deepEqual(JSON.parse(dataStr), data)) { + console.warn("The userData provided will be modified when serialized."); + } + } catch (e) { + throw Error("userData must be serializable to JSON: ".concat(e)); + } + } // check the size of the payload + + + if (dataStr.length > MAX_USER_DATA_SIZE) { + throw Error("userData is too large (".concat(dataStr.length, " characters). Maximum size suppported is ").concat(MAX_USER_DATA_SIZE, ".")); + } + + return true; +} + +function validateReceiveSettings(receiveSettingsParam, _ref26) { + var allowAllParticipantsKey = _ref26.allowAllParticipantsKey; + + var isParticipantIdValid = function isParticipantIdValid(participantId) { + var disallowedKeys = ['local']; + if (!allowAllParticipantsKey) disallowedKeys.push('*'); + return participantId && !disallowedKeys.includes(participantId); + }; + + var areVideoReceiveSettingsValid = function areVideoReceiveSettingsValid(videoReceiveSettings) { + if (videoReceiveSettings.layer !== undefined) { + if (!(Number.isInteger(videoReceiveSettings.layer) && videoReceiveSettings.layer >= 0 || videoReceiveSettings.layer === 'inherit')) { + return false; + } + } + + return true; + }; // NOTE: partial receive settings *are* allowed, in both senses: + // - only a subset of media types (e.g. only "video") + // - only a subset of settings per media type (e.g. only "layer") + + + var areParticipantReceiveSettingsValid = function areParticipantReceiveSettingsValid(receiveSettings) { + if (!receiveSettings) return false; + + if (receiveSettings.video) { + if (!areVideoReceiveSettingsValid(receiveSettings.video)) { + return false; + } + } + + if (receiveSettings.screenVideo) { + if (!areVideoReceiveSettingsValid(receiveSettings.screenVideo)) { + return false; + } + } + + return true; + }; + + for (var _i3 = 0, _Object$entries2 = Object.entries(receiveSettingsParam); _i3 < _Object$entries2.length; _i3++) { + var _Object$entries2$_i = slicedToArray(_Object$entries2[_i3], 2), + participantId = _Object$entries2$_i[0], + receiveSettings = _Object$entries2$_i[1]; + + if (!(isParticipantIdValid(participantId) && areParticipantReceiveSettingsValid(receiveSettings))) { + return false; + } + } + + return true; +} // Since currently videoProcessor is the only inputSetting. I wrote this code to reject +// everything else. I feel it is the safe approach. This will need changes as more +// functionality is added to inputSettings in the future. + + +function validateInputSettings(settings) { + if (_typeof_1(settings) !== 'object') return false; + if (!(settings.video && _typeof_1(settings.video) === 'object')) return false; + if (!validateVideoProcessor(settings.video.processor)) return false; + return true; +} + +function validateVideoProcessor(p) { + // publish has been deprecated. It hasnt been removed from VALID_PROCESSOR_KEYS + // so as to not throw an error for any active users; Added a warning about the + // deprecation below. + var VALID_PROCESSOR_KEYS = ['type', "config", 'publish']; + if (!p) return false; + if (_typeof_1(p) !== 'object') return false; + if (Object.keys(p).length === 0) return false; // lodash isEmpty did not work well with github workflow for some reason + + if (p.type && !validateVideoProcessorType(p.type)) return false; + if (p.publish !== undefined && typeof p.publish !== 'boolean') return false; // publish flag has been deprecated + + if (typeof p.publish === 'boolean') { + console.warn('inputSettings.video.processor: publish key has been deprecated; it will be ignored'); + } + + if (p.config) { + if (_typeof_1(p.config) !== 'object') return false; + if (!validateVideoProcessorConfig(p.type, p.config)) return false; + } // scrub invalid keys in processor object + + + Object.keys(p).filter(function (k) { + return !VALID_PROCESSOR_KEYS.includes(k); + }).forEach(function (k) { + console.warn("invalid key inputSettings -> video -> processor : ".concat(k)); + delete p[k]; + }); + return true; +} + +function validateVideoProcessorConfig(type, config) { + var keys = Object.keys(config); + if (keys.length === 0) return true; + var configErrMsg = 'invalid object in inputSettings -> video -> processor -> config'; + + switch (type) { + case DAILY_JS_VIDEO_PROCESSOR_TYPES.BGBLUR: + if (keys.length > 1 || keys[0] !== 'strength') { + console.error(configErrMsg); + return false; + } + + if (typeof config.strength !== 'number' || config.strength <= 0 || config.strength > 1 || isNaN(config.strength)) { + console.error("".concat(configErrMsg, "; expected: {0 < strength <= 1}, got: ").concat(config.strength)); + return false; + } + + return true; + + case DAILY_JS_VIDEO_PROCESSOR_TYPES.BGIMAGE: + if (config.source !== undefined) { + if (!validateAndTagBgImageSource(config)) return false; + } + + return true; + + default: + return true; + } +} + +function validateAndTagBgImageSource(config) { + if (config.source === 'default') { + config.type = 'default'; + return true; + } + + if (validateHttpUrl(config.source)) { + config.type = 'url'; + + if (!validateBgImageFileType(config.source)) { + console.error("invalid image type; supported types: [".concat(DAILY_SUPPORTED_BG_IMG_TYPES.join(', '), "]")); + return false; + } + + return true; + } + + if (validateImageSelection(config.source)) { + config.type = 'daily-preselect'; + return true; + } else { + console.error("invalid image selection; must be an int, > 0, <= ".concat(DAILY_PRESELECTED_BG_IMAGE_URLS_LENGTH)); + return false; + } +} + +function validateBgImageFileType(url) { + // ignore query params + var parsedUrl = new URL(url); + var pathName = parsedUrl.pathname; + + if (parsedUrl.protocol === 'data:') { + try { + var blobContentType = pathName.substring(pathName.indexOf(':') + 1, pathName.indexOf(';')); + var blobExtension = blobContentType.split('/')[1]; + return DAILY_SUPPORTED_BG_IMG_TYPES.includes(blobExtension); + } catch (e) { + console.error('failed to deduce blob content type', e); + return false; + } + } + + var urlFileType = pathName.split('.').at(-1).toLowerCase().trim(); + return DAILY_SUPPORTED_BG_IMG_TYPES.includes(urlFileType); +} + +function validateImageSelection(selectImg) { + var imgNum = Number(selectImg); + if (isNaN(imgNum)) return false; + if (!Number.isInteger(imgNum)) return false; + if (imgNum <= 0) return false; + if (imgNum > DAILY_PRESELECTED_BG_IMAGE_URLS_LENGTH) return false; + return true; +} + +function validateVideoProcessorType(type) { + if (typeof type !== 'string') return false; + + if (!Object.values(DAILY_JS_VIDEO_PROCESSOR_TYPES).includes(type)) { + console.error('inputSettings video processor type invalid'); + return false; + } + + return true; +} + +function inputSettingsValidationHelpMsg() { + var processorOpts = Object.values(DAILY_JS_VIDEO_PROCESSOR_TYPES).join(' | '); + return "inputSettings must be of the form: { video: { processor: [ ".concat(processorOpts, " ] }, config?: {} }"); +} + +function receiveSettingsValidationHelpMsg(_ref27) { + var allowAllParticipantsKey = _ref27.allowAllParticipantsKey; + return "receiveSettings must be of the form { [ | ".concat(DAILY_RECEIVE_SETTINGS_BASE_KEY).concat(allowAllParticipantsKey ? " | \"".concat(DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY, "\"") : '', "]: ") + '{ ' + '[video: [{ layer: [ | "inherit"] } | "inherit"]], ' + '[screenVideo: [{ layer: [ | "inherit"] } | "inherit"]] ' + '}}}'; +} + +function validateCustomTrayButtons(btns) { + if (btns && _typeof_1(btns) !== 'object' || Array.isArray(btns)) { + console.error("customTrayButtons should be an Object of the type ".concat(JSON.stringify(customTrayButtonsType), ".")); + return false; + } + + if (btns) { + for (var _i4 = 0, _Object$entries3 = Object.entries(btns); _i4 < _Object$entries3.length; _i4++) { + var _Object$entries3$_i = slicedToArray(_Object$entries3[_i4], 1), + btnsKey = _Object$entries3$_i[0]; + + for (var _i5 = 0, _Object$entries4 = Object.entries(btns[btnsKey]); _i5 < _Object$entries4.length; _i5++) { + var _Object$entries4$_i = slicedToArray(_Object$entries4[_i5], 2), + btnKey = _Object$entries4$_i[0], + btnValue = _Object$entries4$_i[1]; + + if (btnKey === 'iconPath' && !validateHttpUrl(btnValue)) { + console.error("customTrayButton ".concat(btnKey, " should be a url.")); + return false; + } + + if (btnKey === 'iconPathDarkMode' && !validateHttpUrl(btnValue)) { + console.error("customTrayButton ".concat(btnKey, " should be a url.")); + return false; + } + + var expectedKey = customTrayButtonsType.id[btnKey]; + + if (!expectedKey) { + console.error("customTrayButton does not support key ".concat(btnKey)); + return false; + } + + if (_typeof_1(btnValue) !== expectedKey) { + console.error("customTrayButton ".concat(btnKey, " should be a ").concat(expectedKey, ".")); + return false; + } + } + } + } + + return true; +} + +function validateReactNativeConfig(config) { + return validateConfigPropType(config, reactNativeConfigType); +} + +function validateConfigPropType(prop, propType) { + if (propType === undefined) { + return false; + } + + switch (_typeof_1(propType)) { + case 'string': + return _typeof_1(prop) === propType; + + case 'object': + if (_typeof_1(prop) !== 'object') { + return false; + } + + for (var key in prop) { + if (!validateConfigPropType(prop[key], propType[key])) { + return false; + } + } + + return true; + + default: + // console.error( + // "Internal programming error: we've defined our config prop types wrong" + // ); + return false; + } +} + +function remoteMediaPlayerStartValidationHelpMsg() { + return "startRemoteMediaPlayer arguments must be of the form: \n { url: \"playback url\", \n settings?: \n {state: \"play\"|\"pause\", simulcastEncodings?: [{}] } }"; +} + +function remoteMediaPlayerUpdateValidationHelpMsg() { + return "updateRemoteMediaPlayer arguments must be of the form: \n session_id: \"participant session\", \n { settings?: {state: \"play\"|\"pause\"} }"; +} + +function validateRemotePlayerUrl(url) { + // TODO: add protocol check as well http://, https://. file://.. + if (typeof url !== 'string') { + throw new Error("url parameter must be \"string\" type"); + } +} + +function validateRemotePlayerSettings(playerSettings) { + if (_typeof_1(playerSettings) !== 'object') { + throw new Error("RemoteMediaPlayerSettings: must be \"object\" type"); + } + + if (playerSettings.state) { + if (!Object.values(DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING).includes(playerSettings.state)) { + throw new Error("Invalid value for RemoteMediaPlayerSettings.state, valid values are: " + JSON.stringify(DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING)); + } + } + + if (playerSettings.volume) { + if (typeof playerSettings.volume !== 'number') { + throw new Error("RemoteMediaPlayerSettings.volume: must be \"number\" type"); + } + + if (playerSettings.volume < 0 || playerSettings.volume > 2) { + throw new Error("RemoteMediaPlayerSettings.volume: must be between 0.0 - 2.0"); + } + } +} + +function isValueInRange(val, min, max) { + if (typeof val !== 'number' || val < min || val > max) { + return false; + } + + return true; +} + +function validateRemotePlayerEncodingSettings(playerSettings) { + for (var prop in playerSettings) { + if (!startRmpSettingsValidKeys.includes(prop)) { + throw new Error("Invalid key ".concat(prop, ", valid keys are: ").concat(startRmpSettingsValidKeys)); + } + } // validate simulcastEncodings + + + if (playerSettings.simulcastEncodings) { + if (!(playerSettings.simulcastEncodings instanceof Array)) { + throw new Error("simulcastEncodings must be \"Array\""); + } // max 3 layers + + + if (!isValueInRange(playerSettings.simulcastEncodings.length, 0, MAX_SIMULCAST_LAYERS)) { + throw new Error("\"simulcastEncodings\" not in range. valid range 1 to 3 layers"); + } // check value within each simulcast layer + + + playerSettings.simulcastEncodings.every(function (layer) { + for (var _prop in layer) { + // check property is valid + if (!simulcastEncodingsValidRanges.hasOwnProperty(_prop)) { + throw new Error("Invalid key ".concat(_prop, ", valid keys are:") + Object.keys(simulcastEncodingsValidRanges)); + } // property must be number + + + if (typeof layer[_prop] !== 'number') { + throw new Error("simulcastEncodings[].".concat(_prop, " must be \"number\"")); + } // property must be within range + + + var _simulcastEncodingsVa = simulcastEncodingsValidRanges[_prop], + min = _simulcastEncodingsVa.min, + max = _simulcastEncodingsVa.max; + + if (!isValueInRange(layer[_prop], min, max)) { + throw new Error("simulcastEncodings[].".concat(_prop, " value not in range. valid range: ").concat(min, " to ").concat(max)); + } + } // maxBitrate is mandatory + + + if (!layer.hasOwnProperty('maxBitrate')) { + throw new Error("simulcastEncodings[].maxBitrate is not specified"); + } + }); + } +} + +export default DailyIframe; +export { DAILY_ACCESS_LEVEL_FULL, DAILY_ACCESS_LEVEL_LOBBY, DAILY_ACCESS_LEVEL_NONE, DAILY_ACCESS_UNKNOWN, DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE, DAILY_CAMERA_ERROR_CAM_IN_USE, DAILY_CAMERA_ERROR_CONSTRAINTS, DAILY_CAMERA_ERROR_MIC_IN_USE, DAILY_CAMERA_ERROR_NOT_FOUND, DAILY_CAMERA_ERROR_PERMISSIONS, DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES, DAILY_CAMERA_ERROR_UNKNOWN, DAILY_EVENT_ACCESS_STATE_UPDATED, DAILY_EVENT_ACTIVE_SPEAKER_CHANGE, DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE, DAILY_EVENT_APP_MSG, DAILY_EVENT_CAMERA_ERROR, DAILY_EVENT_ERROR, DAILY_EVENT_EXIT_FULLSCREEN, DAILY_EVENT_FULLSCREEN, DAILY_EVENT_IFRAME_LAUNCH_CONFIG, DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG, DAILY_EVENT_INPUT_EVENT, DAILY_EVENT_INPUT_SETTINGS_UPDATED, DAILY_EVENT_JOINED_MEETING, DAILY_EVENT_JOINING_MEETING, DAILY_EVENT_LANG_UPDATED, DAILY_EVENT_LEFT_MEETING, DAILY_EVENT_LIVE_STREAMING_ERROR, DAILY_EVENT_LIVE_STREAMING_STARTED, DAILY_EVENT_LIVE_STREAMING_STOPPED, DAILY_EVENT_LOADED, DAILY_EVENT_LOADING, DAILY_EVENT_LOAD_ATTEMPT_FAILED, DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED, DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED, DAILY_EVENT_MEETING_SESSION_DATA_ERROR, DAILY_EVENT_MEETING_SESSION_STATE_UPDATED, DAILY_EVENT_MEETING_SESSION_UPDATED, DAILY_EVENT_NETWORK_CONNECTION, DAILY_EVENT_NETWORK_QUALITY_CHANGE, DAILY_EVENT_NONFATAL_ERROR, DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED, DAILY_EVENT_PARTICIPANT_JOINED, DAILY_EVENT_PARTICIPANT_LEFT, DAILY_EVENT_PARTICIPANT_UPDATED, DAILY_EVENT_RECEIVE_SETTINGS_UPDATED, DAILY_EVENT_RECORDING_DATA, DAILY_EVENT_RECORDING_ERROR, DAILY_EVENT_RECORDING_STARTED, DAILY_EVENT_RECORDING_STATS, DAILY_EVENT_RECORDING_STOPPED, DAILY_EVENT_RECORDING_UPLOAD_COMPLETED, DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED, DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED, DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED, DAILY_EVENT_STARTED_CAMERA, DAILY_EVENT_THEME_UPDATED, DAILY_EVENT_TRACK_STARTED, DAILY_EVENT_TRACK_STOPPED, DAILY_EVENT_TRANSCRIPTION_ERROR, DAILY_EVENT_TRANSCRIPTION_STARTED, DAILY_EVENT_TRANSCRIPTION_STOPPED, DAILY_EVENT_WAITING_PARTICIPANT_ADDED, DAILY_EVENT_WAITING_PARTICIPANT_REMOVED, DAILY_EVENT_WAITING_PARTICIPANT_UPDATED, DAILY_FATAL_ERROR_EJECTED, DAILY_FATAL_ERROR_EXP_ROOM, DAILY_FATAL_ERROR_EXP_TOKEN, DAILY_FATAL_ERROR_MEETING_FULL, DAILY_FATAL_ERROR_NBF_ROOM, DAILY_FATAL_ERROR_NBF_TOKEN, DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY, DAILY_RECEIVE_SETTINGS_BASE_KEY, DAILY_STATE_ERROR, DAILY_STATE_JOINED, DAILY_STATE_JOINING, DAILY_STATE_LEFT, DAILY_STATE_NEW, DAILY_TRACK_STATE_BLOCKED, DAILY_TRACK_STATE_INTERRUPTED, DAILY_TRACK_STATE_LOADING, DAILY_TRACK_STATE_OFF, DAILY_TRACK_STATE_PLAYABLE, DAILY_TRACK_STATE_SENDABLE }; diff --git a/extensions/miro/demo/daily-iframe.js b/extensions/miro/demo/daily-iframe.js new file mode 100644 index 0000000..e6afb92 --- /dev/null +++ b/extensions/miro/demo/daily-iframe.js @@ -0,0 +1,2321 @@ +console.log("hello from chads daily-js"); +(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["DailyIframe"] = factory(); + else root["DailyIframe"] = 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] = { + /******/ i: moduleId, + /******/ l: false, + /******/ exports: {}, + /******/ + }); + /******/ + /******/ // Execute the module function + /******/ modules[moduleId].call( + module.exports, + module, + module.exports, + __webpack_require__ + ); + /******/ + /******/ // Flag the module as loaded + /******/ module.l = 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; + /******/ + /******/ // define getter function for harmony exports + /******/ __webpack_require__.d = function (exports, name, getter) { + /******/ if (!__webpack_require__.o(exports, name)) { + /******/ Object.defineProperty(exports, name, { + enumerable: true, + get: getter, + }); + /******/ + } + /******/ + }; + /******/ + /******/ // define __esModule on exports + /******/ __webpack_require__.r = function (exports) { + /******/ if (typeof Symbol !== "undefined" && Symbol.toStringTag) { + /******/ Object.defineProperty(exports, Symbol.toStringTag, { + value: "Module", + }); + /******/ + } + /******/ Object.defineProperty(exports, "__esModule", { value: true }); + /******/ + }; + /******/ + /******/ // create a fake namespace object + /******/ // mode & 1: value is a module id, require it + /******/ // mode & 2: merge all properties of value into the ns + /******/ // mode & 4: return value when already ns object + /******/ // mode & 8|1: behave like require + /******/ __webpack_require__.t = function (value, mode) { + /******/ if (mode & 1) value = __webpack_require__(value); + /******/ if (mode & 8) return value; + /******/ if ( + mode & 4 && + typeof value === "object" && + value && + value.__esModule + ) + return value; + /******/ var ns = Object.create(null); + /******/ __webpack_require__.r(ns); + /******/ Object.defineProperty(ns, "default", { + enumerable: true, + value: value, + }); + /******/ if (mode & 2 && typeof value != "string") + for (var key in value) + __webpack_require__.d( + ns, + key, + function (key) { + return value[key]; + }.bind(null, key) + ); + /******/ return ns; + /******/ + }; + /******/ + /******/ // getDefaultExport function for compatibility with non-harmony modules + /******/ __webpack_require__.n = function (module) { + /******/ var getter = + module && module.__esModule + ? /******/ function getDefault() { + return module["default"]; + } + : /******/ function getModuleExports() { + return module; + }; + /******/ __webpack_require__.d(getter, "a", getter); + /******/ return getter; + /******/ + }; + /******/ + /******/ // Object.prototype.hasOwnProperty.call + /******/ __webpack_require__.o = function (object, property) { + return Object.prototype.hasOwnProperty.call(object, property); + }; + /******/ + /******/ // __webpack_public_path__ + /******/ __webpack_require__.p = ""; + /******/ + /******/ + /******/ // Load entry module and return exports + /******/ return __webpack_require__( + (__webpack_require__.s = "./src/main.js") + ); + /******/ + })( + /************************************************************************/ + /******/ { + /***/ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js": + /*!*****************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***! + \*****************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanM/NWE0MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js": + /*!***************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/arrayWithHoles.js ***! + \***************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aEhvbGVzLmpzP2MxMzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js": + /*!**********************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! + \**********************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz8zYzk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js": + /*!*****************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/asyncToGenerator.js ***! + \*****************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + 'function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanM/Yzk3MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvcjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js": + /*!***************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***! + \***************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + 'function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n\nmodule.exports = _classCallCheck;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzPzk3MGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/classCallCheck.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/construct.js": + /*!**********************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/construct.js ***! + \**********************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js");\n\nvar isNativeReflectConstruct = __webpack_require__(/*! ./isNativeReflectConstruct */ "./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js");\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NvbnN0cnVjdC5qcz9iMTdjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQixtQkFBTyxDQUFDLGlGQUFrQjs7QUFFL0MsK0JBQStCLG1CQUFPLENBQUMscUdBQTRCOztBQUVuRTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jb25zdHJ1Y3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxudmFyIGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IHJlcXVpcmUoXCIuL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdFwiKTtcblxuZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgdmFyIGEgPSBbbnVsbF07XG4gICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgIGlmIChDbGFzcykgc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NvbnN0cnVjdDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/construct.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/createClass.js": + /*!************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/createClass.js ***! + \************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + 'function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzPzViYzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/createClass.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/defineProperty.js": + /*!***************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***! + \***************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzPzk1MjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/defineProperty.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js": + /*!***************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! + \***************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzPzM2YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2Y7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/inherits.js": + /*!*********************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/inherits.js ***! + \*********************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzP2VkNmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCLG1CQUFPLENBQUMsaUZBQWtCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2ZcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHM7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/inherits.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/isNativeFunction.js": + /*!*****************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/isNativeFunction.js ***! + \*****************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + 'function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf("[native code]") !== -1;\n}\n\nmodule.exports = _isNativeFunction;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2lzTmF0aXZlRnVuY3Rpb24uanM/YzVmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pc05hdGl2ZUZ1bmN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXNOYXRpdmVGdW5jdGlvbjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/isNativeFunction.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js": + /*!*************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js ***! + \*************************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + 'function _isNativeReflectConstruct() {\n if (typeof Reflect === "undefined" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === "function") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nmodule.exports = _isNativeReflectConstruct;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcz82ZjhmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkVBQTJFO0FBQzNFO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js": + /*!*********************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***! + \*********************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + 'function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i["return"] != null) _i["return"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzPzliNDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLCtCQUErQjtBQUM1RTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG4gIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/nonIterableRest.js": + /*!****************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/nonIterableRest.js ***! + \****************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + 'function _nonIterableRest() {\n throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n}\n\nmodule.exports = _nonIterableRest;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcz9jMjQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/nonIterableRest.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/objectWithoutProperties.js": + /*!************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/objectWithoutProperties.js ***! + \************************************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var objectWithoutPropertiesLoose = __webpack_require__(/*! ./objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzPzQwODIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DLG1CQUFPLENBQUMsNkdBQWdDOztBQUUzRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSA9IHJlcXVpcmUoXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIik7XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07XG4gICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXM7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js": + /*!*****************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js ***! + \*****************************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/ZjBlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": + /*!**************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! + \**************************************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");\n\nvar assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === "object" || typeof call === "function")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanM/NmI1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsc0ZBQStCOztBQUVyRCw0QkFBNEIsbUJBQU8sQ0FBQywrRkFBeUI7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js": + /*!***************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! + \***************************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzPzRhNGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/slicedToArray.js": + /*!**************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/slicedToArray.js ***! + \**************************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles */ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js");\n\nvar iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit */ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js");\n\nvar unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray */ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");\n\nvar nonIterableRest = __webpack_require__(/*! ./nonIterableRest */ "./node_modules/@babel/runtime/helpers/nonIterableRest.js");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanM/Mjc4YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBcUIsbUJBQU8sQ0FBQyxpRkFBa0I7O0FBRS9DLDJCQUEyQixtQkFBTyxDQUFDLDZGQUF3Qjs7QUFFM0QsaUNBQWlDLG1CQUFPLENBQUMseUdBQThCOztBQUV2RSxzQkFBc0IsbUJBQU8sQ0FBQyxtRkFBbUI7O0FBRWpEO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXRcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0XCIpO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/slicedToArray.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/typeof.js": + /*!*******************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/typeof.js ***! + \*******************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + 'function _typeof(obj) {\n "@babel/helpers - typeof";\n\n if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcz83MDM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/typeof.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js": + /*!***************************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! + \***************************************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray */ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzPzY2MTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCLG1CQUFPLENBQUMscUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/@babel/runtime/helpers/wrapNativeSuper.js": + /*!****************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/wrapNativeSuper.js ***! + \****************************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var getPrototypeOf = __webpack_require__(/*! ./getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");\n\nvar setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js");\n\nvar isNativeFunction = __webpack_require__(/*! ./isNativeFunction */ "./node_modules/@babel/runtime/helpers/isNativeFunction.js");\n\nvar construct = __webpack_require__(/*! ./construct */ "./node_modules/@babel/runtime/helpers/construct.js");\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === "function" ? new Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== "function") {\n throw new TypeError("Super expression must either be null or a function");\n }\n\n if (typeof _cache !== "undefined") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3dyYXBOYXRpdmVTdXBlci5qcz9hMTI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQixtQkFBTyxDQUFDLGlGQUFrQjs7QUFFL0MscUJBQXFCLG1CQUFPLENBQUMsaUZBQWtCOztBQUUvQyx1QkFBdUIsbUJBQU8sQ0FBQyxxRkFBb0I7O0FBRW5ELGdCQUFnQixtQkFBTyxDQUFDLHVFQUFhOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvd3JhcE5hdGl2ZVN1cGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vZ2V0UHJvdG90eXBlT2ZcIik7XG5cbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG52YXIgaXNOYXRpdmVGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2lzTmF0aXZlRnVuY3Rpb25cIik7XG5cbnZhciBjb25zdHJ1Y3QgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3RcIik7XG5cbmZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgdmFyIF9jYWNoZSA9IHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDtcblxuICBtb2R1bGUuZXhwb3J0cyA9IF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3dyYXBOYXRpdmVTdXBlcjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/wrapNativeSuper.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/bowser/es5.js": + /*!************************************!*\ + !*** ./node_modules/bowser/es5.js ***! + \************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + '!function(e,t){ true?module.exports=t():undefined}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=90)}({17:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case"NT":return"NT";case"XP":return"XP";case"NT 5.0":return"2000";case"NT 5.1":return"XP";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0},e.getVersionPrecision=function(e){return e.split(".").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),o=Math.max(i,s),a=0,u=e.map([t,r],(function(t){var r=o-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(n&&(a=o-Math.min(i,s)),o-=1;o>=a;){if(u[0][o]>u[1][o])return 1;if(u[0][o]===u[1][o]){if(o===a)return 0;o-=1}else if(u[0][o]1?i-1:0),o=1;o0){var o=Object.keys(r),u=a.default.find(o,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=a.default.find(o,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=a.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=a.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(a.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e){return this.isBrowser(e)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,o=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\\\(")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=o,e.exports=t.default},93:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var o=[{test:[/Roku\\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?) Version\\//],describe:function(e){var t=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return{name:s.OS_MAP.iOS,version:t}}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,".");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=o,e.exports=t.default},94:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var o=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?) Version\\//],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return"blackberry"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return"bada"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return"windows phone"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return"android"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return"android"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return"macos"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return"windows"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return"linux"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return"playstation 4"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return"roku"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=o,e.exports=t.default},95:function(e,t,r){"use strict";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var o=[{test:function(e){return"microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=o,e.exports=t.default}})}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9ib3dzZXIvZXM1LmpzPzMzN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFpRCxvQkFBb0IsU0FBMkcsQ0FBQyxrQkFBa0IsbUJBQW1CLFNBQVMsY0FBYyw0QkFBNEIsWUFBWSxxQkFBcUIsMkRBQTJELHVDQUF1QyxxQ0FBcUMsb0JBQW9CLEVBQUUsaUJBQWlCLDRGQUE0RixlQUFlLHdDQUF3QyxTQUFTLEVBQUUsbUJBQW1CLDhCQUE4QixxREFBcUQsMEJBQTBCLDZDQUE2QyxzQkFBc0IsNkRBQTZELFlBQVksZUFBZSxTQUFTLGlCQUFpQixpQ0FBaUMsaUJBQWlCLFlBQVksVUFBVSxzQkFBc0IsbUJBQW1CLGlEQUFpRCxrQkFBa0IsRUFBRSxtQkFBbUIsYUFBYSxpQ0FBaUMseUJBQXlCLGNBQWMscUNBQXFDLGlCQUFpQiwrQkFBK0IsZ0NBQWdDLGlCQUFpQiwrQkFBK0IsdUNBQXVDLHNCQUFzQixxQ0FBcUMsVUFBVSxvQkFBb0Isb0JBQW9CLDBCQUEwQix3QkFBd0IsMEJBQTBCLDJCQUEyQix1QkFBdUIsdUJBQXVCLHlCQUF5Qix5QkFBeUIsZ0JBQWdCLG1DQUFtQyxnREFBZ0QseUJBQXlCLEdBQUcsb0NBQW9DLHVCQUF1Qiw0QkFBNEIsb0JBQW9CLDZCQUE2Qix5QkFBeUIseUJBQXlCLDJCQUEyQix1QkFBdUIsNEJBQTRCLHVCQUF1Qix5QkFBeUIsZ0JBQWdCLHFDQUFxQyxnREFBZ0QseUJBQXlCLEdBQUcsd1lBQXdZLG1DQUFtQywyQkFBMkIsbUNBQW1DLG1CQUFtQix5R0FBeUcsK0RBQStELHVDQUF1QywwQ0FBMEMsYUFBYSxHQUFHLGdDQUFnQyxLQUFLLEVBQUUsNEJBQTRCLHNCQUFzQixrQkFBa0IsS0FBSyxrQ0FBa0MscUJBQXFCLFdBQVcsNERBQTRELFFBQVEsV0FBVyxxQkFBcUIsU0FBUyxzQkFBc0IsUUFBUSw4REFBOEQsbUJBQW1CLElBQUksTUFBTSxX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cy9ib3dzZXIvZXM1LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5ib3dzZXI9dCgpOmUuYm93c2VyPXQoKX0odGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dKXJldHVybiB0W25dLmV4cG9ydHM7dmFyIGk9dFtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbbl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsciksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gci5tPWUsci5jPXQsci5kPWZ1bmN0aW9uKGUsdCxuKXtyLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxyLnI9ZnVuY3Rpb24oZSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sci50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1yKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoci5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJlwic3RyaW5nXCIhPXR5cGVvZiBlKWZvcih2YXIgaSBpbiBlKXIuZChuLGksZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxpKSk7cmV0dXJuIG59LHIubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKHQsXCJhXCIsdCksdH0sci5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxyLnA9XCJcIixyKHIucz05MCl9KHsxNzpmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIG49cigxOCksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuZ2V0Rmlyc3RNYXRjaD1mdW5jdGlvbihlLHQpe3ZhciByPXQubWF0Y2goZSk7cmV0dXJuIHImJnIubGVuZ3RoPjAmJnJbMV18fFwiXCJ9LGUuZ2V0U2Vjb25kTWF0Y2g9ZnVuY3Rpb24oZSx0KXt2YXIgcj10Lm1hdGNoKGUpO3JldHVybiByJiZyLmxlbmd0aD4xJiZyWzJdfHxcIlwifSxlLm1hdGNoQW5kUmV0dXJuQ29uc3Q9ZnVuY3Rpb24oZSx0LHIpe2lmKGUudGVzdCh0KSlyZXR1cm4gcn0sZS5nZXRXaW5kb3dzVmVyc2lvbk5hbWU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2VcIk5UXCI6cmV0dXJuXCJOVFwiO2Nhc2VcIlhQXCI6cmV0dXJuXCJYUFwiO2Nhc2VcIk5UIDUuMFwiOnJldHVyblwiMjAwMFwiO2Nhc2VcIk5UIDUuMVwiOnJldHVyblwiWFBcIjtjYXNlXCJOVCA1LjJcIjpyZXR1cm5cIjIwMDNcIjtjYXNlXCJOVCA2LjBcIjpyZXR1cm5cIlZpc3RhXCI7Y2FzZVwiTlQgNi4xXCI6cmV0dXJuXCI3XCI7Y2FzZVwiTlQgNi4yXCI6cmV0dXJuXCI4XCI7Y2FzZVwiTlQgNi4zXCI6cmV0dXJuXCI4LjFcIjtjYXNlXCJOVCAxMC4wXCI6cmV0dXJuXCIxMFwiO2RlZmF1bHQ6cmV0dXJufX0sZS5nZXRNYWNPU1ZlcnNpb25OYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoXCIuXCIpLnNwbGljZSgwLDIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfHwwfSkpO2lmKHQucHVzaCgwKSwxMD09PXRbMF0pc3dpdGNoKHRbMV0pe2Nhc2UgNTpyZXR1cm5cIkxlb3BhcmRcIjtjYXNlIDY6cmV0dXJuXCJTbm93IExlb3BhcmRcIjtjYXNlIDc6cmV0dXJuXCJMaW9uXCI7Y2FzZSA4OnJldHVyblwiTW91bnRhaW4gTGlvblwiO2Nhc2UgOTpyZXR1cm5cIk1hdmVyaWNrc1wiO2Nhc2UgMTA6cmV0dXJuXCJZb3NlbWl0ZVwiO2Nhc2UgMTE6cmV0dXJuXCJFbCBDYXBpdGFuXCI7Y2FzZSAxMjpyZXR1cm5cIlNpZXJyYVwiO2Nhc2UgMTM6cmV0dXJuXCJIaWdoIFNpZXJyYVwiO2Nhc2UgMTQ6cmV0dXJuXCJNb2phdmVcIjtjYXNlIDE1OnJldHVyblwiQ2F0YWxpbmFcIjtkZWZhdWx0OnJldHVybn19LGUuZ2V0QW5kcm9pZFZlcnNpb25OYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoXCIuXCIpLnNwbGljZSgwLDIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfHwwfSkpO2lmKHQucHVzaCgwKSwhKDE9PT10WzBdJiZ0WzFdPDUpKXJldHVybiAxPT09dFswXSYmdFsxXTw2P1wiQ3VwY2FrZVwiOjE9PT10WzBdJiZ0WzFdPj02P1wiRG9udXRcIjoyPT09dFswXSYmdFsxXTwyP1wiRWNsYWlyXCI6Mj09PXRbMF0mJjI9PT10WzFdP1wiRnJveW9cIjoyPT09dFswXSYmdFsxXT4yP1wiR2luZ2VyYnJlYWRcIjozPT09dFswXT9cIkhvbmV5Y29tYlwiOjQ9PT10WzBdJiZ0WzFdPDE/XCJJY2UgQ3JlYW0gU2FuZHdpY2hcIjo0PT09dFswXSYmdFsxXTw0P1wiSmVsbHkgQmVhblwiOjQ9PT10WzBdJiZ0WzFdPj00P1wiS2l0S2F0XCI6NT09PXRbMF0/XCJMb2xsaXBvcFwiOjY9PT10WzBdP1wiTWFyc2htYWxsb3dcIjo3PT09dFswXT9cIk5vdWdhdFwiOjg9PT10WzBdP1wiT3Jlb1wiOjk9PT10WzBdP1wiUGllXCI6dm9pZCAwfSxlLmdldFZlcnNpb25QcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoXCIuXCIpLmxlbmd0aH0sZS5jb21wYXJlVmVyc2lvbnM9ZnVuY3Rpb24odCxyLG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgaT1lLmdldFZlcnNpb25QcmVjaXNpb24odCkscz1lLmdldFZlcnNpb25QcmVjaXNpb24ociksbz1NYXRoLm1heChpLHMpLGE9MCx1PWUubWFwKFt0LHJdLChmdW5jdGlvbih0KXt2YXIgcj1vLWUuZ2V0VmVyc2lvblByZWNpc2lvbih0KSxuPXQrbmV3IEFycmF5KHIrMSkuam9pbihcIi4wXCIpO3JldHVybiBlLm1hcChuLnNwbGl0KFwiLlwiKSwoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBcnJheSgyMC1lLmxlbmd0aCkuam9pbihcIjBcIikrZX0pKS5yZXZlcnNlKCl9KSk7Zm9yKG4mJihhPW8tTWF0aC5taW4oaSxzKSksby09MTtvPj1hOyl7aWYodVswXVtvXT51WzFdW29dKXJldHVybiAxO2lmKHVbMF1bb109PT11WzFdW29dKXtpZihvPT09YSlyZXR1cm4gMDtvLT0xfWVsc2UgaWYodVswXVtvXTx1WzFdW29dKXJldHVybi0xfX0sZS5tYXA9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPVtdO2lmKEFycmF5LnByb3RvdHlwZS5tYXApcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChlLHQpO2ZvcihyPTA7cjxlLmxlbmd0aDtyKz0xKW4ucHVzaCh0KGVbcl0pKTtyZXR1cm4gbn0sZS5maW5kPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbjtpZihBcnJheS5wcm90b3R5cGUuZmluZClyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbmQuY2FsbChlLHQpO2ZvcihyPTAsbj1lLmxlbmd0aDtyPG47cis9MSl7dmFyIGk9ZVtyXTtpZih0KGkscikpcmV0dXJuIGl9fSxlLmFzc2lnbj1mdW5jdGlvbihlKXtmb3IodmFyIHQscixuPWUsaT1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KGk+MT9pLTE6MCksbz0xO288aTtvKyspc1tvLTFdPWFyZ3VtZW50c1tvXTtpZihPYmplY3QuYXNzaWduKXJldHVybiBPYmplY3QuYXNzaWduLmFwcGx5KE9iamVjdCxbZV0uY29uY2F0KHMpKTt2YXIgYT1mdW5jdGlvbigpe3ZhciBlPXNbdF07XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuW3RdPWVbdF19KSl9O2Zvcih0PTAscj1zLmxlbmd0aDt0PHI7dCs9MSlhKCk7cmV0dXJuIGV9LGUuZ2V0QnJvd3NlckFsaWFzPWZ1bmN0aW9uKGUpe3JldHVybiBuLkJST1dTRVJfQUxJQVNFU19NQVBbZV19LGUuZ2V0QnJvd3NlclR5cGVCeUFsaWFzPWZ1bmN0aW9uKGUpe3JldHVybiBuLkJST1dTRVJfTUFQW2VdfHxcIlwifSxlfSgpO3QuZGVmYXVsdD1pLGUuZXhwb3J0cz10LmRlZmF1bHR9LDE4OmZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0Ll9fZXNNb2R1bGU9ITAsdC5FTkdJTkVfTUFQPXQuT1NfTUFQPXQuUExBVEZPUk1TX01BUD10LkJST1dTRVJfTUFQPXQuQlJPV1NFUl9BTElBU0VTX01BUD12b2lkIDA7dC5CUk9XU0VSX0FMSUFTRVNfTUFQPXtcIkFtYXpvbiBTaWxrXCI6XCJhbWF6b25fc2lsa1wiLFwiQW5kcm9pZCBCcm93c2VyXCI6XCJhbmRyb2lkXCIsQmFkYTpcImJhZGFcIixCbGFja0JlcnJ5OlwiYmxhY2tiZXJyeVwiLENocm9tZTpcImNocm9tZVwiLENocm9taXVtOlwiY2hyb21pdW1cIixFbGVjdHJvbjpcImVsZWN0cm9uXCIsRXBpcGhhbnk6XCJlcGlwaGFueVwiLEZpcmVmb3g6XCJmaXJlZm94XCIsRm9jdXM6XCJmb2N1c1wiLEdlbmVyaWM6XCJnZW5lcmljXCIsXCJHb29nbGUgU2VhcmNoXCI6XCJnb29nbGVfc2VhcmNoXCIsR29vZ2xlYm90OlwiZ29vZ2xlYm90XCIsXCJJbnRlcm5ldCBFeHBsb3JlclwiOlwiaWVcIixcIkstTWVsZW9uXCI6XCJrX21lbGVvblwiLE1heHRob246XCJtYXh0aG9uXCIsXCJNaWNyb3NvZnQgRWRnZVwiOlwiZWRnZVwiLFwiTVogQnJvd3NlclwiOlwibXpcIixcIk5BVkVSIFdoYWxlIEJyb3dzZXJcIjpcIm5hdmVyXCIsT3BlcmE6XCJvcGVyYVwiLFwiT3BlcmEgQ29hc3RcIjpcIm9wZXJhX2NvYXN0XCIsUGhhbnRvbUpTOlwicGhhbnRvbWpzXCIsUHVmZmluOlwicHVmZmluXCIsUXVwWmlsbGE6XCJxdXB6aWxsYVwiLFFROlwicXFcIixRUUxpdGU6XCJxcWxpdGVcIixTYWZhcmk6XCJzYWZhcmlcIixTYWlsZmlzaDpcInNhaWxmaXNoXCIsXCJTYW1zdW5nIEludGVybmV0IGZvciBBbmRyb2lkXCI6XCJzYW1zdW5nX2ludGVybmV0XCIsU2VhTW9ua2V5Olwic2VhbW9ua2V5XCIsU2xlaXBuaXI6XCJzbGVpcG5pclwiLFN3aW5nOlwic3dpbmdcIixUaXplbjpcInRpemVuXCIsXCJVQyBCcm93c2VyXCI6XCJ1Y1wiLFZpdmFsZGk6XCJ2aXZhbGRpXCIsXCJXZWJPUyBCcm93c2VyXCI6XCJ3ZWJvc1wiLFdlQ2hhdDpcIndlY2hhdFwiLFwiWWFuZGV4IEJyb3dzZXJcIjpcInlhbmRleFwiLFJva3U6XCJyb2t1XCJ9O3QuQlJPV1NFUl9NQVA9e2FtYXpvbl9zaWxrOlwiQW1hem9uIFNpbGtcIixhbmRyb2lkOlwiQW5kcm9pZCBCcm93c2VyXCIsYmFkYTpcIkJhZGFcIixibGFja2JlcnJ5OlwiQmxhY2tCZXJyeVwiLGNocm9tZTpcIkNocm9tZVwiLGNocm9taXVtOlwiQ2hyb21pdW1cIixlbGVjdHJvbjpcIkVsZWN0cm9uXCIsZXBpcGhhbnk6XCJFcGlwaGFueVwiLGZpcmVmb3g6XCJGaXJlZm94XCIsZm9jdXM6XCJGb2N1c1wiLGdlbmVyaWM6XCJHZW5lcmljXCIsZ29vZ2xlYm90OlwiR29vZ2xlYm90XCIsZ29vZ2xlX3NlYXJjaDpcIkdvb2dsZSBTZWFyY2hcIixpZTpcIkludGVybmV0IEV4cGxvcmVyXCIsa19tZWxlb246XCJLLU1lbGVvblwiLG1heHRob246XCJNYXh0aG9uXCIsZWRnZTpcIk1pY3Jvc29mdCBFZGdlXCIsbXo6XCJNWiBCcm93c2VyXCIsbmF2ZXI6XCJOQVZFUiBXaGFsZSBCcm93c2VyXCIsb3BlcmE6XCJPcGVyYVwiLG9wZXJhX2NvYXN0OlwiT3BlcmEgQ29hc3RcIixwaGFudG9tanM6XCJQaGFudG9tSlNcIixwdWZmaW46XCJQdWZmaW5cIixxdXB6aWxsYTpcIlF1cFppbGxhXCIscXE6XCJRUSBCcm93c2VyXCIscXFsaXRlOlwiUVEgQnJvd3NlciBMaXRlXCIsc2FmYXJpOlwiU2FmYXJpXCIsc2FpbGZpc2g6XCJTYWlsZmlzaFwiLHNhbXN1bmdfaW50ZXJuZXQ6XCJTYW1zdW5nIEludGVybmV0IGZvciBBbmRyb2lkXCIsc2VhbW9ua2V5OlwiU2VhTW9ua2V5XCIsc2xlaXBuaXI6XCJTbGVpcG5pclwiLHN3aW5nOlwiU3dpbmdcIix0aXplbjpcIlRpemVuXCIsdWM6XCJVQyBCcm93c2VyXCIsdml2YWxkaTpcIlZpdmFsZGlcIix3ZWJvczpcIldlYk9TIEJyb3dzZXJcIix3ZWNoYXQ6XCJXZUNoYXRcIix5YW5kZXg6XCJZYW5kZXggQnJvd3NlclwifTt0LlBMQVRGT1JNU19NQVA9e3RhYmxldDpcInRhYmxldFwiLG1vYmlsZTpcIm1vYmlsZVwiLGRlc2t0b3A6XCJkZXNrdG9wXCIsdHY6XCJ0dlwifTt0Lk9TX01BUD17V2luZG93c1Bob25lOlwiV2luZG93cyBQaG9uZVwiLFdpbmRvd3M6XCJXaW5kb3dzXCIsTWFjT1M6XCJtYWNPU1wiLGlPUzpcImlPU1wiLEFuZHJvaWQ6XCJBbmRyb2lkXCIsV2ViT1M6XCJXZWJPU1wiLEJsYWNrQmVycnk6XCJCbGFja0JlcnJ5XCIsQmFkYTpcIkJhZGFcIixUaXplbjpcIlRpemVuXCIsTGludXg6XCJMaW51eFwiLENocm9tZU9TOlwiQ2hyb21lIE9TXCIsUGxheVN0YXRpb240OlwiUGxheVN0YXRpb24gNFwiLFJva3U6XCJSb2t1XCJ9O3QuRU5HSU5FX01BUD17RWRnZUhUTUw6XCJFZGdlSFRNTFwiLEJsaW5rOlwiQmxpbmtcIixUcmlkZW50OlwiVHJpZGVudFwiLFByZXN0bzpcIlByZXN0b1wiLEdlY2tvOlwiR2Vja29cIixXZWJLaXQ6XCJXZWJLaXRcIn19LDkwOmZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXZvaWQgMDt2YXIgbixpPShuPXIoOTEpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0scz1yKDE4KTtmdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9dmFyIHQscixuO3JldHVybiBlLmdldFBhcnNlcj1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PSExKSxcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJVc2VyQWdlbnQgc2hvdWxkIGJlIGEgc3RyaW5nXCIpO3JldHVybiBuZXcgaS5kZWZhdWx0KGUsdCl9LGUucGFyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpLmRlZmF1bHQoZSkuZ2V0UmVzdWx0KCl9LHQ9ZSxuPVt7a2V5OlwiQlJPV1NFUl9NQVBcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5CUk9XU0VSX01BUH19LHtrZXk6XCJFTkdJTkVfTUFQXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuRU5HSU5FX01BUH19LHtrZXk6XCJPU19NQVBcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5PU19NQVB9fSx7a2V5OlwiUExBVEZPUk1TX01BUFwiLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlBMQVRGT1JNU19NQVB9fV0sKHI9bnVsbCkmJm8odC5wcm90b3R5cGUsciksbiYmbyh0LG4pLGV9KCk7dC5kZWZhdWx0PWEsZS5leHBvcnRzPXQuZGVmYXVsdH0sOTE6ZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciBuPXUocig5MikpLGk9dShyKDkzKSkscz11KHIoOTQpKSxvPXUocig5NSkpLGE9dShyKDE3KSk7ZnVuY3Rpb24gdShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ITEpLG51bGw9PWV8fFwiXCI9PT1lKXRocm93IG5ldyBFcnJvcihcIlVzZXJBZ2VudCBwYXJhbWV0ZXIgY2FuJ3QgYmUgZW1wdHlcIik7dGhpcy5fdWE9ZSx0aGlzLnBhcnNlZFJlc3VsdD17fSwhMCE9PXQmJnRoaXMucGFyc2UoKX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5nZXRVQT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91YX0sdC50ZXN0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnRlc3QodGhpcy5fdWEpfSx0LnBhcnNlQnJvd3Nlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5wYXJzZWRSZXN1bHQuYnJvd3Nlcj17fTt2YXIgdD1hLmRlZmF1bHQuZmluZChuLmRlZmF1bHQsKGZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGVzdClyZXR1cm4gdC50ZXN0KGUpO2lmKHQudGVzdCBpbnN0YW5jZW9mIEFycmF5KXJldHVybiB0LnRlc3Quc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUudGVzdCh0KX0pKTt0aHJvdyBuZXcgRXJyb3IoXCJCcm93c2VyJ3MgdGVzdCBmdW5jdGlvbiBpcyBub3QgdmFsaWRcIil9KSk7cmV0dXJuIHQmJih0aGlzLnBhcnNlZFJlc3VsdC5icm93c2VyPXQuZGVzY3JpYmUodGhpcy5nZXRVQSgpKSksdGhpcy5wYXJzZWRSZXN1bHQuYnJvd3Nlcn0sdC5nZXRCcm93c2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VkUmVzdWx0LmJyb3dzZXI/dGhpcy5wYXJzZWRSZXN1bHQuYnJvd3Nlcjp0aGlzLnBhcnNlQnJvd3NlcigpfSx0LmdldEJyb3dzZXJOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBlP1N0cmluZyh0aGlzLmdldEJyb3dzZXIoKS5uYW1lKS50b0xvd2VyQ2FzZSgpfHxcIlwiOnRoaXMuZ2V0QnJvd3NlcigpLm5hbWV8fFwiXCJ9LHQuZ2V0QnJvd3NlclZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCcm93c2VyKCkudmVyc2lvbn0sdC5nZXRPUz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlZFJlc3VsdC5vcz90aGlzLnBhcnNlZFJlc3VsdC5vczp0aGlzLnBhcnNlT1MoKX0sdC5wYXJzZU9TPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnBhcnNlZFJlc3VsdC5vcz17fTt2YXIgdD1hLmRlZmF1bHQuZmluZChpLmRlZmF1bHQsKGZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGVzdClyZXR1cm4gdC50ZXN0KGUpO2lmKHQudGVzdCBpbnN0YW5jZW9mIEFycmF5KXJldHVybiB0LnRlc3Quc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUudGVzdCh0KX0pKTt0aHJvdyBuZXcgRXJyb3IoXCJCcm93c2VyJ3MgdGVzdCBmdW5jdGlvbiBpcyBub3QgdmFsaWRcIil9KSk7cmV0dXJuIHQmJih0aGlzLnBhcnNlZFJlc3VsdC5vcz10LmRlc2NyaWJlKHRoaXMuZ2V0VUEoKSkpLHRoaXMucGFyc2VkUmVzdWx0Lm9zfSx0LmdldE9TTmFtZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE9TKCkubmFtZTtyZXR1cm4gZT9TdHJpbmcodCkudG9Mb3dlckNhc2UoKXx8XCJcIjp0fHxcIlwifSx0LmdldE9TVmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9TKCkudmVyc2lvbn0sdC5nZXRQbGF0Zm9ybT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlZFJlc3VsdC5wbGF0Zm9ybT90aGlzLnBhcnNlZFJlc3VsdC5wbGF0Zm9ybTp0aGlzLnBhcnNlUGxhdGZvcm0oKX0sdC5nZXRQbGF0Zm9ybVR5cGU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITEpO3ZhciB0PXRoaXMuZ2V0UGxhdGZvcm0oKS50eXBlO3JldHVybiBlP1N0cmluZyh0KS50b0xvd2VyQ2FzZSgpfHxcIlwiOnR8fFwiXCJ9LHQucGFyc2VQbGF0Zm9ybT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5wYXJzZWRSZXN1bHQucGxhdGZvcm09e307dmFyIHQ9YS5kZWZhdWx0LmZpbmQocy5kZWZhdWx0LChmdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRlc3QpcmV0dXJuIHQudGVzdChlKTtpZih0LnRlc3QgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4gdC50ZXN0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRlc3QodCl9KSk7dGhyb3cgbmV3IEVycm9yKFwiQnJvd3NlcidzIHRlc3QgZnVuY3Rpb24gaXMgbm90IHZhbGlkXCIpfSkpO3JldHVybiB0JiYodGhpcy5wYXJzZWRSZXN1bHQucGxhdGZvcm09dC5kZXNjcmliZSh0aGlzLmdldFVBKCkpKSx0aGlzLnBhcnNlZFJlc3VsdC5wbGF0Zm9ybX0sdC5nZXRFbmdpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZWRSZXN1bHQuZW5naW5lP3RoaXMucGFyc2VkUmVzdWx0LmVuZ2luZTp0aGlzLnBhcnNlRW5naW5lKCl9LHQuZ2V0RW5naW5lTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gZT9TdHJpbmcodGhpcy5nZXRFbmdpbmUoKS5uYW1lKS50b0xvd2VyQ2FzZSgpfHxcIlwiOnRoaXMuZ2V0RW5naW5lKCkubmFtZXx8XCJcIn0sdC5wYXJzZUVuZ2luZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5wYXJzZWRSZXN1bHQuZW5naW5lPXt9O3ZhciB0PWEuZGVmYXVsdC5maW5kKG8uZGVmYXVsdCwoZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC50ZXN0KXJldHVybiB0LnRlc3QoZSk7aWYodC50ZXN0IGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIHQudGVzdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gZS50ZXN0KHQpfSkpO3Rocm93IG5ldyBFcnJvcihcIkJyb3dzZXIncyB0ZXN0IGZ1bmN0aW9uIGlzIG5vdCB2YWxpZFwiKX0pKTtyZXR1cm4gdCYmKHRoaXMucGFyc2VkUmVzdWx0LmVuZ2luZT10LmRlc2NyaWJlKHRoaXMuZ2V0VUEoKSkpLHRoaXMucGFyc2VkUmVzdWx0LmVuZ2luZX0sdC5wYXJzZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlQnJvd3NlcigpLHRoaXMucGFyc2VPUygpLHRoaXMucGFyc2VQbGF0Zm9ybSgpLHRoaXMucGFyc2VFbmdpbmUoKSx0aGlzfSx0LmdldFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiBhLmRlZmF1bHQuYXNzaWduKHt9LHRoaXMucGFyc2VkUmVzdWx0KX0sdC5zYXRpc2ZpZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXt9LG49MCxpPXt9LHM9MDtpZihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbz1lW3RdO1wic3RyaW5nXCI9PXR5cGVvZiBvPyhpW3RdPW8scys9MSk6XCJvYmplY3RcIj09dHlwZW9mIG8mJihyW3RdPW8sbis9MSl9KSksbj4wKXt2YXIgbz1PYmplY3Qua2V5cyhyKSx1PWEuZGVmYXVsdC5maW5kKG8sKGZ1bmN0aW9uKGUpe3JldHVybiB0LmlzT1MoZSl9KSk7aWYodSl7dmFyIGQ9dGhpcy5zYXRpc2ZpZXMoclt1XSk7aWYodm9pZCAwIT09ZClyZXR1cm4gZH12YXIgYz1hLmRlZmF1bHQuZmluZChvLChmdW5jdGlvbihlKXtyZXR1cm4gdC5pc1BsYXRmb3JtKGUpfSkpO2lmKGMpe3ZhciBmPXRoaXMuc2F0aXNmaWVzKHJbY10pO2lmKHZvaWQgMCE9PWYpcmV0dXJuIGZ9fWlmKHM+MCl7dmFyIGw9T2JqZWN0LmtleXMoaSksaD1hLmRlZmF1bHQuZmluZChsLChmdW5jdGlvbihlKXtyZXR1cm4gdC5pc0Jyb3dzZXIoZSwhMCl9KSk7aWYodm9pZCAwIT09aClyZXR1cm4gdGhpcy5jb21wYXJlVmVyc2lvbihpW2hdKX19LHQuaXNCcm93c2VyPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciByPXRoaXMuZ2V0QnJvd3Nlck5hbWUoKS50b0xvd2VyQ2FzZSgpLG49ZS50b0xvd2VyQ2FzZSgpLGk9YS5kZWZhdWx0LmdldEJyb3dzZXJUeXBlQnlBbGlhcyhuKTtyZXR1cm4gdCYmaSYmKG49aS50b0xvd2VyQ2FzZSgpKSxuPT09cn0sdC5jb21wYXJlVmVyc2lvbj1mdW5jdGlvbihlKXt2YXIgdD1bMF0scj1lLG49ITEsaT10aGlzLmdldEJyb3dzZXJWZXJzaW9uKCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkpcmV0dXJuXCI+XCI9PT1lWzBdfHxcIjxcIj09PWVbMF0/KHI9ZS5zdWJzdHIoMSksXCI9XCI9PT1lWzFdPyhuPSEwLHI9ZS5zdWJzdHIoMikpOnQ9W10sXCI+XCI9PT1lWzBdP3QucHVzaCgxKTp0LnB1c2goLTEpKTpcIj1cIj09PWVbMF0/cj1lLnN1YnN0cigxKTpcIn5cIj09PWVbMF0mJihuPSEwLHI9ZS5zdWJzdHIoMSkpLHQuaW5kZXhPZihhLmRlZmF1bHQuY29tcGFyZVZlcnNpb25zKGkscixuKSk+LTF9LHQuaXNPUz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRPU05hbWUoITApPT09U3RyaW5nKGUpLnRvTG93ZXJDYXNlKCl9LHQuaXNQbGF0Zm9ybT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRQbGF0Zm9ybVR5cGUoITApPT09U3RyaW5nKGUpLnRvTG93ZXJDYXNlKCl9LHQuaXNFbmdpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0RW5naW5lTmFtZSghMCk9PT1TdHJpbmcoZSkudG9Mb3dlckNhc2UoKX0sdC5pcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pc0Jyb3dzZXIoZSl8fHRoaXMuaXNPUyhlKXx8dGhpcy5pc1BsYXRmb3JtKGUpfSx0LnNvbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdm9pZCAwPT09ZSYmKGU9W10pLGUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXMoZSl9KSl9LGV9KCk7dC5kZWZhdWx0PWQsZS5leHBvcnRzPXQuZGVmYXVsdH0sOTI6ZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciBuLGk9KG49cigxNykpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufTt2YXIgcz0vdmVyc2lvblxcLyhcXGQrKFxcLj9fP1xcZCspKykvaSxvPVt7dGVzdDpbL2dvb2dsZWJvdC9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIkdvb2dsZWJvdFwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC9nb29nbGVib3RcXC8oXFxkKyhcXC5cXGQrKSkvaSxlKXx8aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2gocyxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9vcGVyYS9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIk9wZXJhXCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2gocyxlKXx8aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goLyg/Om9wZXJhKVtcXHMvXShcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9vcHJcXC98b3Bpb3MvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6XCJPcGVyYVwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oPzpvcHJ8b3Bpb3MpW1xccy9dKFxcUyspL2ksZSl8fGkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKHMsZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvU2Ftc3VuZ0Jyb3dzZXIvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6XCJTYW1zdW5nIEludGVybmV0IGZvciBBbmRyb2lkXCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2gocyxlKXx8aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goLyg/OlNhbXN1bmdCcm93c2VyKVtcXHMvXShcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9XaGFsZS9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIk5BVkVSIFdoYWxlIEJyb3dzZXJcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86d2hhbGUpW1xccy9dKFxcZCsoPzpcXC5cXGQrKSspL2ksZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvTVpCcm93c2VyL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiTVogQnJvd3NlclwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oPzpNWkJyb3dzZXIpW1xccy9dKFxcZCsoPzpcXC5cXGQrKSspL2ksZSl8fGkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKHMsZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvZm9jdXMvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6XCJGb2N1c1wifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oPzpmb2N1cylbXFxzL10oXFxkKyg/OlxcLlxcZCspKykvaSxlKXx8aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2gocyxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9zd2luZy9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIlN3aW5nXCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goLyg/OnN3aW5nKVtcXHMvXShcXGQrKD86XFwuXFxkKykrKS9pLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL2NvYXN0L2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiT3BlcmEgQ29hc3RcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86Y29hc3QpW1xccy9dKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL3lhYnJvd3Nlci9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIllhbmRleCBCcm93c2VyXCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goLyg/OnlhYnJvd3NlcilbXFxzL10oXFxkKyhcXC4/Xz9cXGQrKSspL2ksZSl8fGkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKHMsZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvdWNicm93c2VyL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiVUMgQnJvd3NlclwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKHMsZSl8fGkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oPzp1Y2Jyb3dzZXIpW1xccy9dKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL01heHRob258bXhpb3MvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6XCJNYXh0aG9uXCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2gocyxlKXx8aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goLyg/Ok1heHRob258bXhpb3MpW1xccy9dKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL2VwaXBoYW55L2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiRXBpcGhhbnlcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86ZXBpcGhhbnkpW1xccy9dKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL3B1ZmZpbi9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIlB1ZmZpblwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKHMsZSl8fGkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oPzpwdWZmaW4pW1xccy9dKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL3NsZWlwbmlyL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiU2xlaXBuaXJcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86c2xlaXBuaXIpW1xccy9dKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL2stbWVsZW9uL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiSy1NZWxlb25cIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86ay1tZWxlb24pW1xccy9dKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL21pY3JvbWVzc2VuZ2VyL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiV2VDaGF0XCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goLyg/Om1pY3JvbWVzc2VuZ2VyKVtcXHMvXShcXGQrKFxcLj9fP1xcZCspKykvaSxlKXx8aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2gocyxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9xcWJyb3dzZXIvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6L3FxYnJvd3NlcmxpdGUvaS50ZXN0KGUpP1wiUVEgQnJvd3NlciBMaXRlXCI6XCJRUSBCcm93c2VyXCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goLyg/OnFxYnJvd3NlcmxpdGV8cXFicm93c2VyKVsvXShcXGQrKFxcLj9fP1xcZCspKykvaSxlKXx8aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2gocyxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9tc2llfHRyaWRlbnQvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6XCJJbnRlcm5ldCBFeHBsb3JlclwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oPzptc2llIHxydjopKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL1xcc2VkZ1xcLy9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIk1pY3Jvc29mdCBFZGdlXCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goL1xcc2VkZ1xcLyhcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9lZGcoW2VhXXxpb3MpL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiTWljcm9zb2Z0IEVkZ2VcIn0scj1pLmRlZmF1bHQuZ2V0U2Vjb25kTWF0Y2goL2VkZyhbZWFdfGlvcylcXC8oXFxkKyhcXC4/Xz9cXGQrKSspL2ksZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0Olsvdml2YWxkaS9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIlZpdmFsZGlcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvdml2YWxkaVxcLyhcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9zZWFtb25rZXkvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6XCJTZWFNb25rZXlcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvc2VhbW9ua2V5XFwvKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL3NhaWxmaXNoL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiU2FpbGZpc2hcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvc2FpbGZpc2hcXHM/YnJvd3NlclxcLyhcXGQrKFxcLlxcZCspPykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9zaWxrL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiQW1hem9uIFNpbGtcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvc2lsa1xcLyhcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9waGFudG9tL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiUGhhbnRvbUpTXCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goL3BoYW50b21qc1xcLyhcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy9zbGltZXJqcy9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIlNsaW1lckpTXCJ9LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goL3NsaW1lcmpzXFwvKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL2JsYWNrYmVycnl8XFxiYmJcXGQrL2ksL3JpbVxcc3RhYmxldC9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIkJsYWNrQmVycnlcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvYmxhY2tiZXJyeVtcXGRdK1xcLyhcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6Wy8od2VifGhwdylbbzBdcy9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIldlYk9TIEJyb3dzZXJcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvdyg/OmViKT9bbzBdc2Jyb3dzZXJcXC8oXFxkKyhcXC4/Xz9cXGQrKSspL2ksZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvYmFkYS9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIkJhZGFcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvZG9sZmluXFwvKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL3RpemVuL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiVGl6ZW5cIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86dGl6ZW5cXHM/KT9icm93c2VyXFwvKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL3F1cHppbGxhL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiUXVwWmlsbGFcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86cXVwemlsbGEpW1xccy9dKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL2ZpcmVmb3h8aWNld2Vhc2VsfGZ4aW9zL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOlwiRmlyZWZveFwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oPzpmaXJlZm94fGljZXdlYXNlbHxmeGlvcylbXFxzL10oXFxkKyhcXC4/Xz9cXGQrKSspL2ksZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvZWxlY3Ryb24vaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6XCJFbGVjdHJvblwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oPzplbGVjdHJvbilcXC8oXFxkKyhcXC4/Xz9cXGQrKSspL2ksZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvY2hyb21pdW0vaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6XCJDaHJvbWl1bVwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oPzpjaHJvbWl1bSlbXFxzL10oXFxkKyhcXC4/Xz9cXGQrKSspL2ksZSl8fGkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKHMsZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvY2hyb21lfGNyaW9zfGNybW8vaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9e25hbWU6XCJDaHJvbWVcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86Y2hyb21lfGNyaW9zfGNybW8pXFwvKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL0dTQS9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIkdvb2dsZSBTZWFyY2hcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86R1NBKVxcLyhcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9IWUudGVzdCgvbGlrZSBhbmRyb2lkL2kpLHI9ZS50ZXN0KC9hbmRyb2lkL2kpO3JldHVybiB0JiZyfSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIkFuZHJvaWQgQnJvd3NlclwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKHMsZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvcGxheXN0YXRpb24gNC9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIlBsYXlTdGF0aW9uIDRcIn0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaChzLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbL3NhZmFyaXxhcHBsZXdlYmtpdC9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpcIlNhZmFyaVwifSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKHMsZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OlsvLiovaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9LTEhPT1lLnNlYXJjaChcIlxcXFwoXCIpPy9eKC4qKVxcLyguKilbIFxcdF1cXCgoLiopLzovXiguKilcXC8oLiopIC87cmV0dXJue25hbWU6aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2godCxlKSx2ZXJzaW9uOmkuZGVmYXVsdC5nZXRTZWNvbmRNYXRjaCh0LGUpfX19XTt0LmRlZmF1bHQ9byxlLmV4cG9ydHM9dC5kZWZhdWx0fSw5MzpmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5fX2VzTW9kdWxlPSEwLHQuZGVmYXVsdD12b2lkIDA7dmFyIG4saT0obj1yKDE3KSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LHM9cigxOCk7dmFyIG89W3t0ZXN0OlsvUm9rdVxcL0RWUC9dLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC9Sb2t1XFwvRFZQLShcXGQrXFwuXFxkKykvaSxlKTtyZXR1cm57bmFtZTpzLk9TX01BUC5Sb2t1LHZlcnNpb246dH19fSx7dGVzdDpbL3dpbmRvd3MgcGhvbmUvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goL3dpbmRvd3MgcGhvbmUgKD86b3MpP1xccz8oXFxkKyhcXC5cXGQrKSopL2ksZSk7cmV0dXJue25hbWU6cy5PU19NQVAuV2luZG93c1Bob25lLHZlcnNpb246dH19fSx7dGVzdDpbL3dpbmRvd3MgL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC9XaW5kb3dzICgoTlR8WFApKCBcXGRcXGQ/LlxcZCk/KS9pLGUpLHI9aS5kZWZhdWx0LmdldFdpbmRvd3NWZXJzaW9uTmFtZSh0KTtyZXR1cm57bmFtZTpzLk9TX01BUC5XaW5kb3dzLHZlcnNpb246dCx2ZXJzaW9uTmFtZTpyfX19LHt0ZXN0OlsvTWFjaW50b3NoKC4qPykgRnhpT1MoLio/KSBWZXJzaW9uXFwvL10sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5kZWZhdWx0LmdldFNlY29uZE1hdGNoKC8oVmVyc2lvblxcLykoXFxkW1xcZC5dKykvLGUpO3JldHVybntuYW1lOnMuT1NfTUFQLmlPUyx2ZXJzaW9uOnR9fX0se3Rlc3Q6Wy9tYWNpbnRvc2gvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goL21hYyBvcyB4IChcXGQrKFxcLj9fP1xcZCspKykvaSxlKS5yZXBsYWNlKC9bX1xcc10vZyxcIi5cIikscj1pLmRlZmF1bHQuZ2V0TWFjT1NWZXJzaW9uTmFtZSh0KSxuPXtuYW1lOnMuT1NfTUFQLk1hY09TLHZlcnNpb246dH07cmV0dXJuIHImJihuLnZlcnNpb25OYW1lPXIpLG59fSx7dGVzdDpbLyhpcG9kfGlwaG9uZXxpcGFkKS9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvb3MgKFxcZCsoW19cXHNdXFxkKykqKSBsaWtlIG1hYyBvcyB4L2ksZSkucmVwbGFjZSgvW19cXHNdL2csXCIuXCIpO3JldHVybntuYW1lOnMuT1NfTUFQLmlPUyx2ZXJzaW9uOnR9fX0se3Rlc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9IWUudGVzdCgvbGlrZSBhbmRyb2lkL2kpLHI9ZS50ZXN0KC9hbmRyb2lkL2kpO3JldHVybiB0JiZyfSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvYW5kcm9pZFtcXHMvLV0oXFxkKyhcXC5cXGQrKSopL2ksZSkscj1pLmRlZmF1bHQuZ2V0QW5kcm9pZFZlcnNpb25OYW1lKHQpLG49e25hbWU6cy5PU19NQVAuQW5kcm9pZCx2ZXJzaW9uOnR9O3JldHVybiByJiYobi52ZXJzaW9uTmFtZT1yKSxufX0se3Rlc3Q6Wy8od2VifGhwdylbbzBdcy9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvKD86d2VifGhwdylbbzBdc1xcLyhcXGQrKFxcLlxcZCspKikvaSxlKSxyPXtuYW1lOnMuT1NfTUFQLldlYk9TfTtyZXR1cm4gdCYmdC5sZW5ndGgmJihyLnZlcnNpb249dCkscn19LHt0ZXN0OlsvYmxhY2tiZXJyeXxcXGJiYlxcZCsvaSwvcmltXFxzdGFibGV0L2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC9yaW1cXHN0YWJsZXRcXHNvc1xccyhcXGQrKFxcLlxcZCspKikvaSxlKXx8aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goL2JsYWNrYmVycnlcXGQrXFwvKFxcZCsoW19cXHNdXFxkKykqKS9pLGUpfHxpLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvXFxiYmIoXFxkKykvaSxlKTtyZXR1cm57bmFtZTpzLk9TX01BUC5CbGFja0JlcnJ5LHZlcnNpb246dH19fSx7dGVzdDpbL2JhZGEvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goL2JhZGFcXC8oXFxkKyhcXC5cXGQrKSopL2ksZSk7cmV0dXJue25hbWU6cy5PU19NQVAuQmFkYSx2ZXJzaW9uOnR9fX0se3Rlc3Q6Wy90aXplbi9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvdGl6ZW5bL1xcc10oXFxkKyhcXC5cXGQrKSopL2ksZSk7cmV0dXJue25hbWU6cy5PU19NQVAuVGl6ZW4sdmVyc2lvbjp0fX19LHt0ZXN0OlsvbGludXgvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm57bmFtZTpzLk9TX01BUC5MaW51eH19fSx7dGVzdDpbL0NyT1MvXSxkZXNjcmliZTpmdW5jdGlvbigpe3JldHVybntuYW1lOnMuT1NfTUFQLkNocm9tZU9TfX19LHt0ZXN0OlsvUGxheVN0YXRpb24gNC9dLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC9QbGF5U3RhdGlvbiA0Wy9cXHNdKFxcZCsoXFwuXFxkKykqKS9pLGUpO3JldHVybntuYW1lOnMuT1NfTUFQLlBsYXlTdGF0aW9uNCx2ZXJzaW9uOnR9fX1dO3QuZGVmYXVsdD1vLGUuZXhwb3J0cz10LmRlZmF1bHR9LDk0OmZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PXZvaWQgMDt2YXIgbixpPShuPXIoMTcpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0scz1yKDE4KTt2YXIgbz1be3Rlc3Q6Wy9nb29nbGVib3QvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcImJvdFwiLHZlbmRvcjpcIkdvb2dsZVwifX19LHt0ZXN0OlsvaHVhd2VpL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3ZhciB0PWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC8oY2FuLWwwMSkvaSxlKSYmXCJOb3ZhXCIscj17dHlwZTpzLlBMQVRGT1JNU19NQVAubW9iaWxlLHZlbmRvcjpcIkh1YXdlaVwifTtyZXR1cm4gdCYmKHIubW9kZWw9dCkscn19LHt0ZXN0OlsvbmV4dXNcXHMqKD86N3w4fDl8MTApLiovaV0sZGVzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpzLlBMQVRGT1JNU19NQVAudGFibGV0LHZlbmRvcjpcIk5leHVzXCJ9fX0se3Rlc3Q6Wy9pcGFkL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6cy5QTEFURk9STVNfTUFQLnRhYmxldCx2ZW5kb3I6XCJBcHBsZVwiLG1vZGVsOlwiaVBhZFwifX19LHt0ZXN0OlsvTWFjaW50b3NoKC4qPykgRnhpT1MoLio/KSBWZXJzaW9uXFwvL10sZGVzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpzLlBMQVRGT1JNU19NQVAudGFibGV0LHZlbmRvcjpcIkFwcGxlXCIsbW9kZWw6XCJpUGFkXCJ9fX0se3Rlc3Q6Wy9rZnR0IGJ1aWxkL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6cy5QTEFURk9STVNfTUFQLnRhYmxldCx2ZW5kb3I6XCJBbWF6b25cIixtb2RlbDpcIktpbmRsZSBGaXJlIEhEIDdcIn19fSx7dGVzdDpbL3NpbGsvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpzLlBMQVRGT1JNU19NQVAudGFibGV0LHZlbmRvcjpcIkFtYXpvblwifX19LHt0ZXN0OlsvdGFibGV0KD8hIHBjKS9pXSxkZXNjcmliZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOnMuUExBVEZPUk1TX01BUC50YWJsZXR9fX0se3Rlc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50ZXN0KC9pcG9kfGlwaG9uZS9pKSxyPWUudGVzdCgvbGlrZSAoaXBvZHxpcGhvbmUpL2kpO3JldHVybiB0JiYhcn0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goLyhpcG9kfGlwaG9uZSkvaSxlKTtyZXR1cm57dHlwZTpzLlBMQVRGT1JNU19NQVAubW9iaWxlLHZlbmRvcjpcIkFwcGxlXCIsbW9kZWw6dH19fSx7dGVzdDpbL25leHVzXFxzKlswLTZdLiovaSwvZ2FsYXh5IG5leHVzL2ldLGRlc2NyaWJlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6cy5QTEFURk9STVNfTUFQLm1vYmlsZSx2ZW5kb3I6XCJOZXh1c1wifX19LHt0ZXN0OlsvW14tXW1vYmkvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpzLlBMQVRGT1JNU19NQVAubW9iaWxlfX19LHt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVyblwiYmxhY2tiZXJyeVwiPT09ZS5nZXRCcm93c2VyTmFtZSghMCl9LGRlc2NyaWJlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6cy5QTEFURk9STVNfTUFQLm1vYmlsZSx2ZW5kb3I6XCJCbGFja0JlcnJ5XCJ9fX0se3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJiYWRhXCI9PT1lLmdldEJyb3dzZXJOYW1lKCEwKX0sZGVzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpzLlBMQVRGT1JNU19NQVAubW9iaWxlfX19LHt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVyblwid2luZG93cyBwaG9uZVwiPT09ZS5nZXRCcm93c2VyTmFtZSgpfSxkZXNjcmliZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOnMuUExBVEZPUk1TX01BUC5tb2JpbGUsdmVuZG9yOlwiTWljcm9zb2Z0XCJ9fX0se3Rlc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9TnVtYmVyKFN0cmluZyhlLmdldE9TVmVyc2lvbigpKS5zcGxpdChcIi5cIilbMF0pO3JldHVyblwiYW5kcm9pZFwiPT09ZS5nZXRPU05hbWUoITApJiZ0Pj0zfSxkZXNjcmliZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOnMuUExBVEZPUk1TX01BUC50YWJsZXR9fX0se3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJhbmRyb2lkXCI9PT1lLmdldE9TTmFtZSghMCl9LGRlc2NyaWJlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6cy5QTEFURk9STVNfTUFQLm1vYmlsZX19fSx7dGVzdDpmdW5jdGlvbihlKXtyZXR1cm5cIm1hY29zXCI9PT1lLmdldE9TTmFtZSghMCl9LGRlc2NyaWJlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6cy5QTEFURk9STVNfTUFQLmRlc2t0b3AsdmVuZG9yOlwiQXBwbGVcIn19fSx7dGVzdDpmdW5jdGlvbihlKXtyZXR1cm5cIndpbmRvd3NcIj09PWUuZ2V0T1NOYW1lKCEwKX0sZGVzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpzLlBMQVRGT1JNU19NQVAuZGVza3RvcH19fSx7dGVzdDpmdW5jdGlvbihlKXtyZXR1cm5cImxpbnV4XCI9PT1lLmdldE9TTmFtZSghMCl9LGRlc2NyaWJlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6cy5QTEFURk9STVNfTUFQLmRlc2t0b3B9fX0se3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuXCJwbGF5c3RhdGlvbiA0XCI9PT1lLmdldE9TTmFtZSghMCl9LGRlc2NyaWJlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6cy5QTEFURk9STVNfTUFQLnR2fX19LHt0ZXN0OmZ1bmN0aW9uKGUpe3JldHVyblwicm9rdVwiPT09ZS5nZXRPU05hbWUoITApfSxkZXNjcmliZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOnMuUExBVEZPUk1TX01BUC50dn19fV07dC5kZWZhdWx0PW8sZS5leHBvcnRzPXQuZGVmYXVsdH0sOTU6ZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9dm9pZCAwO3ZhciBuLGk9KG49cigxNykpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxzPXIoMTgpO3ZhciBvPVt7dGVzdDpmdW5jdGlvbihlKXtyZXR1cm5cIm1pY3Jvc29mdCBlZGdlXCI9PT1lLmdldEJyb3dzZXJOYW1lKCEwKX0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7aWYoL1xcc2VkZ1xcLy9pLnRlc3QoZSkpcmV0dXJue25hbWU6cy5FTkdJTkVfTUFQLkJsaW5rfTt2YXIgdD1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvZWRnZVxcLyhcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm57bmFtZTpzLkVOR0lORV9NQVAuRWRnZUhUTUwsdmVyc2lvbjp0fX19LHt0ZXN0OlsvdHJpZGVudC9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpzLkVOR0lORV9NQVAuVHJpZGVudH0scj1pLmRlZmF1bHQuZ2V0Rmlyc3RNYXRjaCgvdHJpZGVudFxcLyhcXGQrKFxcLj9fP1xcZCspKykvaSxlKTtyZXR1cm4gciYmKHQudmVyc2lvbj1yKSx0fX0se3Rlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGVzdCgvcHJlc3RvL2kpfSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpzLkVOR0lORV9NQVAuUHJlc3RvfSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC9wcmVzdG9cXC8oXFxkKyhcXC4/Xz9cXGQrKSspL2ksZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19LHt0ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PWUudGVzdCgvZ2Vja28vaSkscj1lLnRlc3QoL2xpa2UgZ2Vja28vaSk7cmV0dXJuIHQmJiFyfSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpzLkVOR0lORV9NQVAuR2Vja299LHI9aS5kZWZhdWx0LmdldEZpcnN0TWF0Y2goL2dlY2tvXFwvKFxcZCsoXFwuP18/XFxkKykrKS9pLGUpO3JldHVybiByJiYodC52ZXJzaW9uPXIpLHR9fSx7dGVzdDpbLyhhcHBsZSk/d2Via2l0XFwvNTM3XFwuMzYvaV0sZGVzY3JpYmU6ZnVuY3Rpb24oKXtyZXR1cm57bmFtZTpzLkVOR0lORV9NQVAuQmxpbmt9fX0se3Rlc3Q6Wy8oYXBwbGUpP3dlYmtpdC9pXSxkZXNjcmliZTpmdW5jdGlvbihlKXt2YXIgdD17bmFtZTpzLkVOR0lORV9NQVAuV2ViS2l0fSxyPWkuZGVmYXVsdC5nZXRGaXJzdE1hdGNoKC93ZWJraXRcXC8oXFxkKyhcXC4/Xz9cXGQrKSspL2ksZSk7cmV0dXJuIHImJih0LnZlcnNpb249ciksdH19XTt0LmRlZmF1bHQ9byxlLmV4cG9ydHM9dC5kZWZhdWx0fX0pfSkpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bowser/es5.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/dequal/dist/index.mjs": + /*!********************************************!*\ + !*** ./node_modules/dequal/dist/index.mjs ***! + \********************************************/ + /*! exports provided: dequal */ + /***/ function ( + __webpack_module__, + __webpack_exports__, + __webpack_require__ + ) { + "use strict"; + eval( + "__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dequal\", function() { return dequal; });\nvar has = Object.prototype.hasOwnProperty;\n\nfunction find(iter, tar, key) {\n\tfor (key of iter.keys()) {\n\t\tif (dequal(key, tar)) return key;\n\t}\n}\n\nfunction dequal(foo, bar) {\n\tvar ctor, len, tmp;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ctor === Set) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len;\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!bar.has(tmp)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === Map) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len[0];\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!dequal(len[1], bar.get(tmp))) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === ArrayBuffer) {\n\t\t\tfoo = new Uint8Array(foo);\n\t\t\tbar = new Uint8Array(bar);\n\t\t} else if (ctor === DataView) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo.getInt8(len) === bar.getInt8(len));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ArrayBuffer.isView(foo)) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo[len] === bar[len]);\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9kZXF1YWwvZGlzdC9pbmRleC5tanM/Njg1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9kZXF1YWwvZGlzdC9pbmRleC5tanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gZmluZChpdGVyLCB0YXIsIGtleSkge1xuXHRmb3IgKGtleSBvZiBpdGVyLmtleXMoKSkge1xuXHRcdGlmIChkZXF1YWwoa2V5LCB0YXIpKSByZXR1cm4ga2V5O1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXF1YWwoZm9vLCBiYXIpIHtcblx0dmFyIGN0b3IsIGxlbiwgdG1wO1xuXHRpZiAoZm9vID09PSBiYXIpIHJldHVybiB0cnVlO1xuXG5cdGlmIChmb28gJiYgYmFyICYmIChjdG9yPWZvby5jb25zdHJ1Y3RvcikgPT09IGJhci5jb25zdHJ1Y3Rvcikge1xuXHRcdGlmIChjdG9yID09PSBEYXRlKSByZXR1cm4gZm9vLmdldFRpbWUoKSA9PT0gYmFyLmdldFRpbWUoKTtcblx0XHRpZiAoY3RvciA9PT0gUmVnRXhwKSByZXR1cm4gZm9vLnRvU3RyaW5nKCkgPT09IGJhci50b1N0cmluZygpO1xuXG5cdFx0aWYgKGN0b3IgPT09IEFycmF5KSB7XG5cdFx0XHRpZiAoKGxlbj1mb28ubGVuZ3RoKSA9PT0gYmFyLmxlbmd0aCkge1xuXHRcdFx0XHR3aGlsZSAobGVuLS0gJiYgZGVxdWFsKGZvb1tsZW5dLCBiYXJbbGVuXSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxlbiA9PT0gLTE7XG5cdFx0fVxuXG5cdFx0aWYgKGN0b3IgPT09IFNldCkge1xuXHRcdFx0aWYgKGZvby5zaXplICE9PSBiYXIuc2l6ZSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxlbiBvZiBmb28pIHtcblx0XHRcdFx0dG1wID0gbGVuO1xuXHRcdFx0XHRpZiAodG1wICYmIHR5cGVvZiB0bXAgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dG1wID0gZmluZChiYXIsIHRtcCk7XG5cdFx0XHRcdFx0aWYgKCF0bXApIHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWJhci5oYXModG1wKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGN0b3IgPT09IE1hcCkge1xuXHRcdFx0aWYgKGZvby5zaXplICE9PSBiYXIuc2l6ZSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxlbiBvZiBmb28pIHtcblx0XHRcdFx0dG1wID0gbGVuWzBdO1xuXHRcdFx0XHRpZiAodG1wICYmIHR5cGVvZiB0bXAgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dG1wID0gZmluZChiYXIsIHRtcCk7XG5cdFx0XHRcdFx0aWYgKCF0bXApIHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWRlcXVhbChsZW5bMV0sIGJhci5nZXQodG1wKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuXHRcdFx0Zm9vID0gbmV3IFVpbnQ4QXJyYXkoZm9vKTtcblx0XHRcdGJhciA9IG5ldyBVaW50OEFycmF5KGJhcik7XG5cdFx0fSBlbHNlIGlmIChjdG9yID09PSBEYXRhVmlldykge1xuXHRcdFx0aWYgKChsZW49Zm9vLmJ5dGVMZW5ndGgpID09PSBiYXIuYnl0ZUxlbmd0aCkge1xuXHRcdFx0XHR3aGlsZSAobGVuLS0gJiYgZm9vLmdldEludDgobGVuKSA9PT0gYmFyLmdldEludDgobGVuKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGVuID09PSAtMTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGZvbykpIHtcblx0XHRcdGlmICgobGVuPWZvby5ieXRlTGVuZ3RoKSA9PT0gYmFyLmJ5dGVMZW5ndGgpIHtcblx0XHRcdFx0d2hpbGUgKGxlbi0tICYmIGZvb1tsZW5dID09PSBiYXJbbGVuXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGVuID09PSAtMTtcblx0XHR9XG5cblx0XHRpZiAoIWN0b3IgfHwgdHlwZW9mIGZvbyA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGxlbiA9IDA7XG5cdFx0XHRmb3IgKGN0b3IgaW4gZm9vKSB7XG5cdFx0XHRcdGlmIChoYXMuY2FsbChmb28sIGN0b3IpICYmICsrbGVuICYmICFoYXMuY2FsbChiYXIsIGN0b3IpKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlmICghKGN0b3IgaW4gYmFyKSB8fCAhZGVxdWFsKGZvb1tjdG9yXSwgYmFyW2N0b3JdKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKGJhcikubGVuZ3RoID09PSBsZW47XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZvbyAhPT0gZm9vICYmIGJhciAhPT0gYmFyO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/dequal/dist/index.mjs\n" + ); + + /***/ + }, + + /***/ "./node_modules/events/events.js": + /*!***************************************!*\ + !*** ./node_modules/events/events.js ***! + \***************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + "use strict"; + eval( + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzP2ZhYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsaUNBQWlDLFFBQVE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxzQ0FBc0MsUUFBUTtBQUM5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSx5QkFBeUI7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/events/events.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/fast-equals/dist/fast-equals.js": + /*!******************************************************!*\ + !*** ./node_modules/fast-equals/dist/fast-equals.js ***! + \******************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "(function (global, factory) {\n true ? factory(exports) :\n undefined;\n}(this, function (exports) { 'use strict';\n\n /**\n * @constant {boolean} HAS_MAP_SUPPORT\n */\n var HAS_MAP_SUPPORT = typeof Map === 'function';\n /**\n * @constant {boolean} HAS_SET_SUPPORT\n */\n\n var HAS_SET_SUPPORT = typeof Set === 'function';\n /**\n * @constant {boolean} HAS_WEAKSET_SUPPORT\n */\n\n var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\n // constants\n var keys = Object.keys;\n /**\n * @function addObjectToCache\n *\n * @description\n * add object to cache if it is indeed an object\n *\n * @param {any} object the object to potentially add to the cache\n * @param {Object|WeakSet} cache the cache to add to\n * @returns {void}\n */\n\n var addObjectToCache = function addObjectToCache(object, cache) {\n return object && typeof object === 'object' && cache.add(object);\n };\n /**\n *\n * @param {Array>} pairs the pairs to check in\n * @param {Array} pairToMatch the pair to check if exists\n * @param {function} isEqual the equality comparator\n * @param {any} meta the meta item to pass through\n * @returns {boolean} does the pair exist in the pairs\n */\n\n var hasPair = function hasPair(pairs, pairToMatch, isEqual, meta) {\n var pair;\n\n for (var index = 0; index < pairs.length; index++) {\n pair = pairs[index];\n\n if (isEqual(pair[0], pairToMatch[0], meta) && isEqual(pair[1], pairToMatch[1], meta)) {\n return true;\n }\n }\n\n return false;\n };\n /**\n * @function hasValue\n *\n * @description\n * does the values include the vakye passed\n *\n * @param {Array} values the values to check in\n * @param {any} item the value to locate\n * @param {function} isEqual the equality comparator\n * @param {any} meta the meta item to pass through\n * @returns {boolean} does the value exist in the values\n */\n\n var hasValue = function hasValue(values, item, isEqual, meta) {\n for (var index = 0; index < values.length; index++) {\n if (isEqual(values[index], item, meta)) {\n return true;\n }\n }\n\n return false;\n };\n /**\n * @function sameValueZeroEqual\n *\n * @description\n * are the objects passed strictly equal or both NaN\n *\n * @param {any} objectA the object to compare against\n * @param {any} objectB the object to test\n * @returns {boolean} are the objects equal by the SameValueZero principle\n */\n\n var sameValueZeroEqual = function sameValueZeroEqual(objectA, objectB) {\n return objectA === objectB || objectA !== objectA && objectB !== objectB;\n };\n /**\n * @function isPlainObject\n *\n * @description\n * is the object a plain object\n *\n * @param {any} object the object to test\n * @returns {boolean} is the object a plain object\n */\n\n var isPlainObject = function isPlainObject(object) {\n return object.constructor === Object;\n };\n /**\n * @function isPromiseLike\n *\n * @description\n * is the object promise-like (thenable)\n *\n * @param {any} object the object to test\n * @returns {boolean} is the object promise-like\n */\n\n var isPromiseLike = function isPromiseLike(object) {\n return typeof object.then === 'function';\n };\n /**\n * @function isReactElement\n *\n * @description\n * is the object passed a react element\n *\n * @param {any} object the object to test\n * @returns {boolean} is the object a react element\n */\n\n var isReactElement = function isReactElement(object) {\n return !!(object.$$typeof && object._store);\n };\n /**\n * @function getNewCache\n *\n * @description\n * get a new cache object to prevent circular references\n *\n * @returns {Object|Weakset} the new cache object\n */\n\n var getNewCache = function getNewCache() {\n return HAS_WEAKSET_SUPPORT ? new WeakSet() : Object.create({\n _values: [],\n add: function add(value) {\n this._values.push(value);\n },\n has: function has(value) {\n return !!~this._values.indexOf(value);\n }\n });\n };\n /**\n * @function createCircularEqual\n *\n * @description\n * create a custom isEqual handler specific to circular objects\n *\n * @param {funtion} [isEqual] the isEqual comparator to use instead of isDeepEqual\n * @returns {function(any, any): boolean}\n */\n\n var createCircularEqual = function createCircularEqual(isEqual) {\n return function (isDeepEqual) {\n var comparator = isEqual || isDeepEqual;\n return function (objectA, objectB, cache) {\n if (cache === void 0) {\n cache = getNewCache();\n }\n\n var cacheHasA = cache.has(objectA);\n var cacheHasB = cache.has(objectB);\n\n if (cacheHasA || cacheHasB) {\n return cacheHasA && cacheHasB;\n }\n\n addObjectToCache(objectA, cache);\n addObjectToCache(objectB, cache);\n return comparator(objectA, objectB, cache);\n };\n };\n };\n /**\n * @function toPairs\n *\n * @param {Map} map the map to convert to [key, value] pairs (entries)\n * @returns {Array>} the [key, value] pairs\n */\n\n var toPairs = function toPairs(map) {\n var pairs = [];\n map.forEach(function (value, key) {\n return pairs.push([key, value]);\n });\n return pairs;\n };\n /**\n * @function toValues\n *\n * @param {Set} set the set to convert to values\n * @returns {Array<*>} the values\n */\n\n var toValues = function toValues(set) {\n var values = [];\n set.forEach(function (value) {\n return values.push(value);\n });\n return values;\n };\n /**\n * @function areArraysEqual\n *\n * @description\n * are the arrays equal in value\n *\n * @param {Array} arrayA the array to test\n * @param {Array} arrayB the array to test against\n * @param {function} isEqual the comparator to determine equality\n * @param {any} meta the meta object to pass through\n * @returns {boolean} are the arrays equal\n */\n\n var areArraysEqual = function areArraysEqual(arrayA, arrayB, isEqual, meta) {\n if (arrayA.length !== arrayB.length) {\n return false;\n }\n\n for (var index = 0; index < arrayA.length; index++) {\n if (!isEqual(arrayA[index], arrayB[index], meta)) {\n return false;\n }\n }\n\n return true;\n };\n /**\n * @function areMapsEqual\n *\n * @description\n * are the maps equal in value\n *\n * @param {Map} mapA the map to test\n * @param {Map} mapB the map to test against\n * @param {function} isEqual the comparator to determine equality\n * @param {any} meta the meta map to pass through\n * @returns {boolean} are the maps equal\n */\n\n var areMapsEqual = function areMapsEqual(mapA, mapB, isEqual, meta) {\n if (mapA.size !== mapB.size) {\n return false;\n }\n\n var pairsA = toPairs(mapA);\n var pairsB = toPairs(mapB);\n\n for (var index = 0; index < pairsA.length; index++) {\n if (!hasPair(pairsB, pairsA[index], isEqual, meta) || !hasPair(pairsA, pairsB[index], isEqual, meta)) {\n return false;\n }\n }\n\n return true;\n };\n /**\n * @function areObjectsEqual\n *\n * @description\n * are the objects equal in value\n *\n * @param {Object} objectA the object to test\n * @param {Object} objectB the object to test against\n * @param {function} isEqual the comparator to determine equality\n * @param {any} meta the meta object to pass through\n * @returns {boolean} are the objects equal\n */\n\n var areObjectsEqual = function areObjectsEqual(objectA, objectB, isEqual, meta) {\n var keysA = keys(objectA);\n var keysB = keys(objectB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var key;\n\n for (var index = 0; index < keysA.length; index++) {\n key = keysA[index];\n\n if (!hasValue(keysB, key, sameValueZeroEqual)) {\n return false;\n } // if a react element, ignore the \"_owner\" key because its not necessary for equality comparisons\n\n\n if (key === '_owner' && isReactElement(objectA) && isReactElement(objectB)) {\n continue;\n }\n\n if (!isEqual(objectA[key], objectB[key], meta)) {\n return false;\n }\n }\n\n return true;\n };\n /**\n * @function areRegExpsEqual\n *\n * @description\n * are the regExps equal in value\n *\n * @param {RegExp} regExpA the regExp to test\n * @param {RegExp} regExpB the regExp to test agains\n * @returns {boolean} are the regExps equal\n */\n\n var areRegExpsEqual = function areRegExpsEqual(regExpA, regExpB) {\n return regExpA.source === regExpB.source && regExpA.global === regExpB.global && regExpA.ignoreCase === regExpB.ignoreCase && regExpA.multiline === regExpB.multiline && regExpA.unicode === regExpB.unicode && regExpA.sticky === regExpB.sticky && regExpA.lastIndex === regExpB.lastIndex;\n };\n /**\n * @function areSetsEqual\n *\n * @description\n * are the sets equal in value\n *\n * @param {Set} setA the set to test\n * @param {Set} setB the set to test against\n * @param {function} isEqual the comparator to determine equality\n * @param {any} meta the meta set to pass through\n * @returns {boolean} are the sets equal\n */\n\n var areSetsEqual = function areSetsEqual(setA, setB, isEqual, meta) {\n if (setA.size !== setB.size) {\n return false;\n }\n\n var valuesA = toValues(setA);\n var valuesB = toValues(setB);\n\n for (var index = 0; index < valuesA.length; index++) {\n if (!hasValue(valuesB, valuesA[index], isEqual, meta) || !hasValue(valuesA, valuesB[index], isEqual, meta)) {\n return false;\n }\n }\n\n return true;\n };\n\n // constants\n var isArray = Array.isArray;\n\n var createComparator = function createComparator(createIsEqual) {\n // eslint-disable-next-line no-use-before-define\n var isEqual = typeof createIsEqual === 'function' ? createIsEqual(comparator) : comparator;\n /**\n * @function comparator\n *\n * @description\n * compare the value of the two objects and return true if they are equivalent in values\n *\n * @param {any} objectA the object to test against\n * @param {any} objectB the object to test\n * @param {any} [meta] an optional meta object that is passed through to all equality test calls\n * @returns {boolean} are objectA and objectB equivalent in value\n */\n\n function comparator(objectA, objectB, meta) {\n if (sameValueZeroEqual(objectA, objectB)) {\n return true;\n }\n\n var typeOfA = typeof objectA;\n\n if (typeOfA !== typeof objectB || typeOfA !== 'object' || !objectA || !objectB) {\n return false;\n }\n\n if (isPlainObject(objectA) && isPlainObject(objectB)) {\n return areObjectsEqual(objectA, objectB, isEqual, meta);\n }\n\n var arrayA = isArray(objectA);\n var arrayB = isArray(objectB);\n\n if (arrayA || arrayB) {\n return arrayA === arrayB && areArraysEqual(objectA, objectB, isEqual, meta);\n }\n\n var dateA = objectA instanceof Date;\n var dateB = objectB instanceof Date;\n\n if (dateA || dateB) {\n return dateA === dateB && sameValueZeroEqual(objectA.getTime(), objectB.getTime());\n }\n\n var regexpA = objectA instanceof RegExp;\n var regexpB = objectB instanceof RegExp;\n\n if (regexpA || regexpB) {\n return regexpA === regexpB && areRegExpsEqual(objectA, objectB);\n }\n\n if (isPromiseLike(objectA) || isPromiseLike(objectB)) {\n return objectA === objectB;\n }\n\n if (HAS_MAP_SUPPORT) {\n var mapA = objectA instanceof Map;\n var mapB = objectB instanceof Map;\n\n if (mapA || mapB) {\n return mapA === mapB && areMapsEqual(objectA, objectB, isEqual, meta);\n }\n }\n\n if (HAS_SET_SUPPORT) {\n var setA = objectA instanceof Set;\n var setB = objectB instanceof Set;\n\n if (setA || setB) {\n return setA === setB && areSetsEqual(objectA, objectB, isEqual, meta);\n }\n }\n\n return areObjectsEqual(objectA, objectB, isEqual, meta);\n }\n\n return comparator;\n };\n\n // comparator\n var circularDeepEqual = createComparator(createCircularEqual());\n var circularShallowEqual = createComparator(createCircularEqual(sameValueZeroEqual));\n var deepEqual = createComparator();\n var shallowEqual = createComparator(function () {\n return sameValueZeroEqual;\n });\n var index = {\n circularDeep: circularDeepEqual,\n circularShallow: circularShallowEqual,\n createCustom: createComparator,\n deep: deepEqual,\n sameValueZero: sameValueZeroEqual,\n shallow: shallowEqual\n };\n\n exports.circularDeepEqual = circularDeepEqual;\n exports.circularShallowEqual = circularShallowEqual;\n exports.createCustomEqual = createComparator;\n exports.deepEqual = deepEqual;\n exports.default = index;\n exports.sameValueZeroEqual = sameValueZeroEqual;\n exports.shallowEqual = shallowEqual;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=fast-equals.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9mYXN0LWVxdWFscy9kaXN0L2Zhc3QtZXF1YWxzLmpzPzdhYWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxFQUFFLEtBQTREO0FBQzlELEVBQUUsU0FDOEQ7QUFDaEUsQ0FBQywyQkFBMkI7O0FBRTVCO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLElBQUk7QUFDakIsYUFBYSxlQUFlO0FBQzVCLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrQkFBa0I7QUFDL0IsYUFBYSxXQUFXO0FBQ3hCLGFBQWEsU0FBUztBQUN0QixhQUFhLElBQUk7QUFDakIsZUFBZSxRQUFRO0FBQ3ZCOztBQUVBO0FBQ0E7O0FBRUEsdUJBQXVCLHNCQUFzQjtBQUM3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxXQUFXO0FBQ3hCLGFBQWEsSUFBSTtBQUNqQixhQUFhLFNBQVM7QUFDdEIsYUFBYSxJQUFJO0FBQ2pCLGVBQWUsUUFBUTtBQUN2Qjs7QUFFQTtBQUNBLHVCQUF1Qix1QkFBdUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsSUFBSTtBQUNqQixhQUFhLElBQUk7QUFDakIsZUFBZSxRQUFRO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsSUFBSTtBQUNqQixlQUFlLFFBQVE7QUFDdkI7O0FBRUE7QUFD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Q0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdELGNBQWM7O0FBRTlELENBQUM7QUFDRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9mYXN0LWVxdWFscy9kaXN0L2Zhc3QtZXF1YWxzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsWydmYXN0LWVxdWFscyddID0ge30pKTtcbn0odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiBAY29uc3RhbnQge2Jvb2xlYW59IEhBU19NQVBfU1VQUE9SVFxuICAgKi9cbiAgdmFyIEhBU19NQVBfU1VQUE9SVCA9IHR5cGVvZiBNYXAgPT09ICdmdW5jdGlvbic7XG4gIC8qKlxuICAgKiBAY29uc3RhbnQge2Jvb2xlYW59IEhBU19TRVRfU1VQUE9SVFxuICAgKi9cblxuICB2YXIgSEFTX1NFVF9TVVBQT1JUID0gdHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJztcbiAgLyoqXG4gICAqIEBjb25zdGFudCB7Ym9vbGVhbn0gSEFTX1dFQUtTRVRfU1VQUE9SVFxuICAgKi9cblxuICB2YXIgSEFTX1dFQUtTRVRfU1VQUE9SVCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nO1xuXG4gIC8vIGNvbnN0YW50c1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzO1xuICAvKipcbiAgICogQGZ1bmN0aW9uIGFkZE9iamVjdFRvQ2FjaGVcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIGFkZCBvYmplY3QgdG8gY2FjaGUgaWYgaXQgaXMgaW5kZWVkIGFuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqZWN0IHRoZSBvYmplY3QgdG8gcG90ZW50aWFsbHkgYWRkIHRvIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0ge09iamVjdHxXZWFrU2V0fSBjYWNoZSB0aGUgY2FjaGUgdG8gYWRkIHRvXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cblxuICB2YXIgYWRkT2JqZWN0VG9DYWNoZSA9IGZ1bmN0aW9uIGFkZE9iamVjdFRvQ2FjaGUob2JqZWN0LCBjYWNoZSkge1xuICAgIHJldHVybiBvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgY2FjaGUuYWRkKG9iamVjdCk7XG4gIH07XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PEFycmF5PGFueT4+fSBwYWlycyB0aGUgcGFpcnMgdG8gY2hlY2sgaW5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBwYWlyVG9NYXRjaCB0aGUgcGFpciB0byBjaGVjayBpZiBleGlzdHNcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gaXNFcXVhbCB0aGUgZXF1YWxpdHkgY29tcGFyYXRvclxuICAgKiBAcGFyYW0ge2FueX0gbWV0YSB0aGUgbWV0YSBpdGVtIHRvIHBhc3MgdGhyb3VnaFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gZG9lcyB0aGUgcGFpciBleGlzdCBpbiB0aGUgcGFpcnNcbiAgICovXG5cbiAgdmFyIGhhc1BhaXIgPSBmdW5jdGlvbiBoYXNQYWlyKHBhaXJzLCBwYWlyVG9NYXRjaCwgaXNFcXVhbCwgbWV0YSkge1xuICAgIHZhciBwYWlyO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHBhaXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcGFpciA9IHBhaXJzW2luZGV4XTtcblxuICAgICAgaWYgKGlzRXF1YWwocGFpclswXSwgcGFpclRvTWF0Y2hbMF0sIG1ldGEpICYmIGlzRXF1YWwocGFpclsxXSwgcGFpclRvTWF0Y2hbMV0sIG1ldGEpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBoYXNWYWx1ZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogZG9lcyB0aGUgdmFsdWVzIGluY2x1ZGUgdGhlIHZha3llIHBhc3NlZFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHVlcyB0aGUgdmFsdWVzIHRvIGNoZWNrIGluXG4gICAqIEBwYXJhbSB7YW55fSBpdGVtIHRoZSB2YWx1ZSB0byBsb2NhdGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gaXNFcXVhbCB0aGUgZXF1YWxpdHkgY29tcGFyYXRvclxuICAgKiBAcGFyYW0ge2FueX0gbWV0YSB0aGUgbWV0YSBpdGVtIHRvIHBhc3MgdGhyb3VnaFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gZG9lcyB0aGUgdmFsdWUgZXhpc3QgaW4gdGhlIHZhbHVlc1xuICAgKi9cblxuICB2YXIgaGFzVmFsdWUgPSBmdW5jdGlvbiBoYXNWYWx1ZSh2YWx1ZXMsIGl0ZW0sIGlzRXF1YWwsIG1ldGEpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGlzRXF1YWwodmFsdWVzW2luZGV4XSwgaXRlbSwgbWV0YSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuICAvKipcbiAgICogQGZ1bmN0aW9uIHNhbWVWYWx1ZVplcm9FcXVhbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogYXJlIHRoZSBvYmplY3RzIHBhc3NlZCBzdHJpY3RseSBlcXVhbCBvciBib3RoIE5hTlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqZWN0QSB0aGUgb2JqZWN0IHRvIGNvbXBhcmUgYWdhaW5zdFxuICAgKiBAcGFyYW0ge2FueX0gb2JqZWN0QiB0aGUgb2JqZWN0IHRvIHRlc3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGFyZSB0aGUgb2JqZWN0cyBlcXVhbCBieSB0aGUgU2FtZVZhbHVlWmVybyBwcmluY2lwbGVcbiAgICovXG5cbiAgdmFyIHNhbWVWYWx1ZVplcm9FcXVhbCA9IGZ1bmN0aW9uIHNhbWVWYWx1ZVplcm9FcXVhbChvYmplY3RBLCBvYmplY3RCKSB7XG4gICAgcmV0dXJuIG9iamVjdEEgPT09IG9iamVjdEIgfHwgb2JqZWN0QSAhPT0gb2JqZWN0QSAmJiBvYmplY3RCICE9PSBvYmplY3RCO1xuICB9O1xuICAvKipcbiAgICogQGZ1bmN0aW9uIGlzUGxhaW5PYmplY3RcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIGlzIHRoZSBvYmplY3QgYSBwbGFpbiBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG9iamVjdCB0aGUgb2JqZWN0IHRvIHRlc3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGlzIHRoZSBvYmplY3QgYSBwbGFpbiBvYmplY3RcbiAgICovXG5cbiAgdmFyIGlzUGxhaW5PYmplY3QgPSBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QuY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgfTtcbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBpc1Byb21pc2VMaWtlXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBpcyB0aGUgb2JqZWN0IHByb21pc2UtbGlrZSAodGhlbmFibGUpXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvYmplY3QgdGhlIG9iamVjdCB0byB0ZXN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSBpcyB0aGUgb2JqZWN0IHByb21pc2UtbGlrZVxuICAgKi9cblxuICB2YXIgaXNQcm9taXNlTGlrZSA9IGZ1bmN0aW9uIGlzUHJvbWlzZUxpa2Uob2JqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfTtcbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBpc1JlYWN0RWxlbWVudFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogaXMgdGhlIG9iamVjdCBwYXNzZWQgYSByZWFjdCBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvYmplY3QgdGhlIG9iamVjdCB0byB0ZXN0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSBpcyB0aGUgb2JqZWN0IGEgcmVhY3QgZWxlbWVudFxuICAgKi9cblxuICB2YXIgaXNSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiBpc1JlYWN0RWxlbWVudChvYmplY3QpIHtcbiAgICByZXR1cm4gISEob2JqZWN0LiQkdHlwZW9mICYmIG9iamVjdC5fc3RvcmUpO1xuICB9O1xuICAvKipcbiAgICogQGZ1bmN0aW9uIGdldE5ld0NhY2hlXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBnZXQgYSBuZXcgY2FjaGUgb2JqZWN0IHRvIHByZXZlbnQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fFdlYWtzZXR9IHRoZSBuZXcgY2FjaGUgb2JqZWN0XG4gICAqL1xuXG4gIHZhciBnZXROZXdDYWNoZSA9IGZ1bmN0aW9uIGdldE5ld0NhY2hlKCkge1xuICAgIHJldHVybiBIQVNfV0VBS1NFVF9TVVBQT1JUID8gbmV3IFdlYWtTZXQoKSA6IE9iamVjdC5jcmVhdGUoe1xuICAgICAgX3ZhbHVlczogW10sXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl92YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICEhfnRoaXMuX3ZhbHVlcy5pbmRleE9mKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBjcmVhdGVDaXJjdWxhckVxdWFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBjcmVhdGUgYSBjdXN0b20gaXNFcXVhbCBoYW5kbGVyIHNwZWNpZmljIHRvIGNpcmN1bGFyIG9iamVjdHNcbiAgICpcbiAgICogQHBhcmFtIHtmdW50aW9ufSBbaXNFcXVhbF0gdGhlIGlzRXF1YWwgY29tcGFyYXRvciB0byB1c2UgaW5zdGVhZCBvZiBpc0RlZXBFcXVhbFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oYW55LCBhbnkpOiBib29sZWFufVxuICAgKi9cblxuICB2YXIgY3JlYXRlQ2lyY3VsYXJFcXVhbCA9IGZ1bmN0aW9uIGNyZWF0ZUNpcmN1bGFyRXF1YWwoaXNFcXVhbCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoaXNEZWVwRXF1YWwpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gaXNFcXVhbCB8fCBpc0RlZXBFcXVhbDtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqZWN0QSwgb2JqZWN0QiwgY2FjaGUpIHtcbiAgICAgICAgaWYgKGNhY2hlID09PSB2b2lkIDApIHtcbiAgICAgICAgICBjYWNoZSA9IGdldE5ld0NhY2hlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2FjaGVIYXNBID0gY2FjaGUuaGFzKG9iamVjdEEpO1xuICAgICAgICB2YXIgY2FjaGVIYXNCID0gY2FjaGUuaGFzKG9iamVjdEIpO1xuXG4gICAgICAgIGlmIChjYWNoZUhhc0EgfHwgY2FjaGVIYXNCKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlSGFzQSAmJiBjYWNoZUhhc0I7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRPYmplY3RUb0NhY2hlKG9iamVjdEEsIGNhY2hlKTtcbiAgICAgICAgYWRkT2JqZWN0VG9DYWNoZShvYmplY3RCLCBjYWNoZSk7XG4gICAgICAgIHJldHVybiBjb21wYXJhdG9yKG9iamVjdEEsIG9iamVjdEIsIGNhY2hlKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEBmdW5jdGlvbiB0b1BhaXJzXG4gICAqXG4gICAqIEBwYXJhbSB7TWFwfSBtYXAgdGhlIG1hcCB0byBjb252ZXJ0IHRvIFtrZXksIHZhbHVlXSBwYWlycyAoZW50cmllcylcbiAgICogQHJldHVybnMge0FycmF5PEFycmF5PCo+Pn0gdGhlIFtrZXksIHZhbHVlXSBwYWlyc1xuICAgKi9cblxuICB2YXIgdG9QYWlycyA9IGZ1bmN0aW9uIHRvUGFpcnMobWFwKSB7XG4gICAgdmFyIHBhaXJzID0gW107XG4gICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHJldHVybiBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuICAvKipcbiAgICogQGZ1bmN0aW9uIHRvVmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB7U2V0fSBzZXQgdGhlIHNldCB0byBjb252ZXJ0IHRvIHZhbHVlc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8Kj59IHRoZSB2YWx1ZXNcbiAgICovXG5cbiAgdmFyIHRvVmFsdWVzID0gZnVuY3Rpb24gdG9WYWx1ZXMoc2V0KSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuICAvKipcbiAgICogQGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBhcmUgdGhlIGFycmF5cyBlcXVhbCBpbiB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGFycmF5QSB0aGUgYXJyYXkgdG8gdGVzdFxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGFycmF5QiB0aGUgYXJyYXkgdG8gdGVzdCBhZ2FpbnN0XG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGlzRXF1YWwgdGhlIGNvbXBhcmF0b3IgdG8gZGV0ZXJtaW5lIGVxdWFsaXR5XG4gICAqIEBwYXJhbSB7YW55fSBtZXRhIHRoZSBtZXRhIG9iamVjdCB0byBwYXNzIHRocm91Z2hcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGFyZSB0aGUgYXJyYXlzIGVxdWFsXG4gICAqL1xuXG4gIHZhciBhcmVBcnJheXNFcXVhbCA9IGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGFycmF5QSwgYXJyYXlCLCBpc0VxdWFsLCBtZXRhKSB7XG4gICAgaWYgKGFycmF5QS5sZW5ndGggIT09IGFycmF5Qi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlBLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKCFpc0VxdWFsKGFycmF5QVtpbmRleF0sIGFycmF5QltpbmRleF0sIG1ldGEpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBhcmVNYXBzRXF1YWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIGFyZSB0aGUgbWFwcyBlcXVhbCBpbiB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge01hcH0gbWFwQSB0aGUgbWFwIHRvIHRlc3RcbiAgICogQHBhcmFtIHtNYXB9IG1hcEIgdGhlIG1hcCB0byB0ZXN0IGFnYWluc3RcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gaXNFcXVhbCB0aGUgY29tcGFyYXRvciB0byBkZXRlcm1pbmUgZXF1YWxpdHlcbiAgICogQHBhcmFtIHthbnl9IG1ldGEgdGhlIG1ldGEgbWFwIHRvIHBhc3MgdGhyb3VnaFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYXJlIHRoZSBtYXBzIGVxdWFsXG4gICAqL1xuXG4gIHZhciBhcmVNYXBzRXF1YWwgPSBmdW5jdGlvbiBhcmVNYXBzRXF1YWwobWFwQSwgbWFwQiwgaXNFcXVhbCwgbWV0YSkge1xuICAgIGlmIChtYXBBLnNpemUgIT09IG1hcEIuc2l6ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBwYWlyc0EgPSB0b1BhaXJzKG1hcEEpO1xuICAgIHZhciBwYWlyc0IgPSB0b1BhaXJzKG1hcEIpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHBhaXJzQS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmICghaGFzUGFpcihwYWlyc0IsIHBhaXJzQVtpbmRleF0sIGlzRXF1YWwsIG1ldGEpIHx8ICFoYXNQYWlyKHBhaXJzQSwgcGFpcnNCW2luZGV4XSwgaXNFcXVhbCwgbWV0YSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogQGZ1bmN0aW9uIGFyZU9iamVjdHNFcXVhbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogYXJlIHRoZSBvYmplY3RzIGVxdWFsIGluIHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RBIHRoZSBvYmplY3QgdG8gdGVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0QiB0aGUgb2JqZWN0IHRvIHRlc3QgYWdhaW5zdFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBpc0VxdWFsIHRoZSBjb21wYXJhdG9yIHRvIGRldGVybWluZSBlcXVhbGl0eVxuICAgKiBAcGFyYW0ge2FueX0gbWV0YSB0aGUgbWV0YSBvYmplY3QgdG8gcGFzcyB0aHJvdWdoXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBhcmUgdGhlIG9iamVjdHMgZXF1YWxcbiAgICovXG5cbiAgdmFyIGFyZU9iamVjdHNFcXVhbCA9IGZ1bmN0aW9uIGFyZU9iamVjdHNFcXVhbChvYmplY3RBLCBvYmplY3RCLCBpc0VxdWFsLCBtZXRhKSB7XG4gICAgdmFyIGtleXNBID0ga2V5cyhvYmplY3RBKTtcbiAgICB2YXIga2V5c0IgPSBrZXlzKG9iamVjdEIpO1xuXG4gICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGtleTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBrZXlzQS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGtleSA9IGtleXNBW2luZGV4XTtcblxuICAgICAgaWYgKCFoYXNWYWx1ZShrZXlzQiwga2V5LCBzYW1lVmFsdWVaZXJvRXF1YWwpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gaWYgYSByZWFjdCBlbGVtZW50LCBpZ25vcmUgdGhlIFwiX293bmVyXCIga2V5IGJlY2F1c2UgaXRzIG5vdCBuZWNlc3NhcnkgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zXG5cblxuICAgICAgaWYgKGtleSA9PT0gJ19vd25lcicgJiYgaXNSZWFjdEVsZW1lbnQob2JqZWN0QSkgJiYgaXNSZWFjdEVsZW1lbnQob2JqZWN0QikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNFcXVhbChvYmplY3RBW2tleV0sIG9iamVjdEJba2V5XSwgbWV0YSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogQGZ1bmN0aW9uIGFyZVJlZ0V4cHNFcXVhbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogYXJlIHRoZSByZWdFeHBzIGVxdWFsIGluIHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnRXhwfSByZWdFeHBBIHRoZSByZWdFeHAgdG8gdGVzdFxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnRXhwQiB0aGUgcmVnRXhwIHRvIHRlc3QgYWdhaW5zXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBhcmUgdGhlIHJlZ0V4cHMgZXF1YWxcbiAgICovXG5cbiAgdmFyIGFyZVJlZ0V4cHNFcXVhbCA9IGZ1bmN0aW9uIGFyZVJlZ0V4cHNFcXVhbChyZWdFeHBBLCByZWdFeHBCKSB7XG4gICAgcmV0dXJuIHJlZ0V4cEEuc291cmNlID09PSByZWdFeHBCLnNvdXJjZSAmJiByZWdFeHBBLmdsb2JhbCA9PT0gcmVnRXhwQi5nbG9iYWwgJiYgcmVnRXhwQS5pZ25vcmVDYXNlID09PSByZWdFeHBCLmlnbm9yZUNhc2UgJiYgcmVnRXhwQS5tdWx0aWxpbmUgPT09IHJlZ0V4cEIubXVsdGlsaW5lICYmIHJlZ0V4cEEudW5pY29kZSA9PT0gcmVnRXhwQi51bmljb2RlICYmIHJlZ0V4cEEuc3RpY2t5ID09PSByZWdFeHBCLnN0aWNreSAmJiByZWdFeHBBLmxhc3RJbmRleCA9PT0gcmVnRXhwQi5sYXN0SW5kZXg7XG4gIH07XG4gIC8qKlxuICAgKiBAZnVuY3Rpb24gYXJlU2V0c0VxdWFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBhcmUgdGhlIHNldHMgZXF1YWwgaW4gdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtTZXR9IHNldEEgdGhlIHNldCB0byB0ZXN0XG4gICAqIEBwYXJhbSB7U2V0fSBzZXRCIHRoZSBzZXQgdG8gdGVzdCBhZ2FpbnN0XG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGlzRXF1YWwgdGhlIGNvbXBhcmF0b3IgdG8gZGV0ZXJtaW5lIGVxdWFsaXR5XG4gICAqIEBwYXJhbSB7YW55fSBtZXRhIHRoZSBtZXRhIHNldCB0byBwYXNzIHRocm91Z2hcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGFyZSB0aGUgc2V0cyBlcXVhbFxuICAgKi9cblxuICB2YXIgYXJlU2V0c0VxdWFsID0gZnVuY3Rpb24gYXJlU2V0c0VxdWFsKHNldEEsIHNldEIsIGlzRXF1YWwsIG1ldGEpIHtcbiAgICBpZiAoc2V0QS5zaXplICE9PSBzZXRCLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzQSA9IHRvVmFsdWVzKHNldEEpO1xuICAgIHZhciB2YWx1ZXNCID0gdG9WYWx1ZXMoc2V0Qik7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWVzQS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmICghaGFzVmFsdWUodmFsdWVzQiwgdmFsdWVzQVtpbmRleF0sIGlzRXF1YWwsIG1ldGEpIHx8ICFoYXNWYWx1ZSh2YWx1ZXNBLCB2YWx1ZXNCW2luZGV4XSwgaXNFcXVhbCwgbWV0YSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIGNvbnN0YW50c1xuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbiAgdmFyIGNyZWF0ZUNvbXBhcmF0b3IgPSBmdW5jdGlvbiBjcmVhdGVDb21wYXJhdG9yKGNyZWF0ZUlzRXF1YWwpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICB2YXIgaXNFcXVhbCA9IHR5cGVvZiBjcmVhdGVJc0VxdWFsID09PSAnZnVuY3Rpb24nID8gY3JlYXRlSXNFcXVhbChjb21wYXJhdG9yKSA6IGNvbXBhcmF0b3I7XG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uIGNvbXBhcmF0b3JcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIGNvbXBhcmUgdGhlIHZhbHVlIG9mIHRoZSB0d28gb2JqZWN0cyBhbmQgcmV0dXJuIHRydWUgaWYgdGhleSBhcmUgZXF1aXZhbGVudCBpbiB2YWx1ZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YW55fSBvYmplY3RBIHRoZSBvYmplY3QgdG8gdGVzdCBhZ2FpbnN0XG4gICAgICogQHBhcmFtIHthbnl9IG9iamVjdEIgdGhlIG9iamVjdCB0byB0ZXN0XG4gICAgICogQHBhcmFtIHthbnl9IFttZXRhXSBhbiBvcHRpb25hbCBtZXRhIG9iamVjdCB0aGF0IGlzIHBhc3NlZCB0aHJvdWdoIHRvIGFsbCBlcXVhbGl0eSB0ZXN0IGNhbGxzXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGFyZSBvYmplY3RBIGFuZCBvYmplY3RCIGVxdWl2YWxlbnQgaW4gdmFsdWVcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3Iob2JqZWN0QSwgb2JqZWN0QiwgbWV0YSkge1xuICAgICAgaWYgKHNhbWVWYWx1ZVplcm9FcXVhbChvYmplY3RBLCBvYmplY3RCKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVPZkEgPSB0eXBlb2Ygb2JqZWN0QTtcblxuICAgICAgaWYgKHR5cGVPZkEgIT09IHR5cGVvZiBvYmplY3RCIHx8IHR5cGVPZkEgIT09ICdvYmplY3QnIHx8ICFvYmplY3RBIHx8ICFvYmplY3RCKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUGxhaW5PYmplY3Qob2JqZWN0QSkgJiYgaXNQbGFpbk9iamVjdChvYmplY3RCKSkge1xuICAgICAgICByZXR1cm4gYXJlT2JqZWN0c0VxdWFsKG9iamVjdEEsIG9iamVjdEIsIGlzRXF1YWwsIG1ldGEpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXJyYXlBID0gaXNBcnJheShvYmplY3RBKTtcbiAgICAgIHZhciBhcnJheUIgPSBpc0FycmF5KG9iamVjdEIpO1xuXG4gICAgICBpZiAoYXJyYXlBIHx8IGFycmF5Qikge1xuICAgICAgICByZXR1cm4gYXJyYXlBID09PSBhcnJheUIgJiYgYXJlQXJyYXlzRXF1YWwob2JqZWN0QSwgb2JqZWN0QiwgaXNFcXVhbCwgbWV0YSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkYXRlQSA9IG9iamVjdEEgaW5zdGFuY2VvZiBEYXRlO1xuICAgICAgdmFyIGRhdGVCID0gb2JqZWN0QiBpbnN0YW5jZW9mIERhdGU7XG5cbiAgICAgIGlmIChkYXRlQSB8fCBkYXRlQikge1xuICAgICAgICByZXR1cm4gZGF0ZUEgPT09IGRhdGVCICYmIHNhbWVWYWx1ZVplcm9FcXVhbChvYmplY3RBLmdldFRpbWUoKSwgb2JqZWN0Qi5nZXRUaW1lKCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVnZXhwQSA9IG9iamVjdEEgaW5zdGFuY2VvZiBSZWdFeHA7XG4gICAgICB2YXIgcmVnZXhwQiA9IG9iamVjdEIgaW5zdGFuY2VvZiBSZWdFeHA7XG5cbiAgICAgIGlmIChyZWdleHBBIHx8IHJlZ2V4cEIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4cEEgPT09IHJlZ2V4cEIgJiYgYXJlUmVnRXhwc0VxdWFsKG9iamVjdEEsIG9iamVjdEIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNQcm9taXNlTGlrZShvYmplY3RBKSB8fCBpc1Byb21pc2VMaWtlKG9iamVjdEIpKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RBID09PSBvYmplY3RCO1xuICAgICAgfVxuXG4gICAgICBpZiAoSEFTX01BUF9TVVBQT1JUKSB7XG4gICAgICAgIHZhciBtYXBBID0gb2JqZWN0QSBpbnN0YW5jZW9mIE1hcDtcbiAgICAgICAgdmFyIG1hcEIgPSBvYmplY3RCIGluc3RhbmNlb2YgTWFwO1xuXG4gICAgICAgIGlmIChtYXBBIHx8IG1hcEIpIHtcbiAgICAgICAgICByZXR1cm4gbWFwQSA9PT0gbWFwQiAmJiBhcmVNYXBzRXF1YWwob2JqZWN0QSwgb2JqZWN0QiwgaXNFcXVhbCwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKEhBU19TRVRfU1VQUE9SVCkge1xuICAgICAgICB2YXIgc2V0QSA9IG9iamVjdEEgaW5zdGFuY2VvZiBTZXQ7XG4gICAgICAgIHZhciBzZXRCID0gb2JqZWN0QiBpbnN0YW5jZW9mIFNldDtcblxuICAgICAgICBpZiAoc2V0QSB8fCBzZXRCKSB7XG4gICAgICAgICAgcmV0dXJuIHNldEEgPT09IHNldEIgJiYgYXJlU2V0c0VxdWFsKG9iamVjdEEsIG9iamVjdEIsIGlzRXF1YWwsIG1ldGEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcmVPYmplY3RzRXF1YWwob2JqZWN0QSwgb2JqZWN0QiwgaXNFcXVhbCwgbWV0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmF0b3I7XG4gIH07XG5cbiAgLy8gY29tcGFyYXRvclxuICB2YXIgY2lyY3VsYXJEZWVwRXF1YWwgPSBjcmVhdGVDb21wYXJhdG9yKGNyZWF0ZUNpcmN1bGFyRXF1YWwoKSk7XG4gIHZhciBjaXJjdWxhclNoYWxsb3dFcXVhbCA9IGNyZWF0ZUNvbXBhcmF0b3IoY3JlYXRlQ2lyY3VsYXJFcXVhbChzYW1lVmFsdWVaZXJvRXF1YWwpKTtcbiAgdmFyIGRlZXBFcXVhbCA9IGNyZWF0ZUNvbXBhcmF0b3IoKTtcbiAgdmFyIHNoYWxsb3dFcXVhbCA9IGNyZWF0ZUNvbXBhcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzYW1lVmFsdWVaZXJvRXF1YWw7XG4gIH0pO1xuICB2YXIgaW5kZXggPSB7XG4gICAgY2lyY3VsYXJEZWVwOiBjaXJjdWxhckRlZXBFcXVhbCxcbiAgICBjaXJjdWxhclNoYWxsb3c6IGNpcmN1bGFyU2hhbGxvd0VxdWFsLFxuICAgIGNyZWF0ZUN1c3RvbTogY3JlYXRlQ29tcGFyYXRvcixcbiAgICBkZWVwOiBkZWVwRXF1YWwsXG4gICAgc2FtZVZhbHVlWmVybzogc2FtZVZhbHVlWmVyb0VxdWFsLFxuICAgIHNoYWxsb3c6IHNoYWxsb3dFcXVhbFxuICB9O1xuXG4gIGV4cG9ydHMuY2lyY3VsYXJEZWVwRXF1YWwgPSBjaXJjdWxhckRlZXBFcXVhbDtcbiAgZXhwb3J0cy5jaXJjdWxhclNoYWxsb3dFcXVhbCA9IGNpcmN1bGFyU2hhbGxvd0VxdWFsO1xuICBleHBvcnRzLmNyZWF0ZUN1c3RvbUVxdWFsID0gY3JlYXRlQ29tcGFyYXRvcjtcbiAgZXhwb3J0cy5kZWVwRXF1YWwgPSBkZWVwRXF1YWw7XG4gIGV4cG9ydHMuZGVmYXVsdCA9IGluZGV4O1xuICBleHBvcnRzLnNhbWVWYWx1ZVplcm9FcXVhbCA9IHNhbWVWYWx1ZVplcm9FcXVhbDtcbiAgZXhwb3J0cy5zaGFsbG93RXF1YWwgPSBzaGFsbG93RXF1YWw7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmFzdC1lcXVhbHMuanMubWFwXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/fast-equals/dist/fast-equals.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_DataView.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_DataView.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"),\n root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, \'DataView\');\n\nmodule.exports = DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzP2I1YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMseURBQWM7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLCtDQUFTOztBQUU1QjtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_DataView.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_Hash.js": + /*!**************************************!*\ + !*** ./node_modules/lodash/_Hash.js ***! + \**************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var hashClear = __webpack_require__(/*! ./_hashClear */ "./node_modules/lodash/_hashClear.js"),\n hashDelete = __webpack_require__(/*! ./_hashDelete */ "./node_modules/lodash/_hashDelete.js"),\n hashGet = __webpack_require__(/*! ./_hashGet */ "./node_modules/lodash/_hashGet.js"),\n hashHas = __webpack_require__(/*! ./_hashHas */ "./node_modules/lodash/_hashHas.js"),\n hashSet = __webpack_require__(/*! ./_hashSet */ "./node_modules/lodash/_hashSet.js");\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype[\'delete\'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanM/ZTI0YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyx5REFBYztBQUN0QyxpQkFBaUIsbUJBQU8sQ0FBQywyREFBZTtBQUN4QyxjQUFjLG1CQUFPLENBQUMscURBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLHFEQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxxREFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_Hash.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_ListCache.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_ListCache.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var listCacheClear = __webpack_require__(/*! ./_listCacheClear */ "./node_modules/lodash/_listCacheClear.js"),\n listCacheDelete = __webpack_require__(/*! ./_listCacheDelete */ "./node_modules/lodash/_listCacheDelete.js"),\n listCacheGet = __webpack_require__(/*! ./_listCacheGet */ "./node_modules/lodash/_listCacheGet.js"),\n listCacheHas = __webpack_require__(/*! ./_listCacheHas */ "./node_modules/lodash/_listCacheHas.js"),\n listCacheSet = __webpack_require__(/*! ./_listCacheSet */ "./node_modules/lodash/_listCacheSet.js");\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype[\'delete\'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcz81ZTJlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQixtQkFBTyxDQUFDLG1FQUFtQjtBQUNoRCxzQkFBc0IsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsK0RBQWlCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLCtEQUFpQjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQywrREFBaUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_ListCache.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_Map.js": + /*!*************************************!*\ + !*** ./node_modules/lodash/_Map.js ***! + \*************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"),\n root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, \'Map\');\n\nmodule.exports = Map;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcz83OWJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLHlEQUFjO0FBQ3RDLFdBQVcsbUJBQU8sQ0FBQywrQ0FBUzs7QUFFNUI7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_Map.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_MapCache.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_MapCache.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var mapCacheClear = __webpack_require__(/*! ./_mapCacheClear */ "./node_modules/lodash/_mapCacheClear.js"),\n mapCacheDelete = __webpack_require__(/*! ./_mapCacheDelete */ "./node_modules/lodash/_mapCacheDelete.js"),\n mapCacheGet = __webpack_require__(/*! ./_mapCacheGet */ "./node_modules/lodash/_mapCacheGet.js"),\n mapCacheHas = __webpack_require__(/*! ./_mapCacheHas */ "./node_modules/lodash/_mapCacheHas.js"),\n mapCacheSet = __webpack_require__(/*! ./_mapCacheSet */ "./node_modules/lodash/_mapCacheSet.js");\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype[\'delete\'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzPzdiODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CLG1CQUFPLENBQUMsaUVBQWtCO0FBQzlDLHFCQUFxQixtQkFBTyxDQUFDLG1FQUFtQjtBQUNoRCxrQkFBa0IsbUJBQU8sQ0FBQyw2REFBZ0I7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsNkRBQWdCO0FBQzFDLGtCQUFrQixtQkFBTyxDQUFDLDZEQUFnQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_MapCache.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_Promise.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_Promise.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"),\n root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, \'Promise\');\n\nmodule.exports = Promise;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanM/MWNlYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyx5REFBYztBQUN0QyxXQUFXLG1CQUFPLENBQUMsK0NBQVM7O0FBRTVCO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_Promise.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_Set.js": + /*!*************************************!*\ + !*** ./node_modules/lodash/_Set.js ***! + \*************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"),\n root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, \'Set\');\n\nmodule.exports = Set;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcz9jODY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLHlEQUFjO0FBQ3RDLFdBQVcsbUJBQU8sQ0FBQywrQ0FBUzs7QUFFNUI7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_Set.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_SetCache.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_SetCache.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"),\n setCacheAdd = __webpack_require__(/*! ./_setCacheAdd */ "./node_modules/lodash/_setCacheAdd.js"),\n setCacheHas = __webpack_require__(/*! ./_setCacheHas */ "./node_modules/lodash/_setCacheHas.js");\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzP2Q2MTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLHVEQUFhO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLDZEQUFnQjtBQUMxQyxrQkFBa0IsbUJBQU8sQ0FBQyw2REFBZ0I7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_SetCache.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_Stack.js": + /*!***************************************!*\ + !*** ./node_modules/lodash/_Stack.js ***! + \***************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"),\n stackClear = __webpack_require__(/*! ./_stackClear */ "./node_modules/lodash/_stackClear.js"),\n stackDelete = __webpack_require__(/*! ./_stackDelete */ "./node_modules/lodash/_stackDelete.js"),\n stackGet = __webpack_require__(/*! ./_stackGet */ "./node_modules/lodash/_stackGet.js"),\n stackHas = __webpack_require__(/*! ./_stackHas */ "./node_modules/lodash/_stackHas.js"),\n stackSet = __webpack_require__(/*! ./_stackSet */ "./node_modules/lodash/_stackSet.js");\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype[\'delete\'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzPzdlNjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMseURBQWM7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7QUFDeEMsa0JBQWtCLG1CQUFPLENBQUMsNkRBQWdCO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyx1REFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsdURBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLHVEQUFhOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_Stack.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_Symbol.js": + /*!****************************************!*\ + !*** ./node_modules/lodash/_Symbol.js ***! + \****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcz85ZTY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQywrQ0FBUzs7QUFFNUI7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_Symbol.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_Uint8Array.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_Uint8Array.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanM/MjQ3NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxXQUFXLG1CQUFPLENBQUMsK0NBQVM7O0FBRTVCO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_Uint8Array.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_WeakMap.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_WeakMap.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"),\n root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, \'WeakMap\');\n\nmodule.exports = WeakMap;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanM/MzlmZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyx5REFBYztBQUN0QyxXQUFXLG1CQUFPLENBQUMsK0NBQVM7O0FBRTVCO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19XZWFrTWFwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_WeakMap.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_arrayFilter.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_arrayFilter.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzPzJkN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLFNBQVM7QUFDcEIsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlGaWx0ZXI7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_arrayFilter.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_arrayLikeKeys.js": + /*!***********************************************!*\ + !*** ./node_modules/lodash/_arrayLikeKeys.js ***! + \***********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseTimes = __webpack_require__(/*! ./_baseTimes */ \"./node_modules/lodash/_baseTimes.js\"),\n isArguments = __webpack_require__(/*! ./isArguments */ \"./node_modules/lodash/isArguments.js\"),\n isArray = __webpack_require__(/*! ./isArray */ \"./node_modules/lodash/isArray.js\"),\n isBuffer = __webpack_require__(/*! ./isBuffer */ \"./node_modules/lodash/isBuffer.js\"),\n isIndex = __webpack_require__(/*! ./_isIndex */ \"./node_modules/lodash/_isIndex.js\"),\n isTypedArray = __webpack_require__(/*! ./isTypedArray */ \"./node_modules/lodash/isTypedArray.js\");\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanM/NmZjZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyx5REFBYztBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQywyREFBZTtBQUN6QyxjQUFjLG1CQUFPLENBQUMsbURBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLHFEQUFZO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxxREFBWTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyw2REFBZ0I7O0FBRTNDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_arrayLikeKeys.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_arrayMap.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_arrayMap.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzPzc5NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLFNBQVM7QUFDcEIsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_arrayMap.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_arrayPush.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_arrayPush.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcz8wODdkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsTUFBTTtBQUNqQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlQdXNoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_arrayPush.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_arraySome.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_arraySome.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5U29tZS5qcz80Mjg0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVNvbWU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_arraySome.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_assocIndexOf.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_assocIndexOf.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js");\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcz9jYjVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyx5Q0FBTTs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_assocIndexOf.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseEach.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_baseEach.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseForOwn = __webpack_require__(/*! ./_baseForOwn */ "./node_modules/lodash/_baseForOwn.js"),\n createBaseEach = __webpack_require__(/*! ./_createBaseEach */ "./node_modules/lodash/_createBaseEach.js");\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VFYWNoLmpzPzQ4YTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7QUFDeEMscUJBQXFCLG1CQUFPLENBQUMsbUVBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLFNBQVM7QUFDcEIsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRWFjaC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlRm9yT3duID0gcmVxdWlyZSgnLi9fYmFzZUZvck93bicpLFxuICAgIGNyZWF0ZUJhc2VFYWNoID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUVhY2g7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseEach.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseFilter.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_baseFilter.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseEach = __webpack_require__(/*! ./_baseEach */ "./node_modules/lodash/_baseEach.js");\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nmodule.exports = baseFilter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGaWx0ZXIuanM/OWY3NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsdURBQWE7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsU0FBUztBQUNwQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGaWx0ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbHRlcjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseFilter.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseFor.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_baseFor.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var createBaseFor = __webpack_require__(/*! ./_createBaseFor */ "./node_modules/lodash/_createBaseFor.js");\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanM/NzJhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0IsbUJBQU8sQ0FBQyxpRUFBa0I7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseFor.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseForOwn.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_baseForOwn.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseFor = __webpack_require__(/*! ./_baseFor */ "./node_modules/lodash/_baseFor.js"),\n keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js");\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanM/MjQyZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMscURBQVk7QUFDbEMsV0FBVyxtQkFBTyxDQUFDLDZDQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvck93bi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlRm9yID0gcmVxdWlyZSgnLi9fYmFzZUZvcicpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGb3JPd247XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseForOwn.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseGet.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_baseGet.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"),\n toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js");\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanM/NjU2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsdURBQWE7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLGlEQUFVOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLGFBQWE7QUFDeEIsYUFBYSxFQUFFO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseGet.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseGetAllKeys.js": + /*!************************************************!*\ + !*** ./node_modules/lodash/_baseGetAllKeys.js ***! + \************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var arrayPush = __webpack_require__(/*! ./_arrayPush */ "./node_modules/lodash/_arrayPush.js"),\n isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js");\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzPzdkMWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMseURBQWM7QUFDdEMsY0FBYyxtQkFBTyxDQUFDLG1EQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseGetAllKeys.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseGetTag.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_baseGetTag.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"),\n getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"),\n objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js");\n\n/** `Object#toString` result references. */\nvar nullTag = \'[object Null]\',\n undefinedTag = \'[object Undefined]\';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanM/MzcyOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsbURBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMseURBQWM7QUFDdEMscUJBQXFCLG1CQUFPLENBQUMsbUVBQW1COztBQUVoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseGetTag.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseHasIn.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_baseHasIn.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VIYXNJbi5qcz8yNmU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsYUFBYTtBQUN4QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSGFzSW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseHasIn.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseIsArguments.js": + /*!*************************************************!*\ + !*** ./node_modules/lodash/_baseIsArguments.js ***! + \*************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"),\n isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js");\n\n/** `Object#toString` result references. */\nvar argsTag = \'[object Arguments]\';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcz8yNTNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFlO0FBQ3hDLG1CQUFtQixtQkFBTyxDQUFDLDZEQUFnQjs7QUFFM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseIsArguments.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseIsEqual.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_baseIsEqual.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseIsEqualDeep = __webpack_require__(/*! ./_baseIsEqualDeep */ "./node_modules/lodash/_baseIsEqualDeep.js"),\n isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js");\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzP2MwNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCLG1CQUFPLENBQUMscUVBQW9CO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLDZEQUFnQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLFdBQVcsRUFBRTtBQUNiLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseIsEqual.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseIsEqualDeep.js": + /*!*************************************************!*\ + !*** ./node_modules/lodash/_baseIsEqualDeep.js ***! + \*************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var Stack = __webpack_require__(/*! ./_Stack */ "./node_modules/lodash/_Stack.js"),\n equalArrays = __webpack_require__(/*! ./_equalArrays */ "./node_modules/lodash/_equalArrays.js"),\n equalByTag = __webpack_require__(/*! ./_equalByTag */ "./node_modules/lodash/_equalByTag.js"),\n equalObjects = __webpack_require__(/*! ./_equalObjects */ "./node_modules/lodash/_equalObjects.js"),\n getTag = __webpack_require__(/*! ./_getTag */ "./node_modules/lodash/_getTag.js"),\n isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),\n isBuffer = __webpack_require__(/*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"),\n isTypedArray = __webpack_require__(/*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js");\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = \'[object Arguments]\',\n arrayTag = \'[object Array]\',\n objectTag = \'[object Object]\';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, \'__wrapped__\'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, \'__wrapped__\');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcz83Yjk3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxpREFBVTtBQUM5QixrQkFBa0IsbUJBQU8sQ0FBQyw2REFBZ0I7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7QUFDeEMsbUJBQW1CLG1CQUFPLENBQUMsK0RBQWlCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQyxtREFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsbURBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLHFEQUFZO0FBQ25DLG1CQUFtQixtQkFBTyxDQUFDLDZEQUFnQjs7QUFFM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbERlZXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseIsEqualDeep.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseIsMatch.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_baseIsMatch.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var Stack = __webpack_require__(/*! ./_Stack */ "./node_modules/lodash/_Stack.js"),\n baseIsEqual = __webpack_require__(/*! ./_baseIsEqual */ "./node_modules/lodash/_baseIsEqual.js");\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hdGNoLmpzPzk2NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLGlEQUFVO0FBQzlCLGtCQUFrQixtQkFBTyxDQUFDLDZEQUFnQjs7QUFFMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE1BQU07QUFDakIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTWF0Y2guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWF0Y2g7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseIsMatch.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseIsNative.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_baseIsNative.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var isFunction = __webpack_require__(/*! ./isFunction */ \"./node_modules/lodash/isFunction.js\"),\n isMasked = __webpack_require__(/*! ./_isMasked */ \"./node_modules/lodash/_isMasked.js\"),\n isObject = __webpack_require__(/*! ./isObject */ \"./node_modules/lodash/isObject.js\"),\n toSource = __webpack_require__(/*! ./_toSource */ \"./node_modules/lodash/_toSource.js\");\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcz8zNGFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQixtQkFBTyxDQUFDLHlEQUFjO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyx1REFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMscURBQVk7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLHVEQUFhOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseIsNative.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseIsTypedArray.js": + /*!**************************************************!*\ + !*** ./node_modules/lodash/_baseIsTypedArray.js ***! + \**************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ \"./node_modules/lodash/_baseGetTag.js\"),\n isLength = __webpack_require__(/*! ./isLength */ \"./node_modules/lodash/isLength.js\"),\n isObjectLike = __webpack_require__(/*! ./isObjectLike */ \"./node_modules/lodash/isObjectLike.js\");\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanM/NzQzZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUIsbUJBQU8sQ0FBQywyREFBZTtBQUN4QyxlQUFlLG1CQUFPLENBQUMscURBQVk7QUFDbkMsbUJBQW1CLG1CQUFPLENBQUMsNkRBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseIsTypedArray.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseIteratee.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_baseIteratee.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseMatches = __webpack_require__(/*! ./_baseMatches */ "./node_modules/lodash/_baseMatches.js"),\n baseMatchesProperty = __webpack_require__(/*! ./_baseMatchesProperty */ "./node_modules/lodash/_baseMatchesProperty.js"),\n identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"),\n isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),\n property = __webpack_require__(/*! ./property */ "./node_modules/lodash/property.js");\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don\'t store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == \'function\') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == \'object\') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJdGVyYXRlZS5qcz9iYWRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQixtQkFBTyxDQUFDLDZEQUFnQjtBQUMxQywwQkFBMEIsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLHFEQUFZO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxtREFBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMscURBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXRlcmF0ZWUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYmFzZU1hdGNoZXMgPSByZXF1aXJlKCcuL19iYXNlTWF0Y2hlcycpLFxuICAgIGJhc2VNYXRjaGVzUHJvcGVydHkgPSByZXF1aXJlKCcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIHByb3BlcnR5ID0gcmVxdWlyZSgnLi9wcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICovXG5mdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHtcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYwMzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gYmFzZU1hdGNoZXNQcm9wZXJ0eSh2YWx1ZVswXSwgdmFsdWVbMV0pXG4gICAgICA6IGJhc2VNYXRjaGVzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJdGVyYXRlZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseIteratee.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseKeys.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_baseKeys.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var isPrototype = __webpack_require__(/*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"),\n nativeKeys = __webpack_require__(/*! ./_nativeKeys */ "./node_modules/lodash/_nativeKeys.js");\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn\'t treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != \'constructor\') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzPzAzZGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsNkRBQWdCO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFlOztBQUV4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseKeys.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseMap.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_baseMap.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseEach = __webpack_require__(/*! ./_baseEach */ "./node_modules/lodash/_baseEach.js"),\n isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js");\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXAuanM/OTdkMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsdURBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsMkRBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsU0FBUztBQUNwQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2Jhc2VFYWNoJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hcDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseMap.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseMatches.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_baseMatches.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseIsMatch = __webpack_require__(/*! ./_baseIsMatch */ "./node_modules/lodash/_baseIsMatch.js"),\n getMatchData = __webpack_require__(/*! ./_getMatchData */ "./node_modules/lodash/_getMatchData.js"),\n matchesStrictComparable = __webpack_require__(/*! ./_matchesStrictComparable */ "./node_modules/lodash/_matchesStrictComparable.js");\n\n/**\n * The base implementation of `_.matches` which doesn\'t clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzLmpzPzY0MmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsNkRBQWdCO0FBQzFDLG1CQUFtQixtQkFBTyxDQUFDLCtEQUFpQjtBQUM1Qyw4QkFBOEIsbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VJc01hdGNoID0gcmVxdWlyZSgnLi9fYmFzZUlzTWF0Y2gnKSxcbiAgICBnZXRNYXRjaERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXRjaERhdGEnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseMatches.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseMatchesProperty.js": + /*!*****************************************************!*\ + !*** ./node_modules/lodash/_baseMatchesProperty.js ***! + \*****************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseIsEqual = __webpack_require__(/*! ./_baseIsEqual */ "./node_modules/lodash/_baseIsEqual.js"),\n get = __webpack_require__(/*! ./get */ "./node_modules/lodash/get.js"),\n hasIn = __webpack_require__(/*! ./hasIn */ "./node_modules/lodash/hasIn.js"),\n isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"),\n isStrictComparable = __webpack_require__(/*! ./_isStrictComparable */ "./node_modules/lodash/_isStrictComparable.js"),\n matchesStrictComparable = __webpack_require__(/*! ./_matchesStrictComparable */ "./node_modules/lodash/_matchesStrictComparable.js"),\n toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js");\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn\'t clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanM/MTgzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyw2REFBZ0I7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLDJDQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQywrQ0FBUztBQUM3QixZQUFZLG1CQUFPLENBQUMsaURBQVU7QUFDOUIseUJBQXlCLG1CQUFPLENBQUMsMkVBQXVCO0FBQ3hELDhCQUE4QixtQkFBTyxDQUFDLHFGQUE0QjtBQUNsRSxZQUFZLG1CQUFPLENBQUMsaURBQVU7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEVBQUU7QUFDYixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyksXG4gICAgZ2V0ID0gcmVxdWlyZSgnLi9nZXQnKSxcbiAgICBoYXNJbiA9IHJlcXVpcmUoJy4vaGFzSW4nKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzUHJvcGVydHk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseMatchesProperty.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseOrderBy.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_baseOrderBy.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"),\n baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"),\n baseIteratee = __webpack_require__(/*! ./_baseIteratee */ "./node_modules/lodash/_baseIteratee.js"),\n baseMap = __webpack_require__(/*! ./_baseMap */ "./node_modules/lodash/_baseMap.js"),\n baseSortBy = __webpack_require__(/*! ./_baseSortBy */ "./node_modules/lodash/_baseSortBy.js"),\n baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"),\n compareMultiple = __webpack_require__(/*! ./_compareMultiple */ "./node_modules/lodash/_compareMultiple.js"),\n identity = __webpack_require__(/*! ./identity */ "./node_modules/lodash/identity.js"),\n isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js");\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { \'criteria\': criteria, \'index\': ++index, \'value\': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nmodule.exports = baseOrderBy;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VPcmRlckJ5LmpzPzZhNWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLHVEQUFhO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyxxREFBWTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQywrREFBaUI7QUFDNUMsY0FBYyxtQkFBTyxDQUFDLHFEQUFZO0FBQ2xDLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFlO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLHlEQUFjO0FBQ3RDLHNCQUFzQixtQkFBTyxDQUFDLHFFQUFvQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMscURBQVk7QUFDbkMsY0FBYyxtQkFBTyxDQUFDLG1EQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLDZCQUE2QjtBQUN4QyxXQUFXLFNBQVM7QUFDcEIsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLFlBQVk7QUFDWixHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlT3JkZXJCeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBiYXNlTWFwID0gcmVxdWlyZSgnLi9fYmFzZU1hcCcpLFxuICAgIGJhc2VTb3J0QnkgPSByZXF1aXJlKCcuL19iYXNlU29ydEJ5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY29tcGFyZU11bHRpcGxlID0gcmVxdWlyZSgnLi9fY29tcGFyZU11bHRpcGxlJyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm9yZGVyQnlgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IGl0ZXJhdGVlcyBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBvcmRlcnMgVGhlIHNvcnQgb3JkZXJzIG9mIGBpdGVyYXRlZXNgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycykge1xuICBpZiAoaXRlcmF0ZWVzLmxlbmd0aCkge1xuICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgIGlmIChpc0FycmF5KGl0ZXJhdGVlKSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gYmFzZUdldCh2YWx1ZSwgaXRlcmF0ZWUubGVuZ3RoID09PSAxID8gaXRlcmF0ZWVbMF0gOiBpdGVyYXRlZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVyYXRlZTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlZXMgPSBbaWRlbnRpdHldO1xuICB9XG5cbiAgdmFyIGluZGV4ID0gLTE7XG4gIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgYmFzZVVuYXJ5KGJhc2VJdGVyYXRlZSkpO1xuXG4gIHZhciByZXN1bHQgPSBiYXNlTWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICB2YXIgY3JpdGVyaWEgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gaXRlcmF0ZWUodmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiB7ICdjcml0ZXJpYSc6IGNyaXRlcmlhLCAnaW5kZXgnOiArK2luZGV4LCAndmFsdWUnOiB2YWx1ZSB9O1xuICB9KTtcblxuICByZXR1cm4gYmFzZVNvcnRCeShyZXN1bHQsIGZ1bmN0aW9uKG9iamVjdCwgb3RoZXIpIHtcbiAgICByZXR1cm4gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycyk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VPcmRlckJ5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseOrderBy.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseProperty.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_baseProperty.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcz9lZjVkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseProperty.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_basePropertyDeep.js": + /*!**************************************************!*\ + !*** ./node_modules/lodash/_basePropertyDeep.js ***! + \**************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js");\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eURlZXAuanM/ZTNmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMscURBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eURlZXA7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_basePropertyDeep.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseSortBy.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_baseSortBy.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nmodule.exports = baseSortBy;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTb3J0QnkuanM/ZDRiMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNvcnRCeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAgdG8gZGVmaW5lIHRoZVxuICogc29ydCBvcmRlciBvZiBgYXJyYXlgIGFuZCByZXBsYWNlcyBjcml0ZXJpYSBvYmplY3RzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZ1xuICogdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBkZWZpbmUgc29ydCBvcmRlci5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGFycmF5LnNvcnQoY29tcGFyZXIpO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBhcnJheVtsZW5ndGhdID0gYXJyYXlbbGVuZ3RoXS52YWx1ZTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNvcnRCeTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseSortBy.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseTimes.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_baseTimes.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcz81MGQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseTimes.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseToString.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_baseToString.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var Symbol = __webpack_require__(/*! ./_Symbol */ \"./node_modules/lodash/_Symbol.js\"),\n arrayMap = __webpack_require__(/*! ./_arrayMap */ \"./node_modules/lodash/_arrayMap.js\"),\n isArray = __webpack_require__(/*! ./isArray */ \"./node_modules/lodash/isArray.js\"),\n isSymbol = __webpack_require__(/*! ./isSymbol */ \"./node_modules/lodash/isSymbol.js\");\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcz9jZTg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxtREFBVztBQUNoQyxlQUFlLG1CQUFPLENBQUMsdURBQWE7QUFDcEMsY0FBYyxtQkFBTyxDQUFDLG1EQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxxREFBWTs7QUFFbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseToString.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_baseUnary.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_baseUnary.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcz9iMDQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_baseUnary.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_cacheHas.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_cacheHas.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzP2M1ODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_cacheHas.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_castPath.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_castPath.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),\n isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"),\n stringToPath = __webpack_require__(/*! ./_stringToPath */ "./node_modules/lodash/_stringToPath.js"),\n toString = __webpack_require__(/*! ./toString */ "./node_modules/lodash/toString.js");\n\n/**\n * Casts `value` to a path array if it\'s not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzP2UyZTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLG1EQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxpREFBVTtBQUM5QixtQkFBbUIsbUJBQU8sQ0FBQywrREFBaUI7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLHFEQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLFdBQVcsT0FBTztBQUNsQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_castPath.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_compareAscending.js": + /*!**************************************************!*\ + !*** ./node_modules/lodash/_compareAscending.js ***! + \**************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js");\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nmodule.exports = compareAscending;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvbXBhcmVBc2NlbmRpbmcuanM/Y2FlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMscURBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wYXJlQXNjZW5kaW5nLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKipcbiAqIENvbXBhcmVzIHZhbHVlcyB0byBzb3J0IHRoZW0gaW4gYXNjZW5kaW5nIG9yZGVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgdmFsdWVgLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQXNjZW5kaW5nKHZhbHVlLCBvdGhlcikge1xuICBpZiAodmFsdWUgIT09IG90aGVyKSB7XG4gICAgdmFyIHZhbElzRGVmaW5lZCA9IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgICAgIHZhbElzTnVsbCA9IHZhbHVlID09PSBudWxsLFxuICAgICAgICB2YWxJc1JlZmxleGl2ZSA9IHZhbHVlID09PSB2YWx1ZSxcbiAgICAgICAgdmFsSXNTeW1ib2wgPSBpc1N5bWJvbCh2YWx1ZSk7XG5cbiAgICB2YXIgb3RoSXNEZWZpbmVkID0gb3RoZXIgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgb3RoSXNOdWxsID0gb3RoZXIgPT09IG51bGwsXG4gICAgICAgIG90aElzUmVmbGV4aXZlID0gb3RoZXIgPT09IG90aGVyLFxuICAgICAgICBvdGhJc1N5bWJvbCA9IGlzU3ltYm9sKG90aGVyKTtcblxuICAgIGlmICgoIW90aElzTnVsbCAmJiAhb3RoSXNTeW1ib2wgJiYgIXZhbElzU3ltYm9sICYmIHZhbHVlID4gb3RoZXIpIHx8XG4gICAgICAgICh2YWxJc1N5bWJvbCAmJiBvdGhJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUgJiYgIW90aElzTnVsbCAmJiAhb3RoSXNTeW1ib2wpIHx8XG4gICAgICAgICh2YWxJc051bGwgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAoIXZhbElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgIXZhbElzUmVmbGV4aXZlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgaWYgKCghdmFsSXNOdWxsICYmICF2YWxJc1N5bWJvbCAmJiAhb3RoSXNTeW1ib2wgJiYgdmFsdWUgPCBvdGhlcikgfHxcbiAgICAgICAgKG90aElzU3ltYm9sICYmIHZhbElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSAmJiAhdmFsSXNOdWxsICYmICF2YWxJc1N5bWJvbCkgfHxcbiAgICAgICAgKG90aElzTnVsbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICghb3RoSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAhb3RoSXNSZWZsZXhpdmUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUFzY2VuZGluZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_compareAscending.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_compareMultiple.js": + /*!*************************************************!*\ + !*** ./node_modules/lodash/_compareMultiple.js ***! + \*************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var compareAscending = __webpack_require__(/*! ./_compareAscending */ "./node_modules/lodash/_compareAscending.js");\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of "desc" for descending or "asc" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == \'desc\' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvbXBhcmVNdWx0aXBsZS5qcz8yMTY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVCQUF1QixtQkFBTyxDQUFDLHVFQUFxQjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLG1CQUFtQjtBQUM5QixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wYXJlTXVsdGlwbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29tcGFyZUFzY2VuZGluZyA9IHJlcXVpcmUoJy4vX2NvbXBhcmVBc2NlbmRpbmcnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9yZGVyQnlgIHRvIGNvbXBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvZiBhIHZhbHVlIHRvIGFub3RoZXJcbiAqIGFuZCBzdGFibGUgc29ydCB0aGVtLlxuICpcbiAqIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsXG4gKiBzcGVjaWZ5IGFuIG9yZGVyIG9mIFwiZGVzY1wiIGZvciBkZXNjZW5kaW5nIG9yIFwiYXNjXCIgZm9yIGFzY2VuZGluZyBzb3J0IG9yZGVyXG4gKiBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFuW118c3RyaW5nW119IG9yZGVycyBUaGUgb3JkZXIgdG8gc29ydCBieSBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIG9iakNyaXRlcmlhID0gb2JqZWN0LmNyaXRlcmlhLFxuICAgICAgb3RoQ3JpdGVyaWEgPSBvdGhlci5jcml0ZXJpYSxcbiAgICAgIGxlbmd0aCA9IG9iakNyaXRlcmlhLmxlbmd0aCxcbiAgICAgIG9yZGVyc0xlbmd0aCA9IG9yZGVycy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcmVzdWx0ID0gY29tcGFyZUFzY2VuZGluZyhvYmpDcml0ZXJpYVtpbmRleF0sIG90aENyaXRlcmlhW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgaWYgKGluZGV4ID49IG9yZGVyc0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIG9yZGVyID0gb3JkZXJzW2luZGV4XTtcbiAgICAgIHJldHVybiByZXN1bHQgKiAob3JkZXIgPT0gJ2Rlc2MnID8gLTEgOiAxKTtcbiAgICB9XG4gIH1cbiAgLy8gRml4ZXMgYW4gYEFycmF5I3NvcnRgIGJ1ZyBpbiB0aGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIGFwcGxpY2F0aW9uc1xuICAvLyB0aGF0IGNhdXNlcyBpdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0byBwcm92aWRlIHRoZSBzYW1lIHZhbHVlIGZvclxuICAvLyBgb2JqZWN0YCBhbmQgYG90aGVyYC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzEyNDdcbiAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgLy9cbiAgLy8gVGhpcyBhbHNvIGVuc3VyZXMgYSBzdGFibGUgc29ydCBpbiBWOCBhbmQgb3RoZXIgZW5naW5lcy5cbiAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTkwIGZvciBtb3JlIGRldGFpbHMuXG4gIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wYXJlTXVsdGlwbGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_compareMultiple.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_coreJsData.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_coreJsData.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var root = __webpack_require__(/*! ./_root */ \"./node_modules/lodash/_root.js\");\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanM/ZGEwMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxXQUFXLG1CQUFPLENBQUMsK0NBQVM7O0FBRTVCO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_coreJsData.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_createBaseEach.js": + /*!************************************************!*\ + !*** ./node_modules/lodash/_createBaseEach.js ***! + \************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js");\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VFYWNoLmpzPzk1MGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsMkRBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRWFjaC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGJhc2VFYWNoYCBvciBgYmFzZUVhY2hSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYSBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRWFjaChlYWNoRnVuYywgZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbiAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICByZXR1cm4gZWFjaEZ1bmMoY29sbGVjdGlvbiwgaXRlcmF0ZWUpO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGgsXG4gICAgICAgIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuXG4gICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtpbmRleF0sIGluZGV4LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRWFjaDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_createBaseEach.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_createBaseFor.js": + /*!***********************************************!*\ + !*** ./node_modules/lodash/_createBaseFor.js ***! + \***********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VGb3IuanM/OTljZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_createBaseFor.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_equalArrays.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_equalArrays.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var SetCache = __webpack_require__(/*! ./_SetCache */ "./node_modules/lodash/_SetCache.js"),\n arraySome = __webpack_require__(/*! ./_arraySome */ "./node_modules/lodash/_arraySome.js"),\n cacheHas = __webpack_require__(/*! ./_cacheHas */ "./node_modules/lodash/_cacheHas.js");\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack[\'delete\'](array);\n stack[\'delete\'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQXJyYXlzLmpzP2EyYmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLHVEQUFhO0FBQ3BDLGdCQUFnQixtQkFBTyxDQUFDLHlEQUFjO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyx1REFBYTs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQXJyYXlzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEFycmF5cztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_equalArrays.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_equalByTag.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_equalByTag.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var Symbol = __webpack_require__(/*! ./_Symbol */ \"./node_modules/lodash/_Symbol.js\"),\n Uint8Array = __webpack_require__(/*! ./_Uint8Array */ \"./node_modules/lodash/_Uint8Array.js\"),\n eq = __webpack_require__(/*! ./eq */ \"./node_modules/lodash/eq.js\"),\n equalArrays = __webpack_require__(/*! ./_equalArrays */ \"./node_modules/lodash/_equalArrays.js\"),\n mapToArray = __webpack_require__(/*! ./_mapToArray */ \"./node_modules/lodash/_mapToArray.js\"),\n setToArray = __webpack_require__(/*! ./_setToArray */ \"./node_modules/lodash/_setToArray.js\");\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanM/MWMzYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsbURBQVc7QUFDaEMsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7QUFDeEMsU0FBUyxtQkFBTyxDQUFDLHlDQUFNO0FBQ3ZCLGtCQUFrQixtQkFBTyxDQUFDLDZEQUFnQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQywyREFBZTtBQUN4QyxpQkFBaUIsbUJBQU8sQ0FBQywyREFBZTs7QUFFeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_equalByTag.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_equalObjects.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_equalObjects.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var getAllKeys = __webpack_require__(/*! ./_getAllKeys */ \"./node_modules/lodash/_getAllKeys.js\");\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcz9iMWU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFlOztBQUV4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbE9iamVjdHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_equalObjects.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_freeGlobal.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_freeGlobal.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof window == 'object' && window && window.Object === Object && window;\n\nmodule.exports = freeGlobal;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanM/NTg1YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHdCQUF3QixNQUFNLGdCQUFnQixNQUFNLElBQUksTUFBTSxzQkFBc0IsTUFBTTs7QUFFMUYiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_freeGlobal.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_getAllKeys.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_getAllKeys.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseGetAllKeys = __webpack_require__(/*! ./_baseGetAllKeys */ "./node_modules/lodash/_baseGetAllKeys.js"),\n getSymbols = __webpack_require__(/*! ./_getSymbols */ "./node_modules/lodash/_getSymbols.js"),\n keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js");\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanM/YTk5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBcUIsbUJBQU8sQ0FBQyxtRUFBbUI7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7QUFDeEMsV0FBVyxtQkFBTyxDQUFDLDZDQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_getAllKeys.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_getMapData.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_getMapData.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var isKeyable = __webpack_require__(/*! ./_isKeyable */ \"./node_modules/lodash/_isKeyable.js\");\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanM/NDI0NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyx5REFBYzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsRUFBRTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_getMapData.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_getMatchData.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_getMatchData.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var isStrictComparable = __webpack_require__(/*! ./_isStrictComparable */ "./node_modules/lodash/_isStrictComparable.js"),\n keys = __webpack_require__(/*! ./keys */ "./node_modules/lodash/keys.js");\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hdGNoRGF0YS5qcz8zYmI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlCQUF5QixtQkFBTyxDQUFDLDJFQUF1QjtBQUN4RCxXQUFXLG1CQUFPLENBQUMsNkNBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXRjaERhdGEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXRjaERhdGE7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_getMatchData.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_getNative.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_getNative.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseIsNative = __webpack_require__(/*! ./_baseIsNative */ "./node_modules/lodash/_baseIsNative.js"),\n getValue = __webpack_require__(/*! ./_getValue */ "./node_modules/lodash/_getValue.js");\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it\'s native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcz8wYjA3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQixtQkFBTyxDQUFDLCtEQUFpQjtBQUM1QyxlQUFlLG1CQUFPLENBQUMsdURBQWE7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixhQUFhLEVBQUU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_getNative.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_getRawTag.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_getRawTag.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js");\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcz8wMGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxtREFBVzs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_getRawTag.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_getSymbols.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_getSymbols.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var arrayFilter = __webpack_require__(/*! ./_arrayFilter */ "./node_modules/lodash/_arrayFilter.js"),\n stubArray = __webpack_require__(/*! ./stubArray */ "./node_modules/lodash/stubArray.js");\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanM/MzJmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyw2REFBZ0I7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsdURBQWE7O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_getSymbols.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_getTag.js": + /*!****************************************!*\ + !*** ./node_modules/lodash/_getTag.js ***! + \****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var DataView = __webpack_require__(/*! ./_DataView */ \"./node_modules/lodash/_DataView.js\"),\n Map = __webpack_require__(/*! ./_Map */ \"./node_modules/lodash/_Map.js\"),\n Promise = __webpack_require__(/*! ./_Promise */ \"./node_modules/lodash/_Promise.js\"),\n Set = __webpack_require__(/*! ./_Set */ \"./node_modules/lodash/_Set.js\"),\n WeakMap = __webpack_require__(/*! ./_WeakMap */ \"./node_modules/lodash/_WeakMap.js\"),\n baseGetTag = __webpack_require__(/*! ./_baseGetTag */ \"./node_modules/lodash/_baseGetTag.js\"),\n toSource = __webpack_require__(/*! ./_toSource */ \"./node_modules/lodash/_toSource.js\");\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcz80MmEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyx1REFBYTtBQUNwQyxVQUFVLG1CQUFPLENBQUMsNkNBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLHFEQUFZO0FBQ2xDLFVBQVUsbUJBQU8sQ0FBQyw2Q0FBUTtBQUMxQixjQUFjLG1CQUFPLENBQUMscURBQVk7QUFDbEMsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLHVEQUFhOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_getTag.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_getValue.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_getValue.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzPzM2OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsRUFBRTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_getValue.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_hasPath.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_hasPath.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"),\n isArguments = __webpack_require__(/*! ./isArguments */ "./node_modules/lodash/isArguments.js"),\n isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),\n isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"),\n isLength = __webpack_require__(/*! ./isLength */ "./node_modules/lodash/isLength.js"),\n toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js");\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1BhdGguanM/ZTJjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsdURBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsMkRBQWU7QUFDekMsY0FBYyxtQkFBTyxDQUFDLG1EQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxxREFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMscURBQVk7QUFDbkMsWUFBWSxtQkFBTyxDQUFDLGlEQUFVOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLGFBQWE7QUFDeEIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBmYWxzZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cbiAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1BhdGg7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_hasPath.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_hashClear.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_hashClear.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcz80OWY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQixtQkFBTyxDQUFDLCtEQUFpQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_hashClear.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_hashDelete.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_hashDelete.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanM/MWVmYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_hashDelete.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_hashGet.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_hashGet.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ \"./node_modules/lodash/_nativeCreate.js\");\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanM/YmJjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQywrREFBaUI7O0FBRTVDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLEVBQUU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_hashGet.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_hashHas.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_hashHas.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanM/N2E0OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQywrREFBaUI7O0FBRTVDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_hashHas.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_hashSet.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_hashSet.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ \"./node_modules/lodash/_nativeCreate.js\");\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanM/MjUyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQywrREFBaUI7O0FBRTVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_hashSet.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_isIndex.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_isIndex.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanM/YzA5OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_isIndex.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_isKey.js": + /*!***************************************!*\ + !*** ./node_modules/lodash/_isKey.js ***! + \***************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var isArray = __webpack_require__(/*! ./isArray */ \"./node_modules/lodash/isArray.js\"),\n isSymbol = __webpack_require__(/*! ./isSymbol */ \"./node_modules/lodash/isSymbol.js\");\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzP2Y2MDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLG1EQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxxREFBWTs7QUFFbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_isKey.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_isKeyable.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/_isKeyable.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcz8xMjkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5YWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_isKeyable.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_isMasked.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_isMasked.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var coreJsData = __webpack_require__(/*! ./_coreJsData */ \"./node_modules/lodash/_coreJsData.js\");\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzPzEzNjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_isMasked.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_isPrototype.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_isPrototype.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzP2VhYzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_isPrototype.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_isStrictComparable.js": + /*!****************************************************!*\ + !*** ./node_modules/lodash/_isStrictComparable.js ***! + \****************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js");\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcz8wOGNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxxREFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_isStrictComparable.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_listCacheClear.js": + /*!************************************************!*\ + !*** ./node_modules/lodash/_listCacheClear.js ***! + \************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzPzI4YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_listCacheClear.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_listCacheDelete.js": + /*!*************************************************!*\ + !*** ./node_modules/lodash/_listCacheDelete.js ***! + \*************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcz82OWQ1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQixtQkFBTyxDQUFDLCtEQUFpQjs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVEZWxldGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_listCacheDelete.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_listCacheGet.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheGet.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcz9iNGMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQixtQkFBTyxDQUFDLCtEQUFpQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsRUFBRTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_listCacheGet.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_listCacheHas.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheHas.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcz9mYmE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQixtQkFBTyxDQUFDLCtEQUFpQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlSGFzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_listCacheHas.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_listCacheSet.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_listCacheSet.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcz82N2NhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQixtQkFBTyxDQUFDLCtEQUFpQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVTZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_listCacheSet.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_mapCacheClear.js": + /*!***********************************************!*\ + !*** ./node_modules/lodash/_mapCacheClear.js ***! + \***********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var Hash = __webpack_require__(/*! ./_Hash */ \"./node_modules/lodash/_Hash.js\"),\n ListCache = __webpack_require__(/*! ./_ListCache */ \"./node_modules/lodash/_ListCache.js\"),\n Map = __webpack_require__(/*! ./_Map */ \"./node_modules/lodash/_Map.js\");\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanM/N2M2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxXQUFXLG1CQUFPLENBQUMsK0NBQVM7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMseURBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLDZDQUFROztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_mapCacheClear.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_mapCacheDelete.js": + /*!************************************************!*\ + !*** ./node_modules/lodash/_mapCacheDelete.js ***! + \************************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var getMapData = __webpack_require__(/*! ./_getMapData */ \"./node_modules/lodash/_getMapData.js\");\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzPzkzZWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_mapCacheDelete.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_mapCacheGet.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheGet.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzPzI0NzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLEVBQUU7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_mapCacheGet.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_mapCacheHas.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheHas.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzP2E1MjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_mapCacheHas.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_mapCacheSet.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_mapCacheSet.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzPzFmYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsMkRBQWU7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEVBQUU7QUFDYixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_mapCacheSet.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_mapToArray.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_mapToArray.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcFRvQXJyYXkuanM/ZWRmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVG9BcnJheTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_mapToArray.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_matchesStrictComparable.js": + /*!*********************************************************!*\ + !*** ./node_modules/lodash/_matchesStrictComparable.js ***! + \*********************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzPzIwZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEVBQUU7QUFDYixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_matchesStrictComparable.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_memoizeCapped.js": + /*!***********************************************!*\ + !*** ./node_modules/lodash/_memoizeCapped.js ***! + \***********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var memoize = __webpack_require__(/*! ./memoize */ "./node_modules/lodash/memoize.js");\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function\'s\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanM/MjM0ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsbURBQVc7O0FBRWpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_memoizeCapped.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_nativeCreate.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_nativeCreate.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var getNative = __webpack_require__(/*! ./_getNative */ \"./node_modules/lodash/_getNative.js\");\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcz82MDQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLHlEQUFjOztBQUV0QztBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_nativeCreate.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_nativeKeys.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_nativeKeys.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var overArg = __webpack_require__(/*! ./_overArg */ "./node_modules/lodash/_overArg.js");\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanM/NTdhNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMscURBQVk7O0FBRWxDO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_nativeKeys.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_nodeUtil.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_nodeUtil.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ \"./node_modules/lodash/_freeGlobal.js\");\n\n/** Detect free variable `exports`. */\nvar freeExports = true && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzPzk5ZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0RBQWlCLG1CQUFPLENBQUMsMkRBQWU7O0FBRXhDO0FBQ0Esa0JBQWtCLEtBQTBCOztBQUU1QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_nodeUtil.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_objectToString.js": + /*!************************************************!*\ + !*** ./node_modules/lodash/_objectToString.js ***! + \************************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzPzI5ZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_objectToString.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_overArg.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/_overArg.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanM/OTFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_overArg.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_root.js": + /*!**************************************!*\ + !*** ./node_modules/lodash/_root.js ***! + \**************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ \"./node_modules/lodash/_freeGlobal.js\");\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanM/MmIzZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUIsbUJBQU8sQ0FBQywyREFBZTs7QUFFeEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_root.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_setCacheAdd.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_setCacheAdd.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlQWRkLmpzPzdlZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_setCacheAdd.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_setCacheHas.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_setCacheHas.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlSGFzLmpzP2RjMGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_setCacheHas.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_setToArray.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_setToArray.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanM/YWM0MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_setToArray.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_stackClear.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/_stackClear.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js");\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanM/ZWZiNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyx5REFBYzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_stackClear.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_stackDelete.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/_stackDelete.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzPzJmY2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_stackDelete.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_stackGet.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_stackGet.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzPzgwMmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsRUFBRTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_stackGet.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_stackHas.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_stackHas.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrSGFzLmpzPzU1YTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrSGFzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_stackHas.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_stackSet.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_stackSet.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"),\n Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js"),\n MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js");\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzP2QwMmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMseURBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLDZDQUFRO0FBQzFCLGVBQWUsbUJBQU8sQ0FBQyx1REFBYTs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/_stackSet.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_stringToPath.js": + /*!**********************************************!*\ + !*** ./node_modules/lodash/_stringToPath.js ***! + \**********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var memoizeCapped = __webpack_require__(/*! ./_memoizeCapped */ \"./node_modules/lodash/_memoizeCapped.js\");\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcz8xOGQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQixtQkFBTyxDQUFDLGlFQUFrQjs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/_stringToPath.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_toKey.js": + /*!***************************************!*\ + !*** ./node_modules/lodash/_toKey.js ***! + \***************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var isSymbol = __webpack_require__(/*! ./isSymbol */ \"./node_modules/lodash/isSymbol.js\");\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvS2V5LmpzP2Y0ZDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLHFEQUFZOztBQUVuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxjQUFjO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_toKey.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/_toSource.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/_toSource.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzP2RjNTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/_toSource.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/eq.js": + /*!***********************************!*\ + !*** ./node_modules/lodash/eq.js ***! + \***********************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanM/OTYzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/eq.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/filter.js": + /*!***************************************!*\ + !*** ./node_modules/lodash/filter.js ***! + \***************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var arrayFilter = __webpack_require__(/*! ./_arrayFilter */ \"./node_modules/lodash/_arrayFilter.js\"),\n baseFilter = __webpack_require__(/*! ./_baseFilter */ \"./node_modules/lodash/_baseFilter.js\"),\n baseIteratee = __webpack_require__(/*! ./_baseIteratee */ \"./node_modules/lodash/_baseIteratee.js\"),\n isArray = __webpack_require__(/*! ./isArray */ \"./node_modules/lodash/isArray.js\");\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmlsdGVyLmpzPzkzODAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsNkRBQWdCO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFlO0FBQ3hDLG1CQUFtQixtQkFBTyxDQUFDLCtEQUFpQjtBQUM1QyxjQUFjLG1CQUFPLENBQUMsbURBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxTQUFTO0FBQ3BCLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sOENBQThDO0FBQ3BELE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0NBQWdDLGtCQUFrQixFQUFFO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw0QkFBNEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxZQUFZO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmlsdGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBiYXNlRmlsdGVyID0gcmVxdWlyZSgnLi9fYmFzZUZpbHRlcicpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5yZW1vdmVgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqIEBzZWUgXy5yZWplY3RcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIF8uZmlsdGVyKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gQ29tYmluaW5nIHNldmVyYWwgcHJlZGljYXRlcyB1c2luZyBgXy5vdmVyRXZlcnlgIG9yIGBfLm92ZXJTb21lYC5cbiAqIF8uZmlsdGVyKHVzZXJzLCBfLm92ZXJTb21lKFt7ICdhZ2UnOiAzNiB9LCBbJ2FnZScsIDQwXV0pKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdiYXJuZXknXVxuICovXG5mdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbHRlcjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/filter.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/get.js": + /*!************************************!*\ + !*** ./node_modules/lodash/get.js ***! + \************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseGet = __webpack_require__(/*! ./_baseGet */ \"./node_modules/lodash/_baseGet.js\");\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzPzliMDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLHFEQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsYUFBYTtBQUN4QixXQUFXLEVBQUU7QUFDYixhQUFhLEVBQUU7QUFDZjtBQUNBO0FBQ0EsaUJBQWlCLFFBQVEsT0FBTyxTQUFTLEVBQUU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/get.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/hasIn.js": + /*!**************************************!*\ + !*** ./node_modules/lodash/hasIn.js ***! + \**************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseHasIn = __webpack_require__(/*! ./_baseHasIn */ \"./node_modules/lodash/_baseHasIn.js\"),\n hasPath = __webpack_require__(/*! ./_hasPath */ \"./node_modules/lodash/_hasPath.js\");\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzSW4uanM/ODYwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyx5REFBYztBQUN0QyxjQUFjLG1CQUFPLENBQUMscURBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsYUFBYTtBQUN4QixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0IsU0FBUyxHQUFHO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9oYXNJbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/hasIn.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/identity.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/identity.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanM/Y2Q5ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsRUFBRTtBQUNmO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGl0eTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/identity.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isArguments.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/isArguments.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseIsArguments = __webpack_require__(/*! ./_baseIsArguments */ \"./node_modules/lodash/_baseIsArguments.js\"),\n isObjectLike = __webpack_require__(/*! ./isObjectLike */ \"./node_modules/lodash/isObjectLike.js\");\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanM/ZDM3MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0IsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDbEQsbUJBQW1CLG1CQUFPLENBQUMsNkRBQWdCOztBQUUzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsa0JBQWtCLEVBQUU7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxrQkFBa0IsRUFBRTtBQUNsRTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/isArguments.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isArray.js": + /*!****************************************!*\ + !*** ./node_modules/lodash/isArray.js ***! + \****************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcz82NzQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/isArray.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isArrayLike.js": + /*!********************************************!*\ + !*** ./node_modules/lodash/isArrayLike.js ***! + \********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var isFunction = __webpack_require__(/*! ./isFunction */ \"./node_modules/lodash/isFunction.js\"),\n isLength = __webpack_require__(/*! ./isLength */ \"./node_modules/lodash/isLength.js\");\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanM/MzBjOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUIsbUJBQU8sQ0FBQyx5REFBYztBQUN2QyxlQUFlLG1CQUFPLENBQUMscURBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/isArrayLike.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isBuffer.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/isBuffer.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + '/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"),\n stubFalse = __webpack_require__(/*! ./stubFalse */ "./node_modules/lodash/stubFalse.js");\n\n/** Detect free variable `exports`. */\nvar freeExports = true && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == \'object\' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanM/MGQyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBVyxtQkFBTyxDQUFDLCtDQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLHVEQUFhOztBQUVyQztBQUNBLGtCQUFrQixLQUEwQjs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/isBuffer.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isFunction.js": + /*!*******************************************!*\ + !*** ./node_modules/lodash/isFunction.js ***! + \*******************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ \"./node_modules/lodash/_baseGetTag.js\"),\n isObject = __webpack_require__(/*! ./isObject */ \"./node_modules/lodash/isObject.js\");\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcz85NTIwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFlO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyxxREFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/isFunction.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isLength.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/isLength.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanM/YjIxOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/isLength.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isObject.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/isObject.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanM/MWE4YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/lodash/isObject.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isObjectLike.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/isObjectLike.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzPzEzMTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/isObjectLike.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isSymbol.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/isSymbol.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ \"./node_modules/lodash/_baseGetTag.js\"),\n isObjectLike = __webpack_require__(/*! ./isObjectLike */ \"./node_modules/lodash/isObjectLike.js\");\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanM/ZmZkNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUIsbUJBQU8sQ0FBQywyREFBZTtBQUN4QyxtQkFBbUIsbUJBQU8sQ0FBQyw2REFBZ0I7O0FBRTNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/isSymbol.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/isTypedArray.js": + /*!*********************************************!*\ + !*** ./node_modules/lodash/isTypedArray.js ***! + \*********************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var baseIsTypedArray = __webpack_require__(/*! ./_baseIsTypedArray */ "./node_modules/lodash/_baseIsTypedArray.js"),\n baseUnary = __webpack_require__(/*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"),\n nodeUtil = __webpack_require__(/*! ./_nodeUtil */ "./node_modules/lodash/_nodeUtil.js");\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzPzczYWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3BELGdCQUFnQixtQkFBTyxDQUFDLHlEQUFjO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyx1REFBYTs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/isTypedArray.js\n' + ); + + /***/ + }, + + /***/ "./node_modules/lodash/keys.js": + /*!*************************************!*\ + !*** ./node_modules/lodash/keys.js ***! + \*************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var arrayLikeKeys = __webpack_require__(/*! ./_arrayLikeKeys */ \"./node_modules/lodash/_arrayLikeKeys.js\"),\n baseKeys = __webpack_require__(/*! ./_baseKeys */ \"./node_modules/lodash/_baseKeys.js\"),\n isArrayLike = __webpack_require__(/*! ./isArrayLike */ \"./node_modules/lodash/isArrayLike.js\");\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcz9lYzY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQixtQkFBTyxDQUFDLGlFQUFrQjtBQUM5QyxlQUFlLG1CQUFPLENBQUMsdURBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsMkRBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/keys.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/memoize.js": + /*!****************************************!*\ + !*** ./node_modules/lodash/memoize.js ***! + \****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var MapCache = __webpack_require__(/*! ./_MapCache */ \"./node_modules/lodash/_MapCache.js\");\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcz9lMzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyx1REFBYTs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/memoize.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/orderBy.js": + /*!****************************************!*\ + !*** ./node_modules/lodash/orderBy.js ***! + \****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseOrderBy = __webpack_require__(/*! ./_baseOrderBy */ \"./node_modules/lodash/_baseOrderBy.js\"),\n isArray = __webpack_require__(/*! ./isArray */ \"./node_modules/lodash/isArray.js\");\n\n/**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\nfunction orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n}\n\nmodule.exports = orderBy;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb3JkZXJCeS5qcz85M2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQixtQkFBTyxDQUFDLDZEQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsbURBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcscUNBQXFDO0FBQ2hEO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFlBQVksT0FBTztBQUNuQixhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0EsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTSw4QkFBOEI7QUFDcEMsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2xvZGFzaC9vcmRlckJ5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VPcmRlckJ5ID0gcmVxdWlyZSgnLi9fYmFzZU9yZGVyQnknKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0QnlgIGV4Y2VwdCB0aGF0IGl0IGFsbG93cyBzcGVjaWZ5aW5nIHRoZSBzb3J0XG4gKiBvcmRlcnMgb2YgdGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlc1xuICogYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuIE90aGVyd2lzZSwgc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3JcbiAqIGRlc2NlbmRpbmcgb3IgXCJhc2NcIiBmb3IgYXNjZW5kaW5nIHNvcnQgb3JkZXIgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7QXJyYXlbXXxGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbb3JkZXJzXSBUaGUgc29ydCBvcmRlcnMgb2YgYGl0ZXJhdGVlc2AuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQ4IH0sXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH0sXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAqIF07XG4gKlxuICogLy8gU29ydCBieSBgdXNlcmAgaW4gYXNjZW5kaW5nIG9yZGVyIGFuZCBieSBgYWdlYCBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICogXy5vcmRlckJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10sIFsnYXNjJywgJ2Rlc2MnXSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDQwXV1cbiAqL1xuZnVuY3Rpb24gb3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycywgZ3VhcmQpIHtcbiAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoIWlzQXJyYXkoaXRlcmF0ZWVzKSkge1xuICAgIGl0ZXJhdGVlcyA9IGl0ZXJhdGVlcyA9PSBudWxsID8gW10gOiBbaXRlcmF0ZWVzXTtcbiAgfVxuICBvcmRlcnMgPSBndWFyZCA/IHVuZGVmaW5lZCA6IG9yZGVycztcbiAgaWYgKCFpc0FycmF5KG9yZGVycykpIHtcbiAgICBvcmRlcnMgPSBvcmRlcnMgPT0gbnVsbCA/IFtdIDogW29yZGVyc107XG4gIH1cbiAgcmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvcmRlckJ5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/orderBy.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/property.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/property.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseProperty = __webpack_require__(/*! ./_baseProperty */ \"./node_modules/lodash/_baseProperty.js\"),\n basePropertyDeep = __webpack_require__(/*! ./_basePropertyDeep */ \"./node_modules/lodash/_basePropertyDeep.js\"),\n isKey = __webpack_require__(/*! ./_isKey */ \"./node_modules/lodash/_isKey.js\"),\n toKey = __webpack_require__(/*! ./_toKey */ \"./node_modules/lodash/_toKey.js\");\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanM/ZjljZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQywrREFBaUI7QUFDNUMsdUJBQXVCLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyxpREFBVTtBQUM5QixZQUFZLG1CQUFPLENBQUMsaURBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQSxNQUFNLE9BQU8sU0FBUyxFQUFFO0FBQ3hCLE1BQU0sT0FBTyxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL3Byb3BlcnR5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJhc2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eScpLFxuICAgIGJhc2VQcm9wZXJ0eURlZXAgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHlEZWVwJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3BlcnR5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/property.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/stubArray.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/stubArray.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzP2QzMjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJBcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkFycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/lodash/stubArray.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/stubFalse.js": + /*!******************************************!*\ + !*** ./node_modules/lodash/stubFalse.js ***! + \******************************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzPzA3YzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/stubFalse.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/lodash/toString.js": + /*!*****************************************!*\ + !*** ./node_modules/lodash/toString.js ***! + \*****************************************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + "var baseToString = __webpack_require__(/*! ./_baseToString */ \"./node_modules/lodash/_baseToString.js\");\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanM/NzZkZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQywrREFBaUI7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/lodash/toString.js\n" + ); + + /***/ + }, + + /***/ "./node_modules/webpack/buildin/module.js": + /*!***********************************!*\ + !*** (webpack)/buildin/module.js ***! + \***********************************/ + /*! no static exports found */ + /***/ function (module, exports) { + eval( + 'module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, "loaded", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "id", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanM/Y2VkMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/module.js\n' + ); + + /***/ + }, + + /***/ "./src/CallObjectLoader.js": + /*!*********************************!*\ + !*** ./src/CallObjectLoader.js ***! + \*********************************/ + /*! exports provided: default */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + '__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CallObjectLoader; });\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_wrapNativeSuper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/wrapNativeSuper */ "./node_modules/@babel/runtime/helpers/wrapNativeSuper.js");\n/* harmony import */ var _babel_runtime_helpers_wrapNativeSuper__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_wrapNativeSuper__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _shared_with_pluot_core_Environment__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./shared-with-pluot-core/Environment */ "./src/shared-with-pluot-core/Environment.js");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils */ "./src/utils.js");\n\n\n\n\n\n\n\n\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n\n\n\nfunction prepareDailyConfig(callFrameId, avoidEval) {\n // Add a global callFrameId so we can have both iframes and one\n // call object mode calls live at the same time\n if (!window._dailyConfig) {\n window._dailyConfig = {};\n }\n\n window._dailyConfig.callFrameId = callFrameId;\n window._dailyConfig.avoidEval = avoidEval;\n}\n\nvar CallObjectLoader = /*#__PURE__*/function () {\n function CallObjectLoader() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6___default()(this, CallObjectLoader);\n\n this._currentLoad = null;\n }\n /**\n * Loads the call object bundle (if needed), then invokes the callback\n * function, which takes one boolean argument whose value is true if the\n * load was a no-op.\n *\n * No-op loads can happen when leaving a meeting and then later joining one.\n * Since the call object bundle sets up global state in the same scope as the\n * app code consuming it, it only needs to be loaded and executed once ever.\n *\n * @param callFrameId A string identifying this "call frame", to distinguish it\n * from other iframe-based calls for message channel purposes.\n * @param avoidEval Whether to use the new eval-less loading mechanism on web\n * (LoadAttempt_Web) instead of the legacy loading mechanism\n * (LoadAttempt_ReactNative).\n * @param successCallback Callback function that takes a wasNoOp argument\n * (true if call object script was ever loaded once before).\n * @param failureCallback Callback function that takes an error message and a\n * boolean indicating whether an automatic retry is slated to occur.\n */\n\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7___default()(CallObjectLoader, [{\n key: "load",\n value: function load(callFrameId, avoidEval, successCallback, failureCallback) {\n if (this.loaded) {\n window._dailyCallObjectSetup(callFrameId);\n\n successCallback(true); // true = "this load() was a no-op"\n\n return;\n }\n\n prepareDailyConfig(callFrameId, avoidEval); // Cancel current load, if any\n\n this._currentLoad && this._currentLoad.cancel(); // Start a new load\n\n this._currentLoad = new LoadOperation(function () {\n successCallback(false); // false = "this load() wasn\'t a no-op"\n }, failureCallback);\n\n this._currentLoad.start();\n }\n /**\n * Cancel loading the call object bundle. No callbacks will be invoked.\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._currentLoad && this._currentLoad.cancel();\n }\n /**\n * Returns a boolean indicating whether the call object bundle has been\n * loaded and executed.\n */\n\n }, {\n key: "loaded",\n get: function get() {\n return this._currentLoad && this._currentLoad.succeeded;\n }\n }]);\n\n return CallObjectLoader;\n}();\n\n\nvar LOAD_ATTEMPTS = 3;\nvar LOAD_ATTEMPT_DELAY = 3 * 1000;\n/**\n * Represents a call machine bundle load.\n *\n * Since a load may fail, it may need to retry a few times. It delegates each\n * attempt to the LoadAttempt class.\n */\n\nvar LoadOperation = /*#__PURE__*/function () {\n // Here failureCallback takes the same parameters as CallObjectLoader.load,\n // and successCallback takes no parameters.\n function LoadOperation(successCallback, failureCallback) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6___default()(this, LoadOperation);\n\n this._attemptsRemaining = LOAD_ATTEMPTS;\n this._currentAttempt = null;\n this._successCallback = successCallback;\n this._failureCallback = failureCallback;\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7___default()(LoadOperation, [{\n key: "start",\n value: function start() {\n var _this = this;\n\n // Bail if this load has already started\n if (this._currentAttempt) {\n return;\n } // console.log("[LoadOperation] starting...");\n\n\n var retryOrFailureCallback = function retryOrFailureCallback(errorMessage) {\n if (_this._currentAttempt.cancelled) {\n // console.log("[LoadOperation] cancelled");\n return;\n }\n\n _this._attemptsRemaining--;\n\n _this._failureCallback(errorMessage, _this._attemptsRemaining > 0); // true = "will retry"\n\n\n if (_this._attemptsRemaining <= 0) {\n // Should never be <0, but just being extra careful here\n // console.log("[LoadOperation] ran out of attempts");\n return;\n }\n\n setTimeout(function () {\n if (_this._currentAttempt.cancelled) {\n // console.log("[LoadOperation] cancelled");\n return;\n }\n\n _this._currentAttempt = new LoadAttempt(_this._successCallback, retryOrFailureCallback);\n\n _this._currentAttempt.start();\n }, LOAD_ATTEMPT_DELAY);\n };\n\n this._currentAttempt = new LoadAttempt(this._successCallback, retryOrFailureCallback);\n\n this._currentAttempt.start();\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._currentAttempt && this._currentAttempt.cancel();\n }\n }, {\n key: "cancelled",\n get: function get() {\n return this._currentAttempt && this._currentAttempt.cancelled;\n }\n }, {\n key: "succeeded",\n get: function get() {\n return this._currentAttempt && this._currentAttempt.succeeded;\n }\n }]);\n\n return LoadOperation;\n}();\n\nvar LoadAttemptAbortedError = /*#__PURE__*/function (_Error) {\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_2___default()(LoadAttemptAbortedError, _Error);\n\n var _super = _createSuper(LoadAttemptAbortedError);\n\n function LoadAttemptAbortedError() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6___default()(this, LoadAttemptAbortedError);\n\n return _super.apply(this, arguments);\n }\n\n return LoadAttemptAbortedError;\n}( /*#__PURE__*/_babel_runtime_helpers_wrapNativeSuper__WEBPACK_IMPORTED_MODULE_5___default()(Error));\n\nvar LOAD_ATTEMPT_NETWORK_TIMEOUT = 20 * 1000;\n/**\n * Represents a single call machine bundle load attempt.\n *\n * The LoadOperation does the heavy lifting in terms of coordinating different\n * LoadAttempts (i.e. kicking off retries and handling interruptions by, say, a\n * user calling leave()). It will ask each LoadAttempt to start() and, if\n * necessary, cancel().\n *\n * The LoadAttempt itself only needs to concern itself with obeying those\n * requests, invoking the success or failure callbacks at the end of an attempt,\n * and setting its cancelled and succeeded flags as appropriate.\n *\n * Since we support running both on Web and React Native and there are slightly\n * different constraints on each, there are two different implementations of\n * LoadAttempt:\n * - On Web, we use an HTMLScriptElement to load the bundle in order\n * to allow our users to set a CSP (Content Security Policy) without\n * \'unsafe-eval\'. The alternative would be using fetch() + Function()/eval().\n * - On React Native, we use fetch() + Function(). There is no HTMLScriptElement\n * in React Native and also no CSP consideration to contend with.\n */\n\nvar LoadAttempt = /*#__PURE__*/function () {\n function LoadAttempt(successCallback, failureCallback) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6___default()(this, LoadAttempt);\n\n this._loadAttemptImpl = Object(_shared_with_pluot_core_Environment__WEBPACK_IMPORTED_MODULE_8__["isReactNative"])() || !_dailyConfig.avoidEval ? new LoadAttempt_ReactNative(successCallback, failureCallback) : new LoadAttempt_Web(successCallback, failureCallback);\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7___default()(LoadAttempt, [{\n key: "start",\n value: function () {\n var _start = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n return this._loadAttemptImpl.start();\n });\n\n function start() {\n return _start.apply(this, arguments);\n }\n\n return start;\n }()\n }, {\n key: "cancel",\n value: function cancel() {\n this._loadAttemptImpl.cancel();\n }\n }, {\n key: "cancelled",\n get: function get() {\n return this._loadAttemptImpl.cancelled;\n }\n }, {\n key: "succeeded",\n get: function get() {\n return this._loadAttemptImpl.succeeded;\n }\n }]);\n\n return LoadAttempt;\n}();\n/**\n * Represents a single call machine bundle load attempt in React Native.\n *\n * NOTE: this is also the legacy web code path, when avoidEval is not set.\n */\n\n\nvar LoadAttempt_ReactNative = /*#__PURE__*/function () {\n // Here successCallback takes no parameters, and failureCallback takes a\n // single error message parameter.\n function LoadAttempt_ReactNative(successCallback, failureCallback) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6___default()(this, LoadAttempt_ReactNative);\n\n this.cancelled = false;\n this.succeeded = false;\n this._networkTimedOut = false;\n this._networkTimeout = null;\n this._iosCache = typeof iOSCallObjectBundleCache !== \'undefined\' && iOSCallObjectBundleCache;\n this._refetchHeaders = null;\n this._successCallback = successCallback;\n this._failureCallback = failureCallback;\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7___default()(LoadAttempt_ReactNative, [{\n key: "start",\n value: function () {\n var _start2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n // console.log("[LoadAttempt_ReactNative] starting...");\n var url = Object(_utils__WEBPACK_IMPORTED_MODULE_9__["callObjectBundleUrl"])();\n var loadedFromIOSCache = yield this._tryLoadFromIOSCache(url);\n !loadedFromIOSCache && this._loadFromNetwork(url);\n });\n\n function start() {\n return _start2.apply(this, arguments);\n }\n\n return start;\n }()\n }, {\n key: "cancel",\n value: function cancel() {\n clearTimeout(this._networkTimeout);\n this.cancelled = true;\n }\n /**\n * Try to load the call object bundle from the iOS cache.\n * This is a React Native-specific workaround for the fact that the iOS HTTP\n * cache won\'t cache the call object bundle due to size.\n *\n * @param {string} url The url of the call object bundle to try to load.\n * @returns A Promise that resolves to false if the load failed or true\n * otherwise (if it succeeded or was cancelled), indicating whether a network\n * load attempt is needed.\n */\n\n }, {\n key: "_tryLoadFromIOSCache",\n value: function () {\n var _tryLoadFromIOSCache2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (url) {\n // console.log("[LoadAttempt_ReactNative] trying to load from iOS cache...");\n // Bail if we\'re not running in iOS\n if (!this._iosCache) {\n // console.log("[LoadAttempt_ReactNative] not iOS, so not checking iOS cache");\n return false;\n }\n\n try {\n var cacheResponse = yield this._iosCache.get(url); // If load has been cancelled, report work complete (no network load\n // needed)\n\n if (this.cancelled) {\n return true;\n } // If cache miss, report failure (network load needed)\n\n\n if (!cacheResponse) {\n // console.log("[LoadAttempt_ReactNative] iOS cache miss");\n return false;\n } // If cache expired, store refetch headers to use later and report\n // failure (network load needed)\n\n\n if (!cacheResponse.code) {\n // console.log(\n // "[LoadAttempt_ReactNative] iOS cache expired, setting refetch headers",\n // cacheResponse.refetchHeaders\n // );\n this._refetchHeaders = cacheResponse.refetchHeaders;\n return false;\n } // Cache is fresh, so run code and success callback, and report work\n // complete (no network load needed)\n // console.log("[LoadAttempt_ReactNative] iOS cache hit");\n\n\n Function(\'"use strict";\' + cacheResponse.code)();\n this.succeeded = true;\n\n this._successCallback();\n\n return true;\n } catch (e) {\n // Report failure\n // console.log("[LoadAttempt_ReactNative] failure running bundle from iOS cache", e);\n return false;\n }\n });\n\n function _tryLoadFromIOSCache(_x) {\n return _tryLoadFromIOSCache2.apply(this, arguments);\n }\n\n return _tryLoadFromIOSCache;\n }()\n /**\n * Try to load the call object bundle from the network.\n * @param {string} url The url of the call object bundle to load.\n */\n\n }, {\n key: "_loadFromNetwork",\n value: function () {\n var _loadFromNetwork2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (url) {\n var _this2 = this;\n\n // console.log("[LoadAttempt_ReactNative] trying to load from network...");\n this._networkTimeout = setTimeout(function () {\n _this2._networkTimedOut = true;\n\n _this2._failureCallback("Timed out (>".concat(LOAD_ATTEMPT_NETWORK_TIMEOUT, " ms) when loading call object bundle ").concat(url));\n }, LOAD_ATTEMPT_NETWORK_TIMEOUT);\n\n try {\n var fetchOptions = this._refetchHeaders ? {\n headers: this._refetchHeaders\n } : {};\n var response = yield fetch(url, fetchOptions);\n clearTimeout(this._networkTimeout); // Check that load wasn\'t cancelled or timed out during fetch\n\n if (this.cancelled || this._networkTimedOut) {\n throw new LoadAttemptAbortedError();\n }\n\n var code = yield this._getBundleCodeFromResponse(url, response); // Check again that load wasn\'t cancelled during reading response\n\n if (this.cancelled) {\n throw new LoadAttemptAbortedError();\n } // Execute bundle code\n\n\n Function(\'"use strict";\' + code)(); // Since code ran successfully (no errors thrown), cache it and call\n // success callback\n // console.log("[LoadAttempt_ReactNative] succeeded...");\n\n this._iosCache && this._iosCache.set(url, code, response.headers);\n this.succeeded = true;\n\n this._successCallback();\n } catch (e) {\n clearTimeout(this._networkTimeout); // We need to check all these conditions since long outstanding\n // requests can fail *after* cancellation or timeout (i.e. checking for\n // LoadAttemptAbortedError is not enough).\n\n if (e instanceof LoadAttemptAbortedError || this.cancelled || this._networkTimedOut) {\n // console.log("[LoadAttempt_ReactNative] cancelled or timed out");\n return;\n }\n\n this._failureCallback("Failed to load call object bundle ".concat(url, ": ").concat(e));\n }\n });\n\n function _loadFromNetwork(_x2) {\n return _loadFromNetwork2.apply(this, arguments);\n }\n\n return _loadFromNetwork;\n }()\n }, {\n key: "_getBundleCodeFromResponse",\n value: function () {\n var _getBundleCodeFromResponse2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (url, response) {\n // Normal success case\n if (response.ok) {\n return yield response.text();\n } // React Native iOS-specific case: 304 Not-Modified response\n // (Since we\'re doing manual cache management for iOS, the fetch mechanism\n // doesn\'t opaquely handle 304s for us)\n\n\n if (this._iosCache && response.status === 304) {\n var cacheResponse = yield this._iosCache.renew(url, response.headers);\n return cacheResponse.code;\n }\n\n throw new Error("Received ".concat(response.status, " response"));\n });\n\n function _getBundleCodeFromResponse(_x3, _x4) {\n return _getBundleCodeFromResponse2.apply(this, arguments);\n }\n\n return _getBundleCodeFromResponse;\n }()\n }]);\n\n return LoadAttempt_ReactNative;\n}();\n/**\n * Represents a single call machine bundle load attempt on Web.\n *\n * While this attempt is active - that is, it hasn\'t been cancelled or hasn\'t\n * timed out - it signs itself up to be on a global "call machine load\n * waitlist", which represents the set of load attempts that want the call\n * machine to finish loading.\n *\n * Because...\n * a) ..."finishing loading" is something that happens on the call machine\n * bundle side (i.e. not in this code) once it\'s been downloaded and is\n * executing, and...\n * b) ...we actually *can\'t* stop the call machine bundle from running after an\n * attempt has been cancelled or timed out, if the bundle finishes\n * downloading (HTMLScriptElement doesn\'t have a cancel() method)...\n * ...we need a way of telling the call machine bundle "hey someone\'s still\n * interested in you loading".\n *\n * Note that there really shouldn\'t be more than one active load attempt at a\n * time. But this load attempt doesn\'t know that! Hence the waitlist being a\n * Set() and each attempt being responsible only for adding/removing itself from\n * the waitlist. This approach - as opposed to a global boolean or counter -\n * felt like the most bulletproof (i.e. future- and race-condition-proof) way\n * of implementing this synchronization.\n */\n\n\nvar LoadAttempt_Web = /*#__PURE__*/function () {\n function LoadAttempt_Web(successCallback, failureCallback) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_6___default()(this, LoadAttempt_Web);\n\n this.cancelled = false;\n this.succeeded = false;\n this._successCallback = successCallback;\n this._failureCallback = failureCallback;\n this._attemptId = Object(_utils__WEBPACK_IMPORTED_MODULE_9__["randomStringId"])();\n this._networkTimeout = null;\n this._scriptElement = null;\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_7___default()(LoadAttempt_Web, [{\n key: "start",\n value: function () {\n var _start3 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n // Initialize global state tracking active load attempts\n if (!window._dailyCallMachineLoadWaitlist) {\n window._dailyCallMachineLoadWaitlist = new Set();\n } // Get call machine bundle URL\n\n\n var url = Object(_utils__WEBPACK_IMPORTED_MODULE_9__["callObjectBundleUrl"])(); // Sanity check that we\'re running in a DOM/web context\n\n if ((typeof document === "undefined" ? "undefined" : _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(document)) !== \'object\') {\n this._failureCallback("Call object bundle must be loaded in a DOM/web context");\n\n return;\n }\n\n this._startLoading(url);\n });\n\n function start() {\n return _start3.apply(this, arguments);\n }\n\n return start;\n }()\n }, {\n key: "cancel",\n value: function cancel() {\n // console.log(\'[LoadAttempt_Web] cancelled\');\n this._stopLoading();\n\n this.cancelled = true;\n }\n }, {\n key: "_startLoading",\n value: function _startLoading(url) {\n var _this3 = this;\n\n // console.log(\'[LoadAttempt_Web] trying to load...\');\n this._signUpForCallMachineLoadWaitlist(); // Start a timeout, after which we\'ll consider this attempt a failure\n\n\n this._networkTimeout = setTimeout(function () {\n // console.log(\'[LoadAttempt_Web] timed out\');\n _this3._stopLoading();\n\n _this3._failureCallback("Timed out (>".concat(LOAD_ATTEMPT_NETWORK_TIMEOUT, " ms) when loading call object bundle ").concat(url));\n }, LOAD_ATTEMPT_NETWORK_TIMEOUT); // Create a script tag to download the call machine bundle\n\n var head = document.getElementsByTagName(\'head\')[0],\n script = document.createElement(\'script\');\n this._scriptElement = script; // On load, consider this attempt a success\n\n script.onload = /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n // console.log(\'[LoadAttempt_Web] succeeded\');\n _this3._stopLoading();\n\n _this3.succeeded = true;\n\n _this3._successCallback();\n }); // On error, consider this attempt a failure\n\n script.onerror = /*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (e) {\n // console.log(\'[LoadAttempt_Web] failed\');\n _this3._stopLoading();\n\n _this3._failureCallback("Failed to load call object bundle ".concat(e.target.src));\n });\n\n return function (_x5) {\n return _ref2.apply(this, arguments);\n };\n }(); // Start the download\n\n\n script.src = url;\n head.appendChild(script);\n }\n }, {\n key: "_stopLoading",\n value: function _stopLoading() {\n this._withdrawFromCallMachineLoadWaitlist();\n\n clearTimeout(this._networkTimeout);\n\n if (this._scriptElement) {\n this._scriptElement.onload = null;\n this._scriptElement.onerror = null;\n }\n }\n }, {\n key: "_signUpForCallMachineLoadWaitlist",\n value: function _signUpForCallMachineLoadWaitlist() {\n window._dailyCallMachineLoadWaitlist.add(this._attemptId);\n }\n }, {\n key: "_withdrawFromCallMachineLoadWaitlist",\n value: function _withdrawFromCallMachineLoadWaitlist() {\n window._dailyCallMachineLoadWaitlist.delete(this._attemptId);\n }\n }]);\n\n return LoadAttempt_Web;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9DYWxsT2JqZWN0TG9hZGVyLmpzPzIxNGUiXSwibmFtZXMiOlsicHJlcGFyZURhaWx5Q29uZmlnIiwiY2FsbEZyYW1lSWQiLCJhdm9pZEV2YWwiLCJ3aW5kb3ciLCJfZGFpbHlDb25maWciLCJDYWxsT2JqZWN0TG9hZGVyIiwiX2N1cnJlbnRMb2FkIiwic3VjY2Vzc0NhbGxiYWNrIiwiZmFpbHVyZUNhbGxiYWNrIiwibG9hZGVkIiwiX2RhaWx5Q2FsbE9iamVjdFNldHVwIiwiY2FuY2VsIiwiTG9hZE9wZXJhdGlvbiIsInN0YXJ0Iiwic3VjY2VlZGVkIiwiTE9BRF9BVFRFTVBUUyIsIkxPQURfQVRURU1QVF9ERUxBWSIsIl9hdHRlbXB0c1JlbWFpbmluZyIsIl9jdXJyZW50QXR0ZW1wdCIsIl9zdWNjZXNzQ2FsbGJhY2siLCJfZmFpbHVyZUNhbGxiYWNrIiwicmV0cnlPckZhaWx1cmVDYWxsYmFjayIsImVycm9yTWVzc2FnZSIsImNhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJMb2FkQXR0ZW1wdCIsIkxvYWRBdHRlbXB0QWJvcnRlZEVycm9yIiwiRXJyb3IiLCJMT0FEX0FUVEVNUFRfTkVUV09SS19USU1FT1VUIiwiX2xvYWRBdHRlbXB0SW1wbCIsImlzUmVhY3ROYXRpdmUiLCJMb2FkQXR0ZW1wdF9SZWFjdE5hdGl2ZSIsIkxvYWRBdHRlbXB0X1dlYiIsIl9uZXR3b3JrVGltZWRPdXQiLCJfbmV0d29ya1RpbWVvdXQiLCJfaW9zQ2FjaGUiLCJpT1NDYWxsT2JqZWN0QnVuZGxlQ2FjaGUiLCJfcmVmZXRjaEhlYWRlcnMiLCJ1cmwiLCJjYWxsT2JqZWN0QnVuZGxlVXJsIiwibG9hZGVkRnJvbUlPU0NhY2hlIiwiX3RyeUxvYWRGcm9tSU9TQ2FjaGUiLCJfbG9hZEZyb21OZXR3b3JrIiwiY2xlYXJUaW1lb3V0IiwiY2FjaGVSZXNwb25zZSIsImdldCIsImNvZGUiLCJyZWZldGNoSGVhZGVycyIsIkZ1bmN0aW9uIiwiZSIsImZldGNoT3B0aW9ucyIsImhlYWRlcnMiLCJyZXNwb25zZSIsImZldGNoIiwiX2dldEJ1bmRsZUNvZGVGcm9tUmVzcG9uc2UiLCJzZXQiLCJvayIsInRleHQiLCJzdGF0dXMiLCJyZW5ldyIsIl9hdHRlbXB0SWQiLCJyYW5kb21TdHJpbmdJZCIsIl9zY3JpcHRFbGVtZW50IiwiX2RhaWx5Q2FsbE1hY2hpbmVMb2FkV2FpdGxpc3QiLCJTZXQiLCJkb2N1bWVudCIsIl9zdGFydExvYWRpbmciLCJfc3RvcExvYWRpbmciLCJfc2lnblVwRm9yQ2FsbE1hY2hpbmVMb2FkV2FpdGxpc3QiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzY3JpcHQiLCJjcmVhdGVFbGVtZW50Iiwib25sb2FkIiwib25lcnJvciIsInRhcmdldCIsInNyYyIsImFwcGVuZENoaWxkIiwiX3dpdGhkcmF3RnJvbUNhbGxNYWNoaW5lTG9hZFdhaXRsaXN0IiwiYWRkIiwiZGVsZXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVNBLGtCQUFULENBQTRCQyxXQUE1QixFQUF5Q0MsU0FBekMsRUFBb0Q7QUFDbEQ7QUFDQTtBQUNBLE1BQUksQ0FBQ0MsTUFBTSxDQUFDQyxZQUFaLEVBQTBCO0FBQ3hCRCxVQUFNLENBQUNDLFlBQVAsR0FBc0IsRUFBdEI7QUFDRDs7QUFDREQsUUFBTSxDQUFDQyxZQUFQLENBQW9CSCxXQUFwQixHQUFrQ0EsV0FBbEM7QUFDQUUsUUFBTSxDQUFDQyxZQUFQLENBQW9CRixTQUFwQixHQUFnQ0EsU0FBaEM7QUFDRDs7SUFFb0JHLGdCO0FBQ25CLDhCQUFjO0FBQUE7O0FBQ1osU0FBS0MsWUFBTCxHQUFvQixJQUFwQjtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O3lCQUNPTCxX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LENBQUNFLE1BQVAsK0ZBQWdCLGFBQVk7QUFDMUI7QUFDQSxjQUFJLENBQUNOLFlBQUw7O0FBQ0EsY0FBSSxDQUFDckQsU0FBTCxHQUFpQixJQUFqQjs7QUFDQSxjQUFJLENBQUNLLGdCQUFMO0FBQ0QsT0FMRCxFQW5CaUIsQ0EwQmpCOztBQUNBb0QsWUFBTSxDQUFDRyxPQUFQO0FBQUEsbUdBQWlCLFdBQU96QixDQUFQLEVBQWE7QUFDNUI7QUFDQSxnQkFBSSxDQUFDa0IsWUFBTDs7QUFDQSxnQkFBSSxDQUFDL0MsZ0JBQUwsNkNBQ3VDNkIsQ0FBQyxDQUFDMEIsTUFBRixDQUFTQyxHQURoRDtBQUdELFNBTkQ7O0FBQUE7QUFBQTtBQUFBO0FBQUEsVUEzQmlCLENBbUNqQjs7O0FBQ0FMLFlBQU0sQ0FBQ0ssR0FBUCxHQUFhdEMsR0FBYjtBQUNBK0IsVUFBSSxDQUFDUSxXQUFMLENBQWlCTixNQUFqQjtBQUNEOzs7bUNBRWM7QUFDYixXQUFLTyxvQ0FBTDs7QUFDQW5DLGtCQUFZLENBQUMsS0FBS1QsZUFBTixDQUFaOztBQUNBLFVBQUksS0FBSzRCLGNBQVQsRUFBeUI7QUFDdkIsYUFBS0EsY0FBTCxDQUFvQlcsTUFBcEIsR0FBNkIsSUFBN0I7QUFDQSxhQUFLWCxjQUFMLENBQW9CWSxPQUFwQixHQUE4QixJQUE5QjtBQUNEO0FBQ0Y7Ozt3REFFbUM7QUFDbEN2RSxZQUFNLENBQUM0RCw2QkFBUCxDQUFxQ2dCLEdBQXJDLENBQXlDLEtBQUtuQixVQUE5QztBQUNEOzs7MkRBRXNDO0FBQ3JDekQsWUFBTSxDQUFDNEQsNkJBQVAsQ0FBcUNpQixNQUFyQyxDQUE0QyxLQUFLcEIsVUFBakQ7QUFDRCIsImZpbGUiOiIuL3NyYy9DYWxsT2JqZWN0TG9hZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNSZWFjdE5hdGl2ZSB9IGZyb20gJy4vc2hhcmVkLXdpdGgtcGx1b3QtY29yZS9FbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBjYWxsT2JqZWN0QnVuZGxlVXJsLCByYW5kb21TdHJpbmdJZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5mdW5jdGlvbiBwcmVwYXJlRGFpbHlDb25maWcoY2FsbEZyYW1lSWQsIGF2b2lkRXZhbCkge1xuICAvLyBBZGQgYSBnbG9iYWwgY2FsbEZyYW1lSWQgc28gd2UgY2FuIGhhdmUgYm90aCBpZnJhbWVzIGFuZCBvbmVcbiAgLy8gY2FsbCBvYmplY3QgbW9kZSBjYWxscyBsaXZlIGF0IHRoZSBzYW1lIHRpbWVcbiAgaWYgKCF3aW5kb3cuX2RhaWx5Q29uZmlnKSB7XG4gICAgd2luZG93Ll9kYWlseUNvbmZpZyA9IHt9O1xuICB9XG4gIHdpbmRvdy5fZGFpbHlDb25maWcuY2FsbEZyYW1lSWQgPSBjYWxsRnJhbWVJZDtcbiAgd2luZG93Ll9kYWlseUNvbmZpZy5hdm9pZEV2YWwgPSBhdm9pZEV2YWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbGxPYmplY3RMb2FkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9jdXJyZW50TG9hZCA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNhbGwgb2JqZWN0IGJ1bmRsZSAoaWYgbmVlZGVkKSwgdGhlbiBpbnZva2VzIHRoZSBjYWxsYmFja1xuICAgKiBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgb25lIGJvb2xlYW4gYXJndW1lbnQgd2hvc2UgdmFsdWUgaXMgdHJ1ZSBpZiB0aGVcbiAgICogbG9hZCB3YXMgYSBuby1vcC5cbiAgICpcbiAgICogTm8tb3AgbG9hZHMgY2FuIGhhcHBlbiB3aGVuIGxlYXZpbmcgYSBtZWV0aW5nIGFuZCB0aGVuIGxhdGVyIGpvaW5pbmcgb25lLlxuICAgKiBTaW5jZSB0aGUgY2FsbCBvYmplY3QgYnVuZGxlIHNldHMgdXAgZ2xvYmFsIHN0YXRlIGluIHRoZSBzYW1lIHNjb3BlIGFzIHRoZVxuICAgKiBhcHAgY29kZSBjb25zdW1pbmcgaXQsIGl0IG9ubHkgbmVlZHMgdG8gYmUgbG9hZGVkIGFuZCBleGVjdXRlZCBvbmNlIGV2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsRnJhbWVJZCBBIHN0cmluZyBpZGVudGlmeWluZyB0aGlzIFwiY2FsbCBmcmFtZVwiLCB0byBkaXN0aW5ndWlzaCBpdFxuICAgKiAgZnJvbSBvdGhlciBpZnJhbWUtYmFzZWQgY2FsbHMgZm9yIG1lc3NhZ2UgY2hhbm5lbCBwdXJwb3Nlcy5cbiAgICogQHBhcmFtIGF2b2lkRXZhbCBXaGV0aGVyIHRvIHVzZSB0aGUgbmV3IGV2YWwtbGVzcyBsb2FkaW5nIG1lY2hhbmlzbSBvbiB3ZWJcbiAgICogIChMb2FkQXR0ZW1wdF9XZWIpIGluc3RlYWQgb2YgdGhlIGxlZ2FjeSBsb2FkaW5nIG1lY2hhbmlzbVxuICAgKiAgKExvYWRBdHRlbXB0X1JlYWN0TmF0aXZlKS5cbiAgICogQHBhcmFtIHN1Y2Nlc3NDYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRha2VzIGEgd2FzTm9PcCBhcmd1bWVudFxuICAgKiAgKHRydWUgaWYgY2FsbCBvYmplY3Qgc2NyaXB0IHdhcyBldmVyIGxvYWRlZCBvbmNlIGJlZm9yZSkuXG4gICAqIEBwYXJhbSBmYWlsdXJlQ2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBlcnJvciBtZXNzYWdlIGFuZCBhXG4gICAqICAgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYW4gYXV0b21hdGljIHJldHJ5IGlzIHNsYXRlZCB0byBvY2N1ci5cbiAgICovXG4gIGxvYWQoY2FsbEZyYW1lSWQsIGF2b2lkRXZhbCwgc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5sb2FkZWQpIHtcbiAgICAgIHdpbmRvdy5fZGFpbHlDYWxsT2JqZWN0U2V0dXAoY2FsbEZyYW1lSWQpO1xuICAgICAgc3VjY2Vzc0NhbGxiYWNrKHRydWUpOyAvLyB0cnVlID0gXCJ0aGlzIGxvYWQoKSB3YXMgYSBuby1vcFwiXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJlcGFyZURhaWx5Q29uZmlnKGNhbGxGcmFtZUlkLCBhdm9pZEV2YWwpO1xuXG4gICAgLy8gQ2FuY2VsIGN1cnJlbnQgbG9hZCwgaWYgYW55XG4gICAgdGhpcy5fY3VycmVudExvYWQgJiYgdGhpcy5fY3VycmVudExvYWQuY2FuY2VsKCk7XG5cbiAgICAvLyBTdGFydCBhIG5ldyBsb2FkXG4gICAgdGhpcy5fY3VycmVudExvYWQgPSBuZXcgTG9hZE9wZXJhdGlvbigoKSA9PiB7XG4gICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOyAvLyBmYWxzZSA9IFwidGhpcyBsb2FkKCkgd2Fzbid0IGEgbm8tb3BcIlxuICAgIH0sIGZhaWx1cmVDYWxsYmFjayk7XG4gICAgdGhpcy5fY3VycmVudExvYWQuc3RhcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgbG9hZGluZyB0aGUgY2FsbCBvYmplY3QgYnVuZGxlLiBObyBjYWxsYmFja3Mgd2lsbCBiZSBpbnZva2VkLlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuX2N1cnJlbnRMb2FkICYmIHRoaXMuX2N1cnJlbnRMb2FkLmNhbmNlbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2FsbCBvYmplY3QgYnVuZGxlIGhhcyBiZWVuXG4gICAqIGxvYWRlZCBhbmQgZXhlY3V0ZWQuXG4gICAqL1xuICBnZXQgbG9hZGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50TG9hZCAmJiB0aGlzLl9jdXJyZW50TG9hZC5zdWNjZWVkZWQ7XG4gIH1cbn1cblxuY29uc3QgTE9BRF9BVFRFTVBUUyA9IDM7XG5jb25zdCBMT0FEX0FUVEVNUFRfREVMQVkgPSAzICogMTAwMDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY2FsbCBtYWNoaW5lIGJ1bmRsZSBsb2FkLlxuICpcbiAqIFNpbmNlIGEgbG9hZCBtYXkgZmFpbCwgaXQgbWF5IG5lZWQgdG8gcmV0cnkgYSBmZXcgdGltZXMuIEl0IGRlbGVnYXRlcyBlYWNoXG4gKiBhdHRlbXB0IHRvIHRoZSBMb2FkQXR0ZW1wdCBjbGFzcy5cbiAqL1xuY2xhc3MgTG9hZE9wZXJhdGlvbiB7XG4gIC8vIEhlcmUgZmFpbHVyZUNhbGxiYWNrIHRha2VzIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgQ2FsbE9iamVjdExvYWRlci5sb2FkLFxuICAvLyBhbmQgc3VjY2Vzc0NhbGxiYWNrIHRha2VzIG5vIHBhcmFtZXRlcnMuXG4gIGNvbnN0cnVjdG9yKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XG4gICAgdGhpcy5fYXR0ZW1wdHNSZW1haW5pbmcgPSBMT0FEX0FUVEVNUFRTO1xuICAgIHRoaXMuX2N1cnJlbnRBdHRlbXB0ID0gbnVsbDtcblxuICAgIHRoaXMuX3N1Y2Nlc3NDYWxsYmFjayA9IHN1Y2Nlc3NDYWxsYmFjaztcbiAgICB0aGlzLl9mYWlsdXJlQ2FsbGJhY2sgPSBmYWlsdXJlQ2FsbGJhY2s7XG4gIH1cblxuICBzdGFydCgpIHtcbiAgICAvLyBCYWlsIGlmIHRoaXMgbG9hZCBoYXMgYWxyZWFkeSBzdGFydGVkXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBdHRlbXB0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coXCJbTG9hZE9wZXJhdGlvbl0gc3RhcnRpbmcuLi5cIik7XG5cbiAgICBjb25zdCByZXRyeU9yRmFpbHVyZUNhbGxiYWNrID0gKGVycm9yTWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRBdHRlbXB0LmNhbmNlbGxlZCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIltMb2FkT3BlcmF0aW9uXSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fYXR0ZW1wdHNSZW1haW5pbmctLTtcbiAgICAgIHRoaXMuX2ZhaWx1cmVDYWxsYmFjayhlcnJvck1lc3NhZ2UsIHRoaXMuX2F0dGVtcHRzUmVtYWluaW5nID4gMCk7IC8vIHRydWUgPSBcIndpbGwgcmV0cnlcIlxuICAgICAgaWYgKHRoaXMuX2F0dGVtcHRzUmVtYWluaW5nIDw9IDApIHtcbiAgICAgICAgLy8gU2hvdWxkIG5ldmVyIGJlIDwwLCBidXQganVzdCBiZWluZyBleHRyYSBjYXJlZnVsIGhlcmVcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJbTG9hZE9wZXJhdGlvbl0gcmFuIG91dCBvZiBhdHRlbXB0c1wiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRBdHRlbXB0LmNhbmNlbGxlZCkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiW0xvYWRPcGVyYXRpb25dIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudEF0dGVtcHQgPSBuZXcgTG9hZEF0dGVtcHQoXG4gICAgICAgICAgdGhpcy5fc3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgICAgIHJldHJ5T3JGYWlsdXJlQ2FsbGJhY2tcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fY3VycmVudEF0dGVtcHQuc3RhcnQoKTtcbiAgICAgIH0sIExPQURfQVRURU1QVF9ERUxBWSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2N1cnJlbnRBdHRlbXB0ID0gbmV3IExvYWRBdHRlbXB0KFxuICAgICAgdGhpcy5fc3VjY2Vzc0NhbGxiYWNrLFxuICAgICAgcmV0cnlPckZhaWx1cmVDYWxsYmFja1xuICAgICk7XG4gICAgdGhpcy5fY3VycmVudEF0dGVtcHQuc3RhcnQoKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9jdXJyZW50QXR0ZW1wdCAmJiB0aGlzLl9jdXJyZW50QXR0ZW1wdC5jYW5jZWwoKTtcbiAgfVxuXG4gIGdldCBjYW5jZWxsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRBdHRlbXB0ICYmIHRoaXMuX2N1cnJlbnRBdHRlbXB0LmNhbmNlbGxlZDtcbiAgfVxuXG4gIGdldCBzdWNjZWVkZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRBdHRlbXB0ICYmIHRoaXMuX2N1cnJlbnRBdHRlbXB0LnN1Y2NlZWRlZDtcbiAgfVxufVxuXG5jbGFzcyBMb2FkQXR0ZW1wdEFib3J0ZWRFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmNvbnN0IExPQURfQVRURU1QVF9ORVRXT1JLX1RJTUVPVVQgPSAyMCAqIDEwMDA7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBjYWxsIG1hY2hpbmUgYnVuZGxlIGxvYWQgYXR0ZW1wdC5cbiAqXG4gKiBUaGUgTG9hZE9wZXJhdGlvbiBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nIGluIHRlcm1zIG9mIGNvb3JkaW5hdGluZyBkaWZmZXJlbnRcbiAqIExvYWRBdHRlbXB0cyAoaS5lLiBraWNraW5nIG9mZiByZXRyaWVzIGFuZCBoYW5kbGluZyBpbnRlcnJ1cHRpb25zIGJ5LCBzYXksIGFcbiAqIHVzZXIgY2FsbGluZyBsZWF2ZSgpKS4gSXQgd2lsbCBhc2sgZWFjaCBMb2FkQXR0ZW1wdCB0byBzdGFydCgpIGFuZCwgaWZcbiAqIG5lY2Vzc2FyeSwgY2FuY2VsKCkuXG4gKlxuICogVGhlIExvYWRBdHRlbXB0IGl0c2VsZiBvbmx5IG5lZWRzIHRvIGNvbmNlcm4gaXRzZWxmIHdpdGggb2JleWluZyB0aG9zZVxuICogcmVxdWVzdHMsIGludm9raW5nIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgY2FsbGJhY2tzIGF0IHRoZSBlbmQgb2YgYW4gYXR0ZW1wdCxcbiAqIGFuZCBzZXR0aW5nIGl0cyBjYW5jZWxsZWQgYW5kIHN1Y2NlZWRlZCBmbGFncyBhcyBhcHByb3ByaWF0ZS5cbiAqXG4gKiBTaW5jZSB3ZSBzdXBwb3J0IHJ1bm5pbmcgYm90aCBvbiBXZWIgYW5kIFJlYWN0IE5hdGl2ZSBhbmQgdGhlcmUgYXJlIHNsaWdodGx5XG4gKiBkaWZmZXJlbnQgY29uc3RyYWludHMgb24gZWFjaCwgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mXG4gKiBMb2FkQXR0ZW1wdDpcbiAqIC0gT24gV2ViLCB3ZSB1c2UgYW4gSFRNTFNjcmlwdEVsZW1lbnQgdG8gbG9hZCB0aGUgYnVuZGxlIGluIG9yZGVyXG4gKiB0byBhbGxvdyBvdXIgdXNlcnMgdG8gc2V0IGEgQ1NQIChDb250ZW50IFNlY3VyaXR5IFBvbGljeSkgd2l0aG91dFxuICogJ3Vuc2FmZS1ldmFsJy4gVGhlIGFsdGVybmF0aXZlIHdvdWxkIGJlIHVzaW5nIGZldGNoKCkgKyBGdW5jdGlvbigpL2V2YWwoKS5cbiAqIC0gT24gUmVhY3QgTmF0aXZlLCB3ZSB1c2UgZmV0Y2goKSArIEZ1bmN0aW9uKCkuIFRoZXJlIGlzIG5vIEhUTUxTY3JpcHRFbGVtZW50XG4gKiBpbiBSZWFjdCBOYXRpdmUgYW5kIGFsc28gbm8gQ1NQIGNvbnNpZGVyYXRpb24gdG8gY29udGVuZCB3aXRoLlxuICovXG5jbGFzcyBMb2FkQXR0ZW1wdCB7XG4gIGNvbnN0cnVjdG9yKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XG4gICAgdGhpcy5fbG9hZEF0dGVtcHRJbXBsID1cbiAgICAgIGlzUmVhY3ROYXRpdmUoKSB8fCAhX2RhaWx5Q29uZmlnLmF2b2lkRXZhbFxuICAgICAgICA/IG5ldyBMb2FkQXR0ZW1wdF9SZWFjdE5hdGl2ZShzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaylcbiAgICAgICAgOiBuZXcgTG9hZEF0dGVtcHRfV2ViKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkQXR0ZW1wdEltcGwuc3RhcnQoKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9sb2FkQXR0ZW1wdEltcGwuY2FuY2VsKCk7XG4gIH1cblxuICBnZXQgY2FuY2VsbGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkQXR0ZW1wdEltcGwuY2FuY2VsbGVkO1xuICB9XG5cbiAgZ2V0IHN1Y2NlZWRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZEF0dGVtcHRJbXBsLnN1Y2NlZWRlZDtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgY2FsbCBtYWNoaW5lIGJ1bmRsZSBsb2FkIGF0dGVtcHQgaW4gUmVhY3QgTmF0aXZlLlxuICpcbiAqIE5PVEU6IHRoaXMgaXMgYWxzbyB0aGUgbGVnYWN5IHdlYiBjb2RlIHBhdGgsIHdoZW4gYXZvaWRFdmFsIGlzIG5vdCBzZXQuXG4gKi9cbmNsYXNzIExvYWRBdHRlbXB0X1JlYWN0TmF0aXZlIHtcbiAgLy8gSGVyZSBzdWNjZXNzQ2FsbGJhY2sgdGFrZXMgbm8gcGFyYW1ldGVycywgYW5kIGZhaWx1cmVDYWxsYmFjayB0YWtlcyBhXG4gIC8vIHNpbmdsZSBlcnJvciBtZXNzYWdlIHBhcmFtZXRlci5cbiAgY29uc3RydWN0b3Ioc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spIHtcbiAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3VjY2VlZGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9uZXR3b3JrVGltZWRPdXQgPSBmYWxzZTtcbiAgICB0aGlzLl9uZXR3b3JrVGltZW91dCA9IG51bGw7XG5cbiAgICB0aGlzLl9pb3NDYWNoZSA9XG4gICAgICB0eXBlb2YgaU9TQ2FsbE9iamVjdEJ1bmRsZUNhY2hlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgaU9TQ2FsbE9iamVjdEJ1bmRsZUNhY2hlO1xuICAgIHRoaXMuX3JlZmV0Y2hIZWFkZXJzID0gbnVsbDtcblxuICAgIHRoaXMuX3N1Y2Nlc3NDYWxsYmFjayA9IHN1Y2Nlc3NDYWxsYmFjaztcbiAgICB0aGlzLl9mYWlsdXJlQ2FsbGJhY2sgPSBmYWlsdXJlQ2FsbGJhY2s7XG4gIH1cblxuICBhc3luYyBzdGFydCgpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIltMb2FkQXR0ZW1wdF9SZWFjdE5hdGl2ZV0gc3RhcnRpbmcuLi5cIik7XG4gICAgY29uc3QgdXJsID0gY2FsbE9iamVjdEJ1bmRsZVVybCgpO1xuICAgIGNvbnN0IGxvYWRlZEZyb21JT1NDYWNoZSA9IGF3YWl0IHRoaXMuX3RyeUxvYWRGcm9tSU9TQ2FjaGUodXJsKTtcbiAgICAhbG9hZGVkRnJvbUlPU0NhY2hlICYmIHRoaXMuX2xvYWRGcm9tTmV0d29yayh1cmwpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9uZXR3b3JrVGltZW91dCk7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBsb2FkIHRoZSBjYWxsIG9iamVjdCBidW5kbGUgZnJvbSB0aGUgaU9TIGNhY2hlLlxuICAgKiBUaGlzIGlzIGEgUmVhY3QgTmF0aXZlLXNwZWNpZmljIHdvcmthcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgdGhlIGlPUyBIVFRQXG4gICAqIGNhY2hlIHdvbid0IGNhY2hlIHRoZSBjYWxsIG9iamVjdCBidW5kbGUgZHVlIHRvIHNpemUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgY2FsbCBvYmplY3QgYnVuZGxlIHRvIHRyeSB0byBsb2FkLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBmYWxzZSBpZiB0aGUgbG9hZCBmYWlsZWQgb3IgdHJ1ZVxuICAgKiBvdGhlcndpc2UgKGlmIGl0IHN1Y2NlZWRlZCBvciB3YXMgY2FuY2VsbGVkKSwgaW5kaWNhdGluZyB3aGV0aGVyIGEgbmV0d29ya1xuICAgKiBsb2FkIGF0dGVtcHQgaXMgbmVlZGVkLlxuICAgKi9cbiAgYXN5bmMgX3RyeUxvYWRGcm9tSU9TQ2FjaGUodXJsKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJbTG9hZEF0dGVtcHRfUmVhY3ROYXRpdmVdIHRyeWluZyB0byBsb2FkIGZyb20gaU9TIGNhY2hlLi4uXCIpO1xuXG4gICAgLy8gQmFpbCBpZiB3ZSdyZSBub3QgcnVubmluZyBpbiBpT1NcbiAgICBpZiAoIXRoaXMuX2lvc0NhY2hlKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcIltMb2FkQXR0ZW1wdF9SZWFjdE5hdGl2ZV0gbm90IGlPUywgc28gbm90IGNoZWNraW5nIGlPUyBjYWNoZVwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FjaGVSZXNwb25zZSA9IGF3YWl0IHRoaXMuX2lvc0NhY2hlLmdldCh1cmwpO1xuXG4gICAgICAvLyBJZiBsb2FkIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmVwb3J0IHdvcmsgY29tcGxldGUgKG5vIG5ldHdvcmsgbG9hZFxuICAgICAgLy8gbmVlZGVkKVxuICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjYWNoZSBtaXNzLCByZXBvcnQgZmFpbHVyZSAobmV0d29yayBsb2FkIG5lZWRlZClcbiAgICAgIGlmICghY2FjaGVSZXNwb25zZSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIltMb2FkQXR0ZW1wdF9SZWFjdE5hdGl2ZV0gaU9TIGNhY2hlIG1pc3NcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgY2FjaGUgZXhwaXJlZCwgc3RvcmUgcmVmZXRjaCBoZWFkZXJzIHRvIHVzZSBsYXRlciBhbmQgcmVwb3J0XG4gICAgICAvLyBmYWlsdXJlIChuZXR3b3JrIGxvYWQgbmVlZGVkKVxuICAgICAgaWYgKCFjYWNoZVJlc3BvbnNlLmNvZGUpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgIC8vICAgXCJbTG9hZEF0dGVtcHRfUmVhY3ROYXRpdmVdIGlPUyBjYWNoZSBleHBpcmVkLCBzZXR0aW5nIHJlZmV0Y2ggaGVhZGVyc1wiLFxuICAgICAgICAvLyAgIGNhY2hlUmVzcG9uc2UucmVmZXRjaEhlYWRlcnNcbiAgICAgICAgLy8gKTtcbiAgICAgICAgdGhpcy5fcmVmZXRjaEhlYWRlcnMgPSBjYWNoZVJlc3BvbnNlLnJlZmV0Y2hIZWFkZXJzO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIENhY2hlIGlzIGZyZXNoLCBzbyBydW4gY29kZSBhbmQgc3VjY2VzcyBjYWxsYmFjaywgYW5kIHJlcG9ydCB3b3JrXG4gICAgICAvLyBjb21wbGV0ZSAobm8gbmV0d29yayBsb2FkIG5lZWRlZClcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiW0xvYWRBdHRlbXB0X1JlYWN0TmF0aXZlXSBpT1MgY2FjaGUgaGl0XCIpO1xuICAgICAgRnVuY3Rpb24oJ1widXNlIHN0cmljdFwiOycgKyBjYWNoZVJlc3BvbnNlLmNvZGUpKCk7XG4gICAgICB0aGlzLnN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICB0aGlzLl9zdWNjZXNzQ2FsbGJhY2soKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFJlcG9ydCBmYWlsdXJlXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIltMb2FkQXR0ZW1wdF9SZWFjdE5hdGl2ZV0gZmFpbHVyZSBydW5uaW5nIGJ1bmRsZSBmcm9tIGlPUyBjYWNoZVwiLCBlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIGxvYWQgdGhlIGNhbGwgb2JqZWN0IGJ1bmRsZSBmcm9tIHRoZSBuZXR3b3JrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGNhbGwgb2JqZWN0IGJ1bmRsZSB0byBsb2FkLlxuICAgKi9cbiAgYXN5bmMgX2xvYWRGcm9tTmV0d29yayh1cmwpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIltMb2FkQXR0ZW1wdF9SZWFjdE5hdGl2ZV0gdHJ5aW5nIHRvIGxvYWQgZnJvbSBuZXR3b3JrLi4uXCIpO1xuICAgIHRoaXMuX25ldHdvcmtUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9uZXR3b3JrVGltZWRPdXQgPSB0cnVlO1xuICAgICAgdGhpcy5fZmFpbHVyZUNhbGxiYWNrKFxuICAgICAgICBgVGltZWQgb3V0ICg+JHtMT0FEX0FUVEVNUFRfTkVUV09SS19USU1FT1VUfSBtcykgd2hlbiBsb2FkaW5nIGNhbGwgb2JqZWN0IGJ1bmRsZSAke3VybH1gXG4gICAgICApO1xuICAgIH0sIExPQURfQVRURU1QVF9ORVRXT1JLX1RJTUVPVVQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHRoaXMuX3JlZmV0Y2hIZWFkZXJzXG4gICAgICAgID8geyBoZWFkZXJzOiB0aGlzLl9yZWZldGNoSGVhZGVycyB9XG4gICAgICAgIDoge307XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgZmV0Y2hPcHRpb25zKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9uZXR3b3JrVGltZW91dCk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgbG9hZCB3YXNuJ3QgY2FuY2VsbGVkIG9yIHRpbWVkIG91dCBkdXJpbmcgZmV0Y2hcbiAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCB8fCB0aGlzLl9uZXR3b3JrVGltZWRPdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IExvYWRBdHRlbXB0QWJvcnRlZEVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvZGUgPSBhd2FpdCB0aGlzLl9nZXRCdW5kbGVDb2RlRnJvbVJlc3BvbnNlKHVybCwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDaGVjayBhZ2FpbiB0aGF0IGxvYWQgd2Fzbid0IGNhbmNlbGxlZCBkdXJpbmcgcmVhZGluZyByZXNwb25zZVxuICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBMb2FkQXR0ZW1wdEFib3J0ZWRFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyBFeGVjdXRlIGJ1bmRsZSBjb2RlXG4gICAgICBGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7JyArIGNvZGUpKCk7XG5cbiAgICAgIC8vIFNpbmNlIGNvZGUgcmFuIHN1Y2Nlc3NmdWxseSAobm8gZXJyb3JzIHRocm93biksIGNhY2hlIGl0IGFuZCBjYWxsXG4gICAgICAvLyBzdWNjZXNzIGNhbGxiYWNrXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIltMb2FkQXR0ZW1wdF9SZWFjdE5hdGl2ZV0gc3VjY2VlZGVkLi4uXCIpO1xuICAgICAgdGhpcy5faW9zQ2FjaGUgJiYgdGhpcy5faW9zQ2FjaGUuc2V0KHVybCwgY29kZSwgcmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB0aGlzLnN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICB0aGlzLl9zdWNjZXNzQ2FsbGJhY2soKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fbmV0d29ya1RpbWVvdXQpO1xuXG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCB0aGVzZSBjb25kaXRpb25zIHNpbmNlIGxvbmcgb3V0c3RhbmRpbmdcbiAgICAgIC8vIHJlcXVlc3RzIGNhbiBmYWlsICphZnRlciogY2FuY2VsbGF0aW9uIG9yIHRpbWVvdXQgKGkuZS4gY2hlY2tpbmcgZm9yXG4gICAgICAvLyBMb2FkQXR0ZW1wdEFib3J0ZWRFcnJvciBpcyBub3QgZW5vdWdoKS5cbiAgICAgIGlmIChcbiAgICAgICAgZSBpbnN0YW5jZW9mIExvYWRBdHRlbXB0QWJvcnRlZEVycm9yIHx8XG4gICAgICAgIHRoaXMuY2FuY2VsbGVkIHx8XG4gICAgICAgIHRoaXMuX25ldHdvcmtUaW1lZE91dFxuICAgICAgKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiW0xvYWRBdHRlbXB0X1JlYWN0TmF0aXZlXSBjYW5jZWxsZWQgb3IgdGltZWQgb3V0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ZhaWx1cmVDYWxsYmFjayhgRmFpbGVkIHRvIGxvYWQgY2FsbCBvYmplY3QgYnVuZGxlICR7dXJsfTogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9nZXRCdW5kbGVDb2RlRnJvbVJlc3BvbnNlKHVybCwgcmVzcG9uc2UpIHtcbiAgICAvLyBOb3JtYWwgc3VjY2VzcyBjYXNlXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIH1cblxuICAgIC8vIFJlYWN0IE5hdGl2ZSBpT1Mtc3BlY2lmaWMgY2FzZTogMzA0IE5vdC1Nb2RpZmllZCByZXNwb25zZVxuICAgIC8vIChTaW5jZSB3ZSdyZSBkb2luZyBtYW51YWwgY2FjaGUgbWFuYWdlbWVudCBmb3IgaU9TLCB0aGUgZmV0Y2ggbWVjaGFuaXNtXG4gICAgLy8gIGRvZXNuJ3Qgb3BhcXVlbHkgaGFuZGxlIDMwNHMgZm9yIHVzKVxuICAgIGlmICh0aGlzLl9pb3NDYWNoZSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDMwNCkge1xuICAgICAgY29uc3QgY2FjaGVSZXNwb25zZSA9IGF3YWl0IHRoaXMuX2lvc0NhY2hlLnJlbmV3KHVybCwgcmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICByZXR1cm4gY2FjaGVSZXNwb25zZS5jb2RlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgUmVjZWl2ZWQgJHtyZXNwb25zZS5zdGF0dXN9IHJlc3BvbnNlYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGNhbGwgbWFjaGluZSBidW5kbGUgbG9hZCBhdHRlbXB0IG9uIFdlYi5cbiAqXG4gKiBXaGlsZSB0aGlzIGF0dGVtcHQgaXMgYWN0aXZlIC0gdGhhdCBpcywgaXQgaGFzbid0IGJlZW4gY2FuY2VsbGVkIG9yIGhhc24ndFxuICogdGltZWQgb3V0IC0gaXQgc2lnbnMgaXRzZWxmIHVwIHRvIGJlIG9uIGEgZ2xvYmFsIFwiY2FsbCBtYWNoaW5lIGxvYWRcbiAqIHdhaXRsaXN0XCIsIHdoaWNoIHJlcHJlc2VudHMgdGhlIHNldCBvZiBsb2FkIGF0dGVtcHRzIHRoYXQgd2FudCB0aGUgY2FsbFxuICogbWFjaGluZSB0byBmaW5pc2ggbG9hZGluZy5cbiAqXG4gKiBCZWNhdXNlLi4uXG4gKiBhKSAuLi5cImZpbmlzaGluZyBsb2FkaW5nXCIgaXMgc29tZXRoaW5nIHRoYXQgaGFwcGVucyBvbiB0aGUgY2FsbCBtYWNoaW5lXG4gKiAgICBidW5kbGUgc2lkZSAoaS5lLiBub3QgaW4gdGhpcyBjb2RlKSBvbmNlIGl0J3MgYmVlbiBkb3dubG9hZGVkIGFuZCBpc1xuICogICAgZXhlY3V0aW5nLCBhbmQuLi5cbiAqIGIpIC4uLndlIGFjdHVhbGx5ICpjYW4ndCogc3RvcCB0aGUgY2FsbCBtYWNoaW5lIGJ1bmRsZSBmcm9tIHJ1bm5pbmcgYWZ0ZXIgYW5cbiAqICAgIGF0dGVtcHQgaGFzIGJlZW4gY2FuY2VsbGVkIG9yIHRpbWVkIG91dCwgaWYgdGhlIGJ1bmRsZSBmaW5pc2hlc1xuICogICAgZG93bmxvYWRpbmcgKEhUTUxTY3JpcHRFbGVtZW50IGRvZXNuJ3QgaGF2ZSBhIGNhbmNlbCgpIG1ldGhvZCkuLi5cbiAqIC4uLndlIG5lZWQgYSB3YXkgb2YgdGVsbGluZyB0aGUgY2FsbCBtYWNoaW5lIGJ1bmRsZSBcImhleSBzb21lb25lJ3Mgc3RpbGxcbiAqIGludGVyZXN0ZWQgaW4geW91IGxvYWRpbmdcIi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlcmUgcmVhbGx5IHNob3VsZG4ndCBiZSBtb3JlIHRoYW4gb25lIGFjdGl2ZSBsb2FkIGF0dGVtcHQgYXQgYVxuICogdGltZS4gQnV0IHRoaXMgbG9hZCBhdHRlbXB0IGRvZXNuJ3Qga25vdyB0aGF0ISBIZW5jZSB0aGUgd2FpdGxpc3QgYmVpbmcgYVxuICogU2V0KCkgYW5kIGVhY2ggYXR0ZW1wdCBiZWluZyByZXNwb25zaWJsZSBvbmx5IGZvciBhZGRpbmcvcmVtb3ZpbmcgaXRzZWxmIGZyb21cbiAqIHRoZSB3YWl0bGlzdC4gVGhpcyBhcHByb2FjaCAtIGFzIG9wcG9zZWQgdG8gYSBnbG9iYWwgYm9vbGVhbiBvciBjb3VudGVyIC1cbiAqIGZlbHQgbGlrZSB0aGUgbW9zdCBidWxsZXRwcm9vZiAoaS5lLiBmdXR1cmUtIGFuZCByYWNlLWNvbmRpdGlvbi1wcm9vZikgd2F5XG4gKiBvZiBpbXBsZW1lbnRpbmcgdGhpcyBzeW5jaHJvbml6YXRpb24uXG4gKi9cbmNsYXNzIExvYWRBdHRlbXB0X1dlYiB7XG4gIGNvbnN0cnVjdG9yKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN1Y2NlZWRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5fc3VjY2Vzc0NhbGxiYWNrID0gc3VjY2Vzc0NhbGxiYWNrO1xuICAgIHRoaXMuX2ZhaWx1cmVDYWxsYmFjayA9IGZhaWx1cmVDYWxsYmFjaztcblxuICAgIHRoaXMuX2F0dGVtcHRJZCA9IHJhbmRvbVN0cmluZ0lkKCk7XG4gICAgdGhpcy5fbmV0d29ya1RpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMuX3NjcmlwdEVsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBnbG9iYWwgc3RhdGUgdHJhY2tpbmcgYWN0aXZlIGxvYWQgYXR0ZW1wdHNcbiAgICBpZiAoIXdpbmRvdy5fZGFpbHlDYWxsTWFjaGluZUxvYWRXYWl0bGlzdCkge1xuICAgICAgd2luZG93Ll9kYWlseUNhbGxNYWNoaW5lTG9hZFdhaXRsaXN0ID0gbmV3IFNldCgpO1xuICAgIH1cblxuICAgIC8vIEdldCBjYWxsIG1hY2hpbmUgYnVuZGxlIFVSTFxuICAgIGNvbnN0IHVybCA9IGNhbGxPYmplY3RCdW5kbGVVcmwoKTtcblxuICAgIC8vIFNhbml0eSBjaGVjayB0aGF0IHdlJ3JlIHJ1bm5pbmcgaW4gYSBET00vd2ViIGNvbnRleHRcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5fZmFpbHVyZUNhbGxiYWNrKFxuICAgICAgICBgQ2FsbCBvYmplY3QgYnVuZGxlIG11c3QgYmUgbG9hZGVkIGluIGEgRE9NL3dlYiBjb250ZXh0YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGFydExvYWRpbmcodXJsKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnW0xvYWRBdHRlbXB0X1dlYl0gY2FuY2VsbGVkJyk7XG4gICAgdGhpcy5fc3RvcExvYWRpbmcoKTtcbiAgICB0aGlzLmNhbmNlbGxlZCA9IHRydWU7XG4gIH1cblxuICBfc3RhcnRMb2FkaW5nKHVybCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdbTG9hZEF0dGVtcHRfV2ViXSB0cnlpbmcgdG8gbG9hZC4uLicpO1xuICAgIHRoaXMuX3NpZ25VcEZvckNhbGxNYWNoaW5lTG9hZFdhaXRsaXN0KCk7XG5cbiAgICAvLyBTdGFydCBhIHRpbWVvdXQsIGFmdGVyIHdoaWNoIHdlJ2xsIGNvbnNpZGVyIHRoaXMgYXR0ZW1wdCBhIGZhaWx1cmVcbiAgICB0aGlzLl9uZXR3b3JrVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coJ1tMb2FkQXR0ZW1wdF9XZWJdIHRpbWVkIG91dCcpO1xuICAgICAgdGhpcy5fc3RvcExvYWRpbmcoKTtcbiAgICAgIHRoaXMuX2ZhaWx1cmVDYWxsYmFjayhcbiAgICAgICAgYFRpbWVkIG91dCAoPiR7TE9BRF9BVFRFTVBUX05FVFdPUktfVElNRU9VVH0gbXMpIHdoZW4gbG9hZGluZyBjYWxsIG9iamVjdCBidW5kbGUgJHt1cmx9YFxuICAgICAgKTtcbiAgICB9LCBMT0FEX0FUVEVNUFRfTkVUV09SS19USU1FT1VUKTtcblxuICAgIC8vIENyZWF0ZSBhIHNjcmlwdCB0YWcgdG8gZG93bmxvYWQgdGhlIGNhbGwgbWFjaGluZSBidW5kbGVcbiAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSxcbiAgICAgIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHRoaXMuX3NjcmlwdEVsZW1lbnQgPSBzY3JpcHQ7XG5cbiAgICAvLyBPbiBsb2FkLCBjb25zaWRlciB0aGlzIGF0dGVtcHQgYSBzdWNjZXNzXG4gICAgc2NyaXB0Lm9ubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdbTG9hZEF0dGVtcHRfV2ViXSBzdWNjZWVkZWQnKTtcbiAgICAgIHRoaXMuX3N0b3BMb2FkaW5nKCk7XG4gICAgICB0aGlzLnN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICB0aGlzLl9zdWNjZXNzQ2FsbGJhY2soKTtcbiAgICB9O1xuXG4gICAgLy8gT24gZXJyb3IsIGNvbnNpZGVyIHRoaXMgYXR0ZW1wdCBhIGZhaWx1cmVcbiAgICBzY3JpcHQub25lcnJvciA9IGFzeW5jIChlKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnW0xvYWRBdHRlbXB0X1dlYl0gZmFpbGVkJyk7XG4gICAgICB0aGlzLl9zdG9wTG9hZGluZygpO1xuICAgICAgdGhpcy5fZmFpbHVyZUNhbGxiYWNrKFxuICAgICAgICBgRmFpbGVkIHRvIGxvYWQgY2FsbCBvYmplY3QgYnVuZGxlICR7ZS50YXJnZXQuc3JjfWBcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIFN0YXJ0IHRoZSBkb3dubG9hZFxuICAgIHNjcmlwdC5zcmMgPSB1cmw7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9XG5cbiAgX3N0b3BMb2FkaW5nKCkge1xuICAgIHRoaXMuX3dpdGhkcmF3RnJvbUNhbGxNYWNoaW5lTG9hZFdhaXRsaXN0KCk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX25ldHdvcmtUaW1lb3V0KTtcbiAgICBpZiAodGhpcy5fc2NyaXB0RWxlbWVudCkge1xuICAgICAgdGhpcy5fc2NyaXB0RWxlbWVudC5vbmxvYWQgPSBudWxsO1xuICAgICAgdGhpcy5fc2NyaXB0RWxlbWVudC5vbmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfc2lnblVwRm9yQ2FsbE1hY2hpbmVMb2FkV2FpdGxpc3QoKSB7XG4gICAgd2luZG93Ll9kYWlseUNhbGxNYWNoaW5lTG9hZFdhaXRsaXN0LmFkZCh0aGlzLl9hdHRlbXB0SWQpO1xuICB9XG5cbiAgX3dpdGhkcmF3RnJvbUNhbGxNYWNoaW5lTG9hZFdhaXRsaXN0KCkge1xuICAgIHdpbmRvdy5fZGFpbHlDYWxsTWFjaGluZUxvYWRXYWl0bGlzdC5kZWxldGUodGhpcy5fYXR0ZW1wdElkKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/CallObjectLoader.js\n' + ); + + /***/ + }, + + /***/ "./src/Participant.js": + /*!****************************!*\ + !*** ./src/Participant.js ***! + \****************************/ + /*! exports provided: addTracks, addCustomTracks, isPredefinedTrack, addLegacyTracks */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + "__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addTracks\", function() { return addTracks; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addCustomTracks\", function() { return addCustomTracks; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPredefinedTrack\", function() { return isPredefinedTrack; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addLegacyTracks\", function() { return addLegacyTracks; });\n/* harmony import */ var _shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shared-with-pluot-core/selectors */ \"./src/shared-with-pluot-core/selectors.js\");\n // Adds tracks to daily-js Participant object.\n\nfunction addTracks(p) {\n var state = store.getState();\n\n for (var _i = 0, _arr = ['cam', 'screen']; _i < _arr.length; _i++) {\n var type = _arr[_i];\n\n for (var _i2 = 0, _arr2 = ['video', 'audio']; _i2 < _arr2.length; _i2++) {\n var kind = _arr2[_i2];\n var key = type === 'cam' ? kind : \"screen\".concat(kind.charAt(0).toUpperCase() + kind.slice(1));\n var trackInfo = p.tracks[key];\n\n if (trackInfo) {\n var track = p.local ? Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getLocalTrack\"])(state, type, kind) : Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getRemoteTrack\"])(state, p.session_id, type, kind);\n\n if (trackInfo.state === 'playable') {\n trackInfo.track = track;\n } // Set \"persistent\" track field where track is present even if not \"playable\"\n\n\n trackInfo.persistentTrack = track;\n }\n }\n }\n} // todo: refactor so that his logic is part of addTracks and friends()\n\nfunction addCustomTracks(p) {\n try {\n var state = store.getState();\n\n for (var trackEntryKey in p.tracks) {\n if (isPredefinedTrack(trackEntryKey)) {\n continue;\n }\n\n var kind = p.tracks[trackEntryKey].kind;\n\n if (!kind) {\n console.error('unknown type for custom track');\n continue;\n }\n\n var trackInfo = p.tracks[trackEntryKey];\n\n if (trackInfo) {\n var track = p.local ? Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getLocalCustomTrack\"])(state, trackEntryKey, kind) : Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getRemoteTrack\"])(state, p.session_id, trackEntryKey, kind);\n\n if (trackInfo.state === 'playable') {\n p.tracks[trackEntryKey].track = track;\n }\n\n trackInfo.persistentTrack = track;\n }\n }\n } catch (e) {\n console.error(e);\n }\n}\nfunction isPredefinedTrack(trackEntryKey) {\n return ['video', 'audio', 'screenVideo', 'screenAudio'].includes(trackEntryKey);\n} // Adds tracks to daily-js Participant object.\n\nfunction addLegacyTracks(p, prevP) {\n var state = store.getState();\n\n if (p.local) {\n if (p.audio) {\n try {\n p.audioTrack = state.local.streams.cam.stream.getAudioTracks()[0];\n\n if (!p.audioTrack) {\n p.audio = false;\n }\n } catch (e) {}\n }\n\n if (p.video) {\n try {\n p.videoTrack = state.local.streams.cam.stream.getVideoTracks()[0];\n\n if (!p.videoTrack) {\n p.video = false;\n }\n } catch (e) {}\n }\n\n if (p.screen) {\n try {\n p.screenVideoTrack = state.local.streams.screen.stream.getVideoTracks()[0];\n p.screenAudioTrack = state.local.streams.screen.stream.getAudioTracks()[0];\n\n if (!(p.screenVideoTrack || p.screenAudioTrack)) {\n p.screen = false;\n }\n } catch (e) {}\n }\n\n return;\n }\n\n var connected = true; // default to true to minimize impact of new bugs\n // as of 11/20/2019 when this block of code was\n // first written\n\n try {\n var sp = state.participants[p.session_id];\n\n if (sp && sp.public && sp.public.rtcType && sp.public.rtcType.impl === 'peer-to-peer') {\n if (sp.private && !['connected', 'completed'].includes(sp.private.peeringState)) {\n connected = false;\n }\n }\n } catch (e) {\n console.error(e);\n }\n\n if (!connected) {\n p.audio = false;\n p.audioTrack = false;\n p.video = false;\n p.videoTrack = false;\n p.screen = false;\n p.screenTrack = false;\n return;\n }\n\n try {\n var allStreams = state.streams; // find audio track\n\n if (p.audio && Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getLocalIsSubscribedToTrack\"])(state, p.session_id, 'cam-audio')) {\n var audioTrack = Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getRemoteTrack\"])(state, p.session_id, 'cam', 'audio');\n\n if (audioTrack) {\n if (prevP && prevP.audioTrack && prevP.audioTrack.id === audioTrack.id) {\n // if we have an apparently identical audio track already in\n // our participant struct leave it in place to avoid flicker\n // during quick muted/unmuted PeerConnection cycles. we'll update\n // audio/video muted at the app level via signaling\n p.audioTrack = audioTrack;\n } else if (!audioTrack.muted) {\n // otherwise, add the found track if it's not muted\n p.audioTrack = audioTrack;\n }\n }\n\n if (!p.audioTrack) {\n p.audio = false;\n }\n } // find video track\n\n\n if (p.video && Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getLocalIsSubscribedToTrack\"])(state, p.session_id, 'cam-video')) {\n var videoTrack = Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getRemoteTrack\"])(state, p.session_id, 'cam', 'video');\n\n if (videoTrack) {\n if (prevP && prevP.videoTrack && prevP.videoTrack.id === videoTrack.id) {\n p.videoTrack = videoTrack;\n } else if (!videoTrack.muted) {\n // otherwise, add the found track if it's not muted\n p.videoTrack = videoTrack;\n }\n }\n\n if (!p.videoTrack) {\n p.video = false;\n }\n } // find screen-share audio track\n\n\n if (p.screen && Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getLocalIsSubscribedToTrack\"])(state, p.session_id, 'screen-audio')) {\n var screenAudioTrack = Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getRemoteTrack\"])(state, p.session_id, 'screen', 'audio');\n\n if (screenAudioTrack) {\n if (prevP && prevP.screenAudioTrack && prevP.screenAudioTrack.id === screenAudioTrack.id) {\n p.screenAudioTrack = screenAudioTrack;\n } else if (!screenAudioTrack.muted) {\n // otherwise, add the found track if it's not muted\n p.screenAudioTrack = screenAudioTrack;\n }\n }\n } // find screen-share video track\n\n\n if (p.screen && Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getLocalIsSubscribedToTrack\"])(state, p.session_id, 'screen-video')) {\n var screenVideoTrack = Object(_shared_with_pluot_core_selectors__WEBPACK_IMPORTED_MODULE_0__[\"getRemoteTrack\"])(state, p.session_id, 'screen', 'video');\n\n if (screenVideoTrack) {\n if (prevP && prevP.screenVideoTrack && prevP.screenVideoTrack.id === screenVideoTrack.id) {\n p.screenVideoTrack = screenVideoTrack;\n } else if (!screenVideoTrack.muted) {\n // otherwise, add the found track if it's not muted\n // note: there is an issue here with timing ... Chrome (and\n // possibly other browsers), gets a video track that's initially\n // not muted, for an audio-only screenshare. The track\n // switches to muted fairly quickly, but we don't have any\n // logic in place to respond to that. todo: fix this so that,\n // at the very least we get a track-stopped event when the\n // \"empty\" track switches to muted.\n p.screenVideoTrack = screenVideoTrack;\n }\n }\n }\n\n if (!(p.screenVideoTrack || p.screenAudioTrack)) {\n p.screen = false;\n }\n } catch (e) {\n console.error('unexpected error matching up tracks', e);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9QYXJ0aWNpcGFudC5qcz8zZTc3Il0sIm5hbWVzIjpbImFkZFRyYWNrcyIsInAiLCJzdGF0ZSIsInN0b3JlIiwiZ2V0U3RhdGUiLCJ0eXBlIiwia2luZCIsImtleSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJ0cmFja0luZm8iLCJ0cmFja3MiLCJ0cmFjayIsImxvY2FsIiwiZ2V0TG9jYWxUcmFjayIsImdldFJlbW90ZVRyYWNrIiwic2Vzc2lvbl9pZCIsInBlcnNpc3RlbnRUcmFjayIsImFkZEN1c3RvbVRyYWNrcyIsInRyYWNrRW50cnlLZXkiLCJpc1ByZWRlZmluZWRUcmFjayIsImNvbnNvbGUiLCJlcnJvciIsImdldExvY2FsQ3VzdG9tVHJhY2siLCJlIiwiaW5jbHVkZXMiLCJhZGRMZWdhY3lUcmFja3MiLCJwcmV2UCIsImF1ZGlvIiwiYXVkaW9UcmFjayIsInN0cmVhbXMiLCJjYW0iLCJzdHJlYW0iLCJnZXRBdWRpb1RyYWNrcyIsInZpZGVvIiwidmlkZW9UcmFjayIsImdldFZpZGVvVHJhY2tzIiwic2NyZWVuIiwic2NyZWVuVmlkZW9UcmFjayIsInNjcmVlbkF1ZGlvVHJhY2siLCJjb25uZWN0ZWQiLCJzcCIsInBhcnRpY2lwYW50cyIsInB1YmxpYyIsInJ0Y1R5cGUiLCJpbXBsIiwicHJpdmF0ZSIsInBlZXJpbmdTdGF0ZSIsInNjcmVlblRyYWNrIiwiYWxsU3RyZWFtcyIsImdldExvY2FsSXNTdWJzY3JpYmVkVG9UcmFjayIsImlkIiwibXV0ZWQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtDQU9BOztBQUNPLFNBQVNBLFNBQVQsQ0FBbUJDLENBQW5CLEVBQXNCO0FBQzNCLE1BQU1DLEtBQUssR0FBR0MsS0FBSyxDQUFDQyxRQUFOLEVBQWQ7O0FBQ0EsMEJBQW1CLENBQUMsS0FBRCxFQUFRLFFBQVIsQ0FBbkIsMEJBQXNDO0FBQWpDLFFBQU1DLElBQUksV0FBVjs7QUFDSCw4QkFBbUIsQ0FBQyxPQUFELEVBQVUsT0FBVixDQUFuQiw2QkFBdUM7QUFBbEMsVUFBTUMsSUFBSSxhQUFWO0FBQ0gsVUFBTUMsR0FBRyxHQUNQRixJQUFJLEtBQUssS0FBVCxHQUNJQyxJQURKLG1CQUVhQSxJQUFJLENBQUNFLE1BQUwsQ0FBWSxDQUFaLEVBQWVDLFdBQWYsS0FBK0JILElBQUksQ0FBQ0ksS0FBTCxDQUFXLENBQVgsQ0FGNUMsQ0FERjtBQUlBLFVBQU1DLFNBQVMsR0FBR1YsQ0FBQyxDQUFDVyxNQUFGLENBQVNMLEdBQVQsQ0FBbEI7O0FBQ0EsVUFBSUksU0FBSixFQUFlO0FBQ2IsWUFBTUUsS0FBSyxHQUFHWixDQUFDLENBQUNhLEtBQUYsR0FDVkMsdUZBQWEsQ0FBQ2IsS0FBRCxFQUFRRyxJQUFSLEVBQWNDLElBQWQsQ0FESCxHQUVWVSx3RkFBYyxDQUFDZCxLQUFELEVBQVFELENBQUMsQ0FBQ2dCLFVBQVYsRUFBc0JaLElBQXRCLEVBQTRCQyxJQUE1QixDQUZsQjs7QUFHQSxZQUFJSyxTQUFTLENBQUNULEtBQVYsS0FBb0IsVUFBeEIsRUFBb0M7QUFDbENTLG1CQUFTLENBQUNFLEtBQVYsR0FBa0JBLEtBQWxCO0FBQ0QsU0FOWSxDQU9iOzs7QUFDQUYsaUJBQVMsQ0FBQ08sZUFBVixHQUE0QkwsS0FBNUI7QUFDRDtBQUNGO0FBQ0Y7QUFDRixDLENBRUQ7O0FBQ08sU0FBU00sZUFBVCxDQUF5QmxCLENBQXpCLEVBQTRCO0FBQ2pDLE1BQUk7QUFDRixRQUFNQyxLQUFLLEdBQUdDLEtBQUssQ0FBQ0MsUUFBTixFQUFkOztBQUNBLFNBQUssSUFBTWdCLGFBQVgsSUFBNEJuQixDQUFDLENBQUNXLE1BQTlCLEVBQXNDO0FBQ3BDLFVBQUlTLGlCQUFpQixDQUFDRCxhQUFELENBQXJCLEVBQXNDO0FBQ3BDO0FBQ0Q7O0FBQ0QsVUFBTWQsSUFBSSxHQUFHTCxDQUFDLENBQUNXLE1BQUYsQ0FBU1EsYUFBVCxFQUF3QmQsSUFBckM7O0FBQ0EsVUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVGdCLGVBQU8sQ0FBQ0MsS0FBUixDQUFjLCtCQUFkO0FBQ0E7QUFDRDs7QUFDRCxVQUFNWixTQUFTLEdBQUdWLENBQUMsQ0FBQ1csTUFBRixDQUFTUSxhQUFULENBQWxCOztBQUNBLFVBQUlULFNBQUosRUFBZTtBQUNiLFlBQU1FLEtBQUssR0FBR1osQ0FBQyxDQUFDYSxLQUFGLEdBQ1ZVLDZGQUFtQixDQUFDdEIsS0FBRCxFQUFRa0IsYUFBUixFQUF1QmQsSUFBdkIsQ0FEVCxHQUVWVSx3RkFBYyxDQUFDZCxLQUFELEVBQVFELENBQUMsQ0FBQ2dCLFVBQVYsRUFBc0JHLGFBQXRCLEVBQXFDZCxJQUFyQyxDQUZsQjs7QUFHQSxZQUFJSyxTQUFTLENBQUNULEtBQVYsS0FBb0IsVUFBeEIsRUFBb0M7QUFDbENELFdBQUMsQ0FBQ1csTUFBRixDQUFTUSxhQUFULEVBQXdCUCxLQUF4QixHQUFnQ0EsS0FBaEM7QUFDRDs7QUFDREYsaUJBQVMsQ0FBQ08sZUFBVixHQUE0QkwsS0FBNUI7QUFDRDtBQUNGO0FBQ0YsR0F0QkQsQ0FzQkUsT0FBT1ksQ0FBUCxFQUFVO0FBQ1ZILFdBQU8sQ0FBQ0MsS0FBUixDQUFjRSxDQUFkO0FBQ0Q7QUFDRjtBQUVNLFNBQVNKLGlCQUFULENBQTJCRCxhQUEzQixFQUEwQztBQUMvQyxTQUFPLENBQUMsT0FBRCxFQUFVLE9BQVYsRUFBbUIsYUFBbkIsRUFBa0MsYUFBbEMsRUFBaURNLFFBQWpELENBQ0xOLGFBREssQ0FBUDtBQUdELEMsQ0FFRDs7QUFDTyxTQUFTTyxlQUFULENBQXlCMUIsQ0FBekIsRUFBNEIyQixLQUE1QixFQUFtQztBQUN4QyxNQUFJMUIsS0FBSyxHQUFHQyxLQUFLLENBQUNDLFFBQU4sRUFBWjs7QUFFQSxNQUFJSCxDQUFDLENBQUNhLEtBQU4sRUFBYTtBQUNYLFFBQUliLENBQUMsQ0FBQzRCLEtBQU4sRUFBYTtBQUNYLFVBQUk7QUFDRjVCLFNBQUMsQ0FBQzZCLFVBQUYsR0FBZTVCLEtBQUssQ0FBQ1ksS0FBTixDQUFZaUIsT0FBWixDQUFvQkMsR0FBcEIsQ0FBd0JDLE1BQXhCLENBQStCQyxjQUEvQixHQUFnRCxDQUFoRCxDQUFmOztBQUNBLFlBQUksQ0FBQ2pDLENBQUMsQ0FBQzZCLFVBQVAsRUFBbUI7QUFDakI3QixXQUFDLENBQUM0QixLQUFGLEdBQVUsS0FBVjtBQUNEO0FBQ0YsT0FMRCxDQUtFLE9BQU9KLENBQVAsRUFBVSxDQUFFO0FBQ2Y7O0FBQ0QsUUFBSXhCLENBQUMsQ0FBQ2tDLEtBQU4sRUFBYTtBQUNYLFVBQUk7QUFDRmxDLFNBQUMsQ0FBQ21DLFVBQUYsR0FBZWxDLEtBQUssQ0FBQ1ksS0FBTixDQUFZaUIsT0FBWixDQUFvQkMsR0FBcEIsQ0FBd0JDLE1BQXhCLENBQStCSSxjQUEvQixHQUFnRCxDQUFoRCxDQUFmOztBQUNBLFlBQUksQ0FBQ3BDLENBQUMsQ0FBQ21DLFVBQVAsRUFBbUI7QUFDakJuQyxXQUFDLENBQUNrQyxLQUFGLEdBQVUsS0FBVjtBQUNEO0FBQ0YsT0FMRCxDQUtFLE9BQU9WLENBQVAsRUFBVSxDQUFFO0FBQ2Y7O0FBQ0QsUUFBSXhCLENBQUMsQ0FBQ3FDLE1BQU4sRUFBYztBQUNaLFVBQUk7QUFDRnJDLFNBQUMsQ0FBQ3NDLGdCQUFGLEdBQ0VyQyxLQUFLLENBQUNZLEtBQU4sQ0FBWWlCLE9BQVosQ0FBb0JPLE1BQXBCLENBQTJCTCxNQUEzQixDQUFrQ0ksY0FBbEMsR0FBbUQsQ0FBbkQsQ0FERjtBQUVBcEMsU0FBQyxDQUFDdUMsZ0JBQUYsR0FDRXRDLEtBQUssQ0FBQ1ksS0FBTixDQUFZaUIsT0FBWixDQUFvQk8sTUFBcEIsQ0FBMkJMLE1BQTNCLENBQWtDQyxjQUFsQyxHQUFtRCxDQUFuRCxDQURGOztBQUVBLFlBQUksRUFBRWpDLENBQUMsQ0FBQ3NDLGdCQUFGLElBQXNCdEMsQ0FBQyxDQUFDdUMsZ0JBQTFCLENBQUosRUFBaUQ7QUFDL0N2QyxXQUFDLENBQUNxQyxNQUFGLEdBQVcsS0FBWDtBQUNEO0FBQ0YsT0FSRCxDQVFFLE9BQU9iLENBQVAsRUFBVSxDQUFFO0FBQ2Y7O0FBQ0Q7QUFDRDs7QUFFRCxNQUFJZ0IsU0FBUyxHQUFHLElBQWhCLENBbEN3QyxDQWtDbEI7QUFDdEI7QUFDQTs7QUFDQSxNQUFJO0FBQ0YsUUFBSUMsRUFBRSxHQUFHeEMsS0FBSyxDQUFDeUMsWUFBTixDQUFtQjFDLENBQUMsQ0FBQ2dCLFVBQXJCLENBQVQ7O0FBQ0EsUUFDRXlCLEVBQUUsSUFDRkEsRUFBRSxDQUFDRSxNQURILElBRUFGLEVBQUUsQ0FBQ0UsTUFBSCxDQUFVQyxPQUZWLElBR0FILEVBQUUsQ0FBQ0UsTUFBSCxDQUFVQyxPQUFWLENBQWtCQyxJQUFsQixLQUEyQixjQUo3QixFQUtFO0FBQ0EsVUFDRUosRUFBRSxDQUFDSyxPQUFILElBQ0EsQ0FBQyxDQUFDLFdBQUQsRUFBYyxXQUFkLEVBQTJCckIsUUFBM0IsQ0FBb0NnQixFQUFFLENBQUNLLE9BQUgsQ0FBV0MsWUFBL0MsQ0FGSCxFQUdFO0FBQ0FQLGlCQUFTLEdBQUcsS0FBWjtBQUNEO0FBQ0Y7QUFDRixHQWZELENBZUUsT0FBT2hCLENBQVAsRUFBVTtBQUNWSCxXQUFPLENBQUNDLEtBQVIsQ0FBY0UsQ0FBZDtBQUNEOztBQUNELE1BQUksQ0FBQ2dCLFNBQUwsRUFBZ0I7QUFDZHhDLEtBQUMsQ0FBQzRCLEtBQUYsR0FBVSxLQUFWO0FBQ0E1QixLQUFDLENBQUM2QixVQUFGLEdBQWUsS0FBZjtBQUNBN0IsS0FBQyxDQUFDa0MsS0FBRixHQUFVLEtBQVY7QUFDQWxDLEtBQUMsQ0FBQ21DLFVBQUYsR0FBZSxLQUFmO0FBQ0FuQyxLQUFDLENBQUNxQyxNQUFGLEdBQVcsS0FBWDtBQUNBckMsS0FBQyxDQUFDZ0QsV0FBRixHQUFnQixLQUFoQjtBQUNBO0FBQ0Q7O0FBRUQsTUFBSTtBQUNGLFFBQU1DLFVBQVUsR0FBR2hELEtBQUssQ0FBQzZCLE9BQXpCLENBREUsQ0FHRjs7QUFDQSxRQUNFOUIsQ0FBQyxDQUFDNEIsS0FBRixJQUNBc0IscUdBQTJCLENBQUNqRCxLQUFELEVBQVFELENBQUMsQ0FBQ2dCLFVBQVYsRUFBc0IsV0FBdEIsQ0FGN0IsRUFHRTtBQUNBLFVBQU1hLFVBQVUsR0FBR2Qsd0ZBQWMsQ0FBQ2QsS0FBRCxFQUFRRCxDQUFDLENBQUNnQixVQUFWLEVBQXNCLEtBQXRCLEVBQTZCLE9BQTdCLENBQWpDOztBQUNBLFVBQUlhLFVBQUosRUFBZ0I7QUFDZCxZQUNFRixLQUFLLElBQ0xBLEtBQUssQ0FBQ0UsVUFETixJQUVBRixLQUFLLENBQUNFLFVBQU4sQ0FBaUJzQixFQUFqQixLQUF3QnRCLFVBQVUsQ0FBQ3NCLEVBSHJDLEVBSUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBbkQsV0FBQyxDQUFDNkIsVUFBRixHQUFlQSxVQUFmO0FBQ0QsU0FWRCxNQVVPLElBQUksQ0FBQ0EsVUFBVSxDQUFDdUIsS0FBaEIsRUFBdUI7QUFDNUI7QUFDQXBELFdBQUMsQ0FBQzZCLFVBQUYsR0FBZUEsVUFBZjtBQUNEO0FBQ0Y7O0FBQ0QsVUFBSSxDQUFDN0IsQ0FBQyxDQUFDNkIsVUFBUCxFQUFtQjtBQUNqQjdCLFNBQUMsQ0FBQzRCLEtBQUYsR0FBVSxLQUFWO0FBQ0Q7QUFDRixLQTVCQyxDQTZCRjs7O0FBQ0EsUUFDRTVCLENBQUMsQ0FBQ2tDLEtBQUYsSUFDQWdCLHFHQUEyQixDQUFDakQsS0FBRCxFQUFRRCxDQUFDLENBQUNnQixVQUFWLEVBQXNCLFdBQXRCLENBRjdCLEVBR0U7QUFDQSxVQUFNbUIsVUFBVSxHQUFHcEIsd0ZBQWMsQ0FBQ2QsS0FBRCxFQUFRRCxDQUFDLENBQUNnQixVQUFWLEVBQXNCLEtBQXRCLEVBQTZCLE9BQTdCLENBQWpDOztBQUNBLFVBQUltQixVQUFKLEVBQWdCO0FBQ2QsWUFDRVIsS0FBSyxJQUNMQSxLQUFLLENBQUNRLFVBRE4sSUFFQVIsS0FBSyxDQUFDUSxVQUFOLENBQWlCZ0IsRUFBakIsS0FBd0JoQixVQUFVLENBQUNnQixFQUhyQyxFQUlFO0FBQ0FuRCxXQUFDLENBQUNtQyxVQUFGLEdBQWVBLFVBQWY7QUFDRCxTQU5ELE1BTU8sSUFBSSxDQUFDQSxVQUFVLENBQUNpQixLQUFoQixFQUF1QjtBQUM1QjtBQUNBcEQsV0FBQyxDQUFDbUMsVUFBRixHQUFlQSxVQUFmO0FBQ0Q7QUFDRjs7QUFDRCxVQUFJLENBQUNuQyxDQUFDLENBQUNtQyxVQUFQLEVBQW1CO0FBQ2pCbkMsU0FBQyxDQUFDa0MsS0FBRixHQUFVLEtBQVY7QUFDRDtBQUNGLEtBbERDLENBb0RGOzs7QUFDQSxRQUNFbEMsQ0FBQyxDQUFDcUMsTUFBRixJQUNBYSxxR0FBMkIsQ0FBQ2pELEtBQUQsRUFBUUQsQ0FBQyxDQUFDZ0IsVUFBVixFQUFzQixjQUF0QixDQUY3QixFQUdFO0FBQ0EsVUFBTXVCLGdCQUFnQixHQUFHeEIsd0ZBQWMsQ0FDckNkLEtBRHFDLEVBRXJDRCxDQUFDLENBQUNnQixVQUZtQyxFQUdyQyxRQUhxQyxFQUlyQyxPQUpxQyxDQUF2Qzs7QUFNQSxVQUFJdUIsZ0JBQUosRUFBc0I7QUFDcEIsWUFDRVosS0FBSyxJQUNMQSxLQUFLLENBQUNZLGdCQUROLElBRUFaLEtBQUssQ0FBQ1ksZ0JBQU4sQ0FBdUJZLEVBQXZCLEtBQThCWixnQkFBZ0IsQ0FBQ1ksRUFIakQsRUFJRTtBQUNBbkQsV0FBQyxDQUFDdUMsZ0JBQUYsR0FBcUJBLGdCQUFyQjtBQUNELFNBTkQsTUFNTyxJQUFJLENBQUNBLGdCQUFnQixDQUFDYSxLQUF0QixFQUE2QjtBQUNsQztBQUNBcEQsV0FBQyxDQUFDdUMsZ0JBQUYsR0FBcUJBLGdCQUFyQjtBQUNEO0FBQ0Y7QUFDRixLQTNFQyxDQTRFRjs7O0FBQ0EsUUFDRXZDLENBQUMsQ0FBQ3FDLE1BQUYsSUFDQWEscUdBQTJCLENBQUNqRCxLQUFELEVBQVFELENBQUMsQ0FBQ2dCLFVBQVYsRUFBc0IsY0FBdEIsQ0FGN0IsRUFHRTtBQUNBLFVBQU1zQixnQkFBZ0IsR0FBR3ZCLHdGQUFjLENBQ3JDZCxLQURxQyxFQUVyQ0QsQ0FBQyxDQUFDZ0IsVUFGbUMsRUFHckMsUUFIcUMsRUFJckMsT0FKcUMsQ0FBdkM7O0FBTUEsVUFBSXNCLGdCQUFKLEVBQXNCO0FBQ3BCLFlBQ0VYLEtBQUssSUFDTEEsS0FBSyxDQUFDVyxnQkFETixJQUVBWCxLQUFLLENBQUNXLGdCQUFOLENBQXVCYSxFQUF2QixLQUE4QmIsZ0JBQWdCLENBQUNhLEVBSGpELEVBSUU7QUFDQW5ELFdBQUMsQ0FBQ3NDLGdCQUFGLEdBQXFCQSxnQkFBckI7QUFDRCxTQU5ELE1BTU8sSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQ2MsS0FBdEIsRUFBNkI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBcEQsV0FBQyxDQUFDc0MsZ0JBQUYsR0FBcUJBLGdCQUFyQjtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxRQUFJLEVBQUV0QyxDQUFDLENBQUNzQyxnQkFBRixJQUFzQnRDLENBQUMsQ0FBQ3VDLGdCQUExQixDQUFKLEVBQWlEO0FBQy9DdkMsT0FBQyxDQUFDcUMsTUFBRixHQUFXLEtBQVg7QUFDRDtBQUNGLEdBOUdELENBOEdFLE9BQU9iLENBQVAsRUFBVTtBQUNWSCxXQUFPLENBQUNDLEtBQVIsQ0FBYyxxQ0FBZCxFQUFxREUsQ0FBckQ7QUFDRDtBQUNGIiwiZmlsZSI6Ii4vc3JjL1BhcnRpY2lwYW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0TG9jYWxJc1N1YnNjcmliZWRUb1RyYWNrLFxuICBnZXRMb2NhbFRyYWNrLFxuICBnZXRSZW1vdGVUcmFjayxcbiAgZ2V0TG9jYWxDdXN0b21UcmFjayxcbn0gZnJvbSAnLi9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL3NlbGVjdG9ycyc7XG5cbi8vIEFkZHMgdHJhY2tzIHRvIGRhaWx5LWpzIFBhcnRpY2lwYW50IG9iamVjdC5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUcmFja3MocCkge1xuICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGZvciAoY29uc3QgdHlwZSBvZiBbJ2NhbScsICdzY3JlZW4nXSkge1xuICAgIGZvciAoY29uc3Qga2luZCBvZiBbJ3ZpZGVvJywgJ2F1ZGlvJ10pIHtcbiAgICAgIGNvbnN0IGtleSA9XG4gICAgICAgIHR5cGUgPT09ICdjYW0nXG4gICAgICAgICAgPyBraW5kXG4gICAgICAgICAgOiBgc2NyZWVuJHtraW5kLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2luZC5zbGljZSgxKX1gO1xuICAgICAgY29uc3QgdHJhY2tJbmZvID0gcC50cmFja3Nba2V5XTtcbiAgICAgIGlmICh0cmFja0luZm8pIHtcbiAgICAgICAgY29uc3QgdHJhY2sgPSBwLmxvY2FsXG4gICAgICAgICAgPyBnZXRMb2NhbFRyYWNrKHN0YXRlLCB0eXBlLCBraW5kKVxuICAgICAgICAgIDogZ2V0UmVtb3RlVHJhY2soc3RhdGUsIHAuc2Vzc2lvbl9pZCwgdHlwZSwga2luZCk7XG4gICAgICAgIGlmICh0cmFja0luZm8uc3RhdGUgPT09ICdwbGF5YWJsZScpIHtcbiAgICAgICAgICB0cmFja0luZm8udHJhY2sgPSB0cmFjaztcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgXCJwZXJzaXN0ZW50XCIgdHJhY2sgZmllbGQgd2hlcmUgdHJhY2sgaXMgcHJlc2VudCBldmVuIGlmIG5vdCBcInBsYXlhYmxlXCJcbiAgICAgICAgdHJhY2tJbmZvLnBlcnNpc3RlbnRUcmFjayA9IHRyYWNrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyB0b2RvOiByZWZhY3RvciBzbyB0aGF0IGhpcyBsb2dpYyBpcyBwYXJ0IG9mIGFkZFRyYWNrcyBhbmQgZnJpZW5kcygpXG5leHBvcnQgZnVuY3Rpb24gYWRkQ3VzdG9tVHJhY2tzKHApIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgZm9yIChjb25zdCB0cmFja0VudHJ5S2V5IGluIHAudHJhY2tzKSB7XG4gICAgICBpZiAoaXNQcmVkZWZpbmVkVHJhY2sodHJhY2tFbnRyeUtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBraW5kID0gcC50cmFja3NbdHJhY2tFbnRyeUtleV0ua2luZDtcbiAgICAgIGlmICgha2luZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmtub3duIHR5cGUgZm9yIGN1c3RvbSB0cmFjaycpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRyYWNrSW5mbyA9IHAudHJhY2tzW3RyYWNrRW50cnlLZXldO1xuICAgICAgaWYgKHRyYWNrSW5mbykge1xuICAgICAgICBjb25zdCB0cmFjayA9IHAubG9jYWxcbiAgICAgICAgICA/IGdldExvY2FsQ3VzdG9tVHJhY2soc3RhdGUsIHRyYWNrRW50cnlLZXksIGtpbmQpXG4gICAgICAgICAgOiBnZXRSZW1vdGVUcmFjayhzdGF0ZSwgcC5zZXNzaW9uX2lkLCB0cmFja0VudHJ5S2V5LCBraW5kKTtcbiAgICAgICAgaWYgKHRyYWNrSW5mby5zdGF0ZSA9PT0gJ3BsYXlhYmxlJykge1xuICAgICAgICAgIHAudHJhY2tzW3RyYWNrRW50cnlLZXldLnRyYWNrID0gdHJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgdHJhY2tJbmZvLnBlcnNpc3RlbnRUcmFjayA9IHRyYWNrO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJlZGVmaW5lZFRyYWNrKHRyYWNrRW50cnlLZXkpIHtcbiAgcmV0dXJuIFsndmlkZW8nLCAnYXVkaW8nLCAnc2NyZWVuVmlkZW8nLCAnc2NyZWVuQXVkaW8nXS5pbmNsdWRlcyhcbiAgICB0cmFja0VudHJ5S2V5XG4gICk7XG59XG5cbi8vIEFkZHMgdHJhY2tzIHRvIGRhaWx5LWpzIFBhcnRpY2lwYW50IG9iamVjdC5cbmV4cG9ydCBmdW5jdGlvbiBhZGRMZWdhY3lUcmFja3MocCwgcHJldlApIHtcbiAgbGV0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcblxuICBpZiAocC5sb2NhbCkge1xuICAgIGlmIChwLmF1ZGlvKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwLmF1ZGlvVHJhY2sgPSBzdGF0ZS5sb2NhbC5zdHJlYW1zLmNhbS5zdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXTtcbiAgICAgICAgaWYgKCFwLmF1ZGlvVHJhY2spIHtcbiAgICAgICAgICBwLmF1ZGlvID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIGlmIChwLnZpZGVvKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwLnZpZGVvVHJhY2sgPSBzdGF0ZS5sb2NhbC5zdHJlYW1zLmNhbS5zdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcbiAgICAgICAgaWYgKCFwLnZpZGVvVHJhY2spIHtcbiAgICAgICAgICBwLnZpZGVvID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIGlmIChwLnNjcmVlbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcC5zY3JlZW5WaWRlb1RyYWNrID1cbiAgICAgICAgICBzdGF0ZS5sb2NhbC5zdHJlYW1zLnNjcmVlbi5zdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcbiAgICAgICAgcC5zY3JlZW5BdWRpb1RyYWNrID1cbiAgICAgICAgICBzdGF0ZS5sb2NhbC5zdHJlYW1zLnNjcmVlbi5zdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXTtcbiAgICAgICAgaWYgKCEocC5zY3JlZW5WaWRlb1RyYWNrIHx8IHAuc2NyZWVuQXVkaW9UcmFjaykpIHtcbiAgICAgICAgICBwLnNjcmVlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgY29ubmVjdGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB0byB0cnVlIHRvIG1pbmltaXplIGltcGFjdCBvZiBuZXcgYnVnc1xuICAvLyBhcyBvZiAxMS8yMC8yMDE5IHdoZW4gdGhpcyBibG9jayBvZiBjb2RlIHdhc1xuICAvLyBmaXJzdCB3cml0dGVuXG4gIHRyeSB7XG4gICAgbGV0IHNwID0gc3RhdGUucGFydGljaXBhbnRzW3Auc2Vzc2lvbl9pZF07XG4gICAgaWYgKFxuICAgICAgc3AgJiZcbiAgICAgIHNwLnB1YmxpYyAmJlxuICAgICAgc3AucHVibGljLnJ0Y1R5cGUgJiZcbiAgICAgIHNwLnB1YmxpYy5ydGNUeXBlLmltcGwgPT09ICdwZWVyLXRvLXBlZXInXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNwLnByaXZhdGUgJiZcbiAgICAgICAgIVsnY29ubmVjdGVkJywgJ2NvbXBsZXRlZCddLmluY2x1ZGVzKHNwLnByaXZhdGUucGVlcmluZ1N0YXRlKVxuICAgICAgKSB7XG4gICAgICAgIGNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gIH1cbiAgaWYgKCFjb25uZWN0ZWQpIHtcbiAgICBwLmF1ZGlvID0gZmFsc2U7XG4gICAgcC5hdWRpb1RyYWNrID0gZmFsc2U7XG4gICAgcC52aWRlbyA9IGZhbHNlO1xuICAgIHAudmlkZW9UcmFjayA9IGZhbHNlO1xuICAgIHAuc2NyZWVuID0gZmFsc2U7XG4gICAgcC5zY3JlZW5UcmFjayA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYWxsU3RyZWFtcyA9IHN0YXRlLnN0cmVhbXM7XG5cbiAgICAvLyBmaW5kIGF1ZGlvIHRyYWNrXG4gICAgaWYgKFxuICAgICAgcC5hdWRpbyAmJlxuICAgICAgZ2V0TG9jYWxJc1N1YnNjcmliZWRUb1RyYWNrKHN0YXRlLCBwLnNlc3Npb25faWQsICdjYW0tYXVkaW8nKVxuICAgICkge1xuICAgICAgY29uc3QgYXVkaW9UcmFjayA9IGdldFJlbW90ZVRyYWNrKHN0YXRlLCBwLnNlc3Npb25faWQsICdjYW0nLCAnYXVkaW8nKTtcbiAgICAgIGlmIChhdWRpb1RyYWNrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2UCAmJlxuICAgICAgICAgIHByZXZQLmF1ZGlvVHJhY2sgJiZcbiAgICAgICAgICBwcmV2UC5hdWRpb1RyYWNrLmlkID09PSBhdWRpb1RyYWNrLmlkXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gYXBwYXJlbnRseSBpZGVudGljYWwgYXVkaW8gdHJhY2sgYWxyZWFkeSBpblxuICAgICAgICAgIC8vIG91ciBwYXJ0aWNpcGFudCBzdHJ1Y3QgbGVhdmUgaXQgaW4gcGxhY2UgdG8gYXZvaWQgZmxpY2tlclxuICAgICAgICAgIC8vIGR1cmluZyBxdWljayBtdXRlZC91bm11dGVkIFBlZXJDb25uZWN0aW9uIGN5Y2xlcy4gd2UnbGwgdXBkYXRlXG4gICAgICAgICAgLy8gYXVkaW8vdmlkZW8gbXV0ZWQgYXQgdGhlIGFwcCBsZXZlbCB2aWEgc2lnbmFsaW5nXG4gICAgICAgICAgcC5hdWRpb1RyYWNrID0gYXVkaW9UcmFjaztcbiAgICAgICAgfSBlbHNlIGlmICghYXVkaW9UcmFjay5tdXRlZCkge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSwgYWRkIHRoZSBmb3VuZCB0cmFjayBpZiBpdCdzIG5vdCBtdXRlZFxuICAgICAgICAgIHAuYXVkaW9UcmFjayA9IGF1ZGlvVHJhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghcC5hdWRpb1RyYWNrKSB7XG4gICAgICAgIHAuYXVkaW8gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZmluZCB2aWRlbyB0cmFja1xuICAgIGlmIChcbiAgICAgIHAudmlkZW8gJiZcbiAgICAgIGdldExvY2FsSXNTdWJzY3JpYmVkVG9UcmFjayhzdGF0ZSwgcC5zZXNzaW9uX2lkLCAnY2FtLXZpZGVvJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHZpZGVvVHJhY2sgPSBnZXRSZW1vdGVUcmFjayhzdGF0ZSwgcC5zZXNzaW9uX2lkLCAnY2FtJywgJ3ZpZGVvJyk7XG4gICAgICBpZiAodmlkZW9UcmFjaykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldlAgJiZcbiAgICAgICAgICBwcmV2UC52aWRlb1RyYWNrICYmXG4gICAgICAgICAgcHJldlAudmlkZW9UcmFjay5pZCA9PT0gdmlkZW9UcmFjay5pZFxuICAgICAgICApIHtcbiAgICAgICAgICBwLnZpZGVvVHJhY2sgPSB2aWRlb1RyYWNrO1xuICAgICAgICB9IGVsc2UgaWYgKCF2aWRlb1RyYWNrLm11dGVkKSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlLCBhZGQgdGhlIGZvdW5kIHRyYWNrIGlmIGl0J3Mgbm90IG11dGVkXG4gICAgICAgICAgcC52aWRlb1RyYWNrID0gdmlkZW9UcmFjaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFwLnZpZGVvVHJhY2spIHtcbiAgICAgICAgcC52aWRlbyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZpbmQgc2NyZWVuLXNoYXJlIGF1ZGlvIHRyYWNrXG4gICAgaWYgKFxuICAgICAgcC5zY3JlZW4gJiZcbiAgICAgIGdldExvY2FsSXNTdWJzY3JpYmVkVG9UcmFjayhzdGF0ZSwgcC5zZXNzaW9uX2lkLCAnc2NyZWVuLWF1ZGlvJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHNjcmVlbkF1ZGlvVHJhY2sgPSBnZXRSZW1vdGVUcmFjayhcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHAuc2Vzc2lvbl9pZCxcbiAgICAgICAgJ3NjcmVlbicsXG4gICAgICAgICdhdWRpbydcbiAgICAgICk7XG4gICAgICBpZiAoc2NyZWVuQXVkaW9UcmFjaykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldlAgJiZcbiAgICAgICAgICBwcmV2UC5zY3JlZW5BdWRpb1RyYWNrICYmXG4gICAgICAgICAgcHJldlAuc2NyZWVuQXVkaW9UcmFjay5pZCA9PT0gc2NyZWVuQXVkaW9UcmFjay5pZFxuICAgICAgICApIHtcbiAgICAgICAgICBwLnNjcmVlbkF1ZGlvVHJhY2sgPSBzY3JlZW5BdWRpb1RyYWNrO1xuICAgICAgICB9IGVsc2UgaWYgKCFzY3JlZW5BdWRpb1RyYWNrLm11dGVkKSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlLCBhZGQgdGhlIGZvdW5kIHRyYWNrIGlmIGl0J3Mgbm90IG11dGVkXG4gICAgICAgICAgcC5zY3JlZW5BdWRpb1RyYWNrID0gc2NyZWVuQXVkaW9UcmFjaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBmaW5kIHNjcmVlbi1zaGFyZSB2aWRlbyB0cmFja1xuICAgIGlmIChcbiAgICAgIHAuc2NyZWVuICYmXG4gICAgICBnZXRMb2NhbElzU3Vic2NyaWJlZFRvVHJhY2soc3RhdGUsIHAuc2Vzc2lvbl9pZCwgJ3NjcmVlbi12aWRlbycpXG4gICAgKSB7XG4gICAgICBjb25zdCBzY3JlZW5WaWRlb1RyYWNrID0gZ2V0UmVtb3RlVHJhY2soXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwLnNlc3Npb25faWQsXG4gICAgICAgICdzY3JlZW4nLFxuICAgICAgICAndmlkZW8nXG4gICAgICApO1xuICAgICAgaWYgKHNjcmVlblZpZGVvVHJhY2spIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXZQICYmXG4gICAgICAgICAgcHJldlAuc2NyZWVuVmlkZW9UcmFjayAmJlxuICAgICAgICAgIHByZXZQLnNjcmVlblZpZGVvVHJhY2suaWQgPT09IHNjcmVlblZpZGVvVHJhY2suaWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgcC5zY3JlZW5WaWRlb1RyYWNrID0gc2NyZWVuVmlkZW9UcmFjaztcbiAgICAgICAgfSBlbHNlIGlmICghc2NyZWVuVmlkZW9UcmFjay5tdXRlZCkge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSwgYWRkIHRoZSBmb3VuZCB0cmFjayBpZiBpdCdzIG5vdCBtdXRlZFxuICAgICAgICAgIC8vIG5vdGU6IHRoZXJlIGlzIGFuIGlzc3VlIGhlcmUgd2l0aCB0aW1pbmcgLi4uIENocm9tZSAoYW5kXG4gICAgICAgICAgLy8gcG9zc2libHkgb3RoZXIgYnJvd3NlcnMpLCBnZXRzIGEgdmlkZW8gdHJhY2sgdGhhdCdzIGluaXRpYWxseVxuICAgICAgICAgIC8vIG5vdCBtdXRlZCwgZm9yIGFuIGF1ZGlvLW9ubHkgc2NyZWVuc2hhcmUuIFRoZSB0cmFja1xuICAgICAgICAgIC8vIHN3aXRjaGVzIHRvIG11dGVkIGZhaXJseSBxdWlja2x5LCBidXQgd2UgZG9uJ3QgaGF2ZSBhbnlcbiAgICAgICAgICAvLyBsb2dpYyBpbiBwbGFjZSB0byByZXNwb25kIHRvIHRoYXQuIHRvZG86IGZpeCB0aGlzIHNvIHRoYXQsXG4gICAgICAgICAgLy8gYXQgdGhlIHZlcnkgbGVhc3Qgd2UgZ2V0IGEgdHJhY2stc3RvcHBlZCBldmVudCB3aGVuIHRoZVxuICAgICAgICAgIC8vIFwiZW1wdHlcIiB0cmFjayBzd2l0Y2hlcyB0byBtdXRlZC5cbiAgICAgICAgICBwLnNjcmVlblZpZGVvVHJhY2sgPSBzY3JlZW5WaWRlb1RyYWNrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghKHAuc2NyZWVuVmlkZW9UcmFjayB8fCBwLnNjcmVlbkF1ZGlvVHJhY2spKSB7XG4gICAgICBwLnNjcmVlbiA9IGZhbHNlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ3VuZXhwZWN0ZWQgZXJyb3IgbWF0Y2hpbmcgdXAgdHJhY2tzJywgZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/Participant.js\n" + ); + + /***/ + }, + + /***/ "./src/main.js": + /*!*********************!*\ + !*** ./src/main.js ***! + \*********************/ + /*! no static exports found */ + /***/ function (module, exports, __webpack_require__) { + eval( + 'var DailyIframe = __webpack_require__(/*! ./module.js */ "./src/module.js");\n\nmodule.exports = DailyIframe.default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9tYWluLmpzPzU2ZDciXSwibmFtZXMiOlsiRGFpbHlJZnJhbWUiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiJBQUFBLElBQU1BLFdBQVcsR0FBR0MsbUJBQU8sQ0FBQyxvQ0FBRCxDQUEzQjs7QUFDQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCSCxXQUFXLENBQUNJLE9BQTdCIiwiZmlsZSI6Ii4vc3JjL21haW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBEYWlseUlmcmFtZSA9IHJlcXVpcmUoJy4vbW9kdWxlLmpzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IERhaWx5SWZyYW1lLmRlZmF1bHQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/main.js\n' + ); + + /***/ + }, + + /***/ "./src/module.js": + /*!***********************!*\ + !*** ./src/module.js ***! + \***********************/ + /*! exports provided: DAILY_STATE_NEW, DAILY_STATE_JOINING, DAILY_STATE_JOINED, DAILY_STATE_LEFT, DAILY_STATE_ERROR, DAILY_TRACK_STATE_BLOCKED, DAILY_TRACK_STATE_OFF, DAILY_TRACK_STATE_SENDABLE, DAILY_TRACK_STATE_LOADING, DAILY_TRACK_STATE_INTERRUPTED, DAILY_TRACK_STATE_PLAYABLE, DAILY_ACCESS_UNKNOWN, DAILY_ACCESS_LEVEL_FULL, DAILY_ACCESS_LEVEL_LOBBY, DAILY_ACCESS_LEVEL_NONE, DAILY_RECEIVE_SETTINGS_BASE_KEY, DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY, DAILY_FATAL_ERROR_EJECTED, DAILY_FATAL_ERROR_NBF_ROOM, DAILY_FATAL_ERROR_NBF_TOKEN, DAILY_FATAL_ERROR_EXP_ROOM, DAILY_FATAL_ERROR_EXP_TOKEN, DAILY_FATAL_ERROR_MEETING_FULL, DAILY_CAMERA_ERROR_CAM_IN_USE, DAILY_CAMERA_ERROR_MIC_IN_USE, DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE, DAILY_CAMERA_ERROR_PERMISSIONS, DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES, DAILY_CAMERA_ERROR_NOT_FOUND, DAILY_CAMERA_ERROR_CONSTRAINTS, DAILY_CAMERA_ERROR_UNKNOWN, DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG, DAILY_EVENT_IFRAME_LAUNCH_CONFIG, DAILY_EVENT_THEME_UPDATED, DAILY_EVENT_LOADING, DAILY_EVENT_LOADED, DAILY_EVENT_LOAD_ATTEMPT_FAILED, DAILY_EVENT_STARTED_CAMERA, DAILY_EVENT_CAMERA_ERROR, DAILY_EVENT_JOINING_MEETING, DAILY_EVENT_JOINED_MEETING, DAILY_EVENT_LEFT_MEETING, DAILY_EVENT_PARTICIPANT_JOINED, DAILY_EVENT_PARTICIPANT_UPDATED, DAILY_EVENT_PARTICIPANT_LEFT, DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED, DAILY_EVENT_TRACK_STARTED, DAILY_EVENT_TRACK_STOPPED, DAILY_EVENT_RECORDING_STARTED, DAILY_EVENT_RECORDING_STOPPED, DAILY_EVENT_RECORDING_STATS, DAILY_EVENT_RECORDING_ERROR, DAILY_EVENT_RECORDING_UPLOAD_COMPLETED, DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED, DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED, DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED, DAILY_EVENT_TRANSCRIPTION_STARTED, DAILY_EVENT_TRANSCRIPTION_STOPPED, DAILY_EVENT_TRANSCRIPTION_ERROR, DAILY_EVENT_ERROR, DAILY_EVENT_APP_MSG, DAILY_EVENT_INPUT_EVENT, DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED, DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED, DAILY_EVENT_NETWORK_QUALITY_CHANGE, DAILY_EVENT_ACTIVE_SPEAKER_CHANGE, DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE, DAILY_EVENT_FULLSCREEN, DAILY_EVENT_EXIT_FULLSCREEN, DAILY_EVENT_NETWORK_CONNECTION, DAILY_EVENT_RECORDING_DATA, DAILY_EVENT_LIVE_STREAMING_STARTED, DAILY_EVENT_LIVE_STREAMING_STOPPED, DAILY_EVENT_LIVE_STREAMING_ERROR, DAILY_EVENT_LANG_UPDATED, DAILY_EVENT_ACCESS_STATE_UPDATED, DAILY_EVENT_MEETING_SESSION_UPDATED, DAILY_EVENT_MEETING_SESSION_STATE_UPDATED, DAILY_EVENT_MEETING_SESSION_DATA_ERROR, DAILY_EVENT_WAITING_PARTICIPANT_ADDED, DAILY_EVENT_WAITING_PARTICIPANT_REMOVED, DAILY_EVENT_WAITING_PARTICIPANT_UPDATED, DAILY_EVENT_RECEIVE_SETTINGS_UPDATED, DAILY_EVENT_INPUT_SETTINGS_UPDATED, DAILY_EVENT_NONFATAL_ERROR, default */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + '__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DailyIframe; });\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/objectWithoutProperties.js");\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js");\n/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! events */ "./node_modules/events/events.js");\n/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(events__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var fast_equals__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! fast-equals */ "./node_modules/fast-equals/dist/fast-equals.js");\n/* harmony import */ var fast_equals__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(fast_equals__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var bowser__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! bowser */ "./node_modules/bowser/es5.js");\n/* harmony import */ var bowser__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(bowser__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./shared-with-pluot-core/CommonIncludes.js */ "./src/shared-with-pluot-core/CommonIncludes.js");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_STATE_NEW", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_NEW"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_STATE_JOINING", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINING"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_STATE_JOINED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_STATE_LEFT", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LEFT"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_STATE_ERROR", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_ERROR"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_TRACK_STATE_BLOCKED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_TRACK_STATE_BLOCKED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_TRACK_STATE_OFF", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_TRACK_STATE_OFF"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_TRACK_STATE_SENDABLE", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_TRACK_STATE_SENDABLE"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_TRACK_STATE_LOADING", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_TRACK_STATE_LOADING"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_TRACK_STATE_INTERRUPTED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_TRACK_STATE_INTERRUPTED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_TRACK_STATE_PLAYABLE", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_TRACK_STATE_PLAYABLE"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_ACCESS_UNKNOWN", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_ACCESS_UNKNOWN"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_ACCESS_LEVEL_FULL", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_ACCESS_LEVEL_FULL"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_ACCESS_LEVEL_LOBBY", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_ACCESS_LEVEL_LOBBY"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_ACCESS_LEVEL_NONE", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_ACCESS_LEVEL_NONE"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_RECEIVE_SETTINGS_BASE_KEY", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_RECEIVE_SETTINGS_BASE_KEY"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_FATAL_ERROR_EJECTED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_FATAL_ERROR_EJECTED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_FATAL_ERROR_NBF_ROOM", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_FATAL_ERROR_NBF_ROOM"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_FATAL_ERROR_NBF_TOKEN", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_FATAL_ERROR_NBF_TOKEN"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_FATAL_ERROR_EXP_ROOM", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_FATAL_ERROR_EXP_ROOM"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_FATAL_ERROR_EXP_TOKEN", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_FATAL_ERROR_EXP_TOKEN"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_FATAL_ERROR_MEETING_FULL", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_FATAL_ERROR_MEETING_FULL"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_CAMERA_ERROR_CAM_IN_USE", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CAMERA_ERROR_CAM_IN_USE"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_CAMERA_ERROR_MIC_IN_USE", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CAMERA_ERROR_MIC_IN_USE"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_CAMERA_ERROR_PERMISSIONS", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CAMERA_ERROR_PERMISSIONS"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_CAMERA_ERROR_NOT_FOUND", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CAMERA_ERROR_NOT_FOUND"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_CAMERA_ERROR_CONSTRAINTS", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CAMERA_ERROR_CONSTRAINTS"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_CAMERA_ERROR_UNKNOWN", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CAMERA_ERROR_UNKNOWN"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_IFRAME_LAUNCH_CONFIG", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_IFRAME_LAUNCH_CONFIG"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_THEME_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_THEME_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LOADING", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOADING"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LOADED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOADED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LOAD_ATTEMPT_FAILED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOAD_ATTEMPT_FAILED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_STARTED_CAMERA", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_STARTED_CAMERA"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_CAMERA_ERROR", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_CAMERA_ERROR"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_JOINING_MEETING", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_JOINING_MEETING"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_JOINED_MEETING", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_JOINED_MEETING"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LEFT_MEETING", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LEFT_MEETING"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_PARTICIPANT_JOINED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_PARTICIPANT_JOINED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_PARTICIPANT_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_PARTICIPANT_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_PARTICIPANT_LEFT", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_PARTICIPANT_LEFT"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_TRACK_STARTED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STARTED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_TRACK_STOPPED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STOPPED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_RECORDING_STARTED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STARTED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_RECORDING_STOPPED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STOPPED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_RECORDING_STATS", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STATS"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_RECORDING_ERROR", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_ERROR"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_RECORDING_UPLOAD_COMPLETED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_UPLOAD_COMPLETED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_TRANSCRIPTION_STARTED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRANSCRIPTION_STARTED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_TRANSCRIPTION_STOPPED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRANSCRIPTION_STOPPED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_TRANSCRIPTION_ERROR", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRANSCRIPTION_ERROR"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_ERROR", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ERROR"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_APP_MSG", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_APP_MSG"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_INPUT_EVENT", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_INPUT_EVENT"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_NETWORK_QUALITY_CHANGE", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_NETWORK_QUALITY_CHANGE"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_ACTIVE_SPEAKER_CHANGE", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ACTIVE_SPEAKER_CHANGE"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_FULLSCREEN", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_FULLSCREEN"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_EXIT_FULLSCREEN", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_EXIT_FULLSCREEN"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_NETWORK_CONNECTION", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_NETWORK_CONNECTION"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_RECORDING_DATA", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_DATA"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LIVE_STREAMING_STARTED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LIVE_STREAMING_STARTED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LIVE_STREAMING_STOPPED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LIVE_STREAMING_STOPPED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LIVE_STREAMING_ERROR", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LIVE_STREAMING_ERROR"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_LANG_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LANG_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_ACCESS_STATE_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ACCESS_STATE_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_MEETING_SESSION_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_MEETING_SESSION_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_MEETING_SESSION_STATE_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_MEETING_SESSION_STATE_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_MEETING_SESSION_DATA_ERROR", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_MEETING_SESSION_DATA_ERROR"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_WAITING_PARTICIPANT_ADDED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_WAITING_PARTICIPANT_ADDED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_WAITING_PARTICIPANT_REMOVED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_WAITING_PARTICIPANT_REMOVED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_WAITING_PARTICIPANT_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_WAITING_PARTICIPANT_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_RECEIVE_SETTINGS_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECEIVE_SETTINGS_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_INPUT_SETTINGS_UPDATED", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_INPUT_SETTINGS_UPDATED"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DAILY_EVENT_NONFATAL_ERROR", function() { return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_NONFATAL_ERROR"]; });\n\n/* harmony import */ var _shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./shared-with-pluot-core/Environment.js */ "./src/shared-with-pluot-core/Environment.js");\n/* harmony import */ var _shared_with_pluot_core_script_message_channels_WebMessageChannel__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./shared-with-pluot-core/script-message-channels/WebMessageChannel */ "./src/shared-with-pluot-core/script-message-channels/WebMessageChannel.js");\n/* harmony import */ var _shared_with_pluot_core_script_message_channels_ReactNativeMessageChannel__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./shared-with-pluot-core/script-message-channels/ReactNativeMessageChannel */ "./src/shared-with-pluot-core/script-message-channels/ReactNativeMessageChannel.js");\n/* harmony import */ var _shared_with_pluot_core_SessionData_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./shared-with-pluot-core/SessionData.js */ "./src/shared-with-pluot-core/SessionData.js");\n/* harmony import */ var _CallObjectLoader__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./CallObjectLoader */ "./src/CallObjectLoader.js");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js");\n/* harmony import */ var _Participant__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Participant */ "./src/Participant.js");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_7___default()(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_6___default()(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\n\n\n\n\n\n\n\n\n // call states\n\n // track states\n\n // meeting access\n\n // receive settings\n\n // error types\n\n // events\n\n // Audio modes for React Native: whether we should configure audio for video\n// calls or audio calls (i.e. whether we should use speakerphone).\n\nvar NATIVE_AUDIO_MODE_VIDEO_CALL = \'video\';\nvar NATIVE_AUDIO_MODE_VOICE_CALL = \'voice\';\nvar NATIVE_AUDIO_MODE_IDLE = \'idle\';\nvar MAX_RMP_FPS = 30;\nvar MIN_RMP_FPS = 1;\nvar MAX_SIMULCAST_LAYERS = 3;\nvar MAX_SCALE_RESOLUTION_BY = 8;\nvar MAX_LAYER_BITRATE = 2500000;\nvar MIN_LAYER_BITRATE = 100000;\nvar DEFAULT_SESSION_STATE = Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])() ? {\n data: {}\n} : {\n data: {},\n topology: \'none\'\n};\nvar EMPTY_PARTICIPANT_COUNTS = {\n present: 0,\n hidden: 0\n};\nvar simulcastEncodingsValidRanges = {\n maxBitrate: {\n min: MIN_LAYER_BITRATE,\n max: MAX_LAYER_BITRATE\n },\n maxFramerate: {\n min: MIN_RMP_FPS,\n max: MAX_RMP_FPS\n },\n scaleResolutionDownBy: {\n min: 1,\n max: MAX_SCALE_RESOLUTION_BY\n }\n};\nvar startRmpSettingsValidKeys = [\'state\', \'volume\', \'simulcastEncodings\']; //\n//\n//\n\nvar reactNativeConfigType = {\n androidInCallNotification: {\n title: \'string\',\n subtitle: \'string\',\n iconName: \'string\',\n disableForCustomOverride: \'boolean\'\n },\n disableAutoDeviceManagement: {\n audio: \'boolean\',\n video: \'boolean\'\n }\n};\nvar customTrayButtonsType = {\n id: {\n iconPath: \'string\',\n iconPathDarkMode: \'string\',\n label: \'string\',\n tooltip: \'string\'\n }\n};\nvar FRAME_PROPS = {\n customIntegrations: true,\n customTrayButtons: {\n validate: validateCustomTrayButtons,\n help: "customTrayButtons should be a dictionary of the type ".concat(JSON.stringify(customTrayButtonsType))\n },\n url: {\n validate: function validate(url) {\n return typeof url === \'string\';\n },\n help: \'url should be a string\'\n },\n baseUrl: {\n validate: function validate(url) {\n return typeof url === \'string\';\n },\n help: \'baseUrl should be a string\'\n },\n token: {\n validate: function validate(token) {\n return typeof token === \'string\';\n },\n help: \'token should be a string\',\n queryString: \'t\'\n },\n dailyConfig: {\n // only for call object mode, for now\n validate: function validate(config) {\n if (!window._dailyConfig) {\n window._dailyConfig = {};\n }\n\n window._dailyConfig.experimentalGetUserMediaConstraintsModify = config.experimentalGetUserMediaConstraintsModify;\n window._dailyConfig.userMediaVideoConstraints = config.userMediaVideoConstraints;\n window._dailyConfig.userMediaAudioConstraints = config.userMediaAudioConstraints;\n window._dailyConfig.callObjectBundleUrlOverride = config.callObjectBundleUrlOverride;\n return true;\n }\n },\n reactNativeConfig: {\n validate: validateReactNativeConfig,\n help: "reactNativeConfig should look like ".concat(JSON.stringify(reactNativeConfigType), ", all fields optional")\n },\n lang: {\n validate: function validate(lang) {\n return [\'de\', \'en-us\', // Here for backwards compatibility, but not encouraged (just maps to \'en\' anyway)\n \'en\', \'es\', \'fi\', \'fr\', \'it\', \'jp\', \'ka\', \'nl\', \'no\', \'pl\', \'pt\', \'ru\', \'sv\', \'tr\', \'user\'].includes(lang);\n },\n help: \'language not supported. Options are: de, en-us, en, es, fi, fr, it, jp, ka, nl, no, pl, pt, ru, sv, tr, user\'\n },\n userName: true,\n // ignored if there\'s a token\n userData: {\n validate: function validate(data) {\n try {\n validateUserData(data);\n return true;\n } catch (e) {\n console.error(e);\n return false;\n }\n },\n help: \'invalid userData type provided\'\n },\n startVideoOff: true,\n startAudioOff: true,\n activeSpeakerMode: true,\n showLeaveButton: true,\n showLocalVideo: true,\n showParticipantsBar: true,\n showFullscreenButton: true,\n showUserNameChangeUI: true,\n // style to apply to iframe in createFrame factory method\n iframeStyle: true,\n // styles passed through to video calls inside the iframe\n customLayout: true,\n cssFile: true,\n cssText: true,\n bodyClass: true,\n videoSource: {\n validate: function validate(s, callObject) {\n callObject._preloadCache.videoDeviceId = s;\n return true;\n }\n },\n audioSource: {\n validate: function validate(s, callObject) {\n callObject._preloadCache.audioDeviceId = s;\n return true;\n }\n },\n subscribeToTracksAutomatically: {\n validate: function validate(s, callObject) {\n callObject._preloadCache.subscribeToTracksAutomatically = s;\n return true;\n }\n },\n theme: {\n validate: function validate(o) {\n var validColors = [\'accent\', \'accentText\', \'background\', \'backgroundAccent\', \'baseText\', \'border\', \'mainAreaBg\', \'mainAreaBgAccent\', \'mainAreaText\', \'supportiveText\'];\n\n var containsValidColors = function containsValidColors(colors) {\n for (var _i = 0, _Object$keys = Object.keys(colors); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n\n if (!validColors.includes(key)) {\n // Key is not a supported theme color\n console.error("unsupported color \\"".concat(key, "\\". Valid colors: ").concat(validColors.join(\', \')));\n return false;\n }\n\n if (!colors[key].match(/^#[0-9a-f]{6}|#[0-9a-f]{3}$/i)) {\n // Color is not in hex format\n console.error("".concat(key, " theme color should be provided in valid hex color format. Received: \\"").concat(colors[key], "\\""));\n return false;\n }\n }\n\n return true;\n };\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(o) !== \'object\' || !(\'light\' in o && \'dark\' in o || \'colors\' in o)) {\n // Must define either both themes or colors\n console.error(\'Theme must contain either both "light" and "dark" properties, or "colors".\', o);\n return false;\n }\n\n if (\'light\' in o && \'dark\' in o) {\n if (!(\'colors\' in o.light)) {\n console.error(\'Light theme is missing "colors" property.\', o);\n return false;\n }\n\n if (!(\'colors\' in o.dark)) {\n console.error(\'Dark theme is missing "colors" property.\', o);\n return false;\n }\n\n return containsValidColors(o.light.colors) && containsValidColors(o.dark.colors);\n }\n\n return containsValidColors(o.colors);\n },\n help: \'unsupported theme configuration. Check error logs for detailed info.\'\n },\n layoutConfig: {\n validate: function validate(layoutConfig) {\n if (\'grid\' in layoutConfig) {\n var gridConfig = layoutConfig.grid;\n\n if (\'maxTilesPerPage\' in gridConfig) {\n if (!Number.isInteger(gridConfig.maxTilesPerPage)) {\n console.error("grid.maxTilesPerPage should be an integer. You passed ".concat(gridConfig.maxTilesPerPage, "."));\n return false;\n }\n\n if (gridConfig.maxTilesPerPage > 49) {\n console.error("grid.maxTilesPerPage can\'t be larger than 49 without sacrificing browser performance. Please contact us at https://www.daily.co/contact to talk about your use case.");\n return false;\n }\n }\n\n if (\'minTilesPerPage\' in gridConfig) {\n if (!Number.isInteger(gridConfig.minTilesPerPage)) {\n console.error("grid.minTilesPerPage should be an integer. You passed ".concat(gridConfig.minTilesPerPage, "."));\n return false;\n }\n\n if (gridConfig.minTilesPerPage < 1) {\n console.error("grid.minTilesPerPage can\'t be lower than 1.");\n return false;\n }\n\n if (\'maxTilesPerPage\' in gridConfig && gridConfig.minTilesPerPage > gridConfig.maxTilesPerPage) {\n console.error("grid.minTilesPerPage can\'t be higher than grid.maxTilesPerPage.");\n return false;\n }\n }\n }\n\n return true;\n },\n help: \'unsupported layoutConfig. Check error logs for detailed info.\'\n },\n receiveSettings: {\n // Disallow "*" shorthand key since it\'s a shorthand for participants\n // currently connected *to you* (i.e. participants already in\n // participants()), which is necessarily empty at join time. Allowing this\n // key might only sow confusion: it might lead people to think it\'s a\n // shorthand for participants currently connected *to the room*.\n validate: function validate(receiveSettings) {\n return validateReceiveSettings(receiveSettings, {\n allowAllParticipantsKey: false\n });\n },\n help: receiveSettingsValidationHelpMsg({\n allowAllParticipantsKey: false\n })\n },\n inputSettings: {\n validate: function validate(inputSettings) {\n return validateInputSettings(inputSettings);\n },\n help: inputSettingsValidationHelpMsg()\n },\n // used internally\n layout: {\n validate: function validate(layout) {\n return layout === \'custom-v1\' || layout === \'browser\' || layout === \'none\';\n },\n help: \'layout may only be set to "custom-v1"\',\n queryString: \'layout\'\n },\n emb: {\n queryString: \'emb\'\n },\n embHref: {\n queryString: \'embHref\'\n },\n dailyJsVersion: {\n queryString: \'dailyJsVersion\'\n }\n}; // todo: more validation?\n\nvar PARTICIPANT_PROPS = {\n styles: {\n validate: function validate(styles) {\n for (var k in styles) {\n if (k !== \'cam\' && k !== \'screen\') {\n return false;\n }\n }\n\n if (styles.cam) {\n for (var k in styles.cam) {\n if (k !== \'div\' && k !== \'video\') {\n return false;\n }\n }\n }\n\n if (styles.screen) {\n for (var k in styles.screen) {\n if (k !== \'div\' && k !== \'video\') {\n return false;\n }\n }\n }\n\n return true;\n },\n help: \'styles format should be a subset of: \' + \'{ cam: {div: {}, video: {}}, screen: {div: {}, video: {}} }\'\n },\n setSubscribedTracks: {\n validate: function validate(subs, callObject, participant) {\n if (callObject._preloadCache.subscribeToTracksAutomatically) {\n return false;\n }\n\n var validPrimitiveValues = [true, false, \'staged\'];\n\n if (validPrimitiveValues.includes(subs) || !Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])() && subs === \'avatar\') {\n return true;\n }\n\n var knownTracks = [\'audio\', \'video\', \'screenAudio\', \'screenVideo\', \'rmpAudio\', \'rmpVideo\'];\n\n var validateTrackSubs = function validateTrackSubs(subs) {\n var custom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n for (var s in subs) {\n if (s === \'custom\') {\n var containsValidValue = validPrimitiveValues.includes(subs[s]);\n\n if (!containsValidValue && !validateTrackSubs(subs[s], true)) {\n return false;\n }\n } else {\n var isUnexpectedTrackType = !custom && !knownTracks.includes(s);\n var isUnexpectedValue = !validPrimitiveValues.includes(subs[s]);\n\n if (isUnexpectedTrackType || isUnexpectedValue) {\n return false;\n }\n }\n }\n\n return true;\n };\n\n return validateTrackSubs(subs);\n },\n help: \'setSubscribedTracks cannot be used when setSubscribeToTracksAutomatically is enabled, and should be of the form: \' + "true".concat(!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])() ? " | \'avatar\'" : \'\', " | false | \'staged\' | { [audio: true|false|\'staged\'], [video: true|false|\'staged\'], [screenAudio: true|false|\'staged\'], [screenVideo: true|false|\'staged\'] }")\n },\n setAudio: true,\n setVideo: true,\n eject: true,\n updatePermissions: {\n validate: function validate(permissionsUpdate) {\n // Note: this validation logic should probably be moved into\n // Permissions.js, which should then be used by this file. It\'d be a first\n // for us to depend on a file outside daily-js, though.\n for (var _i2 = 0, _Object$entries = Object.entries(permissionsUpdate); _i2 < _Object$entries.length; _i2++) {\n var _Object$entries$_i = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_9___default()(_Object$entries[_i2], 2),\n permissionName = _Object$entries$_i[0],\n permission = _Object$entries$_i[1];\n\n switch (permissionName) {\n case \'hasPresence\':\n if (typeof permission !== \'boolean\') {\n return false;\n }\n\n break;\n\n case \'canSend\':\n if (permission instanceof Set) {\n var knownMediaTypes = [\'video\', \'audio\', \'screenVideo\', \'screenAudio\', \'customVideo\', \'customAudio\'];\n\n var _iterator = _createForOfIteratorHelper(permission),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var mediaType = _step.value;\n\n if (!knownMediaTypes.includes(mediaType)) {\n return false;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else if (typeof permission !== \'boolean\') {\n return false;\n }\n\n break;\n\n default:\n return false;\n }\n }\n\n return true;\n },\n help: \'updatePermissions can take hasPresence and canSend permissions. hasPresence must be a boolean. canSend can be a boolean or an array of media types (video, audio, screenVideo, screenAudio, customVideo, customAudio).\'\n }\n}; //\n//\n//\n\nvar DailyIframe = /*#__PURE__*/function (_EventEmitter) {\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DailyIframe, _EventEmitter);\n\n var _super = _createSuper(DailyIframe);\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(DailyIframe, null, [{\n key: "supportedBrowser",\n //\n // static methods\n //\n value: function supportedBrowser() {\n if (Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n return {\n supported: true,\n mobile: true,\n name: \'React Native\',\n version: null,\n supportsScreenShare: false,\n supportsSfu: true,\n supportsVideoProcessing: false\n };\n }\n\n var browser = bowser__WEBPACK_IMPORTED_MODULE_13___default.a.getParser(Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["getUserAgent"])());\n return {\n supported: !!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["browserVideoSupported_p"])(),\n mobile: browser.getPlatformType() === \'mobile\',\n name: browser.getBrowserName(),\n version: browser.getBrowserVersion(),\n supportsFullscreen: !!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isFullscreenSupported"])(),\n supportsScreenShare: !!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isScreenSharingSupported"])(),\n supportsSfu: !!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["browserVideoSupported_p"])(),\n supportsVideoProcessing: Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isVideoProcessingSupported"])()\n };\n }\n }, {\n key: "version",\n value: function version() {\n return "0.35.1-internal.1";\n } //\n // constructors\n //\n\n }, {\n key: "createCallObject",\n value: function createCallObject() {\n var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n properties.layout = \'none\';\n return new DailyIframe(null, properties);\n }\n }, {\n key: "wrap",\n value: function wrap(iframeish) {\n var properties = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n methodNotSupportedInReactNative();\n\n if (!iframeish || !iframeish.contentWindow || \'string\' !== typeof iframeish.src) {\n throw new Error(\'DailyIframe::Wrap needs an iframe-like first argument\');\n }\n\n if (!properties.layout) {\n if (properties.customLayout) {\n properties.layout = \'custom-v1\';\n } else {\n properties.layout = \'browser\';\n }\n }\n\n return new DailyIframe(iframeish, properties);\n }\n }, {\n key: "createFrame",\n value: function createFrame(arg1, arg2) {\n methodNotSupportedInReactNative();\n var parentEl, properties;\n\n if (arg1 && arg2) {\n parentEl = arg1;\n properties = arg2;\n } else if (arg1 && arg1.append) {\n parentEl = arg1;\n properties = {};\n } else {\n parentEl = document.body;\n properties = arg1 || {};\n }\n\n var iframeStyle = properties.iframeStyle;\n\n if (!iframeStyle) {\n if (parentEl === document.body) {\n iframeStyle = {\n position: \'fixed\',\n border: \'1px solid black\',\n backgroundColor: \'white\',\n width: \'375px\',\n height: \'450px\',\n right: \'1em\',\n bottom: \'1em\'\n };\n } else {\n iframeStyle = {\n border: 0,\n width: \'100%\',\n height: \'100%\'\n };\n }\n }\n\n var iframeEl = document.createElement(\'iframe\'); // special-case for old Electron for Figma\n\n if (window.navigator && window.navigator.userAgent.match(/Chrome\\/61\\./)) {\n iframeEl.allow = \'microphone, camera\';\n } else {\n iframeEl.allow = \'microphone; camera; autoplay; display-capture\';\n }\n\n iframeEl.style.visibility = \'hidden\';\n parentEl.appendChild(iframeEl);\n iframeEl.style.visibility = null;\n Object.keys(iframeStyle).forEach(function (k) {\n return iframeEl.style[k] = iframeStyle[k];\n });\n\n if (!properties.layout) {\n if (properties.customLayout) {\n properties.layout = \'custom-v1\';\n } else {\n properties.layout = \'browser\';\n }\n }\n\n try {\n var callFrame = new DailyIframe(iframeEl, properties);\n return callFrame;\n } catch (e) {\n // something when wrong while constructing the object. so let\'s clean\n // up by removing ourselves from the page, then rethrow the error.\n parentEl.removeChild(iframeEl);\n throw e;\n }\n }\n }, {\n key: "createTransparentFrame",\n value: function createTransparentFrame() {\n var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n methodNotSupportedInReactNative();\n var iframeEl = document.createElement(\'iframe\');\n iframeEl.allow = \'microphone; camera; autoplay\';\n iframeEl.style.cssText = "\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n border: 0;\\n pointer-events: none;\\n ";\n document.body.appendChild(iframeEl);\n\n if (!properties.layout) {\n properties.layout = \'custom-v1\';\n }\n\n return DailyIframe.wrap(iframeEl, properties);\n }\n }]);\n\n function DailyIframe(iframeish) {\n var _this;\n\n var properties = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, DailyIframe);\n\n _this = _super.call(this);\n\n _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default()(_this), "startListeningForDeviceChanges", function () {\n if (typeof navigator.mediaDevices.ondevicechange !== \'undefined\' || Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n // Desktop web, iOS web, and React Native support the \'devicechange\' event\n navigator.mediaDevices.addEventListener(\'devicechange\', _this.deviceChangeListener);\n } else {\n // Android Chrome/Samsung Internet doesn\'t support the \'devicechange\'\n // event, so do polling instead\n _this.startPollingForDeviceChanges();\n }\n });\n\n _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default()(_this), "stopListeningForDeviceChanges", function () {\n if (typeof navigator.mediaDevices.ondevicechange !== \'undefined\' || Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n // Desktop web, iOS web, and React Native support the \'devicechange\' event\n navigator.mediaDevices.removeEventListener(\'devicechange\', _this.deviceChangeListener);\n } else {\n // Android Chrome/Samsung Internet doesn\'t support the \'devicechange\'\n // event, so do polling instead\n _this.stopPollingForDeviceChanges();\n }\n });\n\n _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default()(_this), "deviceChangeListener", /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n // Let our own enumerateDevices() method be the source of truth\n var devicesInfo = yield _this.enumerateDevices();\n\n _this.handleDeviceChange(devicesInfo.devices);\n }));\n\n _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default()(_this), "handleDeviceChange", function (newDevices) {\n _this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_AVAILABLE_DEVICES_UPDATED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_AVAILABLE_DEVICES_UPDATED"],\n availableDevices: newDevices\n });\n });\n\n _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default()(_this), "startPollingForDeviceChanges", function () {\n if (_this._deviceChangeInterval) return;\n _this._deviceChangeInterval = setInterval( /*#__PURE__*/_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n // Let our own enumerateDevices() method be the source of truth\n var devicesInfo = yield _this.enumerateDevices();\n var devicesJSON = JSON.stringify(devicesInfo);\n\n if (_this._lastDevicesJSON && devicesJSON !== _this._lastDevicesJSON) {\n _this.handleDeviceChange(devicesInfo.devices);\n }\n\n _this._lastDevicesJSON = devicesJSON;\n }), 3000);\n });\n\n _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default()(_this), "stopPollingForDeviceChanges", function () {\n if (!_this._deviceChangeInterval) return;\n clearInterval(_this._deviceChangeInterval);\n _this._deviceChangeInterval = null;\n _this._lastDevicesJSON = null;\n });\n\n _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default()(_this), "handleNativeAppActiveStateChange", function (isActive) {\n // If automatic video device management is disabled, bail\n if (_this.disableReactNativeAutoDeviceManagement(\'video\')) {\n return;\n }\n\n if (isActive) {\n // If cam was unmuted before losing focus, unmute\n // (Note this is assumption is not perfect, since theoretically an app\n // could unmute while in the background, but it\'s decent for now)\n if (_this.camUnmutedBeforeLosingNativeActiveState) {\n _this.setLocalVideo(true);\n }\n } else {\n _this.camUnmutedBeforeLosingNativeActiveState = _this.localVideo(); // Mute cam, but check first whether we have local video in the first\n // place: if we don\'t, we may still be in the gUM process, with the app\n // "inactive" simply because it\'s behind the permissions dialogs.\n\n if (_this.camUnmutedBeforeLosingNativeActiveState) {\n _this.setLocalVideo(false);\n }\n }\n });\n\n _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_8___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default()(_this), "handleNativeAudioFocusChange", function (hasFocus) {\n // If automatic audio device management is disabled, bail\n if (_this.disableReactNativeAutoDeviceManagement(\'audio\')) {\n return;\n }\n\n _this._hasNativeAudioFocus = hasFocus; // toggle participant audio if needed\n\n _this.toggleParticipantAudioBasedOnNativeAudioFocus(); // toggle mic mute if needed\n\n\n if (_this._hasNativeAudioFocus) {\n // If mic was unmuted before losing focus, unmute\n // (Note this is assumption is not perfect, since theoretically an app\n // could unmute while in the background, but it\'s decent for now)\n if (_this.micUnmutedBeforeLosingNativeAudioFocus) {\n _this.setLocalAudio(true);\n }\n } else {\n _this.micUnmutedBeforeLosingNativeAudioFocus = _this.localAudio();\n\n _this.setLocalAudio(false);\n }\n });\n\n properties.dailyJsVersion = DailyIframe.version();\n _this._iframe = iframeish;\n _this._callObjectMode = properties.layout === \'none\' && !_this._iframe;\n _this._preloadCache = initializePreloadCache();\n\n if (_this._callObjectMode) {\n window._dailyPreloadCache = _this._preloadCache;\n }\n\n if (properties.showLocalVideo !== undefined) {\n if (_this._callObjectMode) {\n console.error(\'showLocalVideo is not available in call object mode\');\n } else {\n _this._showLocalVideo = !!properties.showLocalVideo;\n }\n } else {\n _this._showLocalVideo = true;\n }\n\n if (properties.showParticipantsBar !== undefined) {\n if (_this._callObjectMode) {\n console.error(\'showParticipantsBar is not available in call object mode\');\n } else {\n _this._showParticipantsBar = !!properties.showParticipantsBar;\n }\n } else {\n _this._showParticipantsBar = true;\n }\n\n if (properties.customIntegrations !== undefined) {\n if (_this._callObjectMode) {\n console.error(\'customIntegrations is not available in call object mode\');\n } else {\n _this._customIntegrations = properties.customIntegrations;\n }\n } else {\n _this._customIntegrations = {};\n }\n\n if (properties.customTrayButtons !== undefined) {\n if (_this._callObjectMode) {\n console.error(\'customTrayButtons is not available in call object mode\');\n } else {\n _this._customTrayButtons = properties.customTrayButtons;\n }\n } else {\n _this._customTrayButtons = {};\n }\n\n if (properties.activeSpeakerMode !== undefined) {\n if (_this._callObjectMode) {\n console.error(\'activeSpeakerMode is not available in call object mode\');\n } else {\n _this._activeSpeakerMode = !!properties.activeSpeakerMode;\n }\n } else {\n _this._activeSpeakerMode = false;\n }\n\n if (properties.receiveSettings) {\n if (_this._callObjectMode) {\n _this._receiveSettings = properties.receiveSettings;\n } else {\n console.error(\'receiveSettings is only available in call object mode\');\n }\n } else {\n // Here we avoid falling back to defaults, instead letting the call\n // machine decide on defaults when its loaded and telling us about them\n // via a DAILY_EVENT_RECEIVE_SETTINGS_UPDATED event. This will make it\n // easier to update defaults in the future, eliminating the worry of\n // daily-js getting out of sync with the call machine.\n _this._receiveSettings = {};\n }\n\n _this._inputSettings = {};\n\n if (properties.inputSettings) {\n // #Question: Do I need the call-object check here?\n _this._inputSettings = properties.inputSettings;\n }\n\n _this.validateProperties(properties);\n\n _this.properties = _objectSpread({}, properties);\n _this._callObjectLoader = _this._callObjectMode ? new _CallObjectLoader__WEBPACK_IMPORTED_MODULE_19__["default"]() : null;\n _this._callState = _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_NEW"]; // only update via updateIsPreparingToJoin() or _updateCallState()\n\n _this._isPreparingToJoin = false; // only update via _updateCallState()\n\n _this._accessState = {\n access: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_ACCESS_UNKNOWN"]\n };\n _this._meetingSessionState = DEFAULT_SESSION_STATE;\n _this._nativeInCallAudioMode = NATIVE_AUDIO_MODE_VIDEO_CALL;\n _this._participants = {};\n _this._participantCounts = EMPTY_PARTICIPANT_COUNTS;\n _this._rmpPlayerState = {};\n _this._waitingParticipants = {};\n _this._inputEventsOn = {}; // need to cache these until loaded\n\n _this._network = {\n threshold: \'good\',\n quality: 100\n };\n _this._activeSpeaker = {};\n _this._callFrameId = Object(_utils_js__WEBPACK_IMPORTED_MODULE_20__["randomStringId"])();\n _this._messageChannel = Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])() ? new _shared_with_pluot_core_script_message_channels_ReactNativeMessageChannel__WEBPACK_IMPORTED_MODULE_17__["default"]() : new _shared_with_pluot_core_script_message_channels_WebMessageChannel__WEBPACK_IMPORTED_MODULE_16__["default"](); // fullscreen event listener\n\n if (_this._iframe) {\n if (_this._iframe.requestFullscreen) {\n // chrome (not safari)\n _this._iframe.addEventListener(\'fullscreenchange\', function (e) {\n if (document.fullscreenElement === _this._iframe) {\n _this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_FULLSCREEN"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_FULLSCREEN"]\n });\n\n _this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_FULLSCREEN"]\n });\n } else {\n _this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_EXIT_FULLSCREEN"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_EXIT_FULLSCREEN"]\n });\n\n _this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_EXIT_FULLSCREEN"]\n });\n }\n });\n } else if (_this._iframe.webkitRequestFullscreen) {\n // safari\n _this._iframe.addEventListener(\'webkitfullscreenchange\', function (e) {\n if (document.webkitFullscreenElement === _this._iframe) {\n _this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_FULLSCREEN"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_FULLSCREEN"]\n });\n\n _this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_FULLSCREEN"]\n });\n } else {\n _this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_EXIT_FULLSCREEN"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_EXIT_FULLSCREEN"]\n });\n\n _this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_EXIT_FULLSCREEN"]\n });\n }\n });\n }\n } // add native event listeners\n\n\n if (Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n var nativeUtils = _this.nativeUtils();\n\n if (!(nativeUtils.addAudioFocusChangeListener && nativeUtils.removeAudioFocusChangeListener && nativeUtils.addAppActiveStateChangeListener && nativeUtils.removeAppActiveStateChangeListener)) {\n console.warn(\'expected (add|remove)(AudioFocus|AppActiveState)ChangeListener to be available in React Native\');\n } // audio focus event, used for auto-muting mic\n\n\n _this._hasNativeAudioFocus = true;\n nativeUtils.addAudioFocusChangeListener(_this.handleNativeAudioFocusChange); // app active state event, used for auto-muting cam\n\n nativeUtils.addAppActiveStateChangeListener(_this.handleNativeAppActiveStateChange);\n } // start available device change listener in call object mode (including RN).\n // note: in iframe mode, Prebuilt\'s internal call object will handle this,\n // and the events it sends will propagate up appropriately.\n\n\n if (_this._callObjectMode) {\n _this.startListeningForDeviceChanges();\n }\n\n _this._messageChannel.addListenerForMessagesFromCallMachine(_this.handleMessageFromCallMachine, _this._callFrameId, _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3___default()(_this));\n\n return _this;\n } //\n // instance methods\n //\n\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(DailyIframe, [{\n key: "destroy",\n value: function () {\n var _destroy = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n try {\n if ([_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"], _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LOADING"]].includes(this._callState)) {\n yield this.leave();\n }\n } catch (e) {}\n\n var iframe = this._iframe;\n\n if (iframe) {\n var parent = iframe.parentElement;\n\n if (parent) {\n parent.removeChild(iframe);\n }\n }\n\n this._messageChannel.removeListener(this.handleMessageFromCallMachine); // tear down native event listeners\n\n\n if (Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n var nativeUtils = this.nativeUtils();\n nativeUtils.removeAudioFocusChangeListener(this.handleNativeAudioFocusChange);\n nativeUtils.removeAppActiveStateChangeListener(this.handleNativeAppActiveStateChange);\n } // tear down available device change listener\n\n\n if (this._callObjectMode) {\n this.stopListeningForDeviceChanges();\n }\n\n this.resetMeetingDependentVars();\n });\n\n function destroy() {\n return _destroy.apply(this, arguments);\n }\n\n return destroy;\n }()\n }, {\n key: "loadCss",\n value: function loadCss(_ref3) {\n var bodyClass = _ref3.bodyClass,\n cssFile = _ref3.cssFile,\n cssText = _ref3.cssText;\n methodNotSupportedInReactNative();\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_LOAD_CSS"],\n cssFile: this.absoluteUrl(cssFile),\n bodyClass: bodyClass,\n cssText: cssText\n });\n return this;\n }\n }, {\n key: "iframe",\n value: function iframe() {\n methodNotSupportedInReactNative();\n return this._iframe;\n }\n }, {\n key: "meetingState",\n value: function meetingState() {\n // TODO: This function will be deprecated and renamed to callState()\n // for better consistency in naming\n return this._callState;\n }\n }, {\n key: "accessState",\n value: function accessState() {\n if (!this._callObjectMode) {\n throw new Error(\'accessState() currently only supported in call object mode\');\n }\n\n return this._accessState;\n }\n }, {\n key: "participants",\n value: function participants() {\n return this._participants;\n }\n }, {\n key: "participantCounts",\n value: function participantCounts() {\n return this._participantCounts;\n }\n }, {\n key: "waitingParticipants",\n value: function waitingParticipants() {\n if (!this._callObjectMode) {\n throw new Error(\'waitingParticipants() currently only supported in call object mode\');\n }\n\n return this._waitingParticipants;\n }\n }, {\n key: "validateParticipantProperties",\n value: function validateParticipantProperties(sessionId, properties) {\n for (var prop in properties) {\n if (!PARTICIPANT_PROPS[prop]) {\n throw new Error("unrecognized updateParticipant property ".concat(prop));\n }\n\n if (PARTICIPANT_PROPS[prop].validate) {\n if (!PARTICIPANT_PROPS[prop].validate(properties[prop], this, this._participants[sessionId])) {\n throw new Error(PARTICIPANT_PROPS[prop].help);\n }\n }\n }\n }\n }, {\n key: "updateParticipant",\n value: function updateParticipant(sessionId, properties) {\n if (this._participants.local && this._participants.local.session_id === sessionId) {\n sessionId = \'local\';\n }\n\n if (sessionId && properties) {\n this.validateParticipantProperties(sessionId, properties);\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_PARTICIPANT"],\n id: sessionId,\n properties: properties\n });\n }\n\n return this;\n }\n }, {\n key: "updateParticipants",\n value: function updateParticipants(properties) {\n var localId = this._participants.local && this._participants.local.session_id;\n\n for (var sessionId in properties) {\n if (sessionId === localId) {\n sessionId = \'local\';\n }\n\n if (sessionId && properties[sessionId]) {\n this.validateParticipantProperties(sessionId, properties[sessionId]);\n }\n }\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_PARTICIPANTS"],\n participants: properties\n });\n return this;\n }\n }, {\n key: "updateWaitingParticipant",\n value: function () {\n var _updateWaitingParticipant = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this2 = this;\n\n var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'\';\n var updates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Validate mode.\n if (!this._callObjectMode) {\n throw new Error(\'updateWaitingParticipant() currently only supported in call object mode\');\n } // Validate call state: only allowed once you\'ve joined.\n\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'updateWaitingParticipant() only supported for joined meetings\');\n } // Validate argument presence.\n\n\n if (!(typeof id === \'string\' && _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(updates) === \'object\')) {\n throw new Error(\'updateWaitingParticipant() must take an id string and a updates object\');\n }\n\n return new Promise(function (resolve, reject) {\n var k = function k(msg) {\n if (msg.error) {\n reject(msg.error);\n }\n\n if (!msg.id) {\n reject(new Error(\'unknown error in updateWaitingParticipant()\'));\n }\n\n resolve({\n id: msg.id\n });\n };\n\n _this2.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_WAITING_PARTICIPANT"],\n id: id,\n updates: updates\n }, k);\n });\n });\n\n function updateWaitingParticipant() {\n return _updateWaitingParticipant.apply(this, arguments);\n }\n\n return updateWaitingParticipant;\n }()\n }, {\n key: "updateWaitingParticipants",\n value: function () {\n var _updateWaitingParticipants = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this3 = this;\n\n var updatesById = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // Validate mode.\n if (!this._callObjectMode) {\n throw new Error(\'updateWaitingParticipants() currently only supported in call object mode\');\n } // Validate call state: only allowed once you\'ve joined.\n\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'updateWaitingParticipants() only supported for joined meetings\');\n } // Validate argument presence.\n\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(updatesById) !== \'object\') {\n throw new Error(\'updateWaitingParticipants() must take a mapping between ids and update objects\');\n }\n\n return new Promise(function (resolve, reject) {\n var k = function k(msg) {\n if (msg.error) {\n reject(msg.error);\n }\n\n if (!msg.ids) {\n reject(new Error(\'unknown error in updateWaitingParticipants()\'));\n }\n\n resolve({\n ids: msg.ids\n });\n };\n\n _this3.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_WAITING_PARTICIPANTS"],\n updatesById: updatesById\n }, k);\n });\n });\n\n function updateWaitingParticipants() {\n return _updateWaitingParticipants.apply(this, arguments);\n }\n\n return updateWaitingParticipants;\n }()\n }, {\n key: "requestAccess",\n value: function () {\n var _requestAccess = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this4 = this;\n\n var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref4$access = _ref4.access,\n access = _ref4$access === void 0 ? {\n level: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_ACCESS_LEVEL_FULL"]\n } : _ref4$access,\n _ref4$name = _ref4.name,\n name = _ref4$name === void 0 ? \'\' : _ref4$name;\n\n // Validate mode.\n if (!this._callObjectMode) {\n throw new Error(\'requestAccess() currently only supported in call object mode\');\n } // Validate call state: access requesting is only allowed once you\'ve\n // joined.\n\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'requestAccess() only supported for joined meetings\');\n }\n\n return new Promise(function (resolve, reject) {\n var k = function k(msg) {\n if (msg.error) {\n reject(msg.error);\n }\n\n if (!msg.access) {\n reject(new Error(\'unknown error in requestAccess()\'));\n }\n\n resolve({\n access: msg.access,\n granted: msg.granted\n });\n };\n\n _this4.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_REQUEST_ACCESS"],\n access: access,\n name: name\n }, k);\n });\n });\n\n function requestAccess() {\n return _requestAccess.apply(this, arguments);\n }\n\n return requestAccess;\n }()\n }, {\n key: "localAudio",\n value: function localAudio() {\n if (this._participants.local) {\n return this._participants.local.audio;\n }\n\n return null;\n }\n }, {\n key: "localVideo",\n value: function localVideo() {\n if (this._participants.local) {\n return this._participants.local.video;\n }\n\n return null;\n }\n }, {\n key: "setLocalAudio",\n value: function setLocalAudio(bool) {\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_LOCAL_AUDIO"],\n state: bool\n });\n return this;\n }\n }, {\n key: "setLocalVideo",\n value: function setLocalVideo(bool) {\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_LOCAL_VIDEO"],\n state: bool\n });\n return this;\n } // NOTE: "base" receive settings will not appear until the call machine bundle\n // is initialized (e.g. after a call to join()).\n // Listen for the receive-settings-updated to be notified when those come in.\n\n }, {\n key: "getReceiveSettings",\n value: function () {\n var _getReceiveSettings = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (id) {\n var _this5 = this;\n\n var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref5$showInheritedVa = _ref5.showInheritedValues,\n showInheritedValues = _ref5$showInheritedVa === void 0 ? false : _ref5$showInheritedVa;\n\n // Validate mode.\n if (!this._callObjectMode) {\n throw new Error(\'getReceiveSettings() only supported in call object mode\');\n } // This method can be called in two main ways:\n // - it can get receive settings for a specific participant (or "base")\n // - it can get *all* receive settings\n\n\n switch (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(id)) {\n // Case: getting receive settings for a single participant\n case \'string\':\n // Ask call machine to get receive settings for the participant.\n // Centralizing this nontrivial fetching logic in the call machine,\n // rather than attempting to duplicate it here, avoids the problem of\n // daily-js and the call machine getting out of sync.\n return new Promise(function (resolve) {\n var k = function k(msg) {\n resolve(msg.receiveSettings);\n };\n\n _this5.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_GET_SINGLE_PARTICIPANT_RECEIVE_SETTINGS"],\n id: id,\n showInheritedValues: showInheritedValues\n }, k);\n });\n // Case: getting all receive settings\n\n case \'undefined\':\n return this._receiveSettings;\n\n default:\n throw new Error(\'first argument to getReceiveSettings() must be a participant id (or "base"), or there should be no arguments\');\n }\n });\n\n function getReceiveSettings(_x) {\n return _getReceiveSettings.apply(this, arguments);\n }\n\n return getReceiveSettings;\n }()\n }, {\n key: "updateReceiveSettings",\n value: function () {\n var _updateReceiveSettings = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (receiveSettings) {\n var _this6 = this;\n\n // Validate mode.\n if (!this._callObjectMode) {\n throw new Error(\'updateReceiveSettings() only supported in call object mode\');\n } // Validate receive settings.\n\n\n if (!validateReceiveSettings(receiveSettings, {\n allowAllParticipantsKey: true\n })) {\n throw new Error(receiveSettingsValidationHelpMsg({\n allowAllParticipantsKey: true\n }));\n } // Validate that call machine is joined.\n // (We need the Redux state to be set up first; technically, we could\n // proceed if we\'ve either join()ed *or* preAuth()ed *or* startCamera()ed\n // but since there\'s an easy alternative way to specify initial receive\n // settings until join(), for simplicity let\'s just require that we be\n // joined).\n\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'updateReceiveSettings() is only allowed when joined. To specify receive settings earlier, use the receiveSettings config property.\');\n } // Ask call machine to update receive settings, then await callback.\n\n\n return new Promise(function (resolve) {\n var k = function k(msg) {\n resolve({\n receiveSettings: msg.receiveSettings\n });\n };\n\n _this6.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_RECEIVE_SETTINGS"],\n receiveSettings: receiveSettings\n }, k);\n });\n });\n\n function updateReceiveSettings(_x2) {\n return _updateReceiveSettings.apply(this, arguments);\n }\n\n return updateReceiveSettings;\n }() // Input Settings Getter\n // { video: { processor } }\n // In the future:\n // { video: {...}, audio: {...}, screenVideo: {...}, screenAudio: {...} }\n\n }, {\n key: "getInputSettings",\n value: function getInputSettings() {\n var _this7 = this;\n\n return new Promise(function (resolve) {\n resolve(_this7._inputSettings);\n });\n }\n }, {\n key: "updateInputSettings",\n value: function () {\n var _updateInputSettings = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (inputSettings) {\n var _this8 = this;\n\n // Ask call machine to update input settings, then await callback.\n return new Promise(function (resolve, reject) {\n if (!validateInputSettings(inputSettings)) {\n console.error(inputSettingsValidationHelpMsg());\n reject(inputSettingsValidationHelpMsg());\n return;\n }\n\n var k = function k(msg) {\n if (msg.error) {\n reject(msg.error);\n } else {\n resolve({\n inputSettings: msg.inputSettings\n });\n }\n };\n\n _this8.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_INPUT_SETTINGS"],\n inputSettings: inputSettings\n }, k);\n });\n });\n\n function updateInputSettings(_x3) {\n return _updateInputSettings.apply(this, arguments);\n }\n\n return updateInputSettings;\n }()\n }, {\n key: "setBandwidth",\n value: function setBandwidth(_ref6) {\n var kbs = _ref6.kbs,\n trackConstraints = _ref6.trackConstraints;\n methodNotSupportedInReactNative();\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_BANDWIDTH"],\n kbs: kbs,\n trackConstraints: trackConstraints\n });\n return this;\n }\n }, {\n key: "getDailyLang",\n value: function getDailyLang() {\n var _this9 = this;\n\n methodNotSupportedInReactNative();\n return new Promise( /*#__PURE__*/function () {\n var _ref7 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (resolve) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n resolve(msg);\n };\n\n _this9.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_GET_LANG"]\n }, k);\n });\n\n return function (_x4) {\n return _ref7.apply(this, arguments);\n };\n }());\n }\n }, {\n key: "setDailyLang",\n value: function setDailyLang(lang) {\n methodNotSupportedInReactNative();\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_LANG"],\n lang: lang\n });\n return this;\n }\n }, {\n key: "getMeetingSession",\n value: function () {\n var _getMeetingSession = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this10 = this;\n\n // Validate call state: meeting session details are only available\n // once you have joined the meeting\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'getMeetingSession() is only allowed when joined\');\n }\n\n return new Promise(function (resolve) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n delete msg.callFrameId;\n resolve(msg);\n };\n\n _this10.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_GET_MEETING_SESSION"]\n }, k);\n });\n });\n\n function getMeetingSession() {\n return _getMeetingSession.apply(this, arguments);\n }\n\n return getMeetingSession;\n }()\n }, {\n key: "meetingSessionState",\n value: function meetingSessionState() {\n // Validate call state: meeting session details are only available\n // once you have joined the meeting\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'meetingSessionState() is only available when joined\');\n } // currently only default values returned\n\n\n return this._meetingSessionState;\n }\n }, {\n key: "setMeetingSessionData",\n value: function setMeetingSessionData(data) {\n var mergeStrategy = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'replace\';\n\n // Validate call state: session data can only be set once you have\n // joined the meeting\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'setMeetingSessionData() is only available when joined\');\n }\n\n try {\n validateSessionDataUpdate(data, mergeStrategy);\n } catch (e) {\n console.error(e);\n throw e;\n }\n\n try {\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_SESSION_DATA"],\n data: data,\n mergeStrategy: mergeStrategy\n });\n } catch (e) {\n // Probably data was not structured-clonable and couldn\'t be sent in the\n // message to the call machine...\n throw new Error("Error setting meeting session data: ".concat(e));\n }\n }\n }, {\n key: "setUserName",\n value: function setUserName(name, options) {\n var _this11 = this;\n\n this.properties.userName = name;\n return new Promise(function (resolve) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n resolve(msg);\n };\n\n _this11.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_USER_NAME"],\n name: name !== null && name !== void 0 ? name : \'\',\n thisMeetingOnly: Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])() || (options ? !!options.thisMeetingOnly : false)\n }, k);\n });\n }\n }, {\n key: "setUserData",\n value: function () {\n var _setUserData = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (data) {\n var _this12 = this;\n\n try {\n validateUserData(data);\n } catch (e) {\n console.error(e);\n throw e;\n }\n\n this.properties.userData = data;\n return new Promise(function (resolve) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n delete msg.callFrameId;\n resolve(msg);\n };\n\n try {\n _this12.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_USER_DATA"],\n userData: data\n }, k);\n } catch (e) {\n // Probably userData was not structured-clonable and couldn\'t be sent in\n // a message to the call machine...\n throw new Error("Error setting user data: ".concat(e));\n }\n });\n });\n\n function setUserData(_x5) {\n return _setUserData.apply(this, arguments);\n }\n\n return setUserData;\n }()\n }, {\n key: "startCamera",\n value: function startCamera() {\n var _this13 = this;\n\n var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // Validate mode.\n if (!this._callObjectMode) {\n throw new Error(\'startCamera() currently only supported in call object mode\');\n } // Validate call state: startCamera() is only allowed if you haven\'t\n // already joined (or aren\'t in the process of joining).\n\n\n if ([_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINING"], _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]].includes(this._callState)) {\n throw new Error(\'startCamera() not supported after joining a meeting: did you mean to use setLocalAudio() and/or setLocalVideo() instead?\');\n }\n\n return new Promise( /*#__PURE__*/function () {\n var _ref8 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (resolve, reject) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n resolve(msg);\n };\n\n if (_this13.needsLoad()) {\n try {\n yield _this13.load(properties);\n } catch (e) {\n reject(e);\n }\n } else {\n // even if is already loaded, needs to validate the properties, so the dailyConfig properties can be inserted inside window._dailyConfig\n _this13.validateProperties(properties);\n }\n\n _this13.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_START_CAMERA"],\n properties: makeSafeForPostMessage(_this13.properties),\n preloadCache: makeSafeForPostMessage(_this13._preloadCache)\n }, k);\n });\n\n return function (_x6, _x7) {\n return _ref8.apply(this, arguments);\n };\n }());\n }\n }, {\n key: "validateCustomTrack",\n value: function validateCustomTrack(track, mode, trackName) {\n if (trackName && trackName.length > 50) {\n throw new Error(\'Custom track `trackName` must not be more than 50 characters\');\n }\n\n if (mode) {\n // Since no property from DailyMicAudioModeSettings is required, we are just checking if It is an object\n if (mode !== \'music\' && mode !== \'speech\' && !(mode instanceof Object)) {\n throw new Error(\'Custom track `mode` must be either `music` | `speech` | `DailyMicAudioModeSettings` or `undefined`\');\n }\n }\n\n var isUsingReservedTrackName = trackName ? [\'cam-audio\', \'cam-video\', \'screen-video\', \'screen-audio\', \'rmpAudio\', \'rmpVideo\'].includes(trackName) : false;\n\n if (isUsingReservedTrackName) {\n throw new Error(\'Custom track `trackName` must not match a track name already used by daily: \' + \'cam-audio, cam-video, screen-video, screen-audio, rmpAudio, rmpVideo\');\n }\n\n if (!(track instanceof MediaStreamTrack)) {\n throw new Error(\'Custom tracks provided must be instances of MediaStreamTrack\');\n }\n }\n }, {\n key: "startCustomTrack",\n value: function startCustomTrack() {\n var _this14 = this;\n\n var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n track: track,\n mode: mode,\n trackName: trackName\n };\n methodNotSupportedInReactNative();\n this.validateCustomTrack(properties.track, properties.mode, properties.trackName); // Validate meeting state: custom tracks are only available\n // once you have joined the meeting\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'startCustomTrack() is only allowed when joined\');\n }\n\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n if (msg.error) {\n reject({\n error: msg.error\n });\n } else {\n resolve(msg.mediaTag);\n }\n };\n\n window._dailyPreloadCache.customTrack = properties.track;\n properties.track = _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CUSTOM_TRACK"];\n\n _this14.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_START_CUSTOM_TRACK"],\n properties: properties\n }, k);\n });\n }\n }, {\n key: "stopCustomTrack",\n value: function stopCustomTrack(trackName) {\n var _this15 = this;\n\n methodNotSupportedInReactNative(); // Validate meeting state: custom tracks are only available\n // once you have joined the meeting\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'stopCustomTrack() is only allowed when joined\');\n }\n\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n resolve(msg.mediaTag);\n };\n\n _this15.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_STOP_CUSTOM_TRACK"],\n mediaTag: trackName\n }, k);\n });\n }\n }, {\n key: "setCamera",\n value: function setCamera(cameraDeviceId) {\n var _this16 = this;\n\n methodOnlySupportedInReactNative();\n\n if (this.needsLoad()) {\n throw new Error(\'Before you can invoke setCamera, first you need to invoke one of these methods: join, startCamera, or preAuth\');\n }\n\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n resolve({\n device: msg.device\n });\n };\n\n _this16.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_CAMERA"],\n cameraDeviceId: cameraDeviceId\n }, k);\n });\n }\n }, {\n key: "setAudioDevice",\n value: function () {\n var _setAudioDevice = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (deviceId) {\n methodOnlySupportedInReactNative();\n this.nativeUtils().setAudioDevice(deviceId);\n var currentAudioDevice = yield this.nativeUtils().getAudioDevice();\n return {\n deviceId: currentAudioDevice\n };\n });\n\n function setAudioDevice(_x8) {\n return _setAudioDevice.apply(this, arguments);\n }\n\n return setAudioDevice;\n }()\n }, {\n key: "cycleCamera",\n value: function cycleCamera() {\n var _this17 = this;\n\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n resolve({\n device: msg.device\n });\n };\n\n _this17.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_CYCLE_CAMERA"]\n }, k);\n });\n }\n }, {\n key: "cycleMic",\n value: function cycleMic() {\n var _this18 = this;\n\n methodNotSupportedInReactNative();\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n resolve({\n device: msg.device\n });\n };\n\n _this18.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_CYCLE_MIC"]\n }, k);\n });\n }\n }, {\n key: "getCameraFacingMode",\n value: function getCameraFacingMode() {\n var _this19 = this;\n\n methodOnlySupportedInReactNative();\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n resolve(msg.facingMode);\n };\n\n _this19.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_GET_CAMERA_FACING_MODE"]\n }, k);\n });\n }\n }, {\n key: "setInputDevices",\n value: function setInputDevices(_ref9) {\n var audioDeviceId = _ref9.audioDeviceId,\n videoDeviceId = _ref9.videoDeviceId,\n audioSource = _ref9.audioSource,\n videoSource = _ref9.videoSource;\n console.warn(\'setInputDevices() is deprecated: instead use setInputDevicesAsync(), which returns a Promise\');\n this.setInputDevicesAsync({\n audioDeviceId: audioDeviceId,\n videoDeviceId: videoDeviceId,\n audioSource: audioSource,\n videoSource: videoSource\n });\n return this;\n }\n }, {\n key: "setInputDevicesAsync",\n value: function () {\n var _setInputDevicesAsync = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (_ref10) {\n var _this20 = this;\n\n var audioDeviceId = _ref10.audioDeviceId,\n videoDeviceId = _ref10.videoDeviceId,\n audioSource = _ref10.audioSource,\n videoSource = _ref10.videoSource;\n methodNotSupportedInReactNative(); // use audioDeviceId and videoDeviceId internally\n\n if (audioSource !== undefined) {\n audioDeviceId = audioSource;\n }\n\n if (videoSource !== undefined) {\n videoDeviceId = videoSource;\n } // cache these for use in subsequent calls\n\n\n if (audioDeviceId) {\n this._preloadCache.audioDeviceId = audioDeviceId;\n }\n\n if (videoDeviceId) {\n this._preloadCache.videoDeviceId = videoDeviceId;\n } // if we\'re in callObject mode and not loaded yet, don\'t do anything\n\n\n if (this._callObjectMode && this.needsLoad()) {\n return {\n camera: {\n deviceId: this._preloadCache.videoDeviceId\n },\n mic: {\n deviceId: this._preloadCache.audioDeviceId\n },\n speaker: {\n deviceId: this._preloadCache.outputDeviceId\n }\n };\n }\n\n if (audioDeviceId instanceof MediaStreamTrack) {\n audioDeviceId = _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CUSTOM_TRACK"];\n }\n\n if (videoDeviceId instanceof MediaStreamTrack) {\n videoDeviceId = _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CUSTOM_TRACK"];\n }\n\n return new Promise(function (resolve) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n\n if (msg.returnPreloadCache) {\n resolve({\n camera: {\n deviceId: _this20._preloadCache.videoDeviceId\n },\n mic: {\n deviceId: _this20._preloadCache.audioDeviceId\n },\n speaker: {\n deviceId: _this20._preloadCache.outputDeviceId\n }\n });\n return;\n }\n\n resolve(msg);\n };\n\n _this20.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_INPUT_DEVICES"],\n audioDeviceId: audioDeviceId,\n videoDeviceId: videoDeviceId\n }, k);\n });\n });\n\n function setInputDevicesAsync(_x9) {\n return _setInputDevicesAsync.apply(this, arguments);\n }\n\n return setInputDevicesAsync;\n }()\n }, {\n key: "setOutputDevice",\n value: function setOutputDevice(_ref11) {\n var outputDeviceId = _ref11.outputDeviceId;\n console.warn(\'setOutputDevice() is deprecated: instead use setOutputDeviceAsync(), which returns a Promise\');\n this.setOutputDeviceAsync({\n outputDeviceId: outputDeviceId\n });\n return this;\n }\n }, {\n key: "setOutputDeviceAsync",\n value: function () {\n var _setOutputDeviceAsync = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (_ref12) {\n var _this21 = this;\n\n var outputDeviceId = _ref12.outputDeviceId;\n methodNotSupportedInReactNative(); // cache this for use later\n\n if (outputDeviceId) {\n this._preloadCache.outputDeviceId = outputDeviceId;\n } // if we\'re in callObject mode and not loaded yet, don\'t do anything\n\n\n if (this._callObjectMode && this.needsLoad()) {\n return {\n camera: {\n deviceId: this._preloadCache.videoDeviceId\n },\n mic: {\n deviceId: this._preloadCache.audioDeviceId\n },\n speaker: {\n deviceId: this._preloadCache.outputDeviceId\n }\n };\n }\n\n return new Promise(function (resolve) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n\n if (msg.returnPreloadCache) {\n resolve({\n camera: {\n deviceId: _this21._preloadCache.videoDeviceId\n },\n mic: {\n deviceId: _this21._preloadCache.audioDeviceId\n },\n speaker: {\n deviceId: _this21._preloadCache.outputDeviceId\n }\n });\n return;\n }\n\n resolve(msg);\n };\n\n _this21.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_OUTPUT_DEVICE"],\n outputDeviceId: outputDeviceId\n }, k);\n });\n });\n\n function setOutputDeviceAsync(_x10) {\n return _setOutputDeviceAsync.apply(this, arguments);\n }\n\n return setOutputDeviceAsync;\n }()\n }, {\n key: "getInputDevices",\n value: function () {\n var _getInputDevices = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this22 = this;\n\n if (this._callObjectMode && this.needsLoad()) {\n return {\n camera: {\n deviceId: this._preloadCache.videoDeviceId\n },\n mic: {\n deviceId: this._preloadCache.audioDeviceId\n },\n speaker: {\n deviceId: this._preloadCache.outputDeviceId\n }\n };\n }\n\n return new Promise(function (resolve, reject) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n\n if (msg.returnPreloadCache) {\n resolve({\n camera: {\n deviceId: _this22._preloadCache.videoDeviceId\n },\n mic: {\n deviceId: _this22._preloadCache.audioDeviceId\n },\n speaker: {\n deviceId: _this22._preloadCache.outputDeviceId\n }\n });\n return;\n }\n\n resolve(msg);\n };\n\n _this22.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_GET_INPUT_DEVICES"]\n }, k);\n });\n });\n\n function getInputDevices() {\n return _getInputDevices.apply(this, arguments);\n }\n\n return getInputDevices;\n }()\n }, {\n key: "nativeInCallAudioMode",\n value: function nativeInCallAudioMode() {\n methodOnlySupportedInReactNative();\n return this._nativeInCallAudioMode;\n }\n }, {\n key: "setNativeInCallAudioMode",\n value: function setNativeInCallAudioMode(inCallAudioMode) {\n methodOnlySupportedInReactNative();\n\n if (![NATIVE_AUDIO_MODE_VIDEO_CALL, NATIVE_AUDIO_MODE_VOICE_CALL].includes(inCallAudioMode)) {\n console.error(\'invalid in-call audio mode specified: \', inCallAudioMode);\n return;\n }\n\n if (inCallAudioMode === this._nativeInCallAudioMode) {\n return;\n } // Set new audio mode (video call, audio call) to use when we\'re in a call\n\n\n this._nativeInCallAudioMode = inCallAudioMode; // If we\'re in a call now, apply the new audio mode\n // (assuming automatic audio device management isn\'t disabled)\n\n if (!this.disableReactNativeAutoDeviceManagement(\'audio\') && this._isCallPendingOrOngoing(this._callState, this._isPreparingToJoin)) {\n this.nativeUtils().setAudioMode(this._nativeInCallAudioMode);\n }\n\n return this;\n }\n }, {\n key: "preAuth",\n value: function () {\n var _preAuth = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this23 = this;\n\n var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // Validate mode.\n if (!this._callObjectMode) {\n throw new Error(\'preAuth() currently only supported in call object mode\');\n } // Validate call state: pre-auth is only allowed if you haven\'t already\n // joined (or aren\'t in the process of joining).\n\n\n if ([_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINING"], _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]].includes(this._callState)) {\n throw new Error(\'preAuth() not supported after joining a meeting\');\n } // Load call machine bundle, if needed.\n\n\n if (this.needsLoad()) {\n yield this.load(properties);\n } // Assign properties, ensuring that at a minimum url is set.\n\n\n if (!properties.url) {\n throw new Error(\'preAuth() requires at least a url to be provided\');\n }\n\n this.validateProperties(properties);\n this.properties = _objectSpread(_objectSpread({}, this.properties), properties); // Pre-auth with the server.\n\n return new Promise(function (resolve, reject) {\n var k = function k(msg) {\n if (msg.error) {\n return reject(msg.error);\n }\n\n if (!msg.access) {\n return reject(new Error(\'unknown error in preAuth()\'));\n } // Set a flag indicating that we\'ve pre-authed.\n // This flag has the effect of "locking in" url and token, so that they\n // can\'t be changed subsequently on join(), which would invalidate this\n // pre-auth.\n\n\n _this23._didPreAuth = true;\n resolve({\n access: msg.access\n });\n };\n\n _this23.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_PREAUTH"],\n properties: makeSafeForPostMessage(_this23.properties)\n }, k);\n });\n });\n\n function preAuth() {\n return _preAuth.apply(this, arguments);\n }\n\n return preAuth;\n }()\n }, {\n key: "load",\n value: function () {\n var _load = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (properties) {\n var _this24 = this;\n\n if (!this.needsLoad()) {\n return;\n }\n\n if (properties) {\n this.validateProperties(properties);\n this.properties = _objectSpread(_objectSpread({}, this.properties), properties);\n } // In iframe mode, we *must* have a meeting url\n // (As opposed to call object mode, where a meeting url, a base url, or no\n // url at all are all valid here)\n\n\n if (!this._callObjectMode && !this.properties.url) {\n throw new Error("can\'t load iframe meeting because url property isn\'t set");\n }\n\n this._updateCallState(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LOADING"]);\n\n try {\n this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOADING"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOADING"]\n });\n } catch (e) {\n console.log("could not emit \'loading\'", e);\n }\n\n if (this._callObjectMode) {\n // non-iframe, callObjectMode\n return new Promise(function (resolve, reject) {\n _this24._callObjectLoader.cancel();\n\n _this24._callObjectLoader.load(_this24._callFrameId, _this24.properties.dailyConfig && _this24.properties.dailyConfig.avoidEval, function (wasNoOp) {\n _this24._updateCallState(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LOADED"]); // Only need to emit event if load was a no-op, since the loaded\n // bundle won\'t be emitting it if it\'s not executed again\n\n\n wasNoOp && _this24.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOADED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOADED"]\n });\n resolve();\n }, function (errorMsg, willRetry) {\n _this24.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOAD_ATTEMPT_FAILED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOAD_ATTEMPT_FAILED"],\n errorMsg: errorMsg\n });\n\n if (!willRetry) {\n _this24._updateCallState(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_ERROR"]);\n\n _this24.resetMeetingDependentVars();\n\n _this24.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ERROR"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ERROR"],\n errorMsg: errorMsg\n });\n\n reject(errorMsg);\n }\n });\n });\n } else {\n // iframe\n this._iframe.src = this.assembleMeetingUrl();\n return new Promise(function (resolve, reject) {\n _this24._loadedCallback = function (error) {\n if (_this24._callState === _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_ERROR"]) {\n reject(error);\n return;\n }\n\n _this24._updateCallState(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LOADED"]);\n\n if (_this24.properties.cssFile || _this24.properties.cssText) {\n _this24.loadCss(_this24.properties);\n }\n\n for (var eventName in _this24._inputEventsOn) {\n _this24.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_REGISTER_INPUT_HANDLER"],\n on: eventName\n });\n }\n\n resolve();\n };\n });\n }\n });\n\n function load(_x11) {\n return _load.apply(this, arguments);\n }\n\n return load;\n }()\n }, {\n key: "join",\n value: function () {\n var _join = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this25 = this;\n\n var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var newCss = false;\n\n if (this.needsLoad()) {\n this.updateIsPreparingToJoin(true);\n\n try {\n yield this.load(properties);\n } catch (e) {\n this.updateIsPreparingToJoin(false);\n return Promise.reject(e);\n }\n } else {\n newCss = !!(this.properties.cssFile || this.properties.cssText); // Validate that any provided url or token doesn\'t conflict with url or\n // token already used to preAuth()\n\n if (this._didPreAuth) {\n if (properties.url && properties.url !== this.properties.url) {\n console.error("url in join() is different than the one used in preAuth()");\n this.updateIsPreparingToJoin(false);\n return Promise.reject();\n }\n\n if (properties.token && properties.token !== this.properties.token) {\n console.error("token in join() is different than the one used in preAuth()");\n this.updateIsPreparingToJoin(false);\n return Promise.reject();\n }\n } // In iframe mode, validate that url we\'re using to join() doesn\'t\n // conflict with the url we used to load()\n\n\n if (properties.url && !this._callObjectMode) {\n if (properties.url && properties.url !== this.properties.url) {\n console.error("url in join() is different than the one used in load() (".concat(this.properties.url, " -> ").concat(properties.url, ")"));\n this.updateIsPreparingToJoin(false);\n return Promise.reject();\n }\n } // Validate and assign properties to this.properties, for use by call\n // machine\n\n\n this.validateProperties(properties);\n this.properties = _objectSpread(_objectSpread({}, this.properties), properties);\n } // only update if showLocalVideo/showParticipantsBar are being explicitly set\n\n\n if (properties.showLocalVideo !== undefined) {\n if (this._callObjectMode) {\n console.error(\'showLocalVideo is not available in callObject mode\');\n } else {\n this._showLocalVideo = !!properties.showLocalVideo;\n }\n }\n\n if (properties.showParticipantsBar !== undefined) {\n if (this._callObjectMode) {\n console.error(\'showParticipantsBar is not available in callObject mode\');\n } else {\n this._showParticipantsBar = !!properties.showParticipantsBar;\n }\n }\n\n if (this._callState === _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"] || this._callState === _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINING"]) {\n console.warn(\'already joined meeting, call leave() before joining again\');\n this.updateIsPreparingToJoin(false);\n return;\n }\n\n this._updateCallState(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINING"], false);\n\n try {\n this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_JOINING_MEETING"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_JOINING_MEETING"]\n });\n } catch (e) {\n console.log("could not emit \'joining-meeting\'", e);\n }\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_JOIN"],\n properties: makeSafeForPostMessage(this.properties),\n preloadCache: makeSafeForPostMessage(this._preloadCache)\n });\n return new Promise(function (resolve, reject) {\n _this25._joinedCallback = function (participants, error) {\n if (_this25._callState === _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_ERROR"]) {\n reject(error);\n return;\n }\n\n _this25._updateCallState(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]);\n\n if (participants) {\n for (var id in participants) {\n if (_this25._callObjectMode) {\n _Participant__WEBPACK_IMPORTED_MODULE_21__["addTracks"](participants[id]);\n _Participant__WEBPACK_IMPORTED_MODULE_21__["addCustomTracks"](participants[id]);\n _Participant__WEBPACK_IMPORTED_MODULE_21__["addLegacyTracks"](participants[id], _this25._participants[id]);\n }\n\n _this25._participants[id] = _objectSpread({}, participants[id]);\n\n _this25.toggleParticipantAudioBasedOnNativeAudioFocus();\n }\n }\n\n if (newCss) {\n _this25.loadCss(_this25.properties);\n }\n\n resolve(participants);\n };\n });\n });\n\n function join() {\n return _join.apply(this, arguments);\n }\n\n return join;\n }()\n }, {\n key: "leave",\n value: function () {\n var _leave = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this26 = this;\n\n return new Promise(function (resolve, _) {\n if (_this26._callObjectLoader && !_this26._callObjectLoader.loaded) {\n // If call object bundle never successfully loaded, cancel load if\n // needed and clean up state immediately (without waiting for call\n // machine to clean up its state).\n _this26._callObjectLoader.cancel();\n\n _this26._updateCallState(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LEFT"]);\n\n _this26.resetMeetingDependentVars();\n\n try {\n _this26.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LEFT"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LEFT"]\n });\n } catch (e) {\n console.log("could not emit \'left-meeting\'", e);\n }\n\n resolve();\n } else if (_this26._callState === _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LEFT"] || _this26._callState === _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_ERROR"]) {\n // nothing to do, here, just resolve\n resolve();\n } else {\n _this26._resolveLeave = resolve; // TODO: the possibility that the iframe call machine is not yet loaded\n // is never handled here...\n\n _this26.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_LEAVE"]\n });\n }\n });\n });\n\n function leave() {\n return _leave.apply(this, arguments);\n }\n\n return leave;\n }()\n }, {\n key: "startScreenShare",\n value: function startScreenShare() {\n var captureOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n methodNotSupportedInReactNative();\n\n if (captureOptions.mediaStream) {\n this._preloadCache.screenMediaStream = captureOptions.mediaStream;\n captureOptions.mediaStream = _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CUSTOM_TRACK"];\n }\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_START_SCREENSHARE"],\n captureOptions: captureOptions\n });\n }\n }, {\n key: "stopScreenShare",\n value: function stopScreenShare() {\n methodNotSupportedInReactNative();\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_STOP_SCREENSHARE"]\n });\n }\n }, {\n key: "startRecording",\n value: function startRecording() {\n var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.sendMessageToCallMachine(_objectSpread({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_START_RECORDING"]\n }, args));\n }\n }, {\n key: "updateRecording",\n value: function updateRecording(_ref13) {\n var _ref13$layout = _ref13.layout,\n layout = _ref13$layout === void 0 ? {\n preset: \'default\'\n } : _ref13$layout,\n instanceId = _ref13.instanceId;\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_RECORDING"],\n layout: layout,\n instanceId: instanceId\n });\n }\n }, {\n key: "stopRecording",\n value: function stopRecording() {\n var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.sendMessageToCallMachine(_objectSpread({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_STOP_RECORDING"]\n }, args));\n }\n }, {\n key: "startLiveStreaming",\n value: function startLiveStreaming() {\n var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.sendMessageToCallMachine(_objectSpread({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_START_LIVE_STREAMING"]\n }, args));\n }\n }, {\n key: "updateLiveStreaming",\n value: function updateLiveStreaming(_ref14) {\n var _ref14$layout = _ref14.layout,\n layout = _ref14$layout === void 0 ? {\n preset: \'default\'\n } : _ref14$layout,\n instanceId = _ref14.instanceId;\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_LIVE_STREAMING"],\n layout: layout,\n instanceId: instanceId\n });\n }\n }, {\n key: "addLiveStreamingEndpoints",\n value: function addLiveStreamingEndpoints(_ref15) {\n var endpoints = _ref15.endpoints,\n instanceId = _ref15.instanceId;\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_LIVE_STREAMING_ENDPOINTS"],\n endpointsOp: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["UPDATE_LIVE_STREAMING_ENDPOINTS_OP"].ADD_ENDPOINTS,\n endpoints: endpoints,\n instanceId: instanceId\n });\n }\n }, {\n key: "removeLiveStreamingEndpoints",\n value: function removeLiveStreamingEndpoints(_ref16) {\n var endpoints = _ref16.endpoints,\n instanceId = _ref16.instanceId;\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_LIVE_STREAMING_ENDPOINTS"],\n endpointsOp: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["UPDATE_LIVE_STREAMING_ENDPOINTS_OP"].REMOVE_ENDPOINTS,\n endpoints: endpoints,\n instanceId: instanceId\n });\n }\n }, {\n key: "stopLiveStreaming",\n value: function stopLiveStreaming() {\n var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.sendMessageToCallMachine(_objectSpread({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_STOP_LIVE_STREAMING"]\n }, args));\n }\n }, {\n key: "startRemoteMediaPlayer",\n value: function () {\n var _startRemoteMediaPlayer = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (_ref17) {\n var _this27 = this;\n\n var url = _ref17.url,\n _ref17$settings = _ref17.settings,\n settings = _ref17$settings === void 0 ? {\n state: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING"].PLAY\n } : _ref17$settings;\n\n try {\n validateRemotePlayerUrl(url);\n validateRemotePlayerSettings(settings);\n validateRemotePlayerEncodingSettings(settings);\n } catch (e) {\n console.error("invalid argument Error: ".concat(e));\n console.error(remoteMediaPlayerStartValidationHelpMsg());\n throw e;\n }\n\n return new Promise( /*#__PURE__*/function () {\n var _ref18 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (resolve, reject) {\n var k = function k(msg) {\n if (msg.error) {\n reject({\n error: msg.error,\n errorMsg: msg.errorMsg\n });\n } else {\n resolve({\n session_id: msg.session_id,\n remoteMediaPlayerState: {\n state: msg.state,\n settings: msg.settings\n }\n });\n }\n };\n\n _this27.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_START_REMOTE_MEDIA_PLAYER"],\n url: url,\n settings: settings\n }, k);\n });\n\n return function (_x13, _x14) {\n return _ref18.apply(this, arguments);\n };\n }());\n });\n\n function startRemoteMediaPlayer(_x12) {\n return _startRemoteMediaPlayer.apply(this, arguments);\n }\n\n return startRemoteMediaPlayer;\n }()\n }, {\n key: "stopRemoteMediaPlayer",\n value: function () {\n var _stopRemoteMediaPlayer = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (session_id) {\n var _this28 = this;\n\n if (typeof session_id !== \'string\') throw new Error(\' remotePlayerID must be of type string\');\n return new Promise( /*#__PURE__*/function () {\n var _ref19 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (resolve, reject) {\n var k = function k(msg) {\n if (msg.error) {\n reject({\n error: msg.error,\n errorMsg: msg.errorMsg\n });\n } else {\n resolve();\n }\n };\n\n _this28.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_STOP_REMOTE_MEDIA_PLAYER"],\n session_id: session_id\n }, k);\n });\n\n return function (_x16, _x17) {\n return _ref19.apply(this, arguments);\n };\n }());\n });\n\n function stopRemoteMediaPlayer(_x15) {\n return _stopRemoteMediaPlayer.apply(this, arguments);\n }\n\n return stopRemoteMediaPlayer;\n }()\n }, {\n key: "updateRemoteMediaPlayer",\n value: function () {\n var _updateRemoteMediaPlayer = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (_ref20) {\n var _this29 = this;\n\n var session_id = _ref20.session_id,\n settings = _ref20.settings;\n\n // TODO: Add check of the current_state === desired state\n // And resolve() from here itself.\n try {\n validateRemotePlayerSettings(settings);\n } catch (e) {\n console.error("invalid argument Error: ".concat(e));\n console.error(remoteMediaPlayerUpdateValidationHelpMsg());\n throw e;\n }\n\n return new Promise( /*#__PURE__*/function () {\n var _ref21 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (resolve, reject) {\n var k = function k(msg) {\n if (msg.error) {\n reject({\n error: msg.error,\n errorMsg: msg.errorMsg\n });\n } else {\n resolve({\n session_id: msg.session_id,\n remoteMediaPlayerState: {\n state: msg.state,\n settings: msg.settings\n }\n });\n }\n };\n\n _this29.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_REMOTE_MEDIA_PLAYER"],\n session_id: session_id,\n settings: settings\n }, k);\n });\n\n return function (_x19, _x20) {\n return _ref21.apply(this, arguments);\n };\n }());\n });\n\n function updateRemoteMediaPlayer(_x18) {\n return _updateRemoteMediaPlayer.apply(this, arguments);\n }\n\n return updateRemoteMediaPlayer;\n }()\n }, {\n key: "startTranscription",\n value: function startTranscription(args) {\n this.sendMessageToCallMachine(_objectSpread({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_START_TRANSCRIPTION"]\n }, args));\n }\n }, {\n key: "stopTranscription",\n value: function stopTranscription() {\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_STOP_TRANSCRIPTION"]\n });\n }\n }, {\n key: "getNetworkStats",\n value: function getNetworkStats() {\n var _this30 = this;\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n var stats = {\n latest: {}\n };\n return {\n stats: stats\n };\n }\n\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n resolve(_objectSpread({\n stats: msg.stats\n }, _this30._network));\n };\n\n _this30.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_GET_CALC_STATS"]\n }, k);\n });\n }\n }, {\n key: "getActiveSpeaker",\n value: function getActiveSpeaker() {\n methodNotSupportedInReactNative();\n return this._activeSpeaker;\n }\n }, {\n key: "setActiveSpeakerMode",\n value: function setActiveSpeakerMode(enabled) {\n methodNotSupportedInReactNative();\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_ACTIVE_SPEAKER_MODE"],\n enabled: enabled\n });\n return this;\n }\n }, {\n key: "activeSpeakerMode",\n value: function activeSpeakerMode() {\n methodNotSupportedInReactNative();\n return this._activeSpeakerMode;\n }\n }, {\n key: "subscribeToTracksAutomatically",\n value: function subscribeToTracksAutomatically() {\n return this._preloadCache.subscribeToTracksAutomatically;\n }\n }, {\n key: "setSubscribeToTracksAutomatically",\n value: function setSubscribeToTracksAutomatically(enabled) {\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n throw new Error(\'setSubscribeToTracksAutomatically() is only allowed when joined\');\n }\n\n this._preloadCache.subscribeToTracksAutomatically = enabled;\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_SUBSCRIBE_TO_TRACKS_AUTOMATICALLY"],\n enabled: enabled\n });\n return this;\n }\n }, {\n key: "enumerateDevices",\n value: function () {\n var _enumerateDevices = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this31 = this;\n\n if (this._callObjectMode) {\n var raw = yield navigator.mediaDevices.enumerateDevices();\n return {\n devices: raw.map(function (d) {\n return JSON.parse(JSON.stringify(d));\n })\n };\n }\n\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n resolve({\n devices: msg.devices\n });\n };\n\n _this31.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_ENUMERATE_DEVICES"]\n }, k);\n });\n });\n\n function enumerateDevices() {\n return _enumerateDevices.apply(this, arguments);\n }\n\n return enumerateDevices;\n }()\n }, {\n key: "sendAppMessage",\n value: function sendAppMessage(data) {\n var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'*\';\n\n if (JSON.stringify(data).length > _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["MAX_APP_MSG_SIZE"]) {\n throw new Error(\'Message data too large. Max size is \' + _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["MAX_APP_MSG_SIZE"]);\n }\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_APP_MSG"],\n data: data,\n to: to\n });\n return this;\n }\n }, {\n key: "addFakeParticipant",\n value: function addFakeParticipant(args) {\n methodNotSupportedInReactNative();\n this.sendMessageToCallMachine(_objectSpread({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_ADD_FAKE_PARTICIPANT"]\n }, args));\n return this;\n }\n }, {\n key: "setShowNamesMode",\n value: function setShowNamesMode(mode) {\n methodNotSupportedInReactNative();\n\n if (mode && !(mode === \'always\' || mode === \'never\')) {\n console.error(\'setShowNamesMode argument should be "always", "never", or false\');\n return this;\n }\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_SHOW_NAMES"],\n mode: mode\n });\n return this;\n }\n }, {\n key: "setShowLocalVideo",\n value: function setShowLocalVideo() {\n var show = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n methodNotSupportedInReactNative();\n\n if (typeof show !== \'boolean\') {\n console.error(\'setShowLocalVideo only accepts a boolean value\');\n return this;\n }\n\n if (this._callObjectMode) {\n console.error(\'setShowLocalVideo is not available in callObject mode\');\n return this;\n }\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n console.error(\'the meeting must be joined before calling setShowLocalVideo\');\n return this;\n }\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_SHOW_LOCAL_VIDEO"],\n show: show\n });\n this._showLocalVideo = show;\n return this;\n }\n }, {\n key: "showLocalVideo",\n value: function showLocalVideo() {\n methodNotSupportedInReactNative();\n\n if (this._callObjectMode) {\n console.error(\'showLocalVideo is not available in callObject mode\');\n return this;\n }\n\n return this._showLocalVideo;\n }\n }, {\n key: "setShowParticipantsBar",\n value: function setShowParticipantsBar() {\n var show = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n methodNotSupportedInReactNative();\n\n if (typeof show !== \'boolean\') {\n console.error(\'setShowParticipantsBar only accepts a boolean value\');\n return this;\n }\n\n if (this._callObjectMode) {\n console.error(\'setShowParticipantsBar is not available in callObject mode\');\n return this;\n }\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n console.error(\'the meeting must be joined before calling setShowParticipantsBar\');\n return this;\n }\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_SHOW_PARTICIPANTS_BAR"],\n show: show\n });\n this._showParticipantsBar = show;\n return this;\n }\n }, {\n key: "showParticipantsBar",\n value: function showParticipantsBar() {\n methodNotSupportedInReactNative();\n\n if (this._callObjectMode) {\n console.error(\'showParticipantsBar is not available in callObject mode\');\n return this;\n }\n\n return this._showParticipantsBar;\n }\n }, {\n key: "customIntegrations",\n value: function customIntegrations() {\n methodNotSupportedInReactNative();\n\n if (this._callObjectMode) {\n console.error(\'customIntegrations is not available in callObject mode\');\n return this;\n }\n\n return this._customIntegrations;\n }\n }, {\n key: "updateCustomIntegrations",\n value: function updateCustomIntegrations(integrations) {\n methodNotSupportedInReactNative();\n\n if (this._callObjectMode) {\n console.error(\'updateCustomIntegrations is not available in callObject mode\');\n return this;\n }\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n console.error(\'the meeting must be joined before calling updateCustomIntegrations\');\n return this;\n } // TODO: Write validator for custom integrations.\n // if (!validateCustomIntegrations(integrations)) {\n // console.error(\n // `updateCustomIntegrations only accepts a dictionary of the type ${JSON.stringify(\n // customIntegrationsType\n // )}`\n // );\n // return this;\n // }\n\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_CUSTOM_INTEGRATIONS"],\n integrations: integrations\n });\n this._customIntegrations = integrations;\n return this;\n }\n }, {\n key: "customTrayButtons",\n value: function customTrayButtons() {\n methodNotSupportedInReactNative();\n\n if (this._callObjectMode) {\n console.error(\'customTrayButtons is not available in callObject mode\');\n return this;\n }\n\n return this._customTrayButtons;\n }\n }, {\n key: "updateCustomTrayButtons",\n value: function updateCustomTrayButtons(btns) {\n methodNotSupportedInReactNative();\n\n if (this._callObjectMode) {\n console.error(\'updateCustomTrayButtons is not available in callObject mode\');\n return this;\n }\n\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]) {\n console.error(\'the meeting must be joined before calling updateCustomTrayButtons\');\n return this;\n }\n\n if (!validateCustomTrayButtons(btns)) {\n console.error("updateCustomTrayButtons only accepts a dictionary of the type ".concat(JSON.stringify(customTrayButtonsType)));\n return this;\n }\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_UPDATE_CUSTOM_TRAY_BUTTONS"],\n btns: btns\n });\n this._customTrayButtons = btns;\n return this;\n }\n }, {\n key: "theme",\n value: function theme() {\n if (this._callObjectMode) {\n console.error(\'theme is not available in callObject mode\');\n return this;\n }\n\n return this.properties.theme;\n }\n }, {\n key: "setTheme",\n value: function setTheme(theme) {\n var _this32 = this;\n\n return new Promise(function (resolve, reject) {\n if (_this32._callObjectMode) {\n reject(\'setTheme is not available in callObject mode\');\n return;\n }\n\n try {\n _this32.validateProperties({\n theme: theme\n });\n\n _this32.properties.theme = _objectSpread({}, theme); // Send message to Prebuilt UI Iframe driver\n\n _this32.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_THEME"],\n theme: _this32.properties.theme\n });\n /**\n * For simplicity, emitting theme-updated here rather than\n * listening for it from Prebuilt & re-emitting it, since:\n * - we\'ve fully validated the theme, so there\'s no risk of it not being applied\n * - we set `this.properties.theme` first, so in a customer\'s `theme-updated`\n * handler, a call to `theme()` will return the latest value\n * - this method is the only way `theme-updated` can change\n */\n\n\n try {\n _this32.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_THEME_UPDATED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_THEME_UPDATED"],\n theme: _this32.properties.theme\n });\n } catch (e) {\n console.log("could not emit \'theme-updated\'", e);\n }\n\n resolve(_this32.properties.theme);\n } catch (e) {\n reject(e);\n }\n });\n }\n }, {\n key: "detectAllFaces",\n value: function detectAllFaces() {\n var _this33 = this;\n\n methodNotSupportedInReactNative();\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n resolve(msg);\n };\n\n _this33.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_DETECT_ALL_FACES"]\n }, k);\n });\n }\n }, {\n key: "requestFullscreen",\n value: function () {\n var _requestFullscreen = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n methodNotSupportedInReactNative();\n\n if (!this._iframe || document.fullscreenElement || !Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isFullscreenSupported"])()) {\n return;\n }\n\n try {\n (yield this._iframe.requestFullscreen) ? this._iframe.requestFullscreen() : this._iframe.webkitRequestFullscreen();\n } catch (e) {\n console.log(\'could not make video call fullscreen\', e);\n }\n });\n\n function requestFullscreen() {\n return _requestFullscreen.apply(this, arguments);\n }\n\n return requestFullscreen;\n }()\n }, {\n key: "exitFullscreen",\n value: function exitFullscreen() {\n methodNotSupportedInReactNative();\n\n if (document.fullscreenElement) {\n document.exitFullscreen();\n } else if (document.webkitFullscreenElement) {\n document.webkitExitFullscreen();\n }\n }\n }, {\n key: "room",\n value: function () {\n var _room = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this34 = this;\n\n var _ref22 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref22$includeRoomCon = _ref22.includeRoomConfigDefaults,\n includeRoomConfigDefaults = _ref22$includeRoomCon === void 0 ? true : _ref22$includeRoomCon;\n\n // The call machine bundle is loaded and it\'s already given us an access\n // state (which is based on room info), so we know it can be queried for\n // room info.\n if (this._accessState.access !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_ACCESS_UNKNOWN"] && !this.needsLoad()) {\n // We\'ve succesfully join()ed or preAuth()ed, so we should have room info.\n return new Promise(function (resolve, _) {\n var k = function k(msg) {\n delete msg.action;\n delete msg.callbackStamp;\n resolve(msg);\n };\n\n _this34.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_ROOM"],\n includeRoomConfigDefaults: includeRoomConfigDefaults\n }, k);\n });\n } else {\n // Return the URL of the room we\'ll be in if/when we successfully join(),\n // since we have no other room info to show yet.\n if (this.properties.url) {\n // NOTE: technically this should be called "roomUrlPendingJoinOrPreauth"\n // to indicate that *either* a join() or a preAuth() will allow you to\n // access room info, but preAuth() was added later and this name was\n // preserved to maintain backward compatibility: if a consumer hasn\'t\n // updated their app to use preAuth(), they\'ll be none the wiser.\n return {\n roomUrlPendingJoin: this.properties.url\n };\n }\n\n return null;\n }\n });\n\n function room() {\n return _room.apply(this, arguments);\n }\n\n return room;\n }()\n }, {\n key: "geo",\n value: function () {\n var _geo = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n return new Promise( /*#__PURE__*/function () {\n var _ref23 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (resolve, _) {\n try {\n var url = \'https://gs.daily.co/_ks_/x-swsl/:\';\n var res = yield fetch(url);\n var data = yield res.json();\n resolve({\n current: data.geo\n });\n } catch (e) {\n console.error(\'geo lookup failed\', e);\n resolve({\n current: \'\'\n });\n }\n });\n\n return function (_x21, _x22) {\n return _ref23.apply(this, arguments);\n };\n }());\n });\n\n function geo() {\n return _geo.apply(this, arguments);\n }\n\n return geo;\n }()\n }, {\n key: "setNetworkTopology",\n value: function () {\n var _setNetworkTopology = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (opts) {\n var _this35 = this;\n\n methodNotSupportedInReactNative();\n return new Promise( /*#__PURE__*/function () {\n var _ref24 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (resolve, reject) {\n var k = function k(msg) {\n if (msg.error) {\n reject({\n error: msg.error\n });\n } else {\n resolve({\n workerId: msg.workerId\n });\n }\n };\n\n _this35.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_NETWORK_TOPOLOGY"],\n opts: opts\n }, k);\n });\n\n return function (_x24, _x25) {\n return _ref24.apply(this, arguments);\n };\n }());\n });\n\n function setNetworkTopology(_x23) {\n return _setNetworkTopology.apply(this, arguments);\n }\n\n return setNetworkTopology;\n }()\n }, {\n key: "getNetworkTopology",\n value: function () {\n var _getNetworkTopology = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* () {\n var _this36 = this;\n\n return new Promise( /*#__PURE__*/function () {\n var _ref25 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(function* (resolve, reject) {\n var k = function k(msg) {\n if (msg.error) {\n reject({\n error: msg.error\n });\n } else {\n resolve({\n topology: msg.topology\n });\n }\n };\n\n _this36.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_GET_NETWORK_TOPOLOGY"]\n }, k);\n });\n\n return function (_x26, _x27) {\n return _ref25.apply(this, arguments);\n };\n }());\n });\n\n function getNetworkTopology() {\n return _getNetworkTopology.apply(this, arguments);\n }\n\n return getNetworkTopology;\n }()\n }, {\n key: "setPlayNewParticipantSound",\n value: function setPlayNewParticipantSound(arg) {\n methodNotSupportedInReactNative();\n\n if (!(typeof arg === \'number\' || arg === true || arg === false)) {\n throw new Error("argument to setShouldPlayNewParticipantSound should be true, false, or a number, but is ".concat(arg));\n }\n\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_SET_PLAY_DING"],\n arg: arg\n });\n }\n }, {\n key: "on",\n value: function on(eventName, k) {\n this._inputEventsOn[eventName] = {};\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_REGISTER_INPUT_HANDLER"],\n on: eventName\n });\n return events__WEBPACK_IMPORTED_MODULE_11___default.a.prototype.on.call(this, eventName, k);\n } // todo: once is almost certainly implemented incorrectly. read the\n // EventEmitter source to figure out how to do this properly. since\n // overriding on/off/once are optimizations, anyway, we won\'t worry\n // about it right now.\n\n }, {\n key: "once",\n value: function once(eventName, k) {\n this._inputEventsOn[eventName] = {};\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_REGISTER_INPUT_HANDLER"],\n on: eventName\n });\n return events__WEBPACK_IMPORTED_MODULE_11___default.a.prototype.once.call(this, eventName, k);\n }\n }, {\n key: "off",\n value: function off(eventName, k) {\n delete this._inputEventsOn[eventName];\n this.sendMessageToCallMachine({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_METHOD_REGISTER_INPUT_HANDLER"],\n off: eventName\n });\n return events__WEBPACK_IMPORTED_MODULE_11___default.a.prototype.off.call(this, eventName, k);\n } //\n // internal methods\n //\n\n }, {\n key: "validateProperties",\n value: function validateProperties(properties) {\n for (var k in properties) {\n if (!FRAME_PROPS[k]) {\n throw new Error("unrecognized property \'".concat(k, "\'"));\n }\n\n if (FRAME_PROPS[k].validate && !FRAME_PROPS[k].validate(properties[k], this)) {\n throw new Error("property \'".concat(k, "\': ").concat(FRAME_PROPS[k].help));\n }\n }\n }\n }, {\n key: "assembleMeetingUrl",\n value: function assembleMeetingUrl() {\n // handle case of url with query string and without\n var props = _objectSpread(_objectSpread({}, this.properties), {}, {\n emb: this._callFrameId,\n embHref: encodeURIComponent(window.location.href)\n }),\n firstSep = props.url.match(/\\?/) ? \'&\' : \'?\',\n url = props.url,\n urlProps = Object.keys(FRAME_PROPS).filter(function (p) {\n return FRAME_PROPS[p].queryString && props[p] !== undefined;\n });\n\n var newQueryString = urlProps.map(function (p) {\n return "".concat(FRAME_PROPS[p].queryString, "=").concat(props[p]);\n }).join(\'&\');\n return url + firstSep + newQueryString;\n } // Note that even if the below method returns true, load() may decide that\n // there\'s nothing more to do (e.g. in the case that the call object has\n // already been loaded once) and simply carry out the appropriate meeting\n // state transition.\n\n }, {\n key: "needsLoad",\n value: function needsLoad() {\n // NOTE: The *only* reason DAILY_STATE_LOADING is here is to preserve a bug\n // that I (@kompfner) am a bit hesitant to fix until more time can be\n // dedicated to doing the *right* fix. If we\'re in DAILY_STATE_LOADING, we\n // probably *shouldn\'t* let you trigger another load() and get into a weird\n // state, but this has been long-standing behavior. The alternative would mean\n // that, if load() failed silently for some reason, you couldn\'t re-trigger it\n // since we\'d be stuck in the DAILY_STATE_LOADING state.\n return [_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_NEW"], _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LOADING"], _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LEFT"], _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_ERROR"]].includes(this._callState);\n }\n }, {\n key: "sendMessageToCallMachine",\n value: function sendMessageToCallMachine(message, callback) {\n this._messageChannel.sendMessageToCallMachine(message, callback, this._iframe, this._callFrameId);\n } ///\n /// The below *packagedMessage* methods facilitate wiring up a DailyIframe\n /// instance as a remote driver of another DailyIframe instance, like in the\n /// new prebuilt UI case, where an "outer" callFrame controls an "inner"\n /// callObject through an intermediate iframed app.\n ///\n\n }, {\n key: "forwardPackagedMessageToCallMachine",\n value: function forwardPackagedMessageToCallMachine(msg) {\n this._messageChannel.forwardPackagedMessageToCallMachine(msg, this._iframe, this._callFrameId);\n }\n }, {\n key: "addListenerForPackagedMessagesFromCallMachine",\n value: function addListenerForPackagedMessagesFromCallMachine(listener) {\n return this._messageChannel.addListenerForPackagedMessagesFromCallMachine(listener, this._callFrameId);\n }\n }, {\n key: "removeListenerForPackagedMessagesFromCallMachine",\n value: function removeListenerForPackagedMessagesFromCallMachine(listenerId) {\n this._messageChannel.removeListenerForPackagedMessagesFromCallMachine(listenerId);\n }\n }, {\n key: "handleMessageFromCallMachine",\n value: function handleMessageFromCallMachine(msg) {\n switch (msg.action) {\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG"]:\n this.sendMessageToCallMachine(_objectSpread({\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_IFRAME_LAUNCH_CONFIG"]\n }, this.properties));\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOADED"]:\n if (this._loadedCallback) {\n this._loadedCallback();\n\n this._loadedCallback = null;\n }\n\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_JOINED_MEETING"]:\n if (this._joinedCallback) {\n this._joinedCallback(msg.participants);\n\n this._joinedCallback = null;\n }\n\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_PARTICIPANT_JOINED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_PARTICIPANT_UPDATED"]:\n if (this._callState === _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LEFT"]) {\n return;\n }\n\n if (msg.participant && msg.participant.session_id) {\n var id = msg.participant.local ? \'local\' : msg.participant.session_id;\n\n if (this._callObjectMode) {\n _Participant__WEBPACK_IMPORTED_MODULE_21__["addTracks"](msg.participant);\n _Participant__WEBPACK_IMPORTED_MODULE_21__["addCustomTracks"](msg.participant);\n _Participant__WEBPACK_IMPORTED_MODULE_21__["addLegacyTracks"](msg.participant, this._participants[id]);\n }\n\n try {\n // track events\n this.maybeEventTrackStopped(this._participants[id], msg.participant, \'audioTrack\');\n this.maybeEventTrackStopped(this._participants[id], msg.participant, \'videoTrack\');\n this.maybeEventTrackStopped(this._participants[id], msg.participant, \'screenVideoTrack\');\n this.maybeEventTrackStopped(this._participants[id], msg.participant, \'screenAudioTrack\');\n this.maybeEventTrackStarted(this._participants[id], msg.participant, \'audioTrack\');\n this.maybeEventTrackStarted(this._participants[id], msg.participant, \'videoTrack\');\n this.maybeEventTrackStarted(this._participants[id], msg.participant, \'screenVideoTrack\');\n this.maybeEventTrackStarted(this._participants[id], msg.participant, \'screenAudioTrack\'); // custom tracks (presumably we\'ll do all tracks consistently in the\n // future, refactoring the above maybeEventTrack* events)\n\n this.maybeEventTrackStoppedForCustomTracks(this._participants[id], msg.participant);\n this.maybeEventTrackStartedForCustomTracks(this._participants[id], msg.participant); // recording events\n\n this.maybeEventRecordingStopped(this._participants[id], msg.participant);\n this.maybeEventRecordingStarted(this._participants[id], msg.participant);\n } catch (e) {\n console.error(\'track events error\', e);\n } // participant joined/updated events\n\n\n if (!this.compareEqualForParticipantUpdateEvent(msg.participant, this._participants[id])) {\n this._participants[id] = _objectSpread({}, msg.participant);\n this.toggleParticipantAudioBasedOnNativeAudioFocus();\n\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_PARTICIPANT_LEFT"]:\n if (msg.participant && msg.participant.session_id) {\n // track events\n var prevP = this._participants[msg.participant.session_id];\n\n if (prevP) {\n this.maybeEventTrackStopped(prevP, null, \'audioTrack\');\n this.maybeEventTrackStopped(prevP, null, \'videoTrack\');\n this.maybeEventTrackStopped(prevP, null, \'screenVideoTrack\');\n this.maybeEventTrackStopped(prevP, null, \'screenAudioTrack\');\n this.maybeEventTrackStoppedForCustomTracks(prevP, null);\n } // delete from local cach\n\n\n delete this._participants[msg.participant.session_id];\n\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED"]:\n if (!Object(fast_equals__WEBPACK_IMPORTED_MODULE_12__["deepEqual"])(this._participantCounts, msg.participantCounts)) {\n this._participantCounts = msg.participantCounts;\n\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ACCESS_STATE_UPDATED"]:\n {\n var newAccessState = {\n access: msg.access\n };\n\n if (msg.awaitingAccess) {\n newAccessState.awaitingAccess = msg.awaitingAccess;\n }\n\n if (!Object(fast_equals__WEBPACK_IMPORTED_MODULE_12__["deepEqual"])(this._accessState, newAccessState)) {\n this._accessState = newAccessState;\n\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n }\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_MEETING_SESSION_UPDATED"]:\n if (msg.meetingSession) {\n try {\n delete msg.callFrameId;\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ERROR"]:\n if (this._iframe && !msg.preserveIframe) {\n this._iframe.src = \'\';\n }\n\n this._updateCallState(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_ERROR"]);\n\n this.resetMeetingDependentVars();\n\n if (this._loadedCallback) {\n this._loadedCallback(msg.errorMsg);\n\n this._loadedCallback = null;\n }\n\n if (this._joinedCallback) {\n this._joinedCallback(null, msg.errorMsg);\n\n this._joinedCallback = null;\n }\n\n try {\n var preserveIframe = msg.preserveIframe,\n event = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(msg, ["preserveIframe"]);\n\n this.emit(msg.action, event);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LEFT_MEETING"]:\n // if we\'ve left due to error, the error msg should have\n // already been handled and we do not want to override\n // the state.\n if (this._callState !== _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_ERROR"]) {\n this._updateCallState(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_LEFT"]);\n }\n\n this.resetMeetingDependentVars();\n\n if (this._resolveLeave) {\n this._resolveLeave();\n\n this._resolveLeave = null;\n }\n\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_INPUT_EVENT"]:\n var p = this._participants[msg.session_id];\n\n if (!p) {\n if (msg.session_id === this._participants.local.session_id) {\n p = this._participants.local;\n } else {\n p = {};\n }\n }\n\n try {\n this.emit(msg.event.type, {\n action: msg.event.type,\n event: msg.event,\n participant: _objectSpread({}, p)\n });\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_SELECTED_DEVICES_UPDATED"]:\n if (msg.devices) {\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_NETWORK_QUALITY_CHANGE"]:\n var threshold = msg.threshold,\n quality = msg.quality;\n\n if (threshold !== this._network.threshold || quality !== this._network.quality) {\n this._network.quality = quality;\n this._network.threshold = threshold;\n\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ACTIVE_SPEAKER_CHANGE"]:\n var activeSpeaker = msg.activeSpeaker;\n\n if (this._activeSpeaker.peerId !== activeSpeaker.peerId) {\n this._activeSpeaker.peerId = activeSpeaker.peerId;\n\n try {\n this.emit(msg.action, {\n action: msg.action,\n activeSpeaker: this._activeSpeaker\n });\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_SHOW_LOCAL_VIDEO_CHANGED"]:\n if (this._callObjectMode) return;\n var show = msg.show;\n this._showLocalVideo = show;\n\n try {\n this.emit(msg.action, {\n action: msg.action,\n show: show\n });\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE"]:\n var enabled = msg.enabled;\n\n if (this._activeSpeakerMode !== enabled) {\n this._activeSpeakerMode = enabled;\n\n try {\n this.emit(msg.action, {\n action: msg.action,\n enabled: this._activeSpeakerMode\n });\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_WAITING_PARTICIPANT_ADDED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_WAITING_PARTICIPANT_UPDATED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_WAITING_PARTICIPANT_REMOVED"]:\n this._waitingParticipants = msg.allWaitingParticipants;\n\n try {\n this.emit(msg.action, {\n action: msg.action,\n participant: msg.participant\n });\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECEIVE_SETTINGS_UPDATED"]:\n // NOTE: doing equality check here rather than before sending message in\n // the first place from call machine, to simplify handling initial\n // receive settings\n if (!Object(fast_equals__WEBPACK_IMPORTED_MODULE_12__["deepEqual"])(this._receiveSettings, msg.receiveSettings)) {\n this._receiveSettings = msg.receiveSettings;\n\n try {\n this.emit(msg.action, {\n action: msg.action,\n receiveSettings: msg.receiveSettings\n });\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_INPUT_SETTINGS_UPDATED"]:\n // NOTE: doing equality check here rather than before sending message in\n // the first place from call machine, to simplify handling initial\n // input settings\n if (!Object(fast_equals__WEBPACK_IMPORTED_MODULE_12__["deepEqual"])(this._inputSettings, msg.inputSettings)) {\n this._inputSettings = msg.inputSettings;\n\n try {\n this.emit(msg.action, {\n action: msg.action,\n inputSettings: msg.inputSettings\n });\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED"]:\n {\n var participantId = msg.session_id;\n this._rmpPlayerState[participantId] = msg.playerState;\n this.emitDailyJSEvent(msg);\n }\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED"]:\n delete this._rmpPlayerState[msg.session_id];\n this.emitDailyJSEvent(msg);\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED"]:\n {\n var _participantId = msg.session_id;\n var rmpPlayerState = this._rmpPlayerState[_participantId];\n\n if (!rmpPlayerState || !this.compareEqualForRMPUpdateEvent(rmpPlayerState, msg.remoteMediaPlayerState)) {\n this._rmpPlayerState[_participantId] = msg.remoteMediaPlayerState;\n this.emitDailyJSEvent(msg);\n }\n }\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_CUSTOM_BUTTON_CLICK"]:\n this.emitDailyJSEvent(msg);\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_MEETING_SESSION_STATE_UPDATED"]:\n this._meetingSessionState = msg.meetingSessionState;\n this.emitDailyJSEvent(msg);\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STARTED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STOPPED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STATS"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_ERROR"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_UPLOAD_COMPLETED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRANSCRIPTION_STARTED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRANSCRIPTION_STOPPED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRANSCRIPTION_ERROR"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_STARTED_CAMERA"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_CAMERA_ERROR"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_APP_MSG"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_NETWORK_CONNECTION"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_DATA"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LIVE_STREAMING_STARTED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LIVE_STREAMING_STOPPED"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LIVE_STREAMING_ERROR"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_NONFATAL_ERROR"]:\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_LANG_UPDATED"]:\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_UI_REQUEST_FULLSCREEN"]:\n this.requestFullscreen();\n break;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_UI_EXIT_FULLSCREEN"]:\n this.exitFullscreen();\n break;\n\n default: // no op\n\n }\n }\n }, {\n key: "maybeEventRecordingStopped",\n value: function maybeEventRecordingStopped(prevP, thisP) {\n var key = \'record\';\n\n if (!prevP) {\n return;\n }\n\n if (!thisP.local && thisP[key] === false && prevP[key] !== thisP[key]) {\n try {\n this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STOPPED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STOPPED"]\n });\n } catch (e) {\n console.log(\'could not emit\', e);\n }\n }\n }\n }, {\n key: "maybeEventRecordingStarted",\n value: function maybeEventRecordingStarted(prevP, thisP) {\n var key = \'record\';\n\n if (!prevP) {\n return;\n }\n\n if (!thisP.local && thisP[key] === true && prevP[key] !== thisP[key]) {\n try {\n this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STARTED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_RECORDING_STARTED"]\n });\n } catch (e) {\n console.log(\'could not emit\', e);\n }\n }\n }\n }, {\n key: "maybeEventTrackStopped",\n value: function maybeEventTrackStopped(prevP, thisP, key) {\n if (!prevP) {\n return;\n }\n\n if (prevP[key] && prevP[key].readyState === \'ended\' || prevP[key] && !(thisP && thisP[key]) || prevP[key] && prevP[key].id !== thisP[key].id) {\n try {\n this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STOPPED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STOPPED"],\n track: prevP[key],\n participant: thisP\n });\n } catch (e) {\n console.log(\'could not emit\', e);\n }\n }\n }\n }, {\n key: "maybeEventCustomTrackStopped",\n value: function maybeEventCustomTrackStopped(prevTrack, thisTrack, thisP) {\n if (!prevTrack) {\n return;\n }\n\n if (prevTrack && prevTrack.readyState === \'ended\' || prevTrack && !thisTrack || prevTrack && prevTrack.id !== thisTrack.id) {\n try {\n this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STOPPED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STOPPED"],\n track: prevTrack,\n participant: thisP\n });\n } catch (e) {\n console.log(\'maybeEventCustomTrackStopped: could not emit\', e);\n }\n }\n }\n }, {\n key: "maybeEventCustomTrackStarted",\n value: function maybeEventCustomTrackStarted(prevTrack, thisTrack, thisP) {\n if (thisTrack && !prevTrack || thisTrack && prevTrack.readyState === \'ended\' || thisTrack && thisTrack.id !== prevTrack.id) {\n try {\n this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STARTED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STARTED"],\n track: thisTrack,\n participant: thisP\n });\n } catch (e) {\n console.log(\'maybeEventCustomTrackStarted: could not emit\', e);\n }\n }\n }\n }, {\n key: "maybeEventTrackStarted",\n value: function maybeEventTrackStarted(prevP, thisP, key) {\n if (thisP[key] && !(prevP && prevP[key]) || thisP[key] && prevP[key].readyState === \'ended\' || thisP[key] && thisP[key].id !== prevP[key].id) {\n try {\n this.emit(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STARTED"], {\n action: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_EVENT_TRACK_STARTED"],\n track: thisP[key],\n participant: thisP\n });\n } catch (e) {\n console.log(\'could not emit\', e);\n }\n }\n }\n }, {\n key: "maybeEventTrackStoppedForCustomTracks",\n value: function maybeEventTrackStoppedForCustomTracks(prevP, thisP) {\n if (!prevP) {\n return;\n }\n\n for (var trackKey in prevP.tracks) {\n // we might be able to use this logic for all tracks, not just additional,\n // non-standard tracks. but for now, we\'ll only handle the non-standard\n // tracks\n if (_Participant__WEBPACK_IMPORTED_MODULE_21__["isPredefinedTrack"](trackKey)) {\n continue;\n }\n\n this.maybeEventCustomTrackStopped(prevP.tracks[trackKey].track, thisP && thisP.tracks[trackKey] ? thisP.tracks[trackKey].track : null, thisP);\n }\n }\n }, {\n key: "maybeEventTrackStartedForCustomTracks",\n value: function maybeEventTrackStartedForCustomTracks(prevP, thisP) {\n if (!thisP) {\n return;\n }\n\n for (var trackKey in thisP.tracks) {\n // we might be able to use this logic for all tracks, not just additional,\n // non-standard tracks. but for now, we\'ll only handle the non-standard\n // tracks\n if (_Participant__WEBPACK_IMPORTED_MODULE_21__["isPredefinedTrack"](trackKey)) {\n continue;\n }\n\n this.maybeEventCustomTrackStarted(prevP && prevP.tracks[trackKey] ? prevP.tracks[trackKey].track : null, thisP.tracks[trackKey].track, thisP);\n }\n }\n }, {\n key: "compareEqualForRMPUpdateEvent",\n value: function compareEqualForRMPUpdateEvent(a, b) {\n var _a$settings, _b$settings;\n\n if (a.state === b.state && ((_a$settings = a.settings) === null || _a$settings === void 0 ? void 0 : _a$settings.volume) === ((_b$settings = b.settings) === null || _b$settings === void 0 ? void 0 : _b$settings.volume)) {\n return true;\n }\n\n return false;\n }\n }, {\n key: "emitDailyJSEvent",\n value: function emitDailyJSEvent(msg) {\n {\n try {\n this.emit(msg.action, msg);\n } catch (e) {\n console.log(\'could not emit\', msg, e);\n }\n }\n }\n }, {\n key: "compareEqualForParticipantUpdateEvent",\n value: function compareEqualForParticipantUpdateEvent(a, b) {\n if (!Object(fast_equals__WEBPACK_IMPORTED_MODULE_12__["deepEqual"])(a, b)) {\n return false;\n }\n\n if (a.videoTrack && b.videoTrack && (a.videoTrack.id !== b.videoTrack.id || a.videoTrack.muted !== b.videoTrack.muted || a.videoTrack.enabled !== b.videoTrack.enabled)) {\n return false;\n }\n\n if (a.audioTrack && b.audioTrack && (a.audioTrack.id !== b.audioTrack.id || a.audioTrack.muted !== b.audioTrack.muted || a.audioTrack.enabled !== b.audioTrack.enabled)) {\n return false;\n }\n\n return true;\n }\n }, {\n key: "nativeUtils",\n value: function nativeUtils() {\n if (!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n return null;\n }\n\n if (typeof DailyNativeUtils === \'undefined\') {\n console.warn(\'in React Native, DailyNativeUtils is expected to be available\');\n return null;\n }\n\n return DailyNativeUtils;\n }\n }, {\n key: "updateIsPreparingToJoin",\n value: function updateIsPreparingToJoin(isPreparingToJoin) {\n this._updateCallState(this._callState, isPreparingToJoin);\n }\n }, {\n key: "_updateCallState",\n value: function _updateCallState(callState) {\n var isPreparingToJoin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._isPreparingToJoin;\n\n // If state hasn\'t changed, bail\n if (callState === this._callState && isPreparingToJoin === this._isPreparingToJoin) {\n return;\n } // Update state\n\n\n var oldMeetingState = this._callState;\n var oldIsPreparingToJoin = this._isPreparingToJoin;\n this._callState = callState;\n this._isPreparingToJoin = isPreparingToJoin; // Update state side-effects (which, for now, all depend on whether\n // _isCallPendingOrOngoing)\n\n var oldIsMeetingPendingOrOngoing = this._isCallPendingOrOngoing(oldMeetingState, oldIsPreparingToJoin);\n\n var _isCallPendingOrOngoing = this._isCallPendingOrOngoing(this._callState, this._isPreparingToJoin);\n\n if (oldIsMeetingPendingOrOngoing === _isCallPendingOrOngoing) {\n return;\n }\n\n this.updateKeepDeviceAwake(_isCallPendingOrOngoing);\n this.updateDeviceAudioMode(_isCallPendingOrOngoing);\n this.updateShowAndroidOngoingMeetingNotification(_isCallPendingOrOngoing);\n this.updateNoOpRecordingEnsuringBackgroundContinuity(_isCallPendingOrOngoing);\n } // To be invoked this when leaving or erroring out of a meeting.\n // NOTE (Paul, 2021-01-07): this could probably be expanded to reset *all*\n // meeting-dependent vars, but starting with this targeted small set which\n // were being reset properly on leave() but not when leaving via prebuilt ui.\n\n }, {\n key: "resetMeetingDependentVars",\n value: function resetMeetingDependentVars() {\n this._participants = {};\n this._participantCounts = EMPTY_PARTICIPANT_COUNTS;\n this._waitingParticipants = {};\n this._activeSpeaker = {};\n this._activeSpeakerMode = false;\n this._didPreAuth = false;\n this._accessState = {\n access: _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_ACCESS_UNKNOWN"]\n };\n this._meetingSessionState = DEFAULT_SESSION_STATE;\n this._receiveSettings = {};\n this._inputSettings = {};\n resetPreloadCache(this._preloadCache);\n }\n }, {\n key: "updateKeepDeviceAwake",\n value: function updateKeepDeviceAwake(keepAwake) {\n if (!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n return;\n }\n\n this.nativeUtils().setKeepDeviceAwake(keepAwake, this._callFrameId);\n }\n }, {\n key: "updateDeviceAudioMode",\n value: function updateDeviceAudioMode(useInCallAudioMode) {\n if (!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])() || this.disableReactNativeAutoDeviceManagement(\'audio\')) {\n return;\n }\n\n var audioMode = useInCallAudioMode ? this._nativeInCallAudioMode : NATIVE_AUDIO_MODE_IDLE;\n this.nativeUtils().setAudioMode(audioMode);\n } // Note: notification properties can\'t be changed while it is ongoing\n\n }, {\n key: "updateShowAndroidOngoingMeetingNotification",\n value: function updateShowAndroidOngoingMeetingNotification(showNotification) {\n // Check that we\'re React Native and that the Android-only method exists\n if (!(Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])() && this.nativeUtils().setShowOngoingMeetingNotification)) {\n return;\n } // Use current this.properties to customize notification behavior\n\n\n var title, subtitle, iconName, disableForCustomOverride;\n\n if (this.properties.reactNativeConfig && this.properties.reactNativeConfig.androidInCallNotification) {\n var _this$properties$reac = this.properties.reactNativeConfig.androidInCallNotification;\n title = _this$properties$reac.title;\n subtitle = _this$properties$reac.subtitle;\n iconName = _this$properties$reac.iconName;\n disableForCustomOverride = _this$properties$reac.disableForCustomOverride;\n }\n\n if (disableForCustomOverride) {\n showNotification = false;\n }\n\n this.nativeUtils().setShowOngoingMeetingNotification(showNotification, title, subtitle, iconName, this._callFrameId);\n } // Whether to enable no-op audio recording to ensure continuity of the app\n // when backgrounded. Required in iOS to ensure we can finish joining when the\n // app is backgrounded before gUM is called, and to ensure that signaling\n // remains connected when we\'re in an empty room and our own cam and mic are\n // off.\n\n }, {\n key: "updateNoOpRecordingEnsuringBackgroundContinuity",\n value: function updateNoOpRecordingEnsuringBackgroundContinuity(enableNoOpRecording) {\n if (!(Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])() && this.nativeUtils().enableNoOpRecordingEnsuringBackgroundContinuity)) {\n return;\n }\n\n this.nativeUtils().enableNoOpRecordingEnsuringBackgroundContinuity(enableNoOpRecording);\n }\n }, {\n key: "_isCallPendingOrOngoing",\n value: function _isCallPendingOrOngoing(callState, isPreparingToJoin) {\n return [_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINING"], _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_STATE_JOINED"]].includes(callState) || isPreparingToJoin;\n }\n }, {\n key: "toggleParticipantAudioBasedOnNativeAudioFocus",\n value: function toggleParticipantAudioBasedOnNativeAudioFocus() {\n if (!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n return;\n } // Need to access store directly since when participant muted their audio we\n // don\'t have access to their audio tracks in this._participants\n\n\n var state = store.getState();\n\n for (var streamId in state.streams) {\n var streamData = state.streams[streamId];\n\n if (streamData && streamData.pendingTrack && streamData.pendingTrack.kind === \'audio\') {\n streamData.pendingTrack.enabled = this._hasNativeAudioFocus;\n }\n }\n } // type must be either \'audio\' or \'video\'\n\n }, {\n key: "disableReactNativeAutoDeviceManagement",\n value: function disableReactNativeAutoDeviceManagement(type) {\n return this.properties.reactNativeConfig && this.properties.reactNativeConfig.disableAutoDeviceManagement && this.properties.reactNativeConfig.disableAutoDeviceManagement[type];\n }\n }, {\n key: "absoluteUrl",\n value: function absoluteUrl(url) {\n if (\'undefined\' === typeof url) {\n return undefined;\n }\n\n var a = document.createElement(\'a\');\n a.href = url;\n return a.href;\n }\n }, {\n key: "sayHello",\n value: function sayHello() {\n var str = \'hello, world.\';\n console.log(str);\n return str;\n }\n }]);\n\n return DailyIframe;\n}(events__WEBPACK_IMPORTED_MODULE_11___default.a);\n\n\n\nfunction initializePreloadCache(callObject, properties) {\n return {\n subscribeToTracksAutomatically: true,\n audioDeviceId: null,\n videoDeviceId: null,\n outputDeviceId: null\n };\n}\n\nfunction resetPreloadCache(c) {// don\'t need to do anything, until we add stuff to the preload\n // cache that should not persist\n}\n\nfunction makeSafeForPostMessage(props) {\n var safe = {};\n\n for (var p in props) {\n if (props[p] instanceof MediaStreamTrack) {\n // note: could store the track in a global variable for accessing\n // on the other side of the postMessage, here, instead of as we\n // currently do in the validate-properties routines, which definitely\n // is a spooky-action-at-a-distance code anti-pattern\n safe[p] = _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_CUSTOM_TRACK"];\n } else if (p === \'dailyConfig\') {\n if (props[p].modifyLocalSdpHook) {\n if (window._dailyConfig) {\n window._dailyConfig.modifyLocalSdpHook = props[p].modifyLocalSdpHook;\n }\n\n delete props[p].modifyLocalSdpHook;\n }\n\n if (props[p].modifyRemoteSdpHook) {\n if (window._dailyConfig) {\n window._dailyConfig.modifyRemoteSdpHook = props[p].modifyRemoteSdpHook;\n }\n\n delete props[p].modifyRemoteSdpHook;\n }\n\n safe[p] = props[p];\n } else {\n safe[p] = props[p];\n }\n }\n\n return safe;\n}\n\nfunction methodNotSupportedInReactNative() {\n if (Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n throw new Error(\'This daily-js method is not currently supported in React Native\');\n }\n}\n\nfunction methodOnlySupportedInReactNative() {\n if (!Object(_shared_with_pluot_core_Environment_js__WEBPACK_IMPORTED_MODULE_15__["isReactNative"])()) {\n throw new Error(\'This daily-js method is only supported in React Native\');\n }\n}\n\nfunction validateSessionDataUpdate(data, mergeStrategy) {\n // the SessionDataUpdate constructor validates everything and will\n // throw the errors necessary if things don\'t check out\n new _shared_with_pluot_core_SessionData_js__WEBPACK_IMPORTED_MODULE_18__["SessionDataUpdate"]({\n data: data,\n mergeStrategy: mergeStrategy\n });\n return true;\n}\n\nfunction validateUserData(data) {\n // undefined is considered valid but would fail the checks below\n if (data === undefined) {\n return true;\n }\n\n var dataStr;\n\n if (typeof data === \'string\') {\n // JSON.stringify adds two characters to the string, so do sizing checks\n // on the raw string.\n dataStr = data;\n } else {\n try {\n dataStr = JSON.stringify(data); // check that what goes in is the same coming out :)\n\n if (!Object(fast_equals__WEBPACK_IMPORTED_MODULE_12__["deepEqual"])(JSON.parse(dataStr), data)) {\n console.warn("The userData provided will be modified when serialized.");\n }\n } catch (e) {\n throw Error("userData must be serializable to JSON: ".concat(e));\n }\n } // check the size of the payload\n\n\n if (dataStr.length > _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["MAX_USER_DATA_SIZE"]) {\n throw Error("userData is too large (".concat(dataStr.length, " characters). Maximum size suppported is ").concat(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["MAX_USER_DATA_SIZE"], "."));\n }\n\n return true;\n}\n\nfunction validateReceiveSettings(receiveSettingsParam, _ref26) {\n var allowAllParticipantsKey = _ref26.allowAllParticipantsKey;\n\n var isParticipantIdValid = function isParticipantIdValid(participantId) {\n var disallowedKeys = [\'local\'];\n if (!allowAllParticipantsKey) disallowedKeys.push(\'*\');\n return participantId && !disallowedKeys.includes(participantId);\n };\n\n var areVideoReceiveSettingsValid = function areVideoReceiveSettingsValid(videoReceiveSettings) {\n if (videoReceiveSettings.layer !== undefined) {\n if (!(Number.isInteger(videoReceiveSettings.layer) && videoReceiveSettings.layer >= 0 || videoReceiveSettings.layer === \'inherit\')) {\n return false;\n }\n }\n\n return true;\n }; // NOTE: partial receive settings *are* allowed, in both senses:\n // - only a subset of media types (e.g. only "video")\n // - only a subset of settings per media type (e.g. only "layer")\n\n\n var areParticipantReceiveSettingsValid = function areParticipantReceiveSettingsValid(receiveSettings) {\n if (!receiveSettings) return false;\n\n if (receiveSettings.video) {\n if (!areVideoReceiveSettingsValid(receiveSettings.video)) {\n return false;\n }\n }\n\n if (receiveSettings.screenVideo) {\n if (!areVideoReceiveSettingsValid(receiveSettings.screenVideo)) {\n return false;\n }\n }\n\n return true;\n };\n\n for (var _i3 = 0, _Object$entries2 = Object.entries(receiveSettingsParam); _i3 < _Object$entries2.length; _i3++) {\n var _Object$entries2$_i = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_9___default()(_Object$entries2[_i3], 2),\n participantId = _Object$entries2$_i[0],\n receiveSettings = _Object$entries2$_i[1];\n\n if (!(isParticipantIdValid(participantId) && areParticipantReceiveSettingsValid(receiveSettings))) {\n return false;\n }\n }\n\n return true;\n} // Since currently videoProcessor is the only inputSetting. I wrote this code to reject\n// everything else. I feel it is the safe approach. This will need changes as more\n// functionality is added to inputSettings in the future.\n\n\nfunction validateInputSettings(settings) {\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(settings) !== \'object\') return false;\n if (!(settings.video && _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(settings.video) === \'object\')) return false;\n if (!validateVideoProcessor(settings.video.processor)) return false;\n return true;\n}\n\nfunction validateVideoProcessor(p) {\n // publish has been deprecated. It hasnt been removed from VALID_PROCESSOR_KEYS\n // so as to not throw an error for any active users; Added a warning about the\n // deprecation below.\n var VALID_PROCESSOR_KEYS = [\'type\', "config", \'publish\'];\n if (!p) return false;\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(p) !== \'object\') return false;\n if (Object.keys(p).length === 0) return false; // lodash isEmpty did not work well with github workflow for some reason\n\n if (p.type && !validateVideoProcessorType(p.type)) return false;\n if (p.publish !== undefined && typeof p.publish !== \'boolean\') return false; // publish flag has been deprecated\n\n if (typeof p.publish === \'boolean\') {\n console.warn(\'inputSettings.video.processor: publish key has been deprecated; it will be ignored\');\n }\n\n if (p.config) {\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(p.config) !== \'object\') return false;\n if (!validateVideoProcessorConfig(p.type, p.config)) return false;\n } // scrub invalid keys in processor object\n\n\n Object.keys(p).filter(function (k) {\n return !VALID_PROCESSOR_KEYS.includes(k);\n }).forEach(function (k) {\n console.warn("invalid key inputSettings -> video -> processor : ".concat(k));\n delete p[k];\n });\n return true;\n}\n\nfunction validateVideoProcessorConfig(type, config) {\n var keys = Object.keys(config);\n if (keys.length === 0) return true;\n var configErrMsg = \'invalid object in inputSettings -> video -> processor -> config\';\n\n switch (type) {\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_JS_VIDEO_PROCESSOR_TYPES"].BGBLUR:\n if (keys.length > 1 || keys[0] !== \'strength\') {\n console.error(configErrMsg);\n return false;\n }\n\n if (typeof config.strength !== \'number\' || config.strength <= 0 || config.strength > 1 || isNaN(config.strength)) {\n console.error("".concat(configErrMsg, "; expected: {0 < strength <= 1}, got: ").concat(config.strength));\n return false;\n }\n\n return true;\n\n case _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_JS_VIDEO_PROCESSOR_TYPES"].BGIMAGE:\n if (config.source !== undefined) {\n if (!validateAndTagBgImageSource(config)) return false;\n }\n\n return true;\n\n default:\n return true;\n }\n}\n\nfunction validateAndTagBgImageSource(config) {\n if (config.source === \'default\') {\n config.type = \'default\';\n return true;\n }\n\n if (Object(_utils_js__WEBPACK_IMPORTED_MODULE_20__["validateHttpUrl"])(config.source)) {\n config.type = \'url\';\n\n if (!validateBgImageFileType(config.source)) {\n console.error("invalid image type; supported types: [".concat(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_SUPPORTED_BG_IMG_TYPES"].join(\', \'), "]"));\n return false;\n }\n\n return true;\n }\n\n if (validateImageSelection(config.source)) {\n config.type = \'daily-preselect\';\n return true;\n } else {\n console.error("invalid image selection; must be an int, > 0, <= ".concat(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_PRESELECTED_BG_IMAGE_URLS_LENGTH"]));\n return false;\n }\n}\n\nfunction validateBgImageFileType(url) {\n // ignore query params\n var parsedUrl = new URL(url);\n var pathName = parsedUrl.pathname;\n\n if (parsedUrl.protocol === \'data:\') {\n try {\n var blobContentType = pathName.substring(pathName.indexOf(\':\') + 1, pathName.indexOf(\';\'));\n var blobExtension = blobContentType.split(\'/\')[1];\n return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_SUPPORTED_BG_IMG_TYPES"].includes(blobExtension);\n } catch (e) {\n console.error(\'failed to deduce blob content type\', e);\n return false;\n }\n }\n\n var urlFileType = pathName.split(\'.\').at(-1).toLowerCase().trim();\n return _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_SUPPORTED_BG_IMG_TYPES"].includes(urlFileType);\n}\n\nfunction validateImageSelection(selectImg) {\n var imgNum = Number(selectImg);\n if (isNaN(imgNum)) return false;\n if (!Number.isInteger(imgNum)) return false;\n if (imgNum <= 0) return false;\n if (imgNum > _shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_PRESELECTED_BG_IMAGE_URLS_LENGTH"]) return false;\n return true;\n}\n\nfunction validateVideoProcessorType(type) {\n if (typeof type !== \'string\') return false;\n\n if (!Object.values(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_JS_VIDEO_PROCESSOR_TYPES"]).includes(type)) {\n console.error(\'inputSettings video processor type invalid\');\n return false;\n }\n\n return true;\n}\n\nfunction inputSettingsValidationHelpMsg() {\n var processorOpts = Object.values(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_JS_VIDEO_PROCESSOR_TYPES"]).join(\' | \');\n return "inputSettings must be of the form: { video: { processor: [ ".concat(processorOpts, " ] }, config?: {} }");\n}\n\nfunction receiveSettingsValidationHelpMsg(_ref27) {\n var allowAllParticipantsKey = _ref27.allowAllParticipantsKey;\n return "receiveSettings must be of the form { [ | ".concat(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_RECEIVE_SETTINGS_BASE_KEY"]).concat(allowAllParticipantsKey ? " | \\"".concat(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY"], "\\"") : \'\', "]: ") + \'{ \' + \'[video: [{ layer: [ | "inherit"] } | "inherit"]], \' + \'[screenVideo: [{ layer: [ | "inherit"] } | "inherit"]] \' + \'}}}\';\n}\n\nfunction validateCustomTrayButtons(btns) {\n if (btns && _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(btns) !== \'object\' || Array.isArray(btns)) {\n console.error("customTrayButtons should be an Object of the type ".concat(JSON.stringify(customTrayButtonsType), "."));\n return false;\n }\n\n if (btns) {\n for (var _i4 = 0, _Object$entries3 = Object.entries(btns); _i4 < _Object$entries3.length; _i4++) {\n var _Object$entries3$_i = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_9___default()(_Object$entries3[_i4], 1),\n btnsKey = _Object$entries3$_i[0];\n\n for (var _i5 = 0, _Object$entries4 = Object.entries(btns[btnsKey]); _i5 < _Object$entries4.length; _i5++) {\n var _Object$entries4$_i = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_9___default()(_Object$entries4[_i5], 2),\n btnKey = _Object$entries4$_i[0],\n btnValue = _Object$entries4$_i[1];\n\n if (btnKey === \'iconPath\' && !Object(_utils_js__WEBPACK_IMPORTED_MODULE_20__["validateHttpUrl"])(btnValue)) {\n console.error("customTrayButton ".concat(btnKey, " should be a url."));\n return false;\n }\n\n if (btnKey === \'iconPathDarkMode\' && !Object(_utils_js__WEBPACK_IMPORTED_MODULE_20__["validateHttpUrl"])(btnValue)) {\n console.error("customTrayButton ".concat(btnKey, " should be a url."));\n return false;\n }\n\n var expectedKey = customTrayButtonsType.id[btnKey];\n\n if (!expectedKey) {\n console.error("customTrayButton does not support key ".concat(btnKey));\n return false;\n }\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(btnValue) !== expectedKey) {\n console.error("customTrayButton ".concat(btnKey, " should be a ").concat(expectedKey, "."));\n return false;\n }\n }\n }\n }\n\n return true;\n}\n\nfunction validateReactNativeConfig(config) {\n return validateConfigPropType(config, reactNativeConfigType);\n}\n\nfunction validateConfigPropType(prop, propType) {\n if (propType === undefined) {\n return false;\n }\n\n switch (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(propType)) {\n case \'string\':\n return _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(prop) === propType;\n\n case \'object\':\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(prop) !== \'object\') {\n return false;\n }\n\n for (var key in prop) {\n if (!validateConfigPropType(prop[key], propType[key])) {\n return false;\n }\n }\n\n return true;\n\n default:\n // console.error(\n // "Internal programming error: we\'ve defined our config prop types wrong"\n // );\n return false;\n }\n}\n\nfunction remoteMediaPlayerStartValidationHelpMsg() {\n return "startRemoteMediaPlayer arguments must be of the form: \\n { url: \\"playback url\\", \\n settings?: \\n {state: \\"play\\"|\\"pause\\", simulcastEncodings?: [{}] } }";\n}\n\nfunction remoteMediaPlayerUpdateValidationHelpMsg() {\n return "updateRemoteMediaPlayer arguments must be of the form: \\n session_id: \\"participant session\\", \\n { settings?: {state: \\"play\\"|\\"pause\\"} }";\n}\n\nfunction validateRemotePlayerUrl(url) {\n // TODO: add protocol check as well http://, https://. file://..\n if (typeof url !== \'string\') {\n throw new Error("url parameter must be \\"string\\" type");\n }\n}\n\nfunction validateRemotePlayerSettings(playerSettings) {\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_10___default()(playerSettings) !== \'object\') {\n throw new Error("RemoteMediaPlayerSettings: must be \\"object\\" type");\n }\n\n if (playerSettings.state) {\n if (!Object.values(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING"]).includes(playerSettings.state)) {\n throw new Error("Invalid value for RemoteMediaPlayerSettings.state, valid values are: " + JSON.stringify(_shared_with_pluot_core_CommonIncludes_js__WEBPACK_IMPORTED_MODULE_14__["DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING"]));\n }\n }\n\n if (playerSettings.volume) {\n if (typeof playerSettings.volume !== \'number\') {\n throw new Error("RemoteMediaPlayerSettings.volume: must be \\"number\\" type");\n }\n\n if (playerSettings.volume < 0 || playerSettings.volume > 2) {\n throw new Error("RemoteMediaPlayerSettings.volume: must be between 0.0 - 2.0");\n }\n }\n}\n\nfunction isValueInRange(val, min, max) {\n if (typeof val !== \'number\' || val < min || val > max) {\n return false;\n }\n\n return true;\n}\n\nfunction validateRemotePlayerEncodingSettings(playerSettings) {\n for (var prop in playerSettings) {\n if (!startRmpSettingsValidKeys.includes(prop)) {\n throw new Error("Invalid key ".concat(prop, ", valid keys are: ").concat(startRmpSettingsValidKeys));\n }\n } // validate simulcastEncodings\n\n\n if (playerSettings.simulcastEncodings) {\n if (!(playerSettings.simulcastEncodings instanceof Array)) {\n throw new Error("simulcastEncodings must be \\"Array\\"");\n } // max 3 layers\n\n\n if (!isValueInRange(playerSettings.simulcastEncodings.length, 0, MAX_SIMULCAST_LAYERS)) {\n throw new Error("\\"simulcastEncodings\\" not in range. valid range 1 to 3 layers");\n } // check value within each simulcast layer\n\n\n playerSettings.simulcastEncodings.every(function (layer) {\n for (var _prop in layer) {\n // check property is valid\n if (!simulcastEncodingsValidRanges.hasOwnProperty(_prop)) {\n throw new Error("Invalid key ".concat(_prop, ", valid keys are:") + Object.keys(simulcastEncodingsValidRanges));\n } // property must be number\n\n\n if (typeof layer[_prop] !== \'number\') {\n throw new Error("simulcastEncodings[].".concat(_prop, " must be \\"number\\""));\n } // property must be within range\n\n\n var _simulcastEncodingsVa = simulcastEncodingsValidRanges[_prop],\n min = _simulcastEncodingsVa.min,\n max = _simulcastEncodingsVa.max;\n\n if (!isValueInRange(layer[_prop], min, max)) {\n throw new Error("simulcastEncodings[].".concat(_prop, " value not in range. valid range: ").concat(min, " to ").concat(max));\n }\n } // maxBitrate is mandatory\n\n\n if (!layer.hasOwnProperty(\'maxBitrate\')) {\n throw new Error("simulcastEncodings[].maxBitrate is not specified");\n }\n });\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9tb2R1bGUuanM/MTU4ZSJdLCJuYW1lcyI6WyJOQVRJVkVfQVVESU9fTU9ERV9WSURFT19DQUxMIiwiTkFUSVZFX0FVRElPX01PREVfVk9JQ0VfQ0FMTCIsIk5BVElWRV9BVURJT19NT0RFX0lETEUiLCJNQVhfUk1QX0ZQUyIsIk1JTl9STVBfRlBTIiwiTUFYX1NJTVVMQ0FTVF9MQVlFUlMiLCJNQVhfU0NBTEVfUkVTT0xVVElPTl9CWSIsIk1BWF9MQVlFUl9CSVRSQVRFIiwiTUlOX0xBWUVSX0JJVFJBVEUiLCJERUZBVUxUX1NFU1NJT05fU1RBVEUiLCJpc1JlYWN0TmF0aXZlIiwiZGF0YSIsInRvcG9sb2d5IiwiRU1QVFlfUEFSVElDSVBBTlRfQ09VTlRTIiwicHJlc2VudCIsImhpZGRlbiIsInNpbXVsY2FzdEVuY29kaW5nc1ZhbGlkUmFuZ2VzIiwibWF4Qml0cmF0ZSIsIm1pbiIsIm1heCIsIm1heEZyYW1lcmF0ZSIsInNjYWxlUmVzb2x1dGlvbkRvd25CeSIsInN0YXJ0Um1wU2V0dGluZ3NWYWxpZEtleXMiLCJyZWFjdE5hdGl2ZUNvbmZpZ1R5cGUiLCJhbmRyb2lkSW5DYWxsTm90aWZpY2F0aW9uIiwidGl0bGUiLCJzdWJ0aXRsZSIsImljb25OYW1lIiwiZGlzYWJsZUZvckN1c3RvbU92ZXJyaWRlIiwiZGlzYWJsZUF1dG9EZXZpY2VNYW5hZ2VtZW50IiwiYXVkaW8iLCJ2aWRlbyIsImN1c3RvbVRyYXlCdXR0b25zVHlwZSIsImlkIiwiaWNvblBhdGgiLCJpY29uUGF0aERhcmtNb2RlIiwibGFiZWwiLCJ0b29sdGlwIiwiRlJBTUVfUFJPUFMiLCJjdXN0b21JbnRlZ3JhdGlvbnMiLCJjdXN0b21UcmF5QnV0dG9ucyIsInZhbGlkYXRlIiwidmFsaWRhdGVDdXN0b21UcmF5QnV0dG9ucyIsImhlbHAiLCJKU09OIiwic3RyaW5naWZ5IiwidXJsIiwiYmFzZVVybCIsInRva2VuIiwicXVlcnlTdHJpbmciLCJkYWlseUNvbmZpZyIsImNvbmZpZyIsIndpbmRvdyIsIl9kYWlseUNvbmZpZyIsImV4cGVyaW1lbnRhbEdldFVzZXJNZWRpYUNvbnN0cmFpbnRzTW9kaWZ5IiwidXNlck1lZGlhVmlkZW9Db25zdHJhaW50cyIsInVzZXJNZWRpYUF1ZGlvQ29uc3RyYWludHMiLCJjYWxsT2JqZWN0QnVuZGxlVXJsT3ZlcnJpZGUiLCJyZWFjdE5hdGl2ZUNvbmZpZyIsInZhbGlkYXRlUmVhY3ROYXRpdmVDb25maWciLCJsYW5nIiwiaW5jbHVkZXMiLCJ1c2VyTmFtZSIsInVzZXJEYXRhIiwidmFsaWRhdGVVc2VyRGF0YSIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzdGFydFZpZGVvT2ZmIiwic3RhcnRBdWRpb09mZiIsImFjdGl2ZVNwZWFrZXJNb2RlIiwic2hvd0xlYXZlQnV0dG9uIiwic2hvd0xvY2FsVmlkZW8iLCJzaG93UGFydGljaXBhbnRzQmFyIiwic2hvd0Z1bGxzY3JlZW5CdXR0b24iLCJzaG93VXNlck5hbWVDaGFuZ2VVSSIsImlmcmFtZVN0eWxlIiwiY3VzdG9tTGF5b3V0IiwiY3NzRmlsZSIsImNzc1RleHQiLCJib2R5Q2xhc3MiLCJ2aWRlb1NvdXJjZSIsInMiLCJjYWxsT2JqZWN0IiwiX3ByZWxvYWRDYWNoZSIsInZpZGVvRGV2aWNlSWQiLCJhdWRpb1NvdXJjZSIsImF1ZGlvRGV2aWNlSWQiLCJzdWJzY3JpYmVUb1RyYWNrc0F1dG9tYXRpY2FsbHkiLCJ0aGVtZSIsIm8iLCJ2YWxpZENvbG9ycyIsImNvbnRhaW5zVmFsaWRDb2xvcnMiLCJjb2xvcnMiLCJPYmplY3QiLCJrZXlzIiwia2V5Iiwiam9pbiIsIm1hdGNoIiwibGlnaHQiLCJkYXJrIiwibGF5b3V0Q29uZmlnIiwiZ3JpZENvbmZpZyIsImdyaWQiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJtYXhUaWxlc1BlclBhZ2UiLCJtaW5UaWxlc1BlclBhZ2UiLCJyZWNlaXZlU2V0dGluZ3MiLCJ2YWxpZGF0ZVJlY2VpdmVTZXR0aW5ncyIsImFsbG93QWxsUGFydGljaXBhbnRzS2V5IiwicmVjZWl2ZVNldHRpbmdzVmFsaWRhdGlvbkhlbHBNc2ciLCJpbnB1dFNldHRpbmdzIiwidmFsaWRhdGVJbnB1dFNldHRpbmdzIiwiaW5wdXRTZXR0aW5nc1ZhbGlkYXRpb25IZWxwTXNnIiwibGF5b3V0IiwiZW1iIiwiZW1iSHJlZiIsImRhaWx5SnNWZXJzaW9uIiwiUEFSVElDSVBBTlRfUFJPUFMiLCJzdHlsZXMiLCJrIiwiY2FtIiwic2NyZWVuIiwic2V0U3Vic2NyaWJlZFRyYWNrcyIsInN1YnMiLCJwYXJ0aWNpcGFudCIsInZhbGlkUHJpbWl0aXZlVmFsdWVzIiwia25vd25UcmFja3MiLCJ2YWxpZGF0ZVRyYWNrU3VicyIsImN1c3RvbSIsImNvbnRhaW5zVmFsaWRWYWx1ZSIsImlzVW5leHBlY3RlZFRyYWNrVHlwZSIsImlzVW5leHBlY3RlZFZhbHVlIiwic2V0QXVkaW8iLCJzZXRWaWRlbyIsImVqZWN0IiwidXBkYXRlUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uc1VwZGF0ZSIsImVudHJpZXMiLCJwZXJtaXNzaW9uTmFtZSIsInBlcm1pc3Npb24iLCJTZXQiLCJrbm93bk1lZGlhVHlwZXMiLCJtZWRpYVR5cGUiLCJEYWlseUlmcmFtZSIsInN1cHBvcnRlZCIsIm1vYmlsZSIsIm5hbWUiLCJ2ZXJzaW9uIiwic3VwcG9ydHNTY3JlZW5TaGFyZSIsInN1cHBvcnRzU2Z1Iiwic3VwcG9ydHNWaWRlb1Byb2Nlc3NpbmciLCJicm93c2VyIiwiQm93c2VyIiwiZ2V0UGFyc2VyIiwiZ2V0VXNlckFnZW50IiwiYnJvd3NlclZpZGVvU3VwcG9ydGVkX3AiLCJnZXRQbGF0Zm9ybVR5cGUiLCJnZXRCcm93c2VyTmFtZSIsImdldEJyb3dzZXJWZXJzaW9uIiwic3VwcG9ydHNGdWxsc2NyZWVuIiwiaXNGdWxsc2NyZWVuU3VwcG9ydGVkIiwiaXNTY3JlZW5TaGFyaW5nU3VwcG9ydGVkIiwiaXNWaWRlb1Byb2Nlc3NpbmdTdXBwb3J0ZWQiLCJfX2RhaWx5SnNWZXJzaW9uX18iLCJwcm9wZXJ0aWVzIiwiaWZyYW1laXNoIiwibWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSIsImNvbnRlbnRXaW5kb3ciLCJzcmMiLCJFcnJvciIsImFyZzEiLCJhcmcyIiwicGFyZW50RWwiLCJhcHBlbmQiLCJkb2N1bWVudCIsImJvZHkiLCJwb3NpdGlvbiIsImJvcmRlciIsImJhY2tncm91bmRDb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJpZnJhbWVFbCIsImNyZWF0ZUVsZW1lbnQiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJhbGxvdyIsInN0eWxlIiwidmlzaWJpbGl0eSIsImFwcGVuZENoaWxkIiwiZm9yRWFjaCIsImNhbGxGcmFtZSIsInJlbW92ZUNoaWxkIiwid3JhcCIsIm1lZGlhRGV2aWNlcyIsIm9uZGV2aWNlY2hhbmdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRldmljZUNoYW5nZUxpc3RlbmVyIiwic3RhcnRQb2xsaW5nRm9yRGV2aWNlQ2hhbmdlcyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzdG9wUG9sbGluZ0ZvckRldmljZUNoYW5nZXMiLCJkZXZpY2VzSW5mbyIsImVudW1lcmF0ZURldmljZXMiLCJoYW5kbGVEZXZpY2VDaGFuZ2UiLCJkZXZpY2VzIiwibmV3RGV2aWNlcyIsImVtaXQiLCJEQUlMWV9FVkVOVF9BVkFJTEFCTEVfREVWSUNFU19VUERBVEVEIiwiYWN0aW9uIiwiYXZhaWxhYmxlRGV2aWNlcyIsIl9kZXZpY2VDaGFuZ2VJbnRlcnZhbCIsInNldEludGVydmFsIiwiZGV2aWNlc0pTT04iLCJfbGFzdERldmljZXNKU09OIiwiY2xlYXJJbnRlcnZhbCIsImlzQWN0aXZlIiwiZGlzYWJsZVJlYWN0TmF0aXZlQXV0b0RldmljZU1hbmFnZW1lbnQiLCJjYW1Vbm11dGVkQmVmb3JlTG9zaW5nTmF0aXZlQWN0aXZlU3RhdGUiLCJzZXRMb2NhbFZpZGVvIiwibG9jYWxWaWRlbyIsImhhc0ZvY3VzIiwiX2hhc05hdGl2ZUF1ZGlvRm9jdXMiLCJ0b2dnbGVQYXJ0aWNpcGFudEF1ZGlvQmFzZWRPbk5hdGl2ZUF1ZGlvRm9jdXMiLCJtaWNVbm11dGVkQmVmb3JlTG9zaW5nTmF0aXZlQXVkaW9Gb2N1cyIsInNldExvY2FsQXVkaW8iLCJsb2NhbEF1ZGlvIiwiX2lmcmFtZSIsIl9jYWxsT2JqZWN0TW9kZSIsImluaXRpYWxpemVQcmVsb2FkQ2FjaGUiLCJfZGFpbHlQcmVsb2FkQ2FjaGUiLCJ1bmRlZmluZWQiLCJfc2hvd0xvY2FsVmlkZW8iLCJfc2hvd1BhcnRpY2lwYW50c0JhciIsIl9jdXN0b21JbnRlZ3JhdGlvbnMiLCJfY3VzdG9tVHJheUJ1dHRvbnMiLCJfYWN0aXZlU3BlYWtlck1vZGUiLCJfcmVjZWl2ZVNldHRpbmdzIiwiX2lucHV0U2V0dGluZ3MiLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJfY2FsbE9iamVjdExvYWRlciIsIkNhbGxPYmplY3RMb2FkZXIiLCJfY2FsbFN0YXRlIiwiREFJTFlfU1RBVEVfTkVXIiwiX2lzUHJlcGFyaW5nVG9Kb2luIiwiX2FjY2Vzc1N0YXRlIiwiYWNjZXNzIiwiREFJTFlfQUNDRVNTX1VOS05PV04iLCJfbWVldGluZ1Nlc3Npb25TdGF0ZSIsIl9uYXRpdmVJbkNhbGxBdWRpb01vZGUiLCJfcGFydGljaXBhbnRzIiwiX3BhcnRpY2lwYW50Q291bnRzIiwiX3JtcFBsYXllclN0YXRlIiwiX3dhaXRpbmdQYXJ0aWNpcGFudHMiLCJfaW5wdXRFdmVudHNPbiIsIl9uZXR3b3JrIiwidGhyZXNob2xkIiwicXVhbGl0eSIsIl9hY3RpdmVTcGVha2VyIiwiX2NhbGxGcmFtZUlkIiwicmFuZG9tU3RyaW5nSWQiLCJfbWVzc2FnZUNoYW5uZWwiLCJSZWFjdE5hdGl2ZU1lc3NhZ2VDaGFubmVsIiwiV2ViTWVzc2FnZUNoYW5uZWwiLCJyZXF1ZXN0RnVsbHNjcmVlbiIsImZ1bGxzY3JlZW5FbGVtZW50IiwiREFJTFlfRVZFTlRfRlVMTFNDUkVFTiIsInNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSIsIkRBSUxZX0VWRU5UX0VYSVRfRlVMTFNDUkVFTiIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiLCJuYXRpdmVVdGlscyIsImFkZEF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lciIsInJlbW92ZUF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lciIsImFkZEFwcEFjdGl2ZVN0YXRlQ2hhbmdlTGlzdGVuZXIiLCJyZW1vdmVBcHBBY3RpdmVTdGF0ZUNoYW5nZUxpc3RlbmVyIiwid2FybiIsImhhbmRsZU5hdGl2ZUF1ZGlvRm9jdXNDaGFuZ2UiLCJoYW5kbGVOYXRpdmVBcHBBY3RpdmVTdGF0ZUNoYW5nZSIsInN0YXJ0TGlzdGVuaW5nRm9yRGV2aWNlQ2hhbmdlcyIsImFkZExpc3RlbmVyRm9yTWVzc2FnZXNGcm9tQ2FsbE1hY2hpbmUiLCJoYW5kbGVNZXNzYWdlRnJvbUNhbGxNYWNoaW5lIiwiREFJTFlfU1RBVEVfSk9JTkVEIiwiREFJTFlfU1RBVEVfTE9BRElORyIsImxlYXZlIiwiaWZyYW1lIiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsInJlbW92ZUxpc3RlbmVyIiwic3RvcExpc3RlbmluZ0ZvckRldmljZUNoYW5nZXMiLCJyZXNldE1lZXRpbmdEZXBlbmRlbnRWYXJzIiwiREFJTFlfTUVUSE9EX0xPQURfQ1NTIiwiYWJzb2x1dGVVcmwiLCJzZXNzaW9uSWQiLCJwcm9wIiwibG9jYWwiLCJzZXNzaW9uX2lkIiwidmFsaWRhdGVQYXJ0aWNpcGFudFByb3BlcnRpZXMiLCJEQUlMWV9NRVRIT0RfVVBEQVRFX1BBUlRJQ0lQQU5UIiwibG9jYWxJZCIsIkRBSUxZX01FVEhPRF9VUERBVEVfUEFSVElDSVBBTlRTIiwicGFydGljaXBhbnRzIiwidXBkYXRlcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwibXNnIiwiREFJTFlfTUVUSE9EX1VQREFURV9XQUlUSU5HX1BBUlRJQ0lQQU5UIiwidXBkYXRlc0J5SWQiLCJpZHMiLCJEQUlMWV9NRVRIT0RfVVBEQVRFX1dBSVRJTkdfUEFSVElDSVBBTlRTIiwibGV2ZWwiLCJEQUlMWV9BQ0NFU1NfTEVWRUxfRlVMTCIsImdyYW50ZWQiLCJEQUlMWV9NRVRIT0RfUkVRVUVTVF9BQ0NFU1MiLCJib29sIiwiREFJTFlfTUVUSE9EX0xPQ0FMX0FVRElPIiwic3RhdGUiLCJEQUlMWV9NRVRIT0RfTE9DQUxfVklERU8iLCJzaG93SW5oZXJpdGVkVmFsdWVzIiwiREFJTFlfTUVUSE9EX0dFVF9TSU5HTEVfUEFSVElDSVBBTlRfUkVDRUlWRV9TRVRUSU5HUyIsIkRBSUxZX01FVEhPRF9VUERBVEVfUkVDRUlWRV9TRVRUSU5HUyIsIkRBSUxZX01FVEhPRF9VUERBVEVfSU5QVVRfU0VUVElOR1MiLCJrYnMiLCJ0cmFja0NvbnN0cmFpbnRzIiwiREFJTFlfTUVUSE9EX1NFVF9CQU5EV0lEVEgiLCJjYWxsYmFja1N0YW1wIiwiREFJTFlfTUVUSE9EX0dFVF9MQU5HIiwiREFJTFlfTUVUSE9EX1NFVF9MQU5HIiwiY2FsbEZyYW1lSWQiLCJEQUlMWV9NRVRIT0RfR0VUX01FRVRJTkdfU0VTU0lPTiIsIm1lcmdlU3RyYXRlZ3kiLCJ2YWxpZGF0ZVNlc3Npb25EYXRhVXBkYXRlIiwiREFJTFlfTUVUSE9EX1NFVF9TRVNTSU9OX0RBVEEiLCJvcHRpb25zIiwiREFJTFlfTUVUSE9EX1NFVF9VU0VSX05BTUUiLCJ0aGlzTWVldGluZ09ubHkiLCJEQUlMWV9NRVRIT0RfU0VUX1VTRVJfREFUQSIsIkRBSUxZX1NUQVRFX0pPSU5JTkciLCJuZWVkc0xvYWQiLCJsb2FkIiwiREFJTFlfTUVUSE9EX1NUQVJUX0NBTUVSQSIsIm1ha2VTYWZlRm9yUG9zdE1lc3NhZ2UiLCJwcmVsb2FkQ2FjaGUiLCJ0cmFjayIsIm1vZGUiLCJ0cmFja05hbWUiLCJsZW5ndGgiLCJpc1VzaW5nUmVzZXJ2ZWRUcmFja05hbWUiLCJNZWRpYVN0cmVhbVRyYWNrIiwidmFsaWRhdGVDdXN0b21UcmFjayIsIl8iLCJtZWRpYVRhZyIsImN1c3RvbVRyYWNrIiwiREFJTFlfQ1VTVE9NX1RSQUNLIiwiREFJTFlfTUVUSE9EX1NUQVJUX0NVU1RPTV9UUkFDSyIsIkRBSUxZX01FVEhPRF9TVE9QX0NVU1RPTV9UUkFDSyIsImNhbWVyYURldmljZUlkIiwibWV0aG9kT25seVN1cHBvcnRlZEluUmVhY3ROYXRpdmUiLCJkZXZpY2UiLCJEQUlMWV9NRVRIT0RfU0VUX0NBTUVSQSIsImRldmljZUlkIiwic2V0QXVkaW9EZXZpY2UiLCJjdXJyZW50QXVkaW9EZXZpY2UiLCJnZXRBdWRpb0RldmljZSIsIkRBSUxZX01FVEhPRF9DWUNMRV9DQU1FUkEiLCJEQUlMWV9NRVRIT0RfQ1lDTEVfTUlDIiwiZmFjaW5nTW9kZSIsIkRBSUxZX01FVEhPRF9HRVRfQ0FNRVJBX0ZBQ0lOR19NT0RFIiwic2V0SW5wdXREZXZpY2VzQXN5bmMiLCJjYW1lcmEiLCJtaWMiLCJzcGVha2VyIiwib3V0cHV0RGV2aWNlSWQiLCJyZXR1cm5QcmVsb2FkQ2FjaGUiLCJEQUlMWV9NRVRIT0RfU0VUX0lOUFVUX0RFVklDRVMiLCJzZXRPdXRwdXREZXZpY2VBc3luYyIsIkRBSUxZX01FVEhPRF9TRVRfT1VUUFVUX0RFVklDRSIsIkRBSUxZX01FVEhPRF9HRVRfSU5QVVRfREVWSUNFUyIsImluQ2FsbEF1ZGlvTW9kZSIsIl9pc0NhbGxQZW5kaW5nT3JPbmdvaW5nIiwic2V0QXVkaW9Nb2RlIiwiX2RpZFByZUF1dGgiLCJEQUlMWV9NRVRIT0RfUFJFQVVUSCIsIl91cGRhdGVDYWxsU3RhdGUiLCJEQUlMWV9FVkVOVF9MT0FESU5HIiwibG9nIiwiY2FuY2VsIiwiYXZvaWRFdmFsIiwid2FzTm9PcCIsIkRBSUxZX1NUQVRFX0xPQURFRCIsIkRBSUxZX0VWRU5UX0xPQURFRCIsImVycm9yTXNnIiwid2lsbFJldHJ5IiwiREFJTFlfRVZFTlRfTE9BRF9BVFRFTVBUX0ZBSUxFRCIsIkRBSUxZX1NUQVRFX0VSUk9SIiwiREFJTFlfRVZFTlRfRVJST1IiLCJhc3NlbWJsZU1lZXRpbmdVcmwiLCJfbG9hZGVkQ2FsbGJhY2siLCJsb2FkQ3NzIiwiZXZlbnROYW1lIiwiREFJTFlfTUVUSE9EX1JFR0lTVEVSX0lOUFVUX0hBTkRMRVIiLCJvbiIsIm5ld0NzcyIsInVwZGF0ZUlzUHJlcGFyaW5nVG9Kb2luIiwiREFJTFlfRVZFTlRfSk9JTklOR19NRUVUSU5HIiwiREFJTFlfTUVUSE9EX0pPSU4iLCJfam9pbmVkQ2FsbGJhY2siLCJQYXJ0aWNpcGFudCIsImxvYWRlZCIsIkRBSUxZX1NUQVRFX0xFRlQiLCJfcmVzb2x2ZUxlYXZlIiwiREFJTFlfTUVUSE9EX0xFQVZFIiwiY2FwdHVyZU9wdGlvbnMiLCJtZWRpYVN0cmVhbSIsInNjcmVlbk1lZGlhU3RyZWFtIiwiREFJTFlfTUVUSE9EX1NUQVJUX1NDUkVFTlNIQVJFIiwiREFJTFlfTUVUSE9EX1NUT1BfU0NSRUVOU0hBUkUiLCJhcmdzIiwiREFJTFlfTUVUSE9EX1NUQVJUX1JFQ09SRElORyIsInByZXNldCIsImluc3RhbmNlSWQiLCJEQUlMWV9NRVRIT0RfVVBEQVRFX1JFQ09SRElORyIsIkRBSUxZX01FVEhPRF9TVE9QX1JFQ09SRElORyIsIkRBSUxZX01FVEhPRF9TVEFSVF9MSVZFX1NUUkVBTUlORyIsIkRBSUxZX01FVEhPRF9VUERBVEVfTElWRV9TVFJFQU1JTkciLCJlbmRwb2ludHMiLCJEQUlMWV9NRVRIT0RfVVBEQVRFX0xJVkVfU1RSRUFNSU5HX0VORFBPSU5UUyIsImVuZHBvaW50c09wIiwiVVBEQVRFX0xJVkVfU1RSRUFNSU5HX0VORFBPSU5UU19PUCIsIkFERF9FTkRQT0lOVFMiLCJSRU1PVkVfRU5EUE9JTlRTIiwiREFJTFlfTUVUSE9EX1NUT1BfTElWRV9TVFJFQU1JTkciLCJzZXR0aW5ncyIsIkRBSUxZX0pTX1JFTU9URV9NRURJQV9QTEFZRVJfU0VUVElORyIsIlBMQVkiLCJ2YWxpZGF0ZVJlbW90ZVBsYXllclVybCIsInZhbGlkYXRlUmVtb3RlUGxheWVyU2V0dGluZ3MiLCJ2YWxpZGF0ZVJlbW90ZVBsYXllckVuY29kaW5nU2V0dGluZ3MiLCJyZW1vdGVNZWRpYVBsYXllclN0YXJ0VmFsaWRhdGlvbkhlbHBNc2ciLCJyZW1vdGVNZWRpYVBsYXllclN0YXRlIiwiREFJTFlfTUVUSE9EX1NUQVJUX1JFTU9URV9NRURJQV9QTEFZRVIiLCJEQUlMWV9NRVRIT0RfU1RPUF9SRU1PVEVfTUVESUFfUExBWUVSIiwicmVtb3RlTWVkaWFQbGF5ZXJVcGRhdGVWYWxpZGF0aW9uSGVscE1zZyIsIkRBSUxZX01FVEhPRF9VUERBVEVfUkVNT1RFX01FRElBX1BMQVlFUiIsIkRBSUxZX01FVEhPRF9TVEFSVF9UUkFOU0NSSVBUSU9OIiwiREFJTFlfTUVUSE9EX1NUT1BfVFJBTlNDUklQVElPTiIsInN0YXRzIiwibGF0ZXN0IiwiREFJTFlfTUVUSE9EX0dFVF9DQUxDX1NUQVRTIiwiZW5hYmxlZCIsIkRBSUxZX01FVEhPRF9TRVRfQUNUSVZFX1NQRUFLRVJfTU9ERSIsIkRBSUxZX01FVEhPRF9TRVRfU1VCU0NSSUJFX1RPX1RSQUNLU19BVVRPTUFUSUNBTExZIiwicmF3IiwibWFwIiwiZCIsInBhcnNlIiwiREFJTFlfTUVUSE9EX0VOVU1FUkFURV9ERVZJQ0VTIiwidG8iLCJNQVhfQVBQX01TR19TSVpFIiwiREFJTFlfTUVUSE9EX0FQUF9NU0ciLCJEQUlMWV9NRVRIT0RfQUREX0ZBS0VfUEFSVElDSVBBTlQiLCJEQUlMWV9NRVRIT0RfU0VUX1NIT1dfTkFNRVMiLCJzaG93IiwiREFJTFlfTUVUSE9EX1NFVF9TSE9XX0xPQ0FMX1ZJREVPIiwiREFJTFlfTUVUSE9EX1NFVF9TSE9XX1BBUlRJQ0lQQU5UU19CQVIiLCJpbnRlZ3JhdGlvbnMiLCJEQUlMWV9NRVRIT0RfVVBEQVRFX0NVU1RPTV9JTlRFR1JBVElPTlMiLCJidG5zIiwiREFJTFlfTUVUSE9EX1VQREFURV9DVVNUT01fVFJBWV9CVVRUT05TIiwiREFJTFlfTUVUSE9EX1NFVF9USEVNRSIsIkRBSUxZX0VWRU5UX1RIRU1FX1VQREFURUQiLCJEQUlMWV9NRVRIT0RfREVURUNUX0FMTF9GQUNFUyIsImV4aXRGdWxsc2NyZWVuIiwid2Via2l0RXhpdEZ1bGxzY3JlZW4iLCJpbmNsdWRlUm9vbUNvbmZpZ0RlZmF1bHRzIiwiREFJTFlfTUVUSE9EX1JPT00iLCJyb29tVXJsUGVuZGluZ0pvaW4iLCJyZXMiLCJmZXRjaCIsImpzb24iLCJjdXJyZW50IiwiZ2VvIiwib3B0cyIsIndvcmtlcklkIiwiREFJTFlfTUVUSE9EX1NFVF9ORVRXT1JLX1RPUE9MT0dZIiwiREFJTFlfTUVUSE9EX0dFVF9ORVRXT1JLX1RPUE9MT0dZIiwiYXJnIiwiREFJTFlfTUVUSE9EX1NFVF9QTEFZX0RJTkciLCJFdmVudEVtaXR0ZXIiLCJwcm90b3R5cGUiLCJjYWxsIiwib25jZSIsIm9mZiIsInByb3BzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibG9jYXRpb24iLCJocmVmIiwiZmlyc3RTZXAiLCJ1cmxQcm9wcyIsImZpbHRlciIsInAiLCJuZXdRdWVyeVN0cmluZyIsIm1lc3NhZ2UiLCJjYWxsYmFjayIsImZvcndhcmRQYWNrYWdlZE1lc3NhZ2VUb0NhbGxNYWNoaW5lIiwibGlzdGVuZXIiLCJhZGRMaXN0ZW5lckZvclBhY2thZ2VkTWVzc2FnZXNGcm9tQ2FsbE1hY2hpbmUiLCJsaXN0ZW5lcklkIiwicmVtb3ZlTGlzdGVuZXJGb3JQYWNrYWdlZE1lc3NhZ2VzRnJvbUNhbGxNYWNoaW5lIiwiREFJTFlfRVZFTlRfSUZSQU1FX1JFQURZX0ZPUl9MQVVOQ0hfQ09ORklHIiwiREFJTFlfRVZFTlRfSUZSQU1FX0xBVU5DSF9DT05GSUciLCJEQUlMWV9FVkVOVF9KT0lORURfTUVFVElORyIsIkRBSUxZX0VWRU5UX1BBUlRJQ0lQQU5UX0pPSU5FRCIsIkRBSUxZX0VWRU5UX1BBUlRJQ0lQQU5UX1VQREFURUQiLCJtYXliZUV2ZW50VHJhY2tTdG9wcGVkIiwibWF5YmVFdmVudFRyYWNrU3RhcnRlZCIsIm1heWJlRXZlbnRUcmFja1N0b3BwZWRGb3JDdXN0b21UcmFja3MiLCJtYXliZUV2ZW50VHJhY2tTdGFydGVkRm9yQ3VzdG9tVHJhY2tzIiwibWF5YmVFdmVudFJlY29yZGluZ1N0b3BwZWQiLCJtYXliZUV2ZW50UmVjb3JkaW5nU3RhcnRlZCIsImNvbXBhcmVFcXVhbEZvclBhcnRpY2lwYW50VXBkYXRlRXZlbnQiLCJEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9MRUZUIiwicHJldlAiLCJEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9DT1VOVFNfVVBEQVRFRCIsImRlZXBFcXVhbCIsInBhcnRpY2lwYW50Q291bnRzIiwiREFJTFlfRVZFTlRfQUNDRVNTX1NUQVRFX1VQREFURUQiLCJuZXdBY2Nlc3NTdGF0ZSIsImF3YWl0aW5nQWNjZXNzIiwiREFJTFlfRVZFTlRfTUVFVElOR19TRVNTSU9OX1VQREFURUQiLCJtZWV0aW5nU2Vzc2lvbiIsInByZXNlcnZlSWZyYW1lIiwiZXZlbnQiLCJEQUlMWV9FVkVOVF9MRUZUX01FRVRJTkciLCJEQUlMWV9FVkVOVF9JTlBVVF9FVkVOVCIsInR5cGUiLCJEQUlMWV9FVkVOVF9TRUxFQ1RFRF9ERVZJQ0VTX1VQREFURUQiLCJEQUlMWV9FVkVOVF9ORVRXT1JLX1FVQUxJVFlfQ0hBTkdFIiwiREFJTFlfRVZFTlRfQUNUSVZFX1NQRUFLRVJfQ0hBTkdFIiwiYWN0aXZlU3BlYWtlciIsInBlZXJJZCIsIkRBSUxZX0VWRU5UX1NIT1dfTE9DQUxfVklERU9fQ0hBTkdFRCIsIkRBSUxZX0VWRU5UX0FDVElWRV9TUEVBS0VSX01PREVfQ0hBTkdFIiwiREFJTFlfRVZFTlRfV0FJVElOR19QQVJUSUNJUEFOVF9BRERFRCIsIkRBSUxZX0VWRU5UX1dBSVRJTkdfUEFSVElDSVBBTlRfVVBEQVRFRCIsIkRBSUxZX0VWRU5UX1dBSVRJTkdfUEFSVElDSVBBTlRfUkVNT1ZFRCIsImFsbFdhaXRpbmdQYXJ0aWNpcGFudHMiLCJEQUlMWV9FVkVOVF9SRUNFSVZFX1NFVFRJTkdTX1VQREFURUQiLCJEQUlMWV9FVkVOVF9JTlBVVF9TRVRUSU5HU19VUERBVEVEIiwiREFJTFlfRVZFTlRfUkVNT1RFX01FRElBX1BMQVlFUl9TVEFSVEVEIiwicGFydGljaXBhbnRJZCIsInBsYXllclN0YXRlIiwiZW1pdERhaWx5SlNFdmVudCIsIkRBSUxZX0VWRU5UX1JFTU9URV9NRURJQV9QTEFZRVJfU1RPUFBFRCIsIkRBSUxZX0VWRU5UX1JFTU9URV9NRURJQV9QTEFZRVJfVVBEQVRFRCIsInJtcFBsYXllclN0YXRlIiwiY29tcGFyZUVxdWFsRm9yUk1QVXBkYXRlRXZlbnQiLCJEQUlMWV9FVkVOVF9DVVNUT01fQlVUVE9OX0NMSUNLIiwiREFJTFlfRVZFTlRfTUVFVElOR19TRVNTSU9OX1NUQVRFX1VQREFURUQiLCJtZWV0aW5nU2Vzc2lvblN0YXRlIiwiREFJTFlfRVZFTlRfUkVDT1JESU5HX1NUQVJURUQiLCJEQUlMWV9FVkVOVF9SRUNPUkRJTkdfU1RPUFBFRCIsIkRBSUxZX0VWRU5UX1JFQ09SRElOR19TVEFUUyIsIkRBSUxZX0VWRU5UX1JFQ09SRElOR19FUlJPUiIsIkRBSUxZX0VWRU5UX1JFQ09SRElOR19VUExPQURfQ09NUExFVEVEIiwiREFJTFlfRVZFTlRfVFJBTlNDUklQVElPTl9TVEFSVEVEIiwiREFJTFlfRVZFTlRfVFJBTlNDUklQVElPTl9TVE9QUEVEIiwiREFJTFlfRVZFTlRfVFJBTlNDUklQVElPTl9FUlJPUiIsIkRBSUxZX0VWRU5UX1NUQVJURURfQ0FNRVJBIiwiREFJTFlfRVZFTlRfQ0FNRVJBX0VSUk9SIiwiREFJTFlfRVZFTlRfQVBQX01TRyIsIkRBSUxZX0VWRU5UX0xPQ0FMX1NDUkVFTl9TSEFSRV9TVEFSVEVEIiwiREFJTFlfRVZFTlRfTE9DQUxfU0NSRUVOX1NIQVJFX1NUT1BQRUQiLCJEQUlMWV9FVkVOVF9ORVRXT1JLX0NPTk5FQ1RJT04iLCJEQUlMWV9FVkVOVF9SRUNPUkRJTkdfREFUQSIsIkRBSUxZX0VWRU5UX0xJVkVfU1RSRUFNSU5HX1NUQVJURUQiLCJEQUlMWV9FVkVOVF9MSVZFX1NUUkVBTUlOR19TVE9QUEVEIiwiREFJTFlfRVZFTlRfTElWRV9TVFJFQU1JTkdfRVJST1IiLCJEQUlMWV9FVkVOVF9OT05GQVRBTF9FUlJPUiIsIkRBSUxZX0VWRU5UX0xBTkdfVVBEQVRFRCIsIkRBSUxZX1VJX1JFUVVFU1RfRlVMTFNDUkVFTiIsIkRBSUxZX1VJX0VYSVRfRlVMTFNDUkVFTiIsInRoaXNQIiwicmVhZHlTdGF0ZSIsIkRBSUxZX0VWRU5UX1RSQUNLX1NUT1BQRUQiLCJwcmV2VHJhY2siLCJ0aGlzVHJhY2siLCJEQUlMWV9FVkVOVF9UUkFDS19TVEFSVEVEIiwidHJhY2tLZXkiLCJ0cmFja3MiLCJtYXliZUV2ZW50Q3VzdG9tVHJhY2tTdG9wcGVkIiwibWF5YmVFdmVudEN1c3RvbVRyYWNrU3RhcnRlZCIsImEiLCJiIiwidm9sdW1lIiwidmlkZW9UcmFjayIsIm11dGVkIiwiYXVkaW9UcmFjayIsIkRhaWx5TmF0aXZlVXRpbHMiLCJpc1ByZXBhcmluZ1RvSm9pbiIsImNhbGxTdGF0ZSIsIm9sZE1lZXRpbmdTdGF0ZSIsIm9sZElzUHJlcGFyaW5nVG9Kb2luIiwib2xkSXNNZWV0aW5nUGVuZGluZ09yT25nb2luZyIsInVwZGF0ZUtlZXBEZXZpY2VBd2FrZSIsInVwZGF0ZURldmljZUF1ZGlvTW9kZSIsInVwZGF0ZVNob3dBbmRyb2lkT25nb2luZ01lZXRpbmdOb3RpZmljYXRpb24iLCJ1cGRhdGVOb09wUmVjb3JkaW5nRW5zdXJpbmdCYWNrZ3JvdW5kQ29udGludWl0eSIsInJlc2V0UHJlbG9hZENhY2hlIiwia2VlcEF3YWtlIiwic2V0S2VlcERldmljZUF3YWtlIiwidXNlSW5DYWxsQXVkaW9Nb2RlIiwiYXVkaW9Nb2RlIiwic2hvd05vdGlmaWNhdGlvbiIsInNldFNob3dPbmdvaW5nTWVldGluZ05vdGlmaWNhdGlvbiIsImVuYWJsZU5vT3BSZWNvcmRpbmciLCJlbmFibGVOb09wUmVjb3JkaW5nRW5zdXJpbmdCYWNrZ3JvdW5kQ29udGludWl0eSIsInN0b3JlIiwiZ2V0U3RhdGUiLCJzdHJlYW1JZCIsInN0cmVhbXMiLCJzdHJlYW1EYXRhIiwicGVuZGluZ1RyYWNrIiwia2luZCIsInN0ciIsImMiLCJzYWZlIiwibW9kaWZ5TG9jYWxTZHBIb29rIiwibW9kaWZ5UmVtb3RlU2RwSG9vayIsIlNlc3Npb25EYXRhVXBkYXRlIiwiZGF0YVN0ciIsIk1BWF9VU0VSX0RBVEFfU0laRSIsInJlY2VpdmVTZXR0aW5nc1BhcmFtIiwiaXNQYXJ0aWNpcGFudElkVmFsaWQiLCJkaXNhbGxvd2VkS2V5cyIsInB1c2giLCJhcmVWaWRlb1JlY2VpdmVTZXR0aW5nc1ZhbGlkIiwidmlkZW9SZWNlaXZlU2V0dGluZ3MiLCJsYXllciIsImFyZVBhcnRpY2lwYW50UmVjZWl2ZVNldHRpbmdzVmFsaWQiLCJzY3JlZW5WaWRlbyIsInZhbGlkYXRlVmlkZW9Qcm9jZXNzb3IiLCJwcm9jZXNzb3IiLCJWQUxJRF9QUk9DRVNTT1JfS0VZUyIsInZhbGlkYXRlVmlkZW9Qcm9jZXNzb3JUeXBlIiwicHVibGlzaCIsInZhbGlkYXRlVmlkZW9Qcm9jZXNzb3JDb25maWciLCJjb25maWdFcnJNc2ciLCJWSURFT19QUk9DRVNTT1JfVFlQRVMiLCJCR0JMVVIiLCJzdHJlbmd0aCIsImlzTmFOIiwiQkdJTUFHRSIsInNvdXJjZSIsInZhbGlkYXRlQW5kVGFnQmdJbWFnZVNvdXJjZSIsInZhbGlkYXRlSHR0cFVybCIsInZhbGlkYXRlQmdJbWFnZUZpbGVUeXBlIiwiREFJTFlfU1VQUE9SVEVEX0JHX0lNR19UWVBFUyIsInZhbGlkYXRlSW1hZ2VTZWxlY3Rpb24iLCJEQUlMWV9QUkVTRUxFQ1RFRF9CR19JTUFHRV9VUkxTX0xFTkdUSCIsInBhcnNlZFVybCIsIlVSTCIsInBhdGhOYW1lIiwicGF0aG5hbWUiLCJwcm90b2NvbCIsImJsb2JDb250ZW50VHlwZSIsInN1YnN0cmluZyIsImluZGV4T2YiLCJibG9iRXh0ZW5zaW9uIiwic3BsaXQiLCJ1cmxGaWxlVHlwZSIsImF0IiwidG9Mb3dlckNhc2UiLCJ0cmltIiwic2VsZWN0SW1nIiwiaW1nTnVtIiwidmFsdWVzIiwicHJvY2Vzc29yT3B0cyIsIkRBSUxZX1JFQ0VJVkVfU0VUVElOR1NfQkFTRV9LRVkiLCJEQUlMWV9SRUNFSVZFX1NFVFRJTkdTX0FMTF9QQVJUSUNJUEFOVFNfS0VZIiwiQXJyYXkiLCJpc0FycmF5IiwiYnRuc0tleSIsImJ0bktleSIsImJ0blZhbHVlIiwiZXhwZWN0ZWRLZXkiLCJ2YWxpZGF0ZUNvbmZpZ1Byb3BUeXBlIiwicHJvcFR5cGUiLCJwbGF5ZXJTZXR0aW5ncyIsImlzVmFsdWVJblJhbmdlIiwidmFsIiwic2ltdWxjYXN0RW5jb2RpbmdzIiwiZXZlcnkiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFrTEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBT0E7O0NBU0E7O0NBVUE7O0NBUUE7O0NBTUE7O0NBa0JBOztDQTBEQTtBQUNBOztBQUNBLElBQU1BLDRCQUE0QixHQUFHLE9BQXJDO0FBQ0EsSUFBTUMsNEJBQTRCLEdBQUcsT0FBckM7QUFDQSxJQUFNQyxzQkFBc0IsR0FBRyxNQUEvQjtBQUVBLElBQU1DLFdBQVcsR0FBRyxFQUFwQjtBQUNBLElBQU1DLFdBQVcsR0FBRyxDQUFwQjtBQUNBLElBQU1DLG9CQUFvQixHQUFHLENBQTdCO0FBQ0EsSUFBTUMsdUJBQXVCLEdBQUcsQ0FBaEM7QUFDQSxJQUFNQyxpQkFBaUIsR0FBRyxPQUExQjtBQUNBLElBQU1DLGlCQUFpQixHQUFHLE1BQTFCO0FBRUEsSUFBTUMscUJBQXFCLEdBQUdDLDZGQUFhLEtBQ3ZDO0FBQUVDLE1BQUksRUFBRTtBQUFSLENBRHVDLEdBRXZDO0FBQ0VBLE1BQUksRUFBRSxFQURSO0FBRUVDLFVBQVEsRUFBRTtBQUZaLENBRko7QUFPQSxJQUFNQyx3QkFBd0IsR0FBRztBQUFFQyxTQUFPLEVBQUUsQ0FBWDtBQUFjQyxRQUFNLEVBQUU7QUFBdEIsQ0FBakM7QUFFQSxJQUFNQyw2QkFBNkIsR0FBRztBQUNwQ0MsWUFBVSxFQUFFO0FBQUVDLE9BQUcsRUFBRVYsaUJBQVA7QUFBMEJXLE9BQUcsRUFBRVo7QUFBL0IsR0FEd0I7QUFFcENhLGNBQVksRUFBRTtBQUFFRixPQUFHLEVBQUVkLFdBQVA7QUFBb0JlLE9BQUcsRUFBRWhCO0FBQXpCLEdBRnNCO0FBR3BDa0IsdUJBQXFCLEVBQUU7QUFBRUgsT0FBRyxFQUFFLENBQVA7QUFBVUMsT0FBRyxFQUFFYjtBQUFmO0FBSGEsQ0FBdEM7QUFNQSxJQUFNZ0IseUJBQXlCLEdBQUcsQ0FBQyxPQUFELEVBQVUsUUFBVixFQUFvQixvQkFBcEIsQ0FBbEMsQyxDQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFNQyxxQkFBcUIsR0FBRztBQUM1QkMsMkJBQXlCLEVBQUU7QUFDekJDLFNBQUssRUFBRSxRQURrQjtBQUV6QkMsWUFBUSxFQUFFLFFBRmU7QUFHekJDLFlBQVEsRUFBRSxRQUhlO0FBSXpCQyw0QkFBd0IsRUFBRTtBQUpELEdBREM7QUFPNUJDLDZCQUEyQixFQUFFO0FBQzNCQyxTQUFLLEVBQUUsU0FEb0I7QUFFM0JDLFNBQUssRUFBRTtBQUZvQjtBQVBELENBQTlCO0FBYUEsSUFBTUMscUJBQXFCLEdBQUc7QUFDNUJDLElBQUUsRUFBRTtBQUNGQyxZQUFRLEVBQUUsUUFEUjtBQUVGQyxvQkFBZ0IsRUFBRSxRQUZoQjtBQUdGQyxTQUFLLEVBQUUsUUFITDtBQUlGQyxXQUFPLEVBQUU7QUFKUDtBQUR3QixDQUE5QjtBQVNBLElBQU1DLFdBQVcsR0FBRztBQUNsQkMsb0JBQWtCLEVBQUUsSUFERjtBQUVsQkMsbUJBQWlCLEVBQUU7QUFDakJDLFlBQVEsRUFBRUMseUJBRE87QUFFakJDLFFBQUksaUVBQTBEQyxJQUFJLENBQUNDLFNBQUwsQ0FDNURiLHFCQUQ0RCxDQUExRDtBQUZhLEdBRkQ7QUFRbEJjLEtBQUcsRUFBRTtBQUNITCxZQUFRLEVBQUUsa0JBQUNLLEdBQUQ7QUFBQSxhQUFTLE9BQU9BLEdBQVAsS0FBZSxRQUF4QjtBQUFBLEtBRFA7QUFFSEgsUUFBSSxFQUFFO0FBRkgsR0FSYTtBQVlsQkksU0FBTyxFQUFFO0FBQ1BOLFlBQVEsRUFBRSxrQkFBQ0ssR0FBRDtBQUFBLGFBQVMsT0FBT0EsR0FBUCxLQUFlLFFBQXhCO0FBQUEsS0FESDtBQUVQSCxRQUFJLEVBQUU7QUFGQyxHQVpTO0FBZ0JsQkssT0FBSyxFQUFFO0FBQ0xQLFlBQVEsRUFBRSxrQkFBQ08sS0FBRDtBQUFBLGFBQVcsT0FBT0EsS0FBUCxLQUFpQixRQUE1QjtBQUFBLEtBREw7QUFFTEwsUUFBSSxFQUFFLDBCQUZEO0FBR0xNLGVBQVcsRUFBRTtBQUhSLEdBaEJXO0FBcUJsQkMsYUFBVyxFQUFFO0FBQ1g7QUFDQVQsWUFBUSxFQUFFLGtCQUFDVSxNQUFELEVBQVk7QUFDcEIsVUFBSSxDQUFDQyxNQUFNLENBQUNDLFlBQVosRUFBMEI7QUFDeEJELGNBQU0sQ0FBQ0MsWUFBUCxHQUFzQixFQUF0QjtBQUNEOztBQUNERCxZQUFNLENBQUNDLFlBQVAsQ0FBb0JDLHlDQUFwQixHQUNFSCxNQUFNLENBQUNHLHlDQURUO0FBRUFGLFlBQU0sQ0FBQ0MsWUFBUCxDQUFvQkUseUJBQXBCLEdBQ0VKLE1BQU0sQ0FBQ0kseUJBRFQ7QUFFQUgsWUFBTSxDQUFDQyxZQUFQLENBQW9CRyx5QkFBcEIsR0FDRUwsTUFBTSxDQUFDSyx5QkFEVDtBQUVBSixZQUFNLENBQUNDLFlBQVAsQ0FBb0JJLDJCQUFwQixHQUNFTixNQUFNLENBQUNNLDJCQURUO0FBRUEsYUFBTyxJQUFQO0FBQ0Q7QUFmVSxHQXJCSztBQXNDbEJDLG1CQUFpQixFQUFFO0FBQ2pCakIsWUFBUSxFQUFFa0IseUJBRE87QUFFakJoQixRQUFJLCtDQUF3Q0MsSUFBSSxDQUFDQyxTQUFMLENBQzFDdEIscUJBRDBDLENBQXhDO0FBRmEsR0F0Q0Q7QUE0Q2xCcUMsTUFBSSxFQUFFO0FBQ0puQixZQUFRLEVBQUUsa0JBQUNtQixJQUFELEVBQVU7QUFDbEIsYUFBTyxDQUNMLElBREssRUFFTCxPQUZLLEVBRUk7QUFDVCxVQUhLLEVBSUwsSUFKSyxFQUtMLElBTEssRUFNTCxJQU5LLEVBT0wsSUFQSyxFQVFMLElBUkssRUFTTCxJQVRLLEVBVUwsSUFWSyxFQVdMLElBWEssRUFZTCxJQVpLLEVBYUwsSUFiSyxFQWNMLElBZEssRUFlTCxJQWZLLEVBZ0JMLElBaEJLLEVBaUJMLE1BakJLLEVBa0JMQyxRQWxCSyxDQWtCSUQsSUFsQkosQ0FBUDtBQW1CRCxLQXJCRztBQXNCSmpCLFFBQUksRUFBRTtBQXRCRixHQTVDWTtBQW9FbEJtQixVQUFRLEVBQUUsSUFwRVE7QUFvRUY7QUFDaEJDLFVBQVEsRUFBRTtBQUNSdEIsWUFBUSxFQUFFLGtCQUFDOUIsSUFBRCxFQUFVO0FBQ2xCLFVBQUk7QUFDRnFELHdCQUFnQixDQUFDckQsSUFBRCxDQUFoQjtBQUNBLGVBQU8sSUFBUDtBQUNELE9BSEQsQ0FHRSxPQUFPc0QsQ0FBUCxFQUFVO0FBQ1ZDLGVBQU8sQ0FBQ0MsS0FBUixDQUFjRixDQUFkO0FBQ0EsZUFBTyxLQUFQO0FBQ0Q7QUFDRixLQVRPO0FBVVJ0QixRQUFJLEVBQUU7QUFWRSxHQXJFUTtBQWlGbEJ5QixlQUFhLEVBQUUsSUFqRkc7QUFrRmxCQyxlQUFhLEVBQUUsSUFsRkc7QUFtRmxCQyxtQkFBaUIsRUFBRSxJQW5GRDtBQW9GbEJDLGlCQUFlLEVBQUUsSUFwRkM7QUFxRmxCQyxnQkFBYyxFQUFFLElBckZFO0FBc0ZsQkMscUJBQW1CLEVBQUUsSUF0Rkg7QUF1RmxCQyxzQkFBb0IsRUFBRSxJQXZGSjtBQXdGbEJDLHNCQUFvQixFQUFFLElBeEZKO0FBeUZsQjtBQUNBQyxhQUFXLEVBQUUsSUExRks7QUEyRmxCO0FBQ0FDLGNBQVksRUFBRSxJQTVGSTtBQTZGbEJDLFNBQU8sRUFBRSxJQTdGUztBQThGbEJDLFNBQU8sRUFBRSxJQTlGUztBQStGbEJDLFdBQVMsRUFBRSxJQS9GTztBQWdHbEJDLGFBQVcsRUFBRTtBQUNYeEMsWUFBUSxFQUFFLGtCQUFDeUMsQ0FBRCxFQUFJQyxVQUFKLEVBQW1CO0FBQzNCQSxnQkFBVSxDQUFDQyxhQUFYLENBQXlCQyxhQUF6QixHQUF5Q0gsQ0FBekM7QUFDQSxhQUFPLElBQVA7QUFDRDtBQUpVLEdBaEdLO0FBc0dsQkksYUFBVyxFQUFFO0FBQ1g3QyxZQUFRLEVBQUUsa0JBQUN5QyxDQUFELEVBQUlDLFVBQUosRUFBbUI7QUFDM0JBLGdCQUFVLENBQUNDLGFBQVgsQ0FBeUJHLGFBQXpCLEdBQXlDTCxDQUF6QztBQUNBLGFBQU8sSUFBUDtBQUNEO0FBSlUsR0F0R0s7QUE0R2xCTSxnQ0FBOEIsRUFBRTtBQUM5Qi9DLFlBQVEsRUFBRSxrQkFBQ3lDLENBQUQsRUFBSUMsVUFBSixFQUFtQjtBQUMzQkEsZ0JBQVUsQ0FBQ0MsYUFBWCxDQUF5QkksOEJBQXpCLEdBQTBETixDQUExRDtBQUNBLGFBQU8sSUFBUDtBQUNEO0FBSjZCLEdBNUdkO0FBa0hsQk8sT0FBSyxFQUFFO0FBQ0xoRCxZQUFRLEVBQUUsa0JBQUNpRCxDQUFELEVBQU87QUFDZixVQUFNQyxXQUFXLEdBQUcsQ0FDbEIsUUFEa0IsRUFFbEIsWUFGa0IsRUFHbEIsWUFIa0IsRUFJbEIsa0JBSmtCLEVBS2xCLFVBTGtCLEVBTWxCLFFBTmtCLEVBT2xCLFlBUGtCLEVBUWxCLGtCQVJrQixFQVNsQixjQVRrQixFQVVsQixnQkFWa0IsQ0FBcEI7O0FBWUEsVUFBTUMsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUFDQyxNQUFELEVBQVk7QUFDdEMsd0NBQWtCQyxNQUFNLENBQUNDLElBQVAsQ0FBWUYsTUFBWixDQUFsQixrQ0FBdUM7QUFBbEMsY0FBTUcsR0FBRyxtQkFBVDs7QUFDSCxjQUFJLENBQUNMLFdBQVcsQ0FBQzlCLFFBQVosQ0FBcUJtQyxHQUFyQixDQUFMLEVBQWdDO0FBQzlCO0FBQ0E5QixtQkFBTyxDQUFDQyxLQUFSLCtCQUN3QjZCLEdBRHhCLCtCQUMrQ0wsV0FBVyxDQUFDTSxJQUFaLENBQzNDLElBRDJDLENBRC9DO0FBS0EsbUJBQU8sS0FBUDtBQUNEOztBQUNELGNBQUksQ0FBQ0osTUFBTSxDQUFDRyxHQUFELENBQU4sQ0FBWUUsS0FBWixDQUFrQiw4QkFBbEIsQ0FBTCxFQUF3RDtBQUN0RDtBQUNBaEMsbUJBQU8sQ0FBQ0MsS0FBUixXQUNLNkIsR0FETCxvRkFDaUZILE1BQU0sQ0FBQ0csR0FBRCxDQUR2RjtBQUdBLG1CQUFPLEtBQVA7QUFDRDtBQUNGOztBQUNELGVBQU8sSUFBUDtBQUNELE9BcEJEOztBQXFCQSxVQUNFLHNFQUFPTixDQUFQLE1BQWEsUUFBYixJQUNBLEVBQUcsV0FBV0EsQ0FBWCxJQUFnQixVQUFVQSxDQUEzQixJQUFpQyxZQUFZQSxDQUEvQyxDQUZGLEVBR0U7QUFDQTtBQUNBeEIsZUFBTyxDQUFDQyxLQUFSLENBQ0UsNEVBREYsRUFFRXVCLENBRkY7QUFJQSxlQUFPLEtBQVA7QUFDRDs7QUFDRCxVQUFJLFdBQVdBLENBQVgsSUFBZ0IsVUFBVUEsQ0FBOUIsRUFBaUM7QUFDL0IsWUFBSSxFQUFFLFlBQVlBLENBQUMsQ0FBQ1MsS0FBaEIsQ0FBSixFQUE0QjtBQUMxQmpDLGlCQUFPLENBQUNDLEtBQVIsQ0FBYywyQ0FBZCxFQUEyRHVCLENBQTNEO0FBQ0EsaUJBQU8sS0FBUDtBQUNEOztBQUNELFlBQUksRUFBRSxZQUFZQSxDQUFDLENBQUNVLElBQWhCLENBQUosRUFBMkI7QUFDekJsQyxpQkFBTyxDQUFDQyxLQUFSLENBQWMsMENBQWQsRUFBMER1QixDQUExRDtBQUNBLGlCQUFPLEtBQVA7QUFDRDs7QUFDRCxlQUNFRSxtQkFBbUIsQ0FBQ0YsQ0FBQyxDQUFDUyxLQUFGLENBQVFOLE1BQVQsQ0FBbkIsSUFDQUQsbUJBQW1CLENBQUNGLENBQUMsQ0FBQ1UsSUFBRixDQUFPUCxNQUFSLENBRnJCO0FBSUQ7O0FBQ0QsYUFBT0QsbUJBQW1CLENBQUNGLENBQUMsQ0FBQ0csTUFBSCxDQUExQjtBQUNELEtBN0RJO0FBOERMbEQsUUFBSSxFQUFFO0FBOURELEdBbEhXO0FBa0xsQjBELGNBQVksRUFBRTtBQUNaNUQsWUFBUSxFQUFFLGtCQUFDNEQsWUFBRCxFQUFrQjtBQUMxQixVQUFJLFVBQVVBLFlBQWQsRUFBNEI7QUFDMUIsWUFBTUMsVUFBVSxHQUFHRCxZQUFZLENBQUNFLElBQWhDOztBQUNBLFlBQUkscUJBQXFCRCxVQUF6QixFQUFxQztBQUNuQyxjQUFJLENBQUNFLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkgsVUFBVSxDQUFDSSxlQUE1QixDQUFMLEVBQW1EO0FBQ2pEeEMsbUJBQU8sQ0FBQ0MsS0FBUixpRUFDMkRtQyxVQUFVLENBQUNJLGVBRHRFO0FBR0EsbUJBQU8sS0FBUDtBQUNEOztBQUNELGNBQUlKLFVBQVUsQ0FBQ0ksZUFBWCxHQUE2QixFQUFqQyxFQUFxQztBQUNuQ3hDLG1CQUFPLENBQUNDLEtBQVI7QUFHQSxtQkFBTyxLQUFQO0FBQ0Q7QUFDRjs7QUFDRCxZQUFJLHFCQUFxQm1DLFVBQXpCLEVBQXFDO0FBQ25DLGNBQUksQ0FBQ0UsTUFBTSxDQUFDQyxTQUFQLENBQWlCSCxVQUFVLENBQUNLLGVBQTVCLENBQUwsRUFBbUQ7QUFDakR6QyxtQkFBTyxDQUFDQyxLQUFSLGlFQUMyRG1DLFVBQVUsQ0FBQ0ssZUFEdEU7QUFHQSxtQkFBTyxLQUFQO0FBQ0Q7O0FBQ0QsY0FBSUwsVUFBVSxDQUFDSyxlQUFYLEdBQTZCLENBQWpDLEVBQW9DO0FBQ2xDekMsbUJBQU8sQ0FBQ0MsS0FBUjtBQUNBLG1CQUFPLEtBQVA7QUFDRDs7QUFDRCxjQUNFLHFCQUFxQm1DLFVBQXJCLElBQ0FBLFVBQVUsQ0FBQ0ssZUFBWCxHQUE2QkwsVUFBVSxDQUFDSSxlQUYxQyxFQUdFO0FBQ0F4QyxtQkFBTyxDQUFDQyxLQUFSO0FBR0EsbUJBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxhQUFPLElBQVA7QUFDRCxLQXpDVztBQTBDWnhCLFFBQUksRUFBRTtBQTFDTSxHQWxMSTtBQThObEJpRSxpQkFBZSxFQUFFO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBbkUsWUFBUSxFQUFFLGtCQUFDbUUsZUFBRDtBQUFBLGFBQ1JDLHVCQUF1QixDQUFDRCxlQUFELEVBQWtCO0FBQ3ZDRSwrQkFBdUIsRUFBRTtBQURjLE9BQWxCLENBRGY7QUFBQSxLQU5LO0FBVWZuRSxRQUFJLEVBQUVvRSxnQ0FBZ0MsQ0FBQztBQUNyQ0QsNkJBQXVCLEVBQUU7QUFEWSxLQUFEO0FBVnZCLEdBOU5DO0FBNE9sQkUsZUFBYSxFQUFFO0FBQ2J2RSxZQUFRLEVBQUUsa0JBQUN1RSxhQUFEO0FBQUEsYUFBbUJDLHFCQUFxQixDQUFDRCxhQUFELENBQXhDO0FBQUEsS0FERztBQUVickUsUUFBSSxFQUFFdUUsOEJBQThCO0FBRnZCLEdBNU9HO0FBZ1BsQjtBQUNBQyxRQUFNLEVBQUU7QUFDTjFFLFlBQVEsRUFBRSxrQkFBQzBFLE1BQUQ7QUFBQSxhQUNSQSxNQUFNLEtBQUssV0FBWCxJQUEwQkEsTUFBTSxLQUFLLFNBQXJDLElBQWtEQSxNQUFNLEtBQUssTUFEckQ7QUFBQSxLQURKO0FBR054RSxRQUFJLEVBQUUsdUNBSEE7QUFJTk0sZUFBVyxFQUFFO0FBSlAsR0FqUFU7QUF1UGxCbUUsS0FBRyxFQUFFO0FBQ0huRSxlQUFXLEVBQUU7QUFEVixHQXZQYTtBQTBQbEJvRSxTQUFPLEVBQUU7QUFDUHBFLGVBQVcsRUFBRTtBQUROLEdBMVBTO0FBNlBsQnFFLGdCQUFjLEVBQUU7QUFDZHJFLGVBQVcsRUFBRTtBQURDO0FBN1BFLENBQXBCLEMsQ0FrUUE7O0FBQ0EsSUFBTXNFLGlCQUFpQixHQUFHO0FBQ3hCQyxRQUFNLEVBQUU7QUFDTi9FLFlBQVEsRUFBRSxrQkFBQytFLE1BQUQsRUFBWTtBQUNwQixXQUFLLElBQUlDLENBQVQsSUFBY0QsTUFBZCxFQUFzQjtBQUNwQixZQUFJQyxDQUFDLEtBQUssS0FBTixJQUFlQSxDQUFDLEtBQUssUUFBekIsRUFBbUM7QUFDakMsaUJBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsVUFBSUQsTUFBTSxDQUFDRSxHQUFYLEVBQWdCO0FBQ2QsYUFBSyxJQUFJRCxDQUFULElBQWNELE1BQU0sQ0FBQ0UsR0FBckIsRUFBMEI7QUFDeEIsY0FBSUQsQ0FBQyxLQUFLLEtBQU4sSUFBZUEsQ0FBQyxLQUFLLE9BQXpCLEVBQWtDO0FBQ2hDLG1CQUFPLEtBQVA7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsVUFBSUQsTUFBTSxDQUFDRyxNQUFYLEVBQW1CO0FBQ2pCLGFBQUssSUFBSUYsQ0FBVCxJQUFjRCxNQUFNLENBQUNHLE1BQXJCLEVBQTZCO0FBQzNCLGNBQUlGLENBQUMsS0FBSyxLQUFOLElBQWVBLENBQUMsS0FBSyxPQUF6QixFQUFrQztBQUNoQyxtQkFBTyxLQUFQO0FBQ0Q7QUFDRjtBQUNGOztBQUNELGFBQU8sSUFBUDtBQUNELEtBdEJLO0FBdUJOOUUsUUFBSSxFQUNGLDBDQUNBO0FBekJJLEdBRGdCO0FBNEJ4QmlGLHFCQUFtQixFQUFFO0FBQ25CbkYsWUFBUSxFQUFFLGtCQUFDb0YsSUFBRCxFQUFPMUMsVUFBUCxFQUFtQjJDLFdBQW5CLEVBQW1DO0FBQzNDLFVBQUkzQyxVQUFVLENBQUNDLGFBQVgsQ0FBeUJJLDhCQUE3QixFQUE2RDtBQUMzRCxlQUFPLEtBQVA7QUFDRDs7QUFDRCxVQUFNdUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFELEVBQU8sS0FBUCxFQUFjLFFBQWQsQ0FBN0I7O0FBQ0EsVUFDRUEsb0JBQW9CLENBQUNsRSxRQUFyQixDQUE4QmdFLElBQTlCLEtBQ0MsQ0FBQ25ILDZGQUFhLEVBQWQsSUFBb0JtSCxJQUFJLEtBQUssUUFGaEMsRUFHRTtBQUNBLGVBQU8sSUFBUDtBQUNEOztBQUNELFVBQU1HLFdBQVcsR0FBRyxDQUNsQixPQURrQixFQUVsQixPQUZrQixFQUdsQixhQUhrQixFQUlsQixhQUprQixFQUtsQixVQUxrQixFQU1sQixVQU5rQixDQUFwQjs7QUFRQSxVQUFNQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUNKLElBQUQsRUFBMEI7QUFBQSxZQUFuQkssTUFBbUIsdUVBQVYsS0FBVTs7QUFDbEQsYUFBSyxJQUFNaEQsQ0FBWCxJQUFnQjJDLElBQWhCLEVBQXNCO0FBQ3BCLGNBQUkzQyxDQUFDLEtBQUssUUFBVixFQUFvQjtBQUNsQixnQkFBTWlELGtCQUFrQixHQUFHSixvQkFBb0IsQ0FBQ2xFLFFBQXJCLENBQThCZ0UsSUFBSSxDQUFDM0MsQ0FBRCxDQUFsQyxDQUEzQjs7QUFDQSxnQkFBSSxDQUFDaUQsa0JBQUQsSUFBdUIsQ0FBQ0YsaUJBQWlCLENBQUNKLElBQUksQ0FBQzNDLENBQUQsQ0FBTCxFQUFVLElBQVYsQ0FBN0MsRUFBOEQ7QUFDNUQscUJBQU8sS0FBUDtBQUNEO0FBQ0YsV0FMRCxNQUtPO0FBQ0wsZ0JBQU1rRCxxQkFBcUIsR0FBRyxDQUFDRixNQUFELElBQVcsQ0FBQ0YsV0FBVyxDQUFDbkUsUUFBWixDQUFxQnFCLENBQXJCLENBQTFDO0FBQ0EsZ0JBQU1tRCxpQkFBaUIsR0FBRyxDQUFDTixvQkFBb0IsQ0FBQ2xFLFFBQXJCLENBQThCZ0UsSUFBSSxDQUFDM0MsQ0FBRCxDQUFsQyxDQUEzQjs7QUFDQSxnQkFBSWtELHFCQUFxQixJQUFJQyxpQkFBN0IsRUFBZ0Q7QUFDOUMscUJBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxlQUFPLElBQVA7QUFDRCxPQWhCRDs7QUFpQkEsYUFBT0osaUJBQWlCLENBQUNKLElBQUQsQ0FBeEI7QUFDRCxLQXRDa0I7QUF1Q25CbEYsUUFBSSxFQUNGLG9JQUVFLENBQUNqQyw2RkFBYSxFQUFkLEdBQW1CLGFBQW5CLEdBQW1DLEVBRnJDO0FBeENpQixHQTVCRztBQXlFeEI0SCxVQUFRLEVBQUUsSUF6RWM7QUEwRXhCQyxVQUFRLEVBQUUsSUExRWM7QUEyRXhCQyxPQUFLLEVBQUUsSUEzRWlCO0FBNEV4QkMsbUJBQWlCLEVBQUU7QUFDakJoRyxZQUFRLEVBQUUsa0JBQUNpRyxpQkFBRCxFQUF1QjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSwwQ0FBMkM1QyxNQUFNLENBQUM2QyxPQUFQLENBQ3pDRCxpQkFEeUMsQ0FBM0MsdUNBRUc7QUFBQTtBQUFBLFlBRlNFLGNBRVQ7QUFBQSxZQUZ5QkMsVUFFekI7O0FBQ0QsZ0JBQVFELGNBQVI7QUFDRSxlQUFLLGFBQUw7QUFDRSxnQkFBSSxPQUFPQyxVQUFQLEtBQXNCLFNBQTFCLEVBQXFDO0FBQ25DLHFCQUFPLEtBQVA7QUFDRDs7QUFDRDs7QUFDRixlQUFLLFNBQUw7QUFDRSxnQkFBSUEsVUFBVSxZQUFZQyxHQUExQixFQUErQjtBQUM3QixrQkFBTUMsZUFBZSxHQUFHLENBQ3RCLE9BRHNCLEVBRXRCLE9BRnNCLEVBR3RCLGFBSHNCLEVBSXRCLGFBSnNCLEVBS3RCLGFBTHNCLEVBTXRCLGFBTnNCLENBQXhCOztBQUQ2Qix5REFTTEYsVUFUSztBQUFBOztBQUFBO0FBUzdCLG9FQUFvQztBQUFBLHNCQUF6QkcsU0FBeUI7O0FBQ2xDLHNCQUFJLENBQUNELGVBQWUsQ0FBQ2xGLFFBQWhCLENBQXlCbUYsU0FBekIsQ0FBTCxFQUEwQztBQUN4QywyQkFBTyxLQUFQO0FBQ0Q7QUFDRjtBQWI0QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYzlCLGFBZEQsTUFjTyxJQUFJLE9BQU9ILFVBQVAsS0FBc0IsU0FBMUIsRUFBcUM7QUFDMUMscUJBQU8sS0FBUDtBQUNEOztBQUNEOztBQUNGO0FBQ0UsbUJBQU8sS0FBUDtBQTFCSjtBQTRCRDs7QUFDRCxhQUFPLElBQVA7QUFDRCxLQXRDZ0I7QUF1Q2pCbEcsUUFBSSxFQUFFO0FBdkNXO0FBNUVLLENBQTFCLEMsQ0F1SEE7QUFDQTtBQUNBOztJQUVxQnNHLFc7Ozs7Ozs7QUFDbkI7QUFDQTtBQUNBO3VDQUUwQjtBQUN4QixVQUFJdkksNkZBQWEsRUFBakIsRUFBcUI7QUFDbkIsZUFBTztBQUNMd0ksbUJBQVMsRUFBRSxJQUROO0FBRUxDLGdCQUFNLEVBQUUsSUFGSDtBQUdMQyxjQUFJLEVBQUUsY0FIRDtBQUlMQyxpQkFBTyxFQUFFLElBSko7QUFLTEMsNkJBQW1CLEVBQUUsS0FMaEI7QUFNTEMscUJBQVcsRUFBRSxJQU5SO0FBT0xDLGlDQUF1QixFQUFFO0FBUHBCLFNBQVA7QUFTRDs7QUFDRCxVQUFNQyxPQUFPLEdBQUdDLDhDQUFNLENBQUNDLFNBQVAsQ0FBaUJDLDRGQUFZLEVBQTdCLENBQWhCO0FBQ0EsYUFBTztBQUNMVixpQkFBUyxFQUFFLENBQUMsQ0FBQ1csdUdBQXVCLEVBRC9CO0FBRUxWLGNBQU0sRUFBRU0sT0FBTyxDQUFDSyxlQUFSLE9BQThCLFFBRmpDO0FBR0xWLFlBQUksRUFBRUssT0FBTyxDQUFDTSxjQUFSLEVBSEQ7QUFJTFYsZUFBTyxFQUFFSSxPQUFPLENBQUNPLGlCQUFSLEVBSko7QUFLTEMsMEJBQWtCLEVBQUUsQ0FBQyxDQUFDQyxxR0FBcUIsRUFMdEM7QUFNTFosMkJBQW1CLEVBQUUsQ0FBQyxDQUFDYSx3R0FBd0IsRUFOMUM7QUFPTFosbUJBQVcsRUFBRSxDQUFDLENBQUNNLHVHQUF1QixFQVBqQztBQVFMTCwrQkFBdUIsRUFBRVksMEdBQTBCO0FBUjlDLE9BQVA7QUFVRDs7OzhCQUVnQjtBQUNmLGFBQU9DLG1CQUFQO0FBQ0QsSyxDQUVEO0FBQ0E7QUFDQTs7Ozt1Q0FFeUM7QUFBQSxVQUFqQkMsVUFBaUIsdUVBQUosRUFBSTtBQUN2Q0EsZ0JBQVUsQ0FBQ25ELE1BQVgsR0FBb0IsTUFBcEI7QUFDQSxhQUFPLElBQUk4QixXQUFKLENBQWdCLElBQWhCLEVBQXNCcUIsVUFBdEIsQ0FBUDtBQUNEOzs7eUJBRVdDLFMsRUFBNEI7QUFBQSxVQUFqQkQsVUFBaUIsdUVBQUosRUFBSTtBQUN0Q0UscUNBQStCOztBQUMvQixVQUNFLENBQUNELFNBQUQsSUFDQSxDQUFDQSxTQUFTLENBQUNFLGFBRFgsSUFFQSxhQUFhLE9BQU9GLFNBQVMsQ0FBQ0csR0FIaEMsRUFJRTtBQUNBLGNBQU0sSUFBSUMsS0FBSixDQUFVLHVEQUFWLENBQU47QUFDRDs7QUFDRCxVQUFJLENBQUNMLFVBQVUsQ0FBQ25ELE1BQWhCLEVBQXdCO0FBQ3RCLFlBQUltRCxVQUFVLENBQUN6RixZQUFmLEVBQTZCO0FBQzNCeUYsb0JBQVUsQ0FBQ25ELE1BQVgsR0FBb0IsV0FBcEI7QUFDRCxTQUZELE1BRU87QUFDTG1ELG9CQUFVLENBQUNuRCxNQUFYLEdBQW9CLFNBQXBCO0FBQ0Q7QUFDRjs7QUFDRCxhQUFPLElBQUk4QixXQUFKLENBQWdCc0IsU0FBaEIsRUFBMkJELFVBQTNCLENBQVA7QUFDRDs7O2dDQUVrQk0sSSxFQUFNQyxJLEVBQU07QUFDN0JMLHFDQUErQjtBQUMvQixVQUFJTSxRQUFKLEVBQWNSLFVBQWQ7O0FBQ0EsVUFBSU0sSUFBSSxJQUFJQyxJQUFaLEVBQWtCO0FBQ2hCQyxnQkFBUSxHQUFHRixJQUFYO0FBQ0FOLGtCQUFVLEdBQUdPLElBQWI7QUFDRCxPQUhELE1BR08sSUFBSUQsSUFBSSxJQUFJQSxJQUFJLENBQUNHLE1BQWpCLEVBQXlCO0FBQzlCRCxnQkFBUSxHQUFHRixJQUFYO0FBQ0FOLGtCQUFVLEdBQUcsRUFBYjtBQUNELE9BSE0sTUFHQTtBQUNMUSxnQkFBUSxHQUFHRSxRQUFRLENBQUNDLElBQXBCO0FBQ0FYLGtCQUFVLEdBQUdNLElBQUksSUFBSSxFQUFyQjtBQUNEOztBQUNELFVBQUloRyxXQUFXLEdBQUcwRixVQUFVLENBQUMxRixXQUE3Qjs7QUFDQSxVQUFJLENBQUNBLFdBQUwsRUFBa0I7QUFDaEIsWUFBSWtHLFFBQVEsS0FBS0UsUUFBUSxDQUFDQyxJQUExQixFQUFnQztBQUM5QnJHLHFCQUFXLEdBQUc7QUFDWnNHLG9CQUFRLEVBQUUsT0FERTtBQUVaQyxrQkFBTSxFQUFFLGlCQUZJO0FBR1pDLDJCQUFlLEVBQUUsT0FITDtBQUlaQyxpQkFBSyxFQUFFLE9BSks7QUFLWkMsa0JBQU0sRUFBRSxPQUxJO0FBTVpDLGlCQUFLLEVBQUUsS0FOSztBQU9aQyxrQkFBTSxFQUFFO0FBUEksV0FBZDtBQVNELFNBVkQsTUFVTztBQUNMNUcscUJBQVcsR0FBRztBQUNadUcsa0JBQU0sRUFBRSxDQURJO0FBRVpFLGlCQUFLLEVBQUUsTUFGSztBQUdaQyxrQkFBTSxFQUFFO0FBSEksV0FBZDtBQUtEO0FBQ0Y7O0FBRUQsVUFBSUcsUUFBUSxHQUFHVCxRQUFRLENBQUNVLGFBQVQsQ0FBdUIsUUFBdkIsQ0FBZixDQWxDNkIsQ0FtQzdCOztBQUNBLFVBQUl0SSxNQUFNLENBQUN1SSxTQUFQLElBQW9CdkksTUFBTSxDQUFDdUksU0FBUCxDQUFpQkMsU0FBakIsQ0FBMkIxRixLQUEzQixDQUFpQyxjQUFqQyxDQUF4QixFQUEwRTtBQUN4RXVGLGdCQUFRLENBQUNJLEtBQVQsR0FBaUIsb0JBQWpCO0FBQ0QsT0FGRCxNQUVPO0FBQ0xKLGdCQUFRLENBQUNJLEtBQVQsR0FBaUIsK0NBQWpCO0FBQ0Q7O0FBQ0RKLGNBQVEsQ0FBQ0ssS0FBVCxDQUFlQyxVQUFmLEdBQTRCLFFBQTVCO0FBQ0FqQixjQUFRLENBQUNrQixXQUFULENBQXFCUCxRQUFyQjtBQUNBQSxjQUFRLENBQUNLLEtBQVQsQ0FBZUMsVUFBZixHQUE0QixJQUE1QjtBQUNBakcsWUFBTSxDQUFDQyxJQUFQLENBQVluQixXQUFaLEVBQXlCcUgsT0FBekIsQ0FDRSxVQUFDeEUsQ0FBRDtBQUFBLGVBQVFnRSxRQUFRLENBQUNLLEtBQVQsQ0FBZXJFLENBQWYsSUFBb0I3QyxXQUFXLENBQUM2QyxDQUFELENBQXZDO0FBQUEsT0FERjs7QUFHQSxVQUFJLENBQUM2QyxVQUFVLENBQUNuRCxNQUFoQixFQUF3QjtBQUN0QixZQUFJbUQsVUFBVSxDQUFDekYsWUFBZixFQUE2QjtBQUMzQnlGLG9CQUFVLENBQUNuRCxNQUFYLEdBQW9CLFdBQXBCO0FBQ0QsU0FGRCxNQUVPO0FBQ0xtRCxvQkFBVSxDQUFDbkQsTUFBWCxHQUFvQixTQUFwQjtBQUNEO0FBQ0Y7O0FBQ0QsVUFBSTtBQUNGLFlBQUkrRSxTQUFTLEdBQUcsSUFBSWpELFdBQUosQ0FBZ0J3QyxRQUFoQixFQUEwQm5CLFVBQTFCLENBQWhCO0FBQ0EsZUFBTzRCLFNBQVA7QUFDRCxPQUhELENBR0UsT0FBT2pJLENBQVAsRUFBVTtBQUNWO0FBQ0E7QUFDQTZHLGdCQUFRLENBQUNxQixXQUFULENBQXFCVixRQUFyQjtBQUNBLGNBQU14SCxDQUFOO0FBQ0Q7QUFDRjs7OzZDQUU4QztBQUFBLFVBQWpCcUcsVUFBaUIsdUVBQUosRUFBSTtBQUM3Q0UscUNBQStCO0FBQy9CLFVBQUlpQixRQUFRLEdBQUdULFFBQVEsQ0FBQ1UsYUFBVCxDQUF1QixRQUF2QixDQUFmO0FBQ0FELGNBQVEsQ0FBQ0ksS0FBVCxHQUFpQiw4QkFBakI7QUFDQUosY0FBUSxDQUFDSyxLQUFULENBQWUvRyxPQUFmO0FBU0FpRyxjQUFRLENBQUNDLElBQVQsQ0FBY2UsV0FBZCxDQUEwQlAsUUFBMUI7O0FBQ0EsVUFBSSxDQUFDbkIsVUFBVSxDQUFDbkQsTUFBaEIsRUFBd0I7QUFDdEJtRCxrQkFBVSxDQUFDbkQsTUFBWCxHQUFvQixXQUFwQjtBQUNEOztBQUNELGFBQU84QixXQUFXLENBQUNtRCxJQUFaLENBQWlCWCxRQUFqQixFQUEyQm5CLFVBQTNCLENBQVA7QUFDRDs7O0FBRUQsdUJBQVlDLFNBQVosRUFBd0M7QUFBQTs7QUFBQSxRQUFqQkQsVUFBaUIsdUVBQUosRUFBSTs7QUFBQTs7QUFDdEM7O0FBRHNDLCtNQXcyRlAsWUFBTTtBQUNyQyxVQUNFLE9BQU9xQixTQUFTLENBQUNVLFlBQVYsQ0FBdUJDLGNBQTlCLEtBQWlELFdBQWpELElBQ0E1TCw2RkFBYSxFQUZmLEVBR0U7QUFDQTtBQUNBaUwsaUJBQVMsQ0FBQ1UsWUFBVixDQUF1QkUsZ0JBQXZCLENBQ0UsY0FERixFQUVFLE1BQUtDLG9CQUZQO0FBSUQsT0FURCxNQVNPO0FBQ0w7QUFDQTtBQUNBLGNBQUtDLDRCQUFMO0FBQ0Q7QUFDRixLQXYzRnVDOztBQUFBLDhNQXkzRlIsWUFBTTtBQUNwQyxVQUNFLE9BQU9kLFNBQVMsQ0FBQ1UsWUFBVixDQUF1QkMsY0FBOUIsS0FBaUQsV0FBakQsSUFDQTVMLDZGQUFhLEVBRmYsRUFHRTtBQUNBO0FBQ0FpTCxpQkFBUyxDQUFDVSxZQUFWLENBQXVCSyxtQkFBdkIsQ0FDRSxjQURGLEVBRUUsTUFBS0Ysb0JBRlA7QUFJRCxPQVRELE1BU087QUFDTDtBQUNBO0FBQ0EsY0FBS0csMkJBQUw7QUFDRDtBQUNGLEtBeDRGdUM7O0FBQUEsaVNBMDRGakIsYUFBWTtBQUNqQztBQUNBLFVBQU1DLFdBQVcsU0FBUyxNQUFLQyxnQkFBTCxFQUExQjs7QUFDQSxZQUFLQyxrQkFBTCxDQUF3QkYsV0FBVyxDQUFDRyxPQUFwQztBQUNELEtBOTRGdUM7O0FBQUEsbU1BZzVGbkIsVUFBQ0MsVUFBRCxFQUFnQjtBQUNuQyxZQUFLQyxJQUFMLENBQVVDLGdIQUFWLEVBQWlEO0FBQy9DQyxjQUFNLEVBQUVELGdIQUR1QztBQUUvQ0Usd0JBQWdCLEVBQUVKO0FBRjZCLE9BQWpEO0FBSUQsS0FyNUZ1Qzs7QUFBQSw2TUF5NUZULFlBQU07QUFDbkMsVUFBSSxNQUFLSyxxQkFBVCxFQUFnQztBQUNoQyxZQUFLQSxxQkFBTCxHQUE2QkMsV0FBVyw4RkFBQyxhQUFZO0FBQ25EO0FBQ0EsWUFBTVYsV0FBVyxTQUFTLE1BQUtDLGdCQUFMLEVBQTFCO0FBQ0EsWUFBTVUsV0FBVyxHQUFHM0ssSUFBSSxDQUFDQyxTQUFMLENBQWUrSixXQUFmLENBQXBCOztBQUNBLFlBQUksTUFBS1ksZ0JBQUwsSUFBeUJELFdBQVcsS0FBSyxNQUFLQyxnQkFBbEQsRUFBb0U7QUFDbEUsZ0JBQUtWLGtCQUFMLENBQXdCRixXQUFXLENBQUNHLE9BQXBDO0FBQ0Q7O0FBQ0QsY0FBS1MsZ0JBQUwsR0FBd0JELFdBQXhCO0FBQ0QsT0FSdUMsR0FRckMsSUFScUMsQ0FBeEM7QUFTRCxLQXA2RnVDOztBQUFBLDRNQXc2RlYsWUFBTTtBQUNsQyxVQUFJLENBQUMsTUFBS0YscUJBQVYsRUFBaUM7QUFDakNJLG1CQUFhLENBQUMsTUFBS0oscUJBQU4sQ0FBYjtBQUNBLFlBQUtBLHFCQUFMLEdBQTZCLElBQTdCO0FBQ0EsWUFBS0csZ0JBQUwsR0FBd0IsSUFBeEI7QUFDRCxLQTc2RnVDOztBQUFBLGlOQSs2RkwsVUFBQ0UsUUFBRCxFQUFjO0FBQy9DO0FBQ0EsVUFBSSxNQUFLQyxzQ0FBTCxDQUE0QyxPQUE1QyxDQUFKLEVBQTBEO0FBQ3hEO0FBQ0Q7O0FBQ0QsVUFBSUQsUUFBSixFQUFjO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsWUFBSSxNQUFLRSx1Q0FBVCxFQUFrRDtBQUNoRCxnQkFBS0MsYUFBTCxDQUFtQixJQUFuQjtBQUNEO0FBQ0YsT0FQRCxNQU9PO0FBQ0wsY0FBS0QsdUNBQUwsR0FBK0MsTUFBS0UsVUFBTCxFQUEvQyxDQURLLENBRUw7QUFDQTtBQUNBOztBQUNBLFlBQUksTUFBS0YsdUNBQVQsRUFBa0Q7QUFDaEQsZ0JBQUtDLGFBQUwsQ0FBbUIsS0FBbkI7QUFDRDtBQUNGO0FBQ0YsS0FwOEZ1Qzs7QUFBQSw2TUFzOEZULFVBQUNFLFFBQUQsRUFBYztBQUMzQztBQUNBLFVBQUksTUFBS0osc0NBQUwsQ0FBNEMsT0FBNUMsQ0FBSixFQUEwRDtBQUN4RDtBQUNEOztBQUNELFlBQUtLLG9CQUFMLEdBQTRCRCxRQUE1QixDQUwyQyxDQU0zQzs7QUFDQSxZQUFLRSw2Q0FBTCxHQVAyQyxDQVEzQzs7O0FBQ0EsVUFBSSxNQUFLRCxvQkFBVCxFQUErQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxZQUFJLE1BQUtFLHNDQUFULEVBQWlEO0FBQy9DLGdCQUFLQyxhQUFMLENBQW1CLElBQW5CO0FBQ0Q7QUFDRixPQVBELE1BT087QUFDTCxjQUFLRCxzQ0FBTCxHQUE4QyxNQUFLRSxVQUFMLEVBQTlDOztBQUNBLGNBQUtELGFBQUwsQ0FBbUIsS0FBbkI7QUFDRDtBQUNGLEtBMTlGdUM7O0FBRXRDN0QsY0FBVSxDQUFDaEQsY0FBWCxHQUE0QjJCLFdBQVcsQ0FBQ0ksT0FBWixFQUE1QjtBQUNBLFVBQUtnRixPQUFMLEdBQWU5RCxTQUFmO0FBQ0EsVUFBSytELGVBQUwsR0FBdUJoRSxVQUFVLENBQUNuRCxNQUFYLEtBQXNCLE1BQXRCLElBQWdDLENBQUMsTUFBS2tILE9BQTdEO0FBQ0EsVUFBS2pKLGFBQUwsR0FBcUJtSixzQkFBc0IsRUFBM0M7O0FBQ0EsUUFBSSxNQUFLRCxlQUFULEVBQTBCO0FBQ3hCbEwsWUFBTSxDQUFDb0wsa0JBQVAsR0FBNEIsTUFBS3BKLGFBQWpDO0FBQ0Q7O0FBRUQsUUFBSWtGLFVBQVUsQ0FBQzlGLGNBQVgsS0FBOEJpSyxTQUFsQyxFQUE2QztBQUMzQyxVQUFJLE1BQUtILGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FBYyxxREFBZDtBQUNELE9BRkQsTUFFTztBQUNMLGNBQUt1SyxlQUFMLEdBQXVCLENBQUMsQ0FBQ3BFLFVBQVUsQ0FBQzlGLGNBQXBDO0FBQ0Q7QUFDRixLQU5ELE1BTU87QUFDTCxZQUFLa0ssZUFBTCxHQUF1QixJQUF2QjtBQUNEOztBQUVELFFBQUlwRSxVQUFVLENBQUM3RixtQkFBWCxLQUFtQ2dLLFNBQXZDLEVBQWtEO0FBQ2hELFVBQUksTUFBS0gsZUFBVCxFQUEwQjtBQUN4QnBLLGVBQU8sQ0FBQ0MsS0FBUixDQUNFLDBEQURGO0FBR0QsT0FKRCxNQUlPO0FBQ0wsY0FBS3dLLG9CQUFMLEdBQTRCLENBQUMsQ0FBQ3JFLFVBQVUsQ0FBQzdGLG1CQUF6QztBQUNEO0FBQ0YsS0FSRCxNQVFPO0FBQ0wsWUFBS2tLLG9CQUFMLEdBQTRCLElBQTVCO0FBQ0Q7O0FBRUQsUUFBSXJFLFVBQVUsQ0FBQy9ILGtCQUFYLEtBQWtDa00sU0FBdEMsRUFBaUQ7QUFDL0MsVUFBSSxNQUFLSCxlQUFULEVBQTBCO0FBQ3hCcEssZUFBTyxDQUFDQyxLQUFSLENBQWMseURBQWQ7QUFDRCxPQUZELE1BRU87QUFDTCxjQUFLeUssbUJBQUwsR0FBMkJ0RSxVQUFVLENBQUMvSCxrQkFBdEM7QUFDRDtBQUNGLEtBTkQsTUFNTztBQUNMLFlBQUtxTSxtQkFBTCxHQUEyQixFQUEzQjtBQUNEOztBQUVELFFBQUl0RSxVQUFVLENBQUM5SCxpQkFBWCxLQUFpQ2lNLFNBQXJDLEVBQWdEO0FBQzlDLFVBQUksTUFBS0gsZUFBVCxFQUEwQjtBQUN4QnBLLGVBQU8sQ0FBQ0MsS0FBUixDQUFjLHdEQUFkO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsY0FBSzBLLGtCQUFMLEdBQTBCdkUsVUFBVSxDQUFDOUgsaUJBQXJDO0FBQ0Q7QUFDRixLQU5ELE1BTU87QUFDTCxZQUFLcU0sa0JBQUwsR0FBMEIsRUFBMUI7QUFDRDs7QUFFRCxRQUFJdkUsVUFBVSxDQUFDaEcsaUJBQVgsS0FBaUNtSyxTQUFyQyxFQUFnRDtBQUM5QyxVQUFJLE1BQUtILGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FBYyx3REFBZDtBQUNELE9BRkQsTUFFTztBQUNMLGNBQUsySyxrQkFBTCxHQUEwQixDQUFDLENBQUN4RSxVQUFVLENBQUNoRyxpQkFBdkM7QUFDRDtBQUNGLEtBTkQsTUFNTztBQUNMLFlBQUt3SyxrQkFBTCxHQUEwQixLQUExQjtBQUNEOztBQUVELFFBQUl4RSxVQUFVLENBQUMxRCxlQUFmLEVBQWdDO0FBQzlCLFVBQUksTUFBSzBILGVBQVQsRUFBMEI7QUFDeEIsY0FBS1MsZ0JBQUwsR0FBd0J6RSxVQUFVLENBQUMxRCxlQUFuQztBQUNELE9BRkQsTUFFTztBQUNMMUMsZUFBTyxDQUFDQyxLQUFSLENBQWMsdURBQWQ7QUFDRDtBQUNGLEtBTkQsTUFNTztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFLNEssZ0JBQUwsR0FBd0IsRUFBeEI7QUFDRDs7QUFFRCxVQUFLQyxjQUFMLEdBQXNCLEVBQXRCOztBQUNBLFFBQUkxRSxVQUFVLENBQUN0RCxhQUFmLEVBQThCO0FBQzVCO0FBQ0EsWUFBS2dJLGNBQUwsR0FBc0IxRSxVQUFVLENBQUN0RCxhQUFqQztBQUNEOztBQUVELFVBQUtpSSxrQkFBTCxDQUF3QjNFLFVBQXhCOztBQUNBLFVBQUtBLFVBQUwscUJBQXVCQSxVQUF2QjtBQUNBLFVBQUs0RSxpQkFBTCxHQUF5QixNQUFLWixlQUFMLEdBQ3JCLElBQUlhLDBEQUFKLEVBRHFCLEdBRXJCLElBRko7QUFHQSxVQUFLQyxVQUFMLEdBQWtCQywwRkFBbEIsQ0F4RnNDLENBd0ZIOztBQUNuQyxVQUFLQyxrQkFBTCxHQUEwQixLQUExQixDQXpGc0MsQ0F5Rkw7O0FBQ2pDLFVBQUtDLFlBQUwsR0FBb0I7QUFBRUMsWUFBTSxFQUFFQywrRkFBb0JBO0FBQTlCLEtBQXBCO0FBQ0EsVUFBS0Msb0JBQUwsR0FBNEJqUCxxQkFBNUI7QUFDQSxVQUFLa1Asc0JBQUwsR0FBOEIzUCw0QkFBOUI7QUFDQSxVQUFLNFAsYUFBTCxHQUFxQixFQUFyQjtBQUNBLFVBQUtDLGtCQUFMLEdBQTBCaFAsd0JBQTFCO0FBQ0EsVUFBS2lQLGVBQUwsR0FBdUIsRUFBdkI7QUFDQSxVQUFLQyxvQkFBTCxHQUE0QixFQUE1QjtBQUNBLFVBQUtDLGNBQUwsR0FBc0IsRUFBdEIsQ0FqR3NDLENBaUdaOztBQUMxQixVQUFLQyxRQUFMLEdBQWdCO0FBQUVDLGVBQVMsRUFBRSxNQUFiO0FBQXFCQyxhQUFPLEVBQUU7QUFBOUIsS0FBaEI7QUFDQSxVQUFLQyxjQUFMLEdBQXNCLEVBQXRCO0FBQ0EsVUFBS0MsWUFBTCxHQUFvQkMsaUVBQWMsRUFBbEM7QUFDQSxVQUFLQyxlQUFMLEdBQXVCN1AsNkZBQWEsS0FDaEMsSUFBSThQLGtIQUFKLEVBRGdDLEdBRWhDLElBQUlDLDBHQUFKLEVBRkosQ0FyR3NDLENBeUd0Qzs7QUFDQSxRQUFJLE1BQUtwQyxPQUFULEVBQWtCO0FBQ2hCLFVBQUksTUFBS0EsT0FBTCxDQUFhcUMsaUJBQWpCLEVBQW9DO0FBQ2xDO0FBQ0EsY0FBS3JDLE9BQUwsQ0FBYTlCLGdCQUFiLENBQThCLGtCQUE5QixFQUFrRCxVQUFDdEksQ0FBRCxFQUFPO0FBQ3ZELGNBQUkrRyxRQUFRLENBQUMyRixpQkFBVCxLQUErQixNQUFLdEMsT0FBeEMsRUFBaUQ7QUFDL0Msa0JBQUtwQixJQUFMLENBQVUyRCxpR0FBVixFQUFrQztBQUNoQ3pELG9CQUFNLEVBQUV5RCxpR0FBc0JBO0FBREUsYUFBbEM7O0FBR0Esa0JBQUtDLHdCQUFMLENBQThCO0FBQUUxRCxvQkFBTSxFQUFFeUQsaUdBQXNCQTtBQUFoQyxhQUE5QjtBQUNELFdBTEQsTUFLTztBQUNMLGtCQUFLM0QsSUFBTCxDQUFVNkQsc0dBQVYsRUFBdUM7QUFDckMzRCxvQkFBTSxFQUFFMkQsc0dBQTJCQTtBQURFLGFBQXZDOztBQUdBLGtCQUFLRCx3QkFBTCxDQUE4QjtBQUM1QjFELG9CQUFNLEVBQUUyRCxzR0FBMkJBO0FBRFAsYUFBOUI7QUFHRDtBQUNGLFNBZEQ7QUFlRCxPQWpCRCxNQWlCTyxJQUFJLE1BQUt6QyxPQUFMLENBQWEwQyx1QkFBakIsRUFBMEM7QUFDL0M7QUFDQSxjQUFLMUMsT0FBTCxDQUFhOUIsZ0JBQWIsQ0FBOEIsd0JBQTlCLEVBQXdELFVBQUN0SSxDQUFELEVBQU87QUFDN0QsY0FBSStHLFFBQVEsQ0FBQ2dHLHVCQUFULEtBQXFDLE1BQUszQyxPQUE5QyxFQUF1RDtBQUNyRCxrQkFBS3BCLElBQUwsQ0FBVTJELGlHQUFWLEVBQWtDO0FBQ2hDekQsb0JBQU0sRUFBRXlELGlHQUFzQkE7QUFERSxhQUFsQzs7QUFHQSxrQkFBS0Msd0JBQUwsQ0FBOEI7QUFBRTFELG9CQUFNLEVBQUV5RCxpR0FBc0JBO0FBQWhDLGFBQTlCO0FBQ0QsV0FMRCxNQUtPO0FBQ0wsa0JBQUszRCxJQUFMLENBQVU2RCxzR0FBVixFQUF1QztBQUNyQzNELG9CQUFNLEVBQUUyRCxzR0FBMkJBO0FBREUsYUFBdkM7O0FBR0Esa0JBQUtELHdCQUFMLENBQThCO0FBQzVCMUQsb0JBQU0sRUFBRTJELHNHQUEyQkE7QUFEUCxhQUE5QjtBQUdEO0FBQ0YsU0FkRDtBQWVEO0FBQ0YsS0E5SXFDLENBZ0p0Qzs7O0FBQ0EsUUFBSXBRLDZGQUFhLEVBQWpCLEVBQXFCO0FBQ25CLFVBQU11USxXQUFXLEdBQUcsTUFBS0EsV0FBTCxFQUFwQjs7QUFDQSxVQUNFLEVBQ0VBLFdBQVcsQ0FBQ0MsMkJBQVosSUFDQUQsV0FBVyxDQUFDRSw4QkFEWixJQUVBRixXQUFXLENBQUNHLCtCQUZaLElBR0FILFdBQVcsQ0FBQ0ksa0NBSmQsQ0FERixFQU9FO0FBQ0FuTixlQUFPLENBQUNvTixJQUFSLENBQ0UsZ0dBREY7QUFHRCxPQWJrQixDQWNuQjs7O0FBQ0EsWUFBS3RELG9CQUFMLEdBQTRCLElBQTVCO0FBQ0FpRCxpQkFBVyxDQUFDQywyQkFBWixDQUNFLE1BQUtLLDRCQURQLEVBaEJtQixDQW1CbkI7O0FBQ0FOLGlCQUFXLENBQUNHLCtCQUFaLENBQ0UsTUFBS0ksZ0NBRFA7QUFHRCxLQXhLcUMsQ0EwS3RDO0FBQ0E7QUFDQTs7O0FBQ0EsUUFBSSxNQUFLbEQsZUFBVCxFQUEwQjtBQUN4QixZQUFLbUQsOEJBQUw7QUFDRDs7QUFFRCxVQUFLbEIsZUFBTCxDQUFxQm1CLHFDQUFyQixDQUNFLE1BQUtDLDRCQURQLEVBRUUsTUFBS3RCLFlBRlA7O0FBakxzQztBQXNMdkMsRyxDQUVEO0FBQ0E7QUFDQTs7Ozs7O2lIQUVnQjtBQUNkLFlBQUk7QUFDRixjQUFJLENBQUN1Qiw2RkFBRCxFQUFxQkMsOEZBQXJCLEVBQTBDaE8sUUFBMUMsQ0FBbUQsS0FBS3VMLFVBQXhELENBQUosRUFBeUU7QUFDdkUsa0JBQU0sS0FBSzBDLEtBQUwsRUFBTjtBQUNEO0FBQ0YsU0FKRCxDQUlFLE9BQU83TixDQUFQLEVBQVUsQ0FBRTs7QUFDZCxZQUFJOE4sTUFBTSxHQUFHLEtBQUsxRCxPQUFsQjs7QUFDQSxZQUFJMEQsTUFBSixFQUFZO0FBQ1YsY0FBSUMsTUFBTSxHQUFHRCxNQUFNLENBQUNFLGFBQXBCOztBQUNBLGNBQUlELE1BQUosRUFBWTtBQUNWQSxrQkFBTSxDQUFDN0YsV0FBUCxDQUFtQjRGLE1BQW5CO0FBQ0Q7QUFDRjs7QUFDRCxhQUFLeEIsZUFBTCxDQUFxQjJCLGNBQXJCLENBQW9DLEtBQUtQLDRCQUF6QyxFQWJjLENBZWQ7OztBQUNBLFlBQUlqUiw2RkFBYSxFQUFqQixFQUFxQjtBQUNuQixjQUFNdVEsV0FBVyxHQUFHLEtBQUtBLFdBQUwsRUFBcEI7QUFDQUEscUJBQVcsQ0FBQ0UsOEJBQVosQ0FDRSxLQUFLSSw0QkFEUDtBQUdBTixxQkFBVyxDQUFDSSxrQ0FBWixDQUNFLEtBQUtHLGdDQURQO0FBR0QsU0F4QmEsQ0EwQmQ7OztBQUNBLFlBQUksS0FBS2xELGVBQVQsRUFBMEI7QUFDeEIsZUFBSzZELDZCQUFMO0FBQ0Q7O0FBRUQsYUFBS0MseUJBQUw7QUFDRCxPOzs7Ozs7Ozs7O21DQUV3QztBQUFBLFVBQS9CcE4sU0FBK0IsU0FBL0JBLFNBQStCO0FBQUEsVUFBcEJGLE9BQW9CLFNBQXBCQSxPQUFvQjtBQUFBLFVBQVhDLE9BQVcsU0FBWEEsT0FBVztBQUN2Q3lGLHFDQUErQjtBQUMvQixXQUFLcUcsd0JBQUwsQ0FBOEI7QUFDNUIxRCxjQUFNLEVBQUVrRixnR0FEb0I7QUFFNUJ2TixlQUFPLEVBQUUsS0FBS3dOLFdBQUwsQ0FBaUJ4TixPQUFqQixDQUZtQjtBQUc1QkUsaUJBQVMsRUFBVEEsU0FINEI7QUFJNUJELGVBQU8sRUFBUEE7QUFKNEIsT0FBOUI7QUFNQSxhQUFPLElBQVA7QUFDRDs7OzZCQUVRO0FBQ1B5RixxQ0FBK0I7QUFDL0IsYUFBTyxLQUFLNkQsT0FBWjtBQUNEOzs7bUNBRWM7QUFDYjtBQUNBO0FBQ0EsYUFBTyxLQUFLZSxVQUFaO0FBQ0Q7OztrQ0FFYTtBQUNaLFVBQUksQ0FBQyxLQUFLZCxlQUFWLEVBQTJCO0FBQ3pCLGNBQU0sSUFBSTNELEtBQUosQ0FDSiw0REFESSxDQUFOO0FBR0Q7O0FBRUQsYUFBTyxLQUFLNEUsWUFBWjtBQUNEOzs7bUNBRWM7QUFDYixhQUFPLEtBQUtLLGFBQVo7QUFDRDs7O3dDQUVtQjtBQUNsQixhQUFPLEtBQUtDLGtCQUFaO0FBQ0Q7OzswQ0FFcUI7QUFDcEIsVUFBSSxDQUFDLEtBQUt2QixlQUFWLEVBQTJCO0FBQ3pCLGNBQU0sSUFBSTNELEtBQUosQ0FDSixvRUFESSxDQUFOO0FBR0Q7O0FBRUQsYUFBTyxLQUFLb0Ysb0JBQVo7QUFDRDs7O2tEQUU2QndDLFMsRUFBV2pJLFUsRUFBWTtBQUNuRCxXQUFLLElBQUlrSSxJQUFULElBQWlCbEksVUFBakIsRUFBNkI7QUFDM0IsWUFBSSxDQUFDL0MsaUJBQWlCLENBQUNpTCxJQUFELENBQXRCLEVBQThCO0FBQzVCLGdCQUFNLElBQUk3SCxLQUFKLG1EQUFxRDZILElBQXJELEVBQU47QUFDRDs7QUFDRCxZQUFJakwsaUJBQWlCLENBQUNpTCxJQUFELENBQWpCLENBQXdCL1AsUUFBNUIsRUFBc0M7QUFDcEMsY0FDRSxDQUFDOEUsaUJBQWlCLENBQUNpTCxJQUFELENBQWpCLENBQXdCL1AsUUFBeEIsQ0FDQzZILFVBQVUsQ0FBQ2tJLElBQUQsQ0FEWCxFQUVDLElBRkQsRUFHQyxLQUFLNUMsYUFBTCxDQUFtQjJDLFNBQW5CLENBSEQsQ0FESCxFQU1FO0FBQ0Esa0JBQU0sSUFBSTVILEtBQUosQ0FBVXBELGlCQUFpQixDQUFDaUwsSUFBRCxDQUFqQixDQUF3QjdQLElBQWxDLENBQU47QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7O3NDQUVpQjRQLFMsRUFBV2pJLFUsRUFBWTtBQUN2QyxVQUNFLEtBQUtzRixhQUFMLENBQW1CNkMsS0FBbkIsSUFDQSxLQUFLN0MsYUFBTCxDQUFtQjZDLEtBQW5CLENBQXlCQyxVQUF6QixLQUF3Q0gsU0FGMUMsRUFHRTtBQUNBQSxpQkFBUyxHQUFHLE9BQVo7QUFDRDs7QUFDRCxVQUFJQSxTQUFTLElBQUlqSSxVQUFqQixFQUE2QjtBQUMzQixhQUFLcUksNkJBQUwsQ0FBbUNKLFNBQW5DLEVBQThDakksVUFBOUM7QUFDQSxhQUFLdUcsd0JBQUwsQ0FBOEI7QUFDNUIxRCxnQkFBTSxFQUFFeUYsMEdBRG9CO0FBRTVCM1EsWUFBRSxFQUFFc1EsU0FGd0I7QUFHNUJqSSxvQkFBVSxFQUFWQTtBQUg0QixTQUE5QjtBQUtEOztBQUNELGFBQU8sSUFBUDtBQUNEOzs7dUNBRWtCQSxVLEVBQVk7QUFDN0IsVUFBTXVJLE9BQU8sR0FDWCxLQUFLakQsYUFBTCxDQUFtQjZDLEtBQW5CLElBQTRCLEtBQUs3QyxhQUFMLENBQW1CNkMsS0FBbkIsQ0FBeUJDLFVBRHZEOztBQUVBLFdBQUssSUFBSUgsU0FBVCxJQUFzQmpJLFVBQXRCLEVBQWtDO0FBQ2hDLFlBQUlpSSxTQUFTLEtBQUtNLE9BQWxCLEVBQTJCO0FBQ3pCTixtQkFBUyxHQUFHLE9BQVo7QUFDRDs7QUFDRCxZQUFJQSxTQUFTLElBQUlqSSxVQUFVLENBQUNpSSxTQUFELENBQTNCLEVBQXdDO0FBQ3RDLGVBQUtJLDZCQUFMLENBQW1DSixTQUFuQyxFQUE4Q2pJLFVBQVUsQ0FBQ2lJLFNBQUQsQ0FBeEQ7QUFDRDtBQUNGOztBQUNELFdBQUsxQix3QkFBTCxDQUE4QjtBQUM1QjFELGNBQU0sRUFBRTJGLDJHQURvQjtBQUU1QkMsb0JBQVksRUFBRXpJO0FBRmMsT0FBOUI7QUFJQSxhQUFPLElBQVA7QUFDRDs7OztrSUFFcUQ7QUFBQTs7QUFBQSxZQUF2QnJJLEVBQXVCLHVFQUFsQixFQUFrQjtBQUFBLFlBQWQrUSxPQUFjLHVFQUFKLEVBQUk7O0FBQ3BEO0FBQ0EsWUFBSSxDQUFDLEtBQUsxRSxlQUFWLEVBQTJCO0FBQ3pCLGdCQUFNLElBQUkzRCxLQUFKLENBQ0oseUVBREksQ0FBTjtBQUdELFNBTm1ELENBUXBEOzs7QUFDQSxZQUFJLEtBQUt5RSxVQUFMLEtBQW9Cd0MsNkZBQXhCLEVBQTRDO0FBQzFDLGdCQUFNLElBQUlqSCxLQUFKLENBQ0osK0RBREksQ0FBTjtBQUdELFNBYm1ELENBZXBEOzs7QUFDQSxZQUFJLEVBQUUsT0FBTzFJLEVBQVAsS0FBYyxRQUFkLElBQTBCLHNFQUFPK1EsT0FBUCxNQUFtQixRQUEvQyxDQUFKLEVBQThEO0FBQzVELGdCQUFNLElBQUlySSxLQUFKLENBQ0osd0VBREksQ0FBTjtBQUdEOztBQUVELGVBQU8sSUFBSXNJLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFBcUI7QUFDdEMsY0FBTTFMLENBQUMsR0FBRyxTQUFKQSxDQUFJLENBQUMyTCxHQUFELEVBQVM7QUFDakIsZ0JBQUlBLEdBQUcsQ0FBQ2pQLEtBQVIsRUFBZTtBQUNiZ1Asb0JBQU0sQ0FBQ0MsR0FBRyxDQUFDalAsS0FBTCxDQUFOO0FBQ0Q7O0FBRUQsZ0JBQUksQ0FBQ2lQLEdBQUcsQ0FBQ25SLEVBQVQsRUFBYTtBQUNYa1Isb0JBQU0sQ0FBQyxJQUFJeEksS0FBSixDQUFVLDZDQUFWLENBQUQsQ0FBTjtBQUNEOztBQUVEdUksbUJBQU8sQ0FBQztBQUFFalIsZ0JBQUUsRUFBRW1SLEdBQUcsQ0FBQ25SO0FBQVYsYUFBRCxDQUFQO0FBQ0QsV0FWRDs7QUFXQSxnQkFBSSxDQUFDNE8sd0JBQUwsQ0FDRTtBQUNFMUQsa0JBQU0sRUFBRWtHLGtIQURWO0FBRUVwUixjQUFFLEVBQUZBLEVBRkY7QUFHRStRLG1CQUFPLEVBQVBBO0FBSEYsV0FERixFQU1FdkwsQ0FORjtBQVFELFNBcEJNLENBQVA7QUFxQkQsTzs7Ozs7Ozs7Ozs7bUlBRWlEO0FBQUE7O0FBQUEsWUFBbEI2TCxXQUFrQix1RUFBSixFQUFJOztBQUNoRDtBQUNBLFlBQUksQ0FBQyxLQUFLaEYsZUFBVixFQUEyQjtBQUN6QixnQkFBTSxJQUFJM0QsS0FBSixDQUNKLDBFQURJLENBQU47QUFHRCxTQU4rQyxDQVFoRDs7O0FBQ0EsWUFBSSxLQUFLeUUsVUFBTCxLQUFvQndDLDZGQUF4QixFQUE0QztBQUMxQyxnQkFBTSxJQUFJakgsS0FBSixDQUNKLGdFQURJLENBQU47QUFHRCxTQWIrQyxDQWVoRDs7O0FBQ0EsWUFBSSxzRUFBTzJJLFdBQVAsTUFBdUIsUUFBM0IsRUFBcUM7QUFDbkMsZ0JBQU0sSUFBSTNJLEtBQUosQ0FDSixnRkFESSxDQUFOO0FBR0Q7O0FBRUQsZUFBTyxJQUFJc0ksT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUN0QyxjQUFNMUwsQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNqQixnQkFBSUEsR0FBRyxDQUFDalAsS0FBUixFQUFlO0FBQ2JnUCxvQkFBTSxDQUFDQyxHQUFHLENBQUNqUCxLQUFMLENBQU47QUFDRDs7QUFFRCxnQkFBSSxDQUFDaVAsR0FBRyxDQUFDRyxHQUFULEVBQWM7QUFDWkosb0JBQU0sQ0FBQyxJQUFJeEksS0FBSixDQUFVLDhDQUFWLENBQUQsQ0FBTjtBQUNEOztBQUVEdUksbUJBQU8sQ0FBQztBQUFFSyxpQkFBRyxFQUFFSCxHQUFHLENBQUNHO0FBQVgsYUFBRCxDQUFQO0FBQ0QsV0FWRDs7QUFXQSxnQkFBSSxDQUFDMUMsd0JBQUwsQ0FDRTtBQUNFMUQsa0JBQU0sRUFBRXFHLG1IQURWO0FBRUVGLHVCQUFXLEVBQVhBO0FBRkYsV0FERixFQUtFN0wsQ0FMRjtBQU9ELFNBbkJNLENBQVA7QUFvQkQsTzs7Ozs7Ozs7Ozs7dUhBS087QUFBQTs7QUFBQSx3RkFBSixFQUFJO0FBQUEsaUNBRk4rSCxNQUVNO0FBQUEsWUFGTkEsTUFFTSw2QkFGRztBQUFFaUUsZUFBSyxFQUFFQyxrR0FBdUJBO0FBQWhDLFNBRUg7QUFBQSwrQkFETnRLLElBQ007QUFBQSxZQUROQSxJQUNNLDJCQURDLEVBQ0Q7O0FBQ047QUFDQSxZQUFJLENBQUMsS0FBS2tGLGVBQVYsRUFBMkI7QUFDekIsZ0JBQU0sSUFBSTNELEtBQUosQ0FDSiw4REFESSxDQUFOO0FBR0QsU0FOSyxDQVFOO0FBQ0E7OztBQUNBLFlBQUksS0FBS3lFLFVBQUwsS0FBb0J3Qyw2RkFBeEIsRUFBNEM7QUFDMUMsZ0JBQU0sSUFBSWpILEtBQUosQ0FBVSxvREFBVixDQUFOO0FBQ0Q7O0FBRUQsZUFBTyxJQUFJc0ksT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUN0QyxjQUFNMUwsQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNqQixnQkFBSUEsR0FBRyxDQUFDalAsS0FBUixFQUFlO0FBQ2JnUCxvQkFBTSxDQUFDQyxHQUFHLENBQUNqUCxLQUFMLENBQU47QUFDRDs7QUFFRCxnQkFBSSxDQUFDaVAsR0FBRyxDQUFDNUQsTUFBVCxFQUFpQjtBQUNmMkQsb0JBQU0sQ0FBQyxJQUFJeEksS0FBSixDQUFVLGtDQUFWLENBQUQsQ0FBTjtBQUNEOztBQUVEdUksbUJBQU8sQ0FBQztBQUFFMUQsb0JBQU0sRUFBRTRELEdBQUcsQ0FBQzVELE1BQWQ7QUFBc0JtRSxxQkFBTyxFQUFFUCxHQUFHLENBQUNPO0FBQW5DLGFBQUQsQ0FBUDtBQUNELFdBVkQ7O0FBV0EsZ0JBQUksQ0FBQzlDLHdCQUFMLENBQ0U7QUFDRTFELGtCQUFNLEVBQUV5RyxzR0FEVjtBQUVFcEUsa0JBQU0sRUFBTkEsTUFGRjtBQUdFcEcsZ0JBQUksRUFBSkE7QUFIRixXQURGLEVBTUUzQixDQU5GO0FBUUQsU0FwQk0sQ0FBUDtBQXFCRCxPOzs7Ozs7Ozs7O2lDQUVZO0FBQ1gsVUFBSSxLQUFLbUksYUFBTCxDQUFtQjZDLEtBQXZCLEVBQThCO0FBQzVCLGVBQU8sS0FBSzdDLGFBQUwsQ0FBbUI2QyxLQUFuQixDQUF5QjNRLEtBQWhDO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7OztpQ0FFWTtBQUNYLFVBQUksS0FBSzhOLGFBQUwsQ0FBbUI2QyxLQUF2QixFQUE4QjtBQUM1QixlQUFPLEtBQUs3QyxhQUFMLENBQW1CNkMsS0FBbkIsQ0FBeUIxUSxLQUFoQztBQUNEOztBQUNELGFBQU8sSUFBUDtBQUNEOzs7a0NBRWE4UixJLEVBQU07QUFDbEIsV0FBS2hELHdCQUFMLENBQThCO0FBQzVCMUQsY0FBTSxFQUFFMkcsbUdBRG9CO0FBRTVCQyxhQUFLLEVBQUVGO0FBRnFCLE9BQTlCO0FBSUEsYUFBTyxJQUFQO0FBQ0Q7OztrQ0FFYUEsSSxFQUFNO0FBQ2xCLFdBQUtoRCx3QkFBTCxDQUE4QjtBQUM1QjFELGNBQU0sRUFBRTZHLG1HQURvQjtBQUU1QkQsYUFBSyxFQUFFRjtBQUZxQixPQUE5QjtBQUlBLGFBQU8sSUFBUDtBQUNELEssQ0FFRDtBQUNBO0FBQ0E7Ozs7OzBIQUN5QjVSLEUsRUFBMEM7QUFBQTs7QUFBQSx3RkFBSixFQUFJO0FBQUEsMENBQXBDZ1MsbUJBQW9DO0FBQUEsWUFBcENBLG1CQUFvQyxzQ0FBZCxLQUFjOztBQUNqRTtBQUNBLFlBQUksQ0FBQyxLQUFLM0YsZUFBVixFQUEyQjtBQUN6QixnQkFBTSxJQUFJM0QsS0FBSixDQUNKLHlEQURJLENBQU47QUFHRCxTQU5nRSxDQVFqRTtBQUNBO0FBQ0E7OztBQUNBLHNGQUFlMUksRUFBZjtBQUNFO0FBQ0EsZUFBSyxRQUFMO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBTyxJQUFJZ1IsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBYTtBQUM5QixrQkFBTXpMLENBQUMsR0FBRyxTQUFKQSxDQUFJLENBQUMyTCxHQUFELEVBQVM7QUFDakJGLHVCQUFPLENBQUNFLEdBQUcsQ0FBQ3hNLGVBQUwsQ0FBUDtBQUNELGVBRkQ7O0FBR0Esb0JBQUksQ0FBQ2lLLHdCQUFMLENBQ0U7QUFDRTFELHNCQUFNLEVBQUUrRywrSEFEVjtBQUVFalMsa0JBQUUsRUFBRkEsRUFGRjtBQUdFZ1MsbUNBQW1CLEVBQW5CQTtBQUhGLGVBREYsRUFNRXhNLENBTkY7QUFRRCxhQVpNLENBQVA7QUFhRjs7QUFDQSxlQUFLLFdBQUw7QUFDRSxtQkFBTyxLQUFLc0gsZ0JBQVo7O0FBQ0Y7QUFDRSxrQkFBTSxJQUFJcEUsS0FBSixDQUNKLDhHQURJLENBQU47QUF4Qko7QUE0QkQsTzs7Ozs7Ozs7Ozs7NkhBRTJCL0QsZSxFQUFpQjtBQUFBOztBQUMzQztBQUNBLFlBQUksQ0FBQyxLQUFLMEgsZUFBVixFQUEyQjtBQUN6QixnQkFBTSxJQUFJM0QsS0FBSixDQUNKLDREQURJLENBQU47QUFHRCxTQU4wQyxDQVEzQzs7O0FBQ0EsWUFDRSxDQUFDOUQsdUJBQXVCLENBQUNELGVBQUQsRUFBa0I7QUFDeENFLGlDQUF1QixFQUFFO0FBRGUsU0FBbEIsQ0FEMUIsRUFJRTtBQUNBLGdCQUFNLElBQUk2RCxLQUFKLENBQ0o1RCxnQ0FBZ0MsQ0FBQztBQUFFRCxtQ0FBdUIsRUFBRTtBQUEzQixXQUFELENBRDVCLENBQU47QUFHRCxTQWpCMEMsQ0FtQjNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsWUFBSSxLQUFLc0ksVUFBTCxLQUFvQndDLDZGQUF4QixFQUE0QztBQUMxQyxnQkFBTSxJQUFJakgsS0FBSixDQUNKLG9JQURJLENBQU47QUFHRCxTQTdCMEMsQ0ErQjNDOzs7QUFDQSxlQUFPLElBQUlzSSxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFhO0FBQzlCLGNBQU16TCxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDMkwsR0FBRCxFQUFTO0FBQ2pCRixtQkFBTyxDQUFDO0FBQUV0TSw2QkFBZSxFQUFFd00sR0FBRyxDQUFDeE07QUFBdkIsYUFBRCxDQUFQO0FBQ0QsV0FGRDs7QUFHQSxnQkFBSSxDQUFDaUssd0JBQUwsQ0FDRTtBQUNFMUQsa0JBQU0sRUFBRWdILCtHQURWO0FBRUV2TiwyQkFBZSxFQUFmQTtBQUZGLFdBREYsRUFLRWEsQ0FMRjtBQU9ELFNBWE0sQ0FBUDtBQVlELE87Ozs7Ozs7UUFFRDtBQUNBO0FBQ0E7QUFDQTs7Ozt1Q0FDbUI7QUFBQTs7QUFDakIsYUFBTyxJQUFJd0wsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBYTtBQUM5QkEsZUFBTyxDQUFDLE1BQUksQ0FBQ2xFLGNBQU4sQ0FBUDtBQUNELE9BRk0sQ0FBUDtBQUdEOzs7OzJIQUV5QmhJLGEsRUFBZTtBQUFBOztBQUN2QztBQUNBLGVBQU8sSUFBSWlNLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFBcUI7QUFDdEMsY0FBSSxDQUFDbE0scUJBQXFCLENBQUNELGFBQUQsQ0FBMUIsRUFBMkM7QUFDekM5QyxtQkFBTyxDQUFDQyxLQUFSLENBQWMrQyw4QkFBOEIsRUFBNUM7QUFDQWlNLGtCQUFNLENBQUNqTSw4QkFBOEIsRUFBL0IsQ0FBTjtBQUNBO0FBQ0Q7O0FBRUQsY0FBTU8sQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNqQixnQkFBSUEsR0FBRyxDQUFDalAsS0FBUixFQUFlO0FBQ2JnUCxvQkFBTSxDQUFDQyxHQUFHLENBQUNqUCxLQUFMLENBQU47QUFDRCxhQUZELE1BRU87QUFDTCtPLHFCQUFPLENBQUM7QUFBRWxNLDZCQUFhLEVBQUVvTSxHQUFHLENBQUNwTTtBQUFyQixlQUFELENBQVA7QUFDRDtBQUNGLFdBTkQ7O0FBT0EsZ0JBQUksQ0FBQzZKLHdCQUFMLENBQ0U7QUFDRTFELGtCQUFNLEVBQUVpSCw2R0FEVjtBQUVFcE4seUJBQWEsRUFBYkE7QUFGRixXQURGLEVBS0VTLENBTEY7QUFPRCxTQXJCTSxDQUFQO0FBc0JELE87Ozs7Ozs7Ozs7d0NBRXVDO0FBQUEsVUFBekI0TSxHQUF5QixTQUF6QkEsR0FBeUI7QUFBQSxVQUFwQkMsZ0JBQW9CLFNBQXBCQSxnQkFBb0I7QUFDdEM5SixxQ0FBK0I7QUFDL0IsV0FBS3FHLHdCQUFMLENBQThCO0FBQzVCMUQsY0FBTSxFQUFFb0gscUdBRG9CO0FBRTVCRixXQUFHLEVBQUhBLEdBRjRCO0FBRzVCQyx3QkFBZ0IsRUFBaEJBO0FBSDRCLE9BQTlCO0FBS0EsYUFBTyxJQUFQO0FBQ0Q7OzttQ0FFYztBQUFBOztBQUNiOUoscUNBQStCO0FBQy9CLGFBQU8sSUFBSXlJLE9BQUo7QUFBQSxtR0FBWSxXQUFPQyxPQUFQLEVBQW1CO0FBQ3BDLGNBQU16TCxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDMkwsR0FBRCxFQUFTO0FBQ2pCLG1CQUFPQSxHQUFHLENBQUNqRyxNQUFYO0FBQ0EsbUJBQU9pRyxHQUFHLENBQUNvQixhQUFYO0FBQ0F0QixtQkFBTyxDQUFDRSxHQUFELENBQVA7QUFDRCxXQUpEOztBQUtBLGdCQUFJLENBQUN2Qyx3QkFBTCxDQUE4QjtBQUFFMUQsa0JBQU0sRUFBRXNILGdHQUFxQkE7QUFBL0IsV0FBOUIsRUFBaUVoTixDQUFqRTtBQUNELFNBUE07O0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBUDtBQVFEOzs7aUNBRVk3RCxJLEVBQU07QUFDakI0RyxxQ0FBK0I7QUFDL0IsV0FBS3FHLHdCQUFMLENBQThCO0FBQUUxRCxjQUFNLEVBQUV1SCxnR0FBVjtBQUFpQzlRLFlBQUksRUFBSkE7QUFBakMsT0FBOUI7QUFDQSxhQUFPLElBQVA7QUFDRDs7OzsySEFFeUI7QUFBQTs7QUFDeEI7QUFDQTtBQUNBLFlBQUksS0FBS3dMLFVBQUwsS0FBb0J3Qyw2RkFBeEIsRUFBNEM7QUFDMUMsZ0JBQU0sSUFBSWpILEtBQUosQ0FBVSxpREFBVixDQUFOO0FBQ0Q7O0FBQ0QsZUFBTyxJQUFJc0ksT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBYTtBQUM5QixjQUFNekwsQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNqQixtQkFBT0EsR0FBRyxDQUFDakcsTUFBWDtBQUNBLG1CQUFPaUcsR0FBRyxDQUFDb0IsYUFBWDtBQUNBLG1CQUFPcEIsR0FBRyxDQUFDdUIsV0FBWDtBQUNBekIsbUJBQU8sQ0FBQ0UsR0FBRCxDQUFQO0FBQ0QsV0FMRDs7QUFNQSxpQkFBSSxDQUFDdkMsd0JBQUwsQ0FDRTtBQUFFMUQsa0JBQU0sRUFBRXlILDJHQUFnQ0E7QUFBMUMsV0FERixFQUVFbk4sQ0FGRjtBQUlELFNBWE0sQ0FBUDtBQVlELE87Ozs7Ozs7Ozs7MENBRXFCO0FBQ3BCO0FBQ0E7QUFDQSxVQUFJLEtBQUsySCxVQUFMLEtBQW9Cd0MsNkZBQXhCLEVBQTRDO0FBQzFDLGNBQU0sSUFBSWpILEtBQUosQ0FBVSxxREFBVixDQUFOO0FBQ0QsT0FMbUIsQ0FNcEI7OztBQUNBLGFBQU8sS0FBSytFLG9CQUFaO0FBQ0Q7OzswQ0FFcUIvTyxJLEVBQWlDO0FBQUEsVUFBM0JrVSxhQUEyQix1RUFBWCxTQUFXOztBQUNyRDtBQUNBO0FBQ0EsVUFBSSxLQUFLekYsVUFBTCxLQUFvQndDLDZGQUF4QixFQUE0QztBQUMxQyxjQUFNLElBQUlqSCxLQUFKLENBQVUsdURBQVYsQ0FBTjtBQUNEOztBQUNELFVBQUk7QUFDRm1LLGlDQUF5QixDQUFDblUsSUFBRCxFQUFPa1UsYUFBUCxDQUF6QjtBQUNELE9BRkQsQ0FFRSxPQUFPNVEsQ0FBUCxFQUFVO0FBQ1ZDLGVBQU8sQ0FBQ0MsS0FBUixDQUFjRixDQUFkO0FBQ0EsY0FBTUEsQ0FBTjtBQUNEOztBQUNELFVBQUk7QUFDRixhQUFLNE0sd0JBQUwsQ0FBOEI7QUFDNUIxRCxnQkFBTSxFQUFFNEgsd0dBRG9CO0FBRTVCcFUsY0FBSSxFQUFKQSxJQUY0QjtBQUc1QmtVLHVCQUFhLEVBQWJBO0FBSDRCLFNBQTlCO0FBS0QsT0FORCxDQU1FLE9BQU81USxDQUFQLEVBQVU7QUFDVjtBQUNBO0FBQ0EsY0FBTSxJQUFJMEcsS0FBSiwrQ0FBaUQxRyxDQUFqRCxFQUFOO0FBQ0Q7QUFDRjs7O2dDQUVXbUYsSSxFQUFNNEwsTyxFQUFTO0FBQUE7O0FBQ3pCLFdBQUsxSyxVQUFMLENBQWdCeEcsUUFBaEIsR0FBMkJzRixJQUEzQjtBQUNBLGFBQU8sSUFBSTZKLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQWE7QUFDOUIsWUFBTXpMLENBQUMsR0FBRyxTQUFKQSxDQUFJLENBQUMyTCxHQUFELEVBQVM7QUFDakIsaUJBQU9BLEdBQUcsQ0FBQ2pHLE1BQVg7QUFDQSxpQkFBT2lHLEdBQUcsQ0FBQ29CLGFBQVg7QUFDQXRCLGlCQUFPLENBQUNFLEdBQUQsQ0FBUDtBQUNELFNBSkQ7O0FBS0EsZUFBSSxDQUFDdkMsd0JBQUwsQ0FDRTtBQUNFMUQsZ0JBQU0sRUFBRThILHFHQURWO0FBRUU3TCxjQUFJLEVBQUVBLElBQUYsYUFBRUEsSUFBRixjQUFFQSxJQUFGLEdBQVUsRUFGaEI7QUFHRThMLHlCQUFlLEVBQ2J4VSw2RkFBYSxPQUFPc1UsT0FBTyxHQUFHLENBQUMsQ0FBQ0EsT0FBTyxDQUFDRSxlQUFiLEdBQStCLEtBQTdDO0FBSmpCLFNBREYsRUFPRXpOLENBUEY7QUFTRCxPQWZNLENBQVA7QUFnQkQ7Ozs7bUhBRWlCOUcsSSxFQUFNO0FBQUE7O0FBQ3RCLFlBQUk7QUFDRnFELDBCQUFnQixDQUFDckQsSUFBRCxDQUFoQjtBQUNELFNBRkQsQ0FFRSxPQUFPc0QsQ0FBUCxFQUFVO0FBQ1ZDLGlCQUFPLENBQUNDLEtBQVIsQ0FBY0YsQ0FBZDtBQUNBLGdCQUFNQSxDQUFOO0FBQ0Q7O0FBQ0QsYUFBS3FHLFVBQUwsQ0FBZ0J2RyxRQUFoQixHQUEyQnBELElBQTNCO0FBRUEsZUFBTyxJQUFJc1MsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBYTtBQUM5QixjQUFNekwsQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNqQixtQkFBT0EsR0FBRyxDQUFDakcsTUFBWDtBQUNBLG1CQUFPaUcsR0FBRyxDQUFDb0IsYUFBWDtBQUNBLG1CQUFPcEIsR0FBRyxDQUFDdUIsV0FBWDtBQUNBekIsbUJBQU8sQ0FBQ0UsR0FBRCxDQUFQO0FBQ0QsV0FMRDs7QUFNQSxjQUFJO0FBQ0YsbUJBQUksQ0FBQ3ZDLHdCQUFMLENBQ0U7QUFDRTFELG9CQUFNLEVBQUVnSSxxR0FEVjtBQUVFcFIsc0JBQVEsRUFBRXBEO0FBRlosYUFERixFQUtFOEcsQ0FMRjtBQU9ELFdBUkQsQ0FRRSxPQUFPeEQsQ0FBUCxFQUFVO0FBQ1Y7QUFDQTtBQUNBLGtCQUFNLElBQUkwRyxLQUFKLG9DQUFzQzFHLENBQXRDLEVBQU47QUFDRDtBQUNGLFNBcEJNLENBQVA7QUFxQkQsTzs7Ozs7Ozs7OztrQ0FFNEI7QUFBQTs7QUFBQSxVQUFqQnFHLFVBQWlCLHVFQUFKLEVBQUk7O0FBQzNCO0FBQ0EsVUFBSSxDQUFDLEtBQUtnRSxlQUFWLEVBQTJCO0FBQ3pCLGNBQU0sSUFBSTNELEtBQUosQ0FDSiw0REFESSxDQUFOO0FBR0QsT0FOMEIsQ0FRM0I7QUFDQTs7O0FBQ0EsVUFBSSxDQUFDeUssOEZBQUQsRUFBc0J4RCw2RkFBdEIsRUFBMEMvTixRQUExQyxDQUFtRCxLQUFLdUwsVUFBeEQsQ0FBSixFQUF5RTtBQUN2RSxjQUFNLElBQUl6RSxLQUFKLENBQ0osMEhBREksQ0FBTjtBQUdEOztBQUVELGFBQU8sSUFBSXNJLE9BQUo7QUFBQSxtR0FBWSxXQUFPQyxPQUFQLEVBQWdCQyxNQUFoQixFQUEyQjtBQUM1QyxjQUFJMUwsQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNmLG1CQUFPQSxHQUFHLENBQUNqRyxNQUFYO0FBQ0EsbUJBQU9pRyxHQUFHLENBQUNvQixhQUFYO0FBQ0F0QixtQkFBTyxDQUFDRSxHQUFELENBQVA7QUFDRCxXQUpEOztBQUtBLGNBQUksT0FBSSxDQUFDaUMsU0FBTCxFQUFKLEVBQXNCO0FBQ3BCLGdCQUFJO0FBQ0Ysb0JBQU0sT0FBSSxDQUFDQyxJQUFMLENBQVVoTCxVQUFWLENBQU47QUFDRCxhQUZELENBRUUsT0FBT3JHLENBQVAsRUFBVTtBQUNWa1Asb0JBQU0sQ0FBQ2xQLENBQUQsQ0FBTjtBQUNEO0FBQ0YsV0FORCxNQU1PO0FBQ0w7QUFDQSxtQkFBSSxDQUFDZ0wsa0JBQUwsQ0FBd0IzRSxVQUF4QjtBQUNEOztBQUNELGlCQUFJLENBQUN1Ryx3QkFBTCxDQUNFO0FBQ0UxRCxrQkFBTSxFQUFFb0ksb0dBRFY7QUFFRWpMLHNCQUFVLEVBQUVrTCxzQkFBc0IsQ0FBQyxPQUFJLENBQUNsTCxVQUFOLENBRnBDO0FBR0VtTCx3QkFBWSxFQUFFRCxzQkFBc0IsQ0FBQyxPQUFJLENBQUNwUSxhQUFOO0FBSHRDLFdBREYsRUFNRXFDLENBTkY7QUFRRCxTQXhCTTs7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFQO0FBeUJEOzs7d0NBRW1CaU8sSyxFQUFPQyxJLEVBQU1DLFMsRUFBVztBQUMxQyxVQUFJQSxTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixFQUFwQyxFQUF3QztBQUN0QyxjQUFNLElBQUlsTCxLQUFKLENBQ0osOERBREksQ0FBTjtBQUdEOztBQUNELFVBQUlnTCxJQUFKLEVBQVU7QUFDUjtBQUNBLFlBQUlBLElBQUksS0FBSyxPQUFULElBQW9CQSxJQUFJLEtBQUssUUFBN0IsSUFBeUMsRUFBRUEsSUFBSSxZQUFZN1AsTUFBbEIsQ0FBN0MsRUFBd0U7QUFDdEUsZ0JBQU0sSUFBSTZFLEtBQUosQ0FDSixvR0FESSxDQUFOO0FBR0Q7QUFDRjs7QUFDRCxVQUFNbUwsd0JBQXdCLEdBQUdGLFNBQVMsR0FDdEMsQ0FDRSxXQURGLEVBRUUsV0FGRixFQUdFLGNBSEYsRUFJRSxjQUpGLEVBS0UsVUFMRixFQU1FLFVBTkYsRUFPRS9SLFFBUEYsQ0FPVytSLFNBUFgsQ0FEc0MsR0FTdEMsS0FUSjs7QUFVQSxVQUFJRSx3QkFBSixFQUE4QjtBQUM1QixjQUFNLElBQUluTCxLQUFKLENBQ0osaUZBQ0Usc0VBRkUsQ0FBTjtBQUlEOztBQUNELFVBQUksRUFBRStLLEtBQUssWUFBWUssZ0JBQW5CLENBQUosRUFBMEM7QUFDeEMsY0FBTSxJQUFJcEwsS0FBSixDQUNKLDhEQURJLENBQU47QUFHRDtBQUNGOzs7dUNBRXlEO0FBQUE7O0FBQUEsVUFBekNMLFVBQXlDLHVFQUE1QjtBQUFFb0wsYUFBSyxFQUFMQSxLQUFGO0FBQVNDLFlBQUksRUFBSkEsSUFBVDtBQUFlQyxpQkFBUyxFQUFUQTtBQUFmLE9BQTRCO0FBQ3hEcEwscUNBQStCO0FBQy9CLFdBQUt3TCxtQkFBTCxDQUNFMUwsVUFBVSxDQUFDb0wsS0FEYixFQUVFcEwsVUFBVSxDQUFDcUwsSUFGYixFQUdFckwsVUFBVSxDQUFDc0wsU0FIYixFQUZ3RCxDQU94RDtBQUNBOztBQUNBLFVBQUksS0FBS3hHLFVBQUwsS0FBb0J3Qyw2RkFBeEIsRUFBNEM7QUFDMUMsY0FBTSxJQUFJakgsS0FBSixDQUFVLGdEQUFWLENBQU47QUFDRDs7QUFDRCxhQUFPLElBQUlzSSxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVK0MsQ0FBVixFQUFnQjtBQUNqQyxZQUFJeE8sQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNmLGNBQUlBLEdBQUcsQ0FBQ2pQLEtBQVIsRUFBZTtBQUNiZ1Asa0JBQU0sQ0FBQztBQUFFaFAsbUJBQUssRUFBRWlQLEdBQUcsQ0FBQ2pQO0FBQWIsYUFBRCxDQUFOO0FBQ0QsV0FGRCxNQUVPO0FBQ0wrTyxtQkFBTyxDQUFDRSxHQUFHLENBQUM4QyxRQUFMLENBQVA7QUFDRDtBQUNGLFNBTkQ7O0FBT0E5UyxjQUFNLENBQUNvTCxrQkFBUCxDQUEwQjJILFdBQTFCLEdBQXdDN0wsVUFBVSxDQUFDb0wsS0FBbkQ7QUFDQXBMLGtCQUFVLENBQUNvTCxLQUFYLEdBQW1CVSw2RkFBbkI7O0FBQ0EsZUFBSSxDQUFDdkYsd0JBQUwsQ0FDRTtBQUNFMUQsZ0JBQU0sRUFBRWtKLDBHQURWO0FBRUUvTCxvQkFBVSxFQUFWQTtBQUZGLFNBREYsRUFLRTdDLENBTEY7QUFPRCxPQWpCTSxDQUFQO0FBa0JEOzs7b0NBRWVtTyxTLEVBQVc7QUFBQTs7QUFDekJwTCxxQ0FBK0IsR0FETixDQUV6QjtBQUNBOztBQUNBLFVBQUksS0FBSzRFLFVBQUwsS0FBb0J3Qyw2RkFBeEIsRUFBNEM7QUFDMUMsY0FBTSxJQUFJakgsS0FBSixDQUFVLCtDQUFWLENBQU47QUFDRDs7QUFDRCxhQUFPLElBQUlzSSxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVK0MsQ0FBVixFQUFnQjtBQUNqQyxZQUFJeE8sQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNmRixpQkFBTyxDQUFDRSxHQUFHLENBQUM4QyxRQUFMLENBQVA7QUFDRCxTQUZEOztBQUdBLGVBQUksQ0FBQ3JGLHdCQUFMLENBQ0U7QUFDRTFELGdCQUFNLEVBQUVtSix5R0FEVjtBQUVFSixrQkFBUSxFQUFFTjtBQUZaLFNBREYsRUFLRW5PLENBTEY7QUFPRCxPQVhNLENBQVA7QUFZRDs7OzhCQUVTOE8sYyxFQUFnQjtBQUFBOztBQUN4QkMsc0NBQWdDOztBQUNoQyxVQUFJLEtBQUtuQixTQUFMLEVBQUosRUFBc0I7QUFDcEIsY0FBTSxJQUFJMUssS0FBSixDQUNKLCtHQURJLENBQU47QUFHRDs7QUFDRCxhQUFPLElBQUlzSSxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVK0MsQ0FBVixFQUFnQjtBQUNqQyxZQUFJeE8sQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNmRixpQkFBTyxDQUFDO0FBQUV1RCxrQkFBTSxFQUFFckQsR0FBRyxDQUFDcUQ7QUFBZCxXQUFELENBQVA7QUFDRCxTQUZEOztBQUdBLGVBQUksQ0FBQzVGLHdCQUFMLENBQ0U7QUFBRTFELGdCQUFNLEVBQUV1SixrR0FBVjtBQUFtQ0gsd0JBQWMsRUFBZEE7QUFBbkMsU0FERixFQUVFOU8sQ0FGRjtBQUlELE9BUk0sQ0FBUDtBQVNEOzs7O3NIQUVvQmtQLFEsRUFBVTtBQUM3Qkgsd0NBQWdDO0FBQ2hDLGFBQUt2RixXQUFMLEdBQW1CMkYsY0FBbkIsQ0FBa0NELFFBQWxDO0FBQ0EsWUFBTUUsa0JBQWtCLFNBQVMsS0FBSzVGLFdBQUwsR0FBbUI2RixjQUFuQixFQUFqQztBQUNBLGVBQU87QUFBRUgsa0JBQVEsRUFBRUU7QUFBWixTQUFQO0FBQ0QsTzs7Ozs7Ozs7OztrQ0FFYTtBQUFBOztBQUNaLGFBQU8sSUFBSTVELE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVUrQyxDQUFWLEVBQWdCO0FBQ2pDLFlBQUl4TyxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDMkwsR0FBRCxFQUFTO0FBQ2ZGLGlCQUFPLENBQUM7QUFBRXVELGtCQUFNLEVBQUVyRCxHQUFHLENBQUNxRDtBQUFkLFdBQUQsQ0FBUDtBQUNELFNBRkQ7O0FBR0EsZUFBSSxDQUFDNUYsd0JBQUwsQ0FBOEI7QUFBRTFELGdCQUFNLEVBQUU0SixvR0FBeUJBO0FBQW5DLFNBQTlCLEVBQXFFdFAsQ0FBckU7QUFDRCxPQUxNLENBQVA7QUFNRDs7OytCQUVVO0FBQUE7O0FBQ1QrQyxxQ0FBK0I7QUFDL0IsYUFBTyxJQUFJeUksT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVStDLENBQVYsRUFBZ0I7QUFDakMsWUFBSXhPLENBQUMsR0FBRyxTQUFKQSxDQUFJLENBQUMyTCxHQUFELEVBQVM7QUFDZkYsaUJBQU8sQ0FBQztBQUFFdUQsa0JBQU0sRUFBRXJELEdBQUcsQ0FBQ3FEO0FBQWQsV0FBRCxDQUFQO0FBQ0QsU0FGRDs7QUFHQSxlQUFJLENBQUM1Rix3QkFBTCxDQUE4QjtBQUFFMUQsZ0JBQU0sRUFBRTZKLGlHQUFzQkE7QUFBaEMsU0FBOUIsRUFBa0V2UCxDQUFsRTtBQUNELE9BTE0sQ0FBUDtBQU1EOzs7MENBRXFCO0FBQUE7O0FBQ3BCK08sc0NBQWdDO0FBQ2hDLGFBQU8sSUFBSXZELE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVUrQyxDQUFWLEVBQWdCO0FBQ2pDLFlBQUl4TyxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDMkwsR0FBRCxFQUFTO0FBQ2ZGLGlCQUFPLENBQUNFLEdBQUcsQ0FBQzZELFVBQUwsQ0FBUDtBQUNELFNBRkQ7O0FBR0EsZUFBSSxDQUFDcEcsd0JBQUwsQ0FDRTtBQUFFMUQsZ0JBQU0sRUFBRStKLDhHQUFtQ0E7QUFBN0MsU0FERixFQUVFelAsQ0FGRjtBQUlELE9BUk0sQ0FBUDtBQVNEOzs7MkNBRTJFO0FBQUEsVUFBMURsQyxhQUEwRCxTQUExREEsYUFBMEQ7QUFBQSxVQUEzQ0YsYUFBMkMsU0FBM0NBLGFBQTJDO0FBQUEsVUFBNUJDLFdBQTRCLFNBQTVCQSxXQUE0QjtBQUFBLFVBQWZMLFdBQWUsU0FBZkEsV0FBZTtBQUMxRWYsYUFBTyxDQUFDb04sSUFBUixDQUNFLDhGQURGO0FBR0EsV0FBSzZGLG9CQUFMLENBQTBCO0FBQ3hCNVIscUJBQWEsRUFBYkEsYUFEd0I7QUFFeEJGLHFCQUFhLEVBQWJBLGFBRndCO0FBR3hCQyxtQkFBVyxFQUFYQSxXQUh3QjtBQUl4QkwsbUJBQVcsRUFBWEE7QUFKd0IsT0FBMUI7QUFNQSxhQUFPLElBQVA7QUFDRDs7OztvSUFPRTtBQUFBOztBQUFBLFlBSkRNLGFBSUMsVUFKREEsYUFJQztBQUFBLFlBSERGLGFBR0MsVUFIREEsYUFHQztBQUFBLFlBRkRDLFdBRUMsVUFGREEsV0FFQztBQUFBLFlBRERMLFdBQ0MsVUFEREEsV0FDQztBQUNEdUYsdUNBQStCLEdBRDlCLENBRUQ7O0FBQ0EsWUFBSWxGLFdBQVcsS0FBS21KLFNBQXBCLEVBQStCO0FBQzdCbEosdUJBQWEsR0FBR0QsV0FBaEI7QUFDRDs7QUFDRCxZQUFJTCxXQUFXLEtBQUt3SixTQUFwQixFQUErQjtBQUM3QnBKLHVCQUFhLEdBQUdKLFdBQWhCO0FBQ0QsU0FSQSxDQVVEOzs7QUFDQSxZQUFJTSxhQUFKLEVBQW1CO0FBQ2pCLGVBQUtILGFBQUwsQ0FBbUJHLGFBQW5CLEdBQW1DQSxhQUFuQztBQUNEOztBQUNELFlBQUlGLGFBQUosRUFBbUI7QUFDakIsZUFBS0QsYUFBTCxDQUFtQkMsYUFBbkIsR0FBbUNBLGFBQW5DO0FBQ0QsU0FoQkEsQ0FrQkQ7OztBQUNBLFlBQUksS0FBS2lKLGVBQUwsSUFBd0IsS0FBSytHLFNBQUwsRUFBNUIsRUFBOEM7QUFDNUMsaUJBQU87QUFDTCtCLGtCQUFNLEVBQUU7QUFBRVQsc0JBQVEsRUFBRSxLQUFLdlIsYUFBTCxDQUFtQkM7QUFBL0IsYUFESDtBQUVMZ1MsZUFBRyxFQUFFO0FBQUVWLHNCQUFRLEVBQUUsS0FBS3ZSLGFBQUwsQ0FBbUJHO0FBQS9CLGFBRkE7QUFHTCtSLG1CQUFPLEVBQUU7QUFBRVgsc0JBQVEsRUFBRSxLQUFLdlIsYUFBTCxDQUFtQm1TO0FBQS9CO0FBSEosV0FBUDtBQUtEOztBQUVELFlBQUloUyxhQUFhLFlBQVl3USxnQkFBN0IsRUFBK0M7QUFDN0N4USx1QkFBYSxHQUFHNlEsNkZBQWhCO0FBQ0Q7O0FBQ0QsWUFBSS9RLGFBQWEsWUFBWTBRLGdCQUE3QixFQUErQztBQUM3QzFRLHVCQUFhLEdBQUcrUSw2RkFBaEI7QUFDRDs7QUFFRCxlQUFPLElBQUluRCxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFhO0FBQzlCLGNBQUl6TCxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDMkwsR0FBRCxFQUFTO0FBQ2YsbUJBQU9BLEdBQUcsQ0FBQ2pHLE1BQVg7QUFDQSxtQkFBT2lHLEdBQUcsQ0FBQ29CLGFBQVg7O0FBRUEsZ0JBQUlwQixHQUFHLENBQUNvRSxrQkFBUixFQUE0QjtBQUMxQnRFLHFCQUFPLENBQUM7QUFDTmtFLHNCQUFNLEVBQUU7QUFBRVQsMEJBQVEsRUFBRSxPQUFJLENBQUN2UixhQUFMLENBQW1CQztBQUEvQixpQkFERjtBQUVOZ1MsbUJBQUcsRUFBRTtBQUFFViwwQkFBUSxFQUFFLE9BQUksQ0FBQ3ZSLGFBQUwsQ0FBbUJHO0FBQS9CLGlCQUZDO0FBR04rUix1QkFBTyxFQUFFO0FBQUVYLDBCQUFRLEVBQUUsT0FBSSxDQUFDdlIsYUFBTCxDQUFtQm1TO0FBQS9CO0FBSEgsZUFBRCxDQUFQO0FBS0E7QUFDRDs7QUFFRHJFLG1CQUFPLENBQUNFLEdBQUQsQ0FBUDtBQUNELFdBZEQ7O0FBZUEsaUJBQUksQ0FBQ3ZDLHdCQUFMLENBQ0U7QUFDRTFELGtCQUFNLEVBQUVzSyx5R0FEVjtBQUVFbFMseUJBQWEsRUFBYkEsYUFGRjtBQUdFRix5QkFBYSxFQUFiQTtBQUhGLFdBREYsRUFNRW9DLENBTkY7QUFRRCxTQXhCTSxDQUFQO0FBeUJELE87Ozs7Ozs7Ozs7NENBRW1DO0FBQUEsVUFBbEI4UCxjQUFrQixVQUFsQkEsY0FBa0I7QUFDbENyVCxhQUFPLENBQUNvTixJQUFSLENBQ0UsOEZBREY7QUFHQSxXQUFLb0csb0JBQUwsQ0FBMEI7QUFBRUgsc0JBQWMsRUFBZEE7QUFBRixPQUExQjtBQUNBLGFBQU8sSUFBUDtBQUNEOzs7O29JQUU4QztBQUFBOztBQUFBLFlBQWxCQSxjQUFrQixVQUFsQkEsY0FBa0I7QUFDN0MvTSx1Q0FBK0IsR0FEYyxDQUU3Qzs7QUFDQSxZQUFJK00sY0FBSixFQUFvQjtBQUNsQixlQUFLblMsYUFBTCxDQUFtQm1TLGNBQW5CLEdBQW9DQSxjQUFwQztBQUNELFNBTDRDLENBTzdDOzs7QUFDQSxZQUFJLEtBQUtqSixlQUFMLElBQXdCLEtBQUsrRyxTQUFMLEVBQTVCLEVBQThDO0FBQzVDLGlCQUFPO0FBQ0wrQixrQkFBTSxFQUFFO0FBQUVULHNCQUFRLEVBQUUsS0FBS3ZSLGFBQUwsQ0FBbUJDO0FBQS9CLGFBREg7QUFFTGdTLGVBQUcsRUFBRTtBQUFFVixzQkFBUSxFQUFFLEtBQUt2UixhQUFMLENBQW1CRztBQUEvQixhQUZBO0FBR0wrUixtQkFBTyxFQUFFO0FBQUVYLHNCQUFRLEVBQUUsS0FBS3ZSLGFBQUwsQ0FBbUJtUztBQUEvQjtBQUhKLFdBQVA7QUFLRDs7QUFFRCxlQUFPLElBQUl0RSxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFhO0FBQzlCLGNBQUl6TCxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDMkwsR0FBRCxFQUFTO0FBQ2YsbUJBQU9BLEdBQUcsQ0FBQ2pHLE1BQVg7QUFDQSxtQkFBT2lHLEdBQUcsQ0FBQ29CLGFBQVg7O0FBRUEsZ0JBQUlwQixHQUFHLENBQUNvRSxrQkFBUixFQUE0QjtBQUMxQnRFLHFCQUFPLENBQUM7QUFDTmtFLHNCQUFNLEVBQUU7QUFBRVQsMEJBQVEsRUFBRSxPQUFJLENBQUN2UixhQUFMLENBQW1CQztBQUEvQixpQkFERjtBQUVOZ1MsbUJBQUcsRUFBRTtBQUFFViwwQkFBUSxFQUFFLE9BQUksQ0FBQ3ZSLGFBQUwsQ0FBbUJHO0FBQS9CLGlCQUZDO0FBR04rUix1QkFBTyxFQUFFO0FBQUVYLDBCQUFRLEVBQUUsT0FBSSxDQUFDdlIsYUFBTCxDQUFtQm1TO0FBQS9CO0FBSEgsZUFBRCxDQUFQO0FBS0E7QUFDRDs7QUFFRHJFLG1CQUFPLENBQUNFLEdBQUQsQ0FBUDtBQUNELFdBZEQ7O0FBZ0JBLGlCQUFJLENBQUN2Qyx3QkFBTCxDQUNFO0FBQ0UxRCxrQkFBTSxFQUFFd0sseUdBRFY7QUFFRUosMEJBQWMsRUFBZEE7QUFGRixXQURGLEVBS0U5UCxDQUxGO0FBT0QsU0F4Qk0sQ0FBUDtBQXlCRCxPOzs7Ozs7Ozs7Ozt5SEFFdUI7QUFBQTs7QUFDdEIsWUFBSSxLQUFLNkcsZUFBTCxJQUF3QixLQUFLK0csU0FBTCxFQUE1QixFQUE4QztBQUM1QyxpQkFBTztBQUNMK0Isa0JBQU0sRUFBRTtBQUFFVCxzQkFBUSxFQUFFLEtBQUt2UixhQUFMLENBQW1CQztBQUEvQixhQURIO0FBRUxnUyxlQUFHLEVBQUU7QUFBRVYsc0JBQVEsRUFBRSxLQUFLdlIsYUFBTCxDQUFtQkc7QUFBL0IsYUFGQTtBQUdMK1IsbUJBQU8sRUFBRTtBQUFFWCxzQkFBUSxFQUFFLEtBQUt2UixhQUFMLENBQW1CbVM7QUFBL0I7QUFISixXQUFQO0FBS0Q7O0FBRUQsZUFBTyxJQUFJdEUsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUN0QyxjQUFJMUwsQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNmLG1CQUFPQSxHQUFHLENBQUNqRyxNQUFYO0FBQ0EsbUJBQU9pRyxHQUFHLENBQUNvQixhQUFYOztBQUVBLGdCQUFJcEIsR0FBRyxDQUFDb0Usa0JBQVIsRUFBNEI7QUFDMUJ0RSxxQkFBTyxDQUFDO0FBQ05rRSxzQkFBTSxFQUFFO0FBQUVULDBCQUFRLEVBQUUsT0FBSSxDQUFDdlIsYUFBTCxDQUFtQkM7QUFBL0IsaUJBREY7QUFFTmdTLG1CQUFHLEVBQUU7QUFBRVYsMEJBQVEsRUFBRSxPQUFJLENBQUN2UixhQUFMLENBQW1CRztBQUEvQixpQkFGQztBQUdOK1IsdUJBQU8sRUFBRTtBQUFFWCwwQkFBUSxFQUFFLE9BQUksQ0FBQ3ZSLGFBQUwsQ0FBbUJtUztBQUEvQjtBQUhILGVBQUQsQ0FBUDtBQUtBO0FBQ0Q7O0FBRURyRSxtQkFBTyxDQUFDRSxHQUFELENBQVA7QUFDRCxXQWREOztBQWVBLGlCQUFJLENBQUN2Qyx3QkFBTCxDQUNFO0FBQUUxRCxrQkFBTSxFQUFFeUsseUdBQThCQTtBQUF4QyxXQURGLEVBRUVuUSxDQUZGO0FBSUQsU0FwQk0sQ0FBUDtBQXFCRCxPOzs7Ozs7Ozs7OzRDQUV1QjtBQUN0QitPLHNDQUFnQztBQUNoQyxhQUFPLEtBQUs3RyxzQkFBWjtBQUNEOzs7NkNBRXdCa0ksZSxFQUFpQjtBQUN4Q3JCLHNDQUFnQzs7QUFDaEMsVUFDRSxDQUFDLENBQUN4Vyw0QkFBRCxFQUErQkMsNEJBQS9CLEVBQTZENEQsUUFBN0QsQ0FDQ2dVLGVBREQsQ0FESCxFQUlFO0FBQ0EzVCxlQUFPLENBQUNDLEtBQVIsQ0FBYyx3Q0FBZCxFQUF3RDBULGVBQXhEO0FBQ0E7QUFDRDs7QUFFRCxVQUFJQSxlQUFlLEtBQUssS0FBS2xJLHNCQUE3QixFQUFxRDtBQUNuRDtBQUNELE9BYnVDLENBZXhDOzs7QUFDQSxXQUFLQSxzQkFBTCxHQUE4QmtJLGVBQTlCLENBaEJ3QyxDQWtCeEM7QUFDQTs7QUFDQSxVQUNFLENBQUMsS0FBS2xLLHNDQUFMLENBQTRDLE9BQTVDLENBQUQsSUFDQSxLQUFLbUssdUJBQUwsQ0FBNkIsS0FBSzFJLFVBQWxDLEVBQThDLEtBQUtFLGtCQUFuRCxDQUZGLEVBR0U7QUFDQSxhQUFLMkIsV0FBTCxHQUFtQjhHLFlBQW5CLENBQWdDLEtBQUtwSSxzQkFBckM7QUFDRDs7QUFFRCxhQUFPLElBQVA7QUFDRDs7OztpSEFFOEI7QUFBQTs7QUFBQSxZQUFqQnJGLFVBQWlCLHVFQUFKLEVBQUk7O0FBQzdCO0FBQ0EsWUFBSSxDQUFDLEtBQUtnRSxlQUFWLEVBQTJCO0FBQ3pCLGdCQUFNLElBQUkzRCxLQUFKLENBQVUsd0RBQVYsQ0FBTjtBQUNELFNBSjRCLENBTTdCO0FBQ0E7OztBQUNBLFlBQUksQ0FBQ3lLLDhGQUFELEVBQXNCeEQsNkZBQXRCLEVBQTBDL04sUUFBMUMsQ0FBbUQsS0FBS3VMLFVBQXhELENBQUosRUFBeUU7QUFDdkUsZ0JBQU0sSUFBSXpFLEtBQUosQ0FBVSxpREFBVixDQUFOO0FBQ0QsU0FWNEIsQ0FZN0I7OztBQUNBLFlBQUksS0FBSzBLLFNBQUwsRUFBSixFQUFzQjtBQUNwQixnQkFBTSxLQUFLQyxJQUFMLENBQVVoTCxVQUFWLENBQU47QUFDRCxTQWY0QixDQWlCN0I7OztBQUNBLFlBQUksQ0FBQ0EsVUFBVSxDQUFDeEgsR0FBaEIsRUFBcUI7QUFDbkIsZ0JBQU0sSUFBSTZILEtBQUosQ0FBVSxrREFBVixDQUFOO0FBQ0Q7O0FBQ0QsYUFBS3NFLGtCQUFMLENBQXdCM0UsVUFBeEI7QUFDQSxhQUFLQSxVQUFMLG1DQUF1QixLQUFLQSxVQUE1QixHQUEyQ0EsVUFBM0MsRUF0QjZCLENBd0I3Qjs7QUFDQSxlQUFPLElBQUkySSxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQ3RDLGNBQU0xTCxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDMkwsR0FBRCxFQUFTO0FBQ2pCLGdCQUFJQSxHQUFHLENBQUNqUCxLQUFSLEVBQWU7QUFDYixxQkFBT2dQLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDalAsS0FBTCxDQUFiO0FBQ0Q7O0FBRUQsZ0JBQUksQ0FBQ2lQLEdBQUcsQ0FBQzVELE1BQVQsRUFBaUI7QUFDZixxQkFBTzJELE1BQU0sQ0FBQyxJQUFJeEksS0FBSixDQUFVLDRCQUFWLENBQUQsQ0FBYjtBQUNELGFBUGdCLENBU2pCO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxtQkFBSSxDQUFDcU4sV0FBTCxHQUFtQixJQUFuQjtBQUVBOUUsbUJBQU8sQ0FBQztBQUFFMUQsb0JBQU0sRUFBRTRELEdBQUcsQ0FBQzVEO0FBQWQsYUFBRCxDQUFQO0FBQ0QsV0FoQkQ7O0FBaUJBLGlCQUFJLENBQUNxQix3QkFBTCxDQUNFO0FBQ0UxRCxrQkFBTSxFQUFFOEssK0ZBRFY7QUFFRTNOLHNCQUFVLEVBQUVrTCxzQkFBc0IsQ0FBQyxPQUFJLENBQUNsTCxVQUFOO0FBRnBDLFdBREYsRUFLRTdDLENBTEY7QUFPRCxTQXpCTSxDQUFQO0FBMEJELE87Ozs7Ozs7Ozs7OzRHQUVVNkMsVSxFQUFZO0FBQUE7O0FBQ3JCLFlBQUksQ0FBQyxLQUFLK0ssU0FBTCxFQUFMLEVBQXVCO0FBQ3JCO0FBQ0Q7O0FBRUQsWUFBSS9LLFVBQUosRUFBZ0I7QUFDZCxlQUFLMkUsa0JBQUwsQ0FBd0IzRSxVQUF4QjtBQUNBLGVBQUtBLFVBQUwsbUNBQXVCLEtBQUtBLFVBQTVCLEdBQTJDQSxVQUEzQztBQUNELFNBUm9CLENBVXJCO0FBQ0E7QUFDQTs7O0FBQ0EsWUFBSSxDQUFDLEtBQUtnRSxlQUFOLElBQXlCLENBQUMsS0FBS2hFLFVBQUwsQ0FBZ0J4SCxHQUE5QyxFQUFtRDtBQUNqRCxnQkFBTSxJQUFJNkgsS0FBSixDQUNKLDBEQURJLENBQU47QUFHRDs7QUFFRCxhQUFLdU4sZ0JBQUwsQ0FBc0JyRyw4RkFBdEI7O0FBQ0EsWUFBSTtBQUNGLGVBQUs1RSxJQUFMLENBQVVrTCw4RkFBVixFQUErQjtBQUFFaEwsa0JBQU0sRUFBRWdMLDhGQUFtQkE7QUFBN0IsV0FBL0I7QUFDRCxTQUZELENBRUUsT0FBT2xVLENBQVAsRUFBVTtBQUNWQyxpQkFBTyxDQUFDa1UsR0FBUixDQUFZLDBCQUFaLEVBQXdDblUsQ0FBeEM7QUFDRDs7QUFFRCxZQUFJLEtBQUtxSyxlQUFULEVBQTBCO0FBQ3hCO0FBQ0EsaUJBQU8sSUFBSTJFLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFBcUI7QUFDdEMsbUJBQUksQ0FBQ2pFLGlCQUFMLENBQXVCbUosTUFBdkI7O0FBQ0EsbUJBQUksQ0FBQ25KLGlCQUFMLENBQXVCb0csSUFBdkIsQ0FDRSxPQUFJLENBQUNqRixZQURQLEVBRUUsT0FBSSxDQUFDL0YsVUFBTCxDQUFnQnBILFdBQWhCLElBQStCLE9BQUksQ0FBQ29ILFVBQUwsQ0FBZ0JwSCxXQUFoQixDQUE0Qm9WLFNBRjdELEVBR0UsVUFBQ0MsT0FBRCxFQUFhO0FBQ1gscUJBQUksQ0FBQ0wsZ0JBQUwsQ0FBc0JNLDZGQUF0QixFQURXLENBRVg7QUFDQTs7O0FBQ0FELHFCQUFPLElBQ0wsT0FBSSxDQUFDdEwsSUFBTCxDQUFVd0wsNkZBQVYsRUFBOEI7QUFBRXRMLHNCQUFNLEVBQUVzTCw2RkFBa0JBO0FBQTVCLGVBQTlCLENBREY7QUFFQXZGLHFCQUFPO0FBQ1IsYUFWSCxFQVdFLFVBQUN3RixRQUFELEVBQVdDLFNBQVgsRUFBeUI7QUFDdkIscUJBQUksQ0FBQzFMLElBQUwsQ0FBVTJMLDBHQUFWLEVBQTJDO0FBQ3pDekwsc0JBQU0sRUFBRXlMLDBHQURpQztBQUV6Q0Ysd0JBQVEsRUFBUkE7QUFGeUMsZUFBM0M7O0FBSUEsa0JBQUksQ0FBQ0MsU0FBTCxFQUFnQjtBQUNkLHVCQUFJLENBQUNULGdCQUFMLENBQXNCVyw0RkFBdEI7O0FBQ0EsdUJBQUksQ0FBQ3pHLHlCQUFMOztBQUNBLHVCQUFJLENBQUNuRixJQUFMLENBQVU2TCw0RkFBVixFQUE2QjtBQUMzQjNMLHdCQUFNLEVBQUUyTCw0RkFEbUI7QUFFM0JKLDBCQUFRLEVBQVJBO0FBRjJCLGlCQUE3Qjs7QUFJQXZGLHNCQUFNLENBQUN1RixRQUFELENBQU47QUFDRDtBQUNGLGFBekJIO0FBMkJELFdBN0JNLENBQVA7QUE4QkQsU0FoQ0QsTUFnQ087QUFDTDtBQUNBLGVBQUtySyxPQUFMLENBQWEzRCxHQUFiLEdBQW1CLEtBQUtxTyxrQkFBTCxFQUFuQjtBQUNBLGlCQUFPLElBQUk5RixPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQ3RDLG1CQUFJLENBQUM2RixlQUFMLEdBQXVCLFVBQUM3VSxLQUFELEVBQVc7QUFDaEMsa0JBQUksT0FBSSxDQUFDaUwsVUFBTCxLQUFvQnlKLDRGQUF4QixFQUEyQztBQUN6QzFGLHNCQUFNLENBQUNoUCxLQUFELENBQU47QUFDQTtBQUNEOztBQUNELHFCQUFJLENBQUMrVCxnQkFBTCxDQUFzQk0sNkZBQXRCOztBQUNBLGtCQUFJLE9BQUksQ0FBQ2xPLFVBQUwsQ0FBZ0J4RixPQUFoQixJQUEyQixPQUFJLENBQUN3RixVQUFMLENBQWdCdkYsT0FBL0MsRUFBd0Q7QUFDdEQsdUJBQUksQ0FBQ2tVLE9BQUwsQ0FBYSxPQUFJLENBQUMzTyxVQUFsQjtBQUNEOztBQUNELG1CQUFLLElBQUk0TyxTQUFULElBQXNCLE9BQUksQ0FBQ2xKLGNBQTNCLEVBQTJDO0FBQ3pDLHVCQUFJLENBQUNhLHdCQUFMLENBQThCO0FBQzVCMUQsd0JBQU0sRUFBRWdNLDhHQURvQjtBQUU1QkMsb0JBQUUsRUFBRUY7QUFGd0IsaUJBQTlCO0FBSUQ7O0FBQ0RoRyxxQkFBTztBQUNSLGFBaEJEO0FBaUJELFdBbEJNLENBQVA7QUFtQkQ7QUFDRixPOzs7Ozs7Ozs7Ozs4R0FFMkI7QUFBQTs7QUFBQSxZQUFqQjVJLFVBQWlCLHVFQUFKLEVBQUk7QUFDMUIsWUFBSStPLE1BQU0sR0FBRyxLQUFiOztBQUNBLFlBQUksS0FBS2hFLFNBQUwsRUFBSixFQUFzQjtBQUNwQixlQUFLaUUsdUJBQUwsQ0FBNkIsSUFBN0I7O0FBQ0EsY0FBSTtBQUNGLGtCQUFNLEtBQUtoRSxJQUFMLENBQVVoTCxVQUFWLENBQU47QUFDRCxXQUZELENBRUUsT0FBT3JHLENBQVAsRUFBVTtBQUNWLGlCQUFLcVYsdUJBQUwsQ0FBNkIsS0FBN0I7QUFDQSxtQkFBT3JHLE9BQU8sQ0FBQ0UsTUFBUixDQUFlbFAsQ0FBZixDQUFQO0FBQ0Q7QUFDRixTQVJELE1BUU87QUFDTG9WLGdCQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUsvTyxVQUFMLENBQWdCeEYsT0FBaEIsSUFBMkIsS0FBS3dGLFVBQUwsQ0FBZ0J2RixPQUE3QyxDQUFWLENBREssQ0FHTDtBQUNBOztBQUNBLGNBQUksS0FBS2lULFdBQVQsRUFBc0I7QUFDcEIsZ0JBQUkxTixVQUFVLENBQUN4SCxHQUFYLElBQWtCd0gsVUFBVSxDQUFDeEgsR0FBWCxLQUFtQixLQUFLd0gsVUFBTCxDQUFnQnhILEdBQXpELEVBQThEO0FBQzVEb0IscUJBQU8sQ0FBQ0MsS0FBUjtBQUdBLG1CQUFLbVYsdUJBQUwsQ0FBNkIsS0FBN0I7QUFDQSxxQkFBT3JHLE9BQU8sQ0FBQ0UsTUFBUixFQUFQO0FBQ0Q7O0FBQ0QsZ0JBQUk3SSxVQUFVLENBQUN0SCxLQUFYLElBQW9Cc0gsVUFBVSxDQUFDdEgsS0FBWCxLQUFxQixLQUFLc0gsVUFBTCxDQUFnQnRILEtBQTdELEVBQW9FO0FBQ2xFa0IscUJBQU8sQ0FBQ0MsS0FBUjtBQUdBLG1CQUFLbVYsdUJBQUwsQ0FBNkIsS0FBN0I7QUFDQSxxQkFBT3JHLE9BQU8sQ0FBQ0UsTUFBUixFQUFQO0FBQ0Q7QUFDRixXQXBCSSxDQXNCTDtBQUNBOzs7QUFDQSxjQUFJN0ksVUFBVSxDQUFDeEgsR0FBWCxJQUFrQixDQUFDLEtBQUt3TCxlQUE1QixFQUE2QztBQUMzQyxnQkFBSWhFLFVBQVUsQ0FBQ3hILEdBQVgsSUFBa0J3SCxVQUFVLENBQUN4SCxHQUFYLEtBQW1CLEtBQUt3SCxVQUFMLENBQWdCeEgsR0FBekQsRUFBOEQ7QUFDNURvQixxQkFBTyxDQUFDQyxLQUFSLG1FQUM2RCxLQUFLbUcsVUFBTCxDQUFnQnhILEdBRDdFLGlCQUN1RndILFVBQVUsQ0FBQ3hILEdBRGxHO0FBR0EsbUJBQUt3Vyx1QkFBTCxDQUE2QixLQUE3QjtBQUNBLHFCQUFPckcsT0FBTyxDQUFDRSxNQUFSLEVBQVA7QUFDRDtBQUNGLFdBaENJLENBa0NMO0FBQ0E7OztBQUNBLGVBQUtsRSxrQkFBTCxDQUF3QjNFLFVBQXhCO0FBQ0EsZUFBS0EsVUFBTCxtQ0FBdUIsS0FBS0EsVUFBNUIsR0FBMkNBLFVBQTNDO0FBQ0QsU0FoRHlCLENBa0QxQjs7O0FBQ0EsWUFBSUEsVUFBVSxDQUFDOUYsY0FBWCxLQUE4QmlLLFNBQWxDLEVBQTZDO0FBQzNDLGNBQUksS0FBS0gsZUFBVCxFQUEwQjtBQUN4QnBLLG1CQUFPLENBQUNDLEtBQVIsQ0FBYyxvREFBZDtBQUNELFdBRkQsTUFFTztBQUNMLGlCQUFLdUssZUFBTCxHQUF1QixDQUFDLENBQUNwRSxVQUFVLENBQUM5RixjQUFwQztBQUNEO0FBQ0Y7O0FBQ0QsWUFBSThGLFVBQVUsQ0FBQzdGLG1CQUFYLEtBQW1DZ0ssU0FBdkMsRUFBa0Q7QUFDaEQsY0FBSSxLQUFLSCxlQUFULEVBQTBCO0FBQ3hCcEssbUJBQU8sQ0FBQ0MsS0FBUixDQUNFLHlEQURGO0FBR0QsV0FKRCxNQUlPO0FBQ0wsaUJBQUt3SyxvQkFBTCxHQUE0QixDQUFDLENBQUNyRSxVQUFVLENBQUM3RixtQkFBekM7QUFDRDtBQUNGOztBQUVELFlBQ0UsS0FBSzJLLFVBQUwsS0FBb0J3Qyw2RkFBcEIsSUFDQSxLQUFLeEMsVUFBTCxLQUFvQmdHLDhGQUZ0QixFQUdFO0FBQ0FsUixpQkFBTyxDQUFDb04sSUFBUixDQUFhLDJEQUFiO0FBQ0EsZUFBS2dJLHVCQUFMLENBQTZCLEtBQTdCO0FBQ0E7QUFDRDs7QUFDRCxhQUFLcEIsZ0JBQUwsQ0FBc0I5Qyw4RkFBdEIsRUFBMkMsS0FBM0M7O0FBQ0EsWUFBSTtBQUNGLGVBQUtuSSxJQUFMLENBQVVzTSxzR0FBVixFQUF1QztBQUNyQ3BNLGtCQUFNLEVBQUVvTSxzR0FBMkJBO0FBREUsV0FBdkM7QUFHRCxTQUpELENBSUUsT0FBT3RWLENBQVAsRUFBVTtBQUNWQyxpQkFBTyxDQUFDa1UsR0FBUixDQUFZLGtDQUFaLEVBQWdEblUsQ0FBaEQ7QUFDRDs7QUFDRCxhQUFLNE0sd0JBQUwsQ0FBOEI7QUFDNUIxRCxnQkFBTSxFQUFFcU0sNEZBRG9CO0FBRTVCbFAsb0JBQVUsRUFBRWtMLHNCQUFzQixDQUFDLEtBQUtsTCxVQUFOLENBRk47QUFHNUJtTCxzQkFBWSxFQUFFRCxzQkFBc0IsQ0FBQyxLQUFLcFEsYUFBTjtBQUhSLFNBQTlCO0FBS0EsZUFBTyxJQUFJNk4sT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUN0QyxpQkFBSSxDQUFDc0csZUFBTCxHQUF1QixVQUFDMUcsWUFBRCxFQUFlNU8sS0FBZixFQUF5QjtBQUM5QyxnQkFBSSxPQUFJLENBQUNpTCxVQUFMLEtBQW9CeUosNEZBQXhCLEVBQTJDO0FBQ3pDMUYsb0JBQU0sQ0FBQ2hQLEtBQUQsQ0FBTjtBQUNBO0FBQ0Q7O0FBQ0QsbUJBQUksQ0FBQytULGdCQUFMLENBQXNCdEcsNkZBQXRCOztBQUNBLGdCQUFJbUIsWUFBSixFQUFrQjtBQUNoQixtQkFBSyxJQUFJOVEsRUFBVCxJQUFlOFEsWUFBZixFQUE2QjtBQUMzQixvQkFBSSxPQUFJLENBQUN6RSxlQUFULEVBQTBCO0FBQ3hCb0wseUVBQUEsQ0FBc0IzRyxZQUFZLENBQUM5USxFQUFELENBQWxDO0FBQ0F5WCwrRUFBQSxDQUE0QjNHLFlBQVksQ0FBQzlRLEVBQUQsQ0FBeEM7QUFDQXlYLCtFQUFBLENBQ0UzRyxZQUFZLENBQUM5USxFQUFELENBRGQsRUFFRSxPQUFJLENBQUMyTixhQUFMLENBQW1CM04sRUFBbkIsQ0FGRjtBQUlEOztBQUNELHVCQUFJLENBQUMyTixhQUFMLENBQW1CM04sRUFBbkIsc0JBQThCOFEsWUFBWSxDQUFDOVEsRUFBRCxDQUExQzs7QUFDQSx1QkFBSSxDQUFDZ00sNkNBQUw7QUFDRDtBQUNGOztBQUNELGdCQUFJb0wsTUFBSixFQUFZO0FBQ1YscUJBQUksQ0FBQ0osT0FBTCxDQUFhLE9BQUksQ0FBQzNPLFVBQWxCO0FBQ0Q7O0FBQ0Q0SSxtQkFBTyxDQUFDSCxZQUFELENBQVA7QUFDRCxXQXhCRDtBQXlCRCxTQTFCTSxDQUFQO0FBMkJELE87Ozs7Ozs7Ozs7OytHQUVhO0FBQUE7O0FBQ1osZUFBTyxJQUFJRSxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVK0MsQ0FBVixFQUFnQjtBQUNqQyxjQUFJLE9BQUksQ0FBQy9HLGlCQUFMLElBQTBCLENBQUMsT0FBSSxDQUFDQSxpQkFBTCxDQUF1QnlLLE1BQXRELEVBQThEO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLG1CQUFJLENBQUN6SyxpQkFBTCxDQUF1Qm1KLE1BQXZCOztBQUNBLG1CQUFJLENBQUNILGdCQUFMLENBQXNCMEIsMkZBQXRCOztBQUNBLG1CQUFJLENBQUN4SCx5QkFBTDs7QUFDQSxnQkFBSTtBQUNGLHFCQUFJLENBQUNuRixJQUFMLENBQVUyTSwyRkFBVixFQUE0QjtBQUFFek0sc0JBQU0sRUFBRXlNLDJGQUFnQkE7QUFBMUIsZUFBNUI7QUFDRCxhQUZELENBRUUsT0FBTzNWLENBQVAsRUFBVTtBQUNWQyxxQkFBTyxDQUFDa1UsR0FBUixDQUFZLCtCQUFaLEVBQTZDblUsQ0FBN0M7QUFDRDs7QUFDRGlQLG1CQUFPO0FBQ1IsV0FiRCxNQWFPLElBQ0wsT0FBSSxDQUFDOUQsVUFBTCxLQUFvQndLLDJGQUFwQixJQUNBLE9BQUksQ0FBQ3hLLFVBQUwsS0FBb0J5Siw0RkFGZixFQUdMO0FBQ0E7QUFDQTNGLG1CQUFPO0FBQ1IsV0FOTSxNQU1BO0FBQ0wsbUJBQUksQ0FBQzJHLGFBQUwsR0FBcUIzRyxPQUFyQixDQURLLENBRUw7QUFDQTs7QUFDQSxtQkFBSSxDQUFDckMsd0JBQUwsQ0FBOEI7QUFBRTFELG9CQUFNLEVBQUUyTSw2RkFBa0JBO0FBQTVCLGFBQTlCO0FBQ0Q7QUFDRixTQTFCTSxDQUFQO0FBMkJELE87Ozs7Ozs7Ozs7dUNBRXFDO0FBQUEsVUFBckJDLGNBQXFCLHVFQUFKLEVBQUk7QUFDcEN2UCxxQ0FBK0I7O0FBQy9CLFVBQUl1UCxjQUFjLENBQUNDLFdBQW5CLEVBQWdDO0FBQzlCLGFBQUs1VSxhQUFMLENBQW1CNlUsaUJBQW5CLEdBQXVDRixjQUFjLENBQUNDLFdBQXREO0FBQ0FELHNCQUFjLENBQUNDLFdBQWYsR0FBNkI1RCw2RkFBN0I7QUFDRDs7QUFDRCxXQUFLdkYsd0JBQUwsQ0FBOEI7QUFDNUIxRCxjQUFNLEVBQUUrTSx5R0FEb0I7QUFFNUJILHNCQUFjLEVBQWRBO0FBRjRCLE9BQTlCO0FBSUQ7OztzQ0FFaUI7QUFDaEJ2UCxxQ0FBK0I7QUFDL0IsV0FBS3FHLHdCQUFMLENBQThCO0FBQUUxRCxjQUFNLEVBQUVnTix3R0FBNkJBO0FBQXZDLE9BQTlCO0FBQ0Q7OztxQ0FFeUI7QUFBQSxVQUFYQyxJQUFXLHVFQUFKLEVBQUk7QUFDeEIsV0FBS3ZKLHdCQUFMO0FBQ0UxRCxjQUFNLEVBQUVrTix1R0FBNEJBO0FBRHRDLFNBRUtELElBRkw7QUFJRDs7OzRDQUUrRDtBQUFBLGlDQUE5Q2pULE1BQThDO0FBQUEsVUFBOUNBLE1BQThDLDhCQUFyQztBQUFFbVQsY0FBTSxFQUFFO0FBQVYsT0FBcUM7QUFBQSxVQUFkQyxVQUFjLFVBQWRBLFVBQWM7QUFDOUQsV0FBSzFKLHdCQUFMLENBQThCO0FBQzVCMUQsY0FBTSxFQUFFcU4sd0dBRG9CO0FBRTVCclQsY0FBTSxFQUFOQSxNQUY0QjtBQUc1Qm9ULGtCQUFVLEVBQVZBO0FBSDRCLE9BQTlCO0FBS0Q7OztvQ0FFd0I7QUFBQSxVQUFYSCxJQUFXLHVFQUFKLEVBQUk7QUFDdkIsV0FBS3ZKLHdCQUFMO0FBQ0UxRCxjQUFNLEVBQUVzTixzR0FBMkJBO0FBRHJDLFNBRUtMLElBRkw7QUFJRDs7O3lDQUU2QjtBQUFBLFVBQVhBLElBQVcsdUVBQUosRUFBSTtBQUM1QixXQUFLdkosd0JBQUw7QUFDRTFELGNBQU0sRUFBRXVOLDRHQUFpQ0E7QUFEM0MsU0FFS04sSUFGTDtBQUlEOzs7Z0RBRW1FO0FBQUEsaUNBQTlDalQsTUFBOEM7QUFBQSxVQUE5Q0EsTUFBOEMsOEJBQXJDO0FBQUVtVCxjQUFNLEVBQUU7QUFBVixPQUFxQztBQUFBLFVBQWRDLFVBQWMsVUFBZEEsVUFBYztBQUNsRSxXQUFLMUosd0JBQUwsQ0FBOEI7QUFDNUIxRCxjQUFNLEVBQUV3Tiw2R0FEb0I7QUFFNUJ4VCxjQUFNLEVBQU5BLE1BRjRCO0FBRzVCb1Qsa0JBQVUsRUFBVkE7QUFINEIsT0FBOUI7QUFLRDs7O3NEQUVvRDtBQUFBLFVBQXpCSyxTQUF5QixVQUF6QkEsU0FBeUI7QUFBQSxVQUFkTCxVQUFjLFVBQWRBLFVBQWM7QUFDbkQsV0FBSzFKLHdCQUFMLENBQThCO0FBQzVCMUQsY0FBTSxFQUFFME4sdUhBRG9CO0FBRTVCQyxtQkFBVyxFQUFFQyw2R0FBa0MsQ0FBQ0MsYUFGcEI7QUFHNUJKLGlCQUFTLEVBQVRBLFNBSDRCO0FBSTVCTCxrQkFBVSxFQUFWQTtBQUo0QixPQUE5QjtBQU1EOzs7eURBRXVEO0FBQUEsVUFBekJLLFNBQXlCLFVBQXpCQSxTQUF5QjtBQUFBLFVBQWRMLFVBQWMsVUFBZEEsVUFBYztBQUN0RCxXQUFLMUosd0JBQUwsQ0FBOEI7QUFDNUIxRCxjQUFNLEVBQUUwTix1SEFEb0I7QUFFNUJDLG1CQUFXLEVBQUVDLDZHQUFrQyxDQUFDRSxnQkFGcEI7QUFHNUJMLGlCQUFTLEVBQVRBLFNBSDRCO0FBSTVCTCxrQkFBVSxFQUFWQTtBQUo0QixPQUE5QjtBQU1EOzs7d0NBRTRCO0FBQUEsVUFBWEgsSUFBVyx1RUFBSixFQUFJO0FBQzNCLFdBQUt2Six3QkFBTDtBQUNFMUQsY0FBTSxFQUFFK04sMkdBQWdDQTtBQUQxQyxTQUVLZCxJQUZMO0FBSUQ7Ozs7c0lBT0U7QUFBQTs7QUFBQSxZQUpEdFgsR0FJQyxVQUpEQSxHQUlDO0FBQUEscUNBSERxWSxRQUdDO0FBQUEsWUFIREEsUUFHQyxnQ0FIVTtBQUNUcEgsZUFBSyxFQUFFcUgsK0dBQW9DLENBQUNDO0FBRG5DLFNBR1Y7O0FBQ0QsWUFBSTtBQUNGQyxpQ0FBdUIsQ0FBQ3hZLEdBQUQsQ0FBdkI7QUFDQXlZLHNDQUE0QixDQUFDSixRQUFELENBQTVCO0FBQ0FLLDhDQUFvQyxDQUFDTCxRQUFELENBQXBDO0FBQ0QsU0FKRCxDQUlFLE9BQU9sWCxDQUFQLEVBQVU7QUFDVkMsaUJBQU8sQ0FBQ0MsS0FBUixtQ0FBeUNGLENBQXpDO0FBQ0FDLGlCQUFPLENBQUNDLEtBQVIsQ0FBY3NYLHVDQUF1QyxFQUFyRDtBQUNBLGdCQUFNeFgsQ0FBTjtBQUNEOztBQUVELGVBQU8sSUFBSWdQLE9BQUo7QUFBQSxzR0FBWSxXQUFPQyxPQUFQLEVBQWdCQyxNQUFoQixFQUEyQjtBQUM1QyxnQkFBSTFMLENBQUMsR0FBRyxTQUFKQSxDQUFJLENBQUMyTCxHQUFELEVBQVM7QUFDZixrQkFBSUEsR0FBRyxDQUFDalAsS0FBUixFQUFlO0FBQ2JnUCxzQkFBTSxDQUFDO0FBQUVoUCx1QkFBSyxFQUFFaVAsR0FBRyxDQUFDalAsS0FBYjtBQUFvQnVVLDBCQUFRLEVBQUV0RixHQUFHLENBQUNzRjtBQUFsQyxpQkFBRCxDQUFOO0FBQ0QsZUFGRCxNQUVPO0FBQ0x4Rix1QkFBTyxDQUFDO0FBQ05SLDRCQUFVLEVBQUVVLEdBQUcsQ0FBQ1YsVUFEVjtBQUVOZ0osd0NBQXNCLEVBQUU7QUFDdEIzSCx5QkFBSyxFQUFFWCxHQUFHLENBQUNXLEtBRFc7QUFFdEJvSCw0QkFBUSxFQUFFL0gsR0FBRyxDQUFDK0g7QUFGUTtBQUZsQixpQkFBRCxDQUFQO0FBT0Q7QUFDRixhQVpEOztBQWFBLG1CQUFJLENBQUN0Syx3QkFBTCxDQUNFO0FBQ0UxRCxvQkFBTSxFQUFFd08saUhBRFY7QUFFRTdZLGlCQUFHLEVBQUVBLEdBRlA7QUFHRXFZLHNCQUFRLEVBQUVBO0FBSFosYUFERixFQU1FMVQsQ0FORjtBQVFELFdBdEJNOztBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQVA7QUF1QkQsTzs7Ozs7Ozs7Ozs7NkhBRTJCaUwsVSxFQUFZO0FBQUE7O0FBQ3RDLFlBQUksT0FBT0EsVUFBUCxLQUFzQixRQUExQixFQUNFLE1BQU0sSUFBSS9ILEtBQUosQ0FBVSx3Q0FBVixDQUFOO0FBRUYsZUFBTyxJQUFJc0ksT0FBSjtBQUFBLHNHQUFZLFdBQU9DLE9BQVAsRUFBZ0JDLE1BQWhCLEVBQTJCO0FBQzVDLGdCQUFJMUwsQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNmLGtCQUFJQSxHQUFHLENBQUNqUCxLQUFSLEVBQWU7QUFDYmdQLHNCQUFNLENBQUM7QUFBRWhQLHVCQUFLLEVBQUVpUCxHQUFHLENBQUNqUCxLQUFiO0FBQW9CdVUsMEJBQVEsRUFBRXRGLEdBQUcsQ0FBQ3NGO0FBQWxDLGlCQUFELENBQU47QUFDRCxlQUZELE1BRU87QUFDTHhGLHVCQUFPO0FBQ1I7QUFDRixhQU5EOztBQU9BLG1CQUFJLENBQUNyQyx3QkFBTCxDQUNFO0FBQUUxRCxvQkFBTSxFQUFFeU8sZ0hBQVY7QUFBaURsSix3QkFBVSxFQUFWQTtBQUFqRCxhQURGLEVBRUVqTCxDQUZGO0FBSUQsV0FaTTs7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFQO0FBYUQsTzs7Ozs7Ozs7Ozs7dUlBRXVEO0FBQUE7O0FBQUEsWUFBeEJpTCxVQUF3QixVQUF4QkEsVUFBd0I7QUFBQSxZQUFaeUksUUFBWSxVQUFaQSxRQUFZOztBQUN0RDtBQUNBO0FBQ0EsWUFBSTtBQUNGSSxzQ0FBNEIsQ0FBQ0osUUFBRCxDQUE1QjtBQUNELFNBRkQsQ0FFRSxPQUFPbFgsQ0FBUCxFQUFVO0FBQ1ZDLGlCQUFPLENBQUNDLEtBQVIsbUNBQXlDRixDQUF6QztBQUNBQyxpQkFBTyxDQUFDQyxLQUFSLENBQWMwWCx3Q0FBd0MsRUFBdEQ7QUFDQSxnQkFBTTVYLENBQU47QUFDRDs7QUFFRCxlQUFPLElBQUlnUCxPQUFKO0FBQUEsc0dBQVksV0FBT0MsT0FBUCxFQUFnQkMsTUFBaEIsRUFBMkI7QUFDNUMsZ0JBQUkxTCxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDMkwsR0FBRCxFQUFTO0FBQ2Ysa0JBQUlBLEdBQUcsQ0FBQ2pQLEtBQVIsRUFBZTtBQUNiZ1Asc0JBQU0sQ0FBQztBQUFFaFAsdUJBQUssRUFBRWlQLEdBQUcsQ0FBQ2pQLEtBQWI7QUFBb0J1VSwwQkFBUSxFQUFFdEYsR0FBRyxDQUFDc0Y7QUFBbEMsaUJBQUQsQ0FBTjtBQUNELGVBRkQsTUFFTztBQUNMeEYsdUJBQU8sQ0FBQztBQUNOUiw0QkFBVSxFQUFFVSxHQUFHLENBQUNWLFVBRFY7QUFFTmdKLHdDQUFzQixFQUFFO0FBQ3RCM0gseUJBQUssRUFBRVgsR0FBRyxDQUFDVyxLQURXO0FBRXRCb0gsNEJBQVEsRUFBRS9ILEdBQUcsQ0FBQytIO0FBRlE7QUFGbEIsaUJBQUQsQ0FBUDtBQU9EO0FBQ0YsYUFaRDs7QUFhQSxtQkFBSSxDQUFDdEssd0JBQUwsQ0FDRTtBQUNFMUQsb0JBQU0sRUFBRTJPLGtIQURWO0FBRUVwSix3QkFBVSxFQUFFQSxVQUZkO0FBR0V5SSxzQkFBUSxFQUFFQTtBQUhaLGFBREYsRUFNRTFULENBTkY7QUFRRCxXQXRCTTs7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFQO0FBdUJELE87Ozs7Ozs7Ozs7dUNBRWtCMlMsSSxFQUFNO0FBQ3ZCLFdBQUt2Six3QkFBTDtBQUNFMUQsY0FBTSxFQUFFNE8sMkdBQWdDQTtBQUQxQyxTQUVLM0IsSUFGTDtBQUlEOzs7d0NBRW1CO0FBQ2xCLFdBQUt2Six3QkFBTCxDQUE4QjtBQUFFMUQsY0FBTSxFQUFFNk8sMEdBQStCQTtBQUF6QyxPQUE5QjtBQUNEOzs7c0NBRWlCO0FBQUE7O0FBQ2hCLFVBQUksS0FBSzVNLFVBQUwsS0FBb0J3Qyw2RkFBeEIsRUFBNEM7QUFDMUMsWUFBSXFLLEtBQUssR0FBRztBQUFFQyxnQkFBTSxFQUFFO0FBQVYsU0FBWjtBQUNBLGVBQU87QUFBRUQsZUFBSyxFQUFMQTtBQUFGLFNBQVA7QUFDRDs7QUFDRCxhQUFPLElBQUloSixPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVK0MsQ0FBVixFQUFnQjtBQUNqQyxZQUFJeE8sQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNmRixpQkFBTztBQUFHK0ksaUJBQUssRUFBRTdJLEdBQUcsQ0FBQzZJO0FBQWQsYUFBd0IsT0FBSSxDQUFDaE0sUUFBN0IsRUFBUDtBQUNELFNBRkQ7O0FBR0EsZUFBSSxDQUFDWSx3QkFBTCxDQUE4QjtBQUFFMUQsZ0JBQU0sRUFBRWdQLHNHQUEyQkE7QUFBckMsU0FBOUIsRUFBdUUxVSxDQUF2RTtBQUNELE9BTE0sQ0FBUDtBQU1EOzs7dUNBRWtCO0FBQ2pCK0MscUNBQStCO0FBQy9CLGFBQU8sS0FBSzRGLGNBQVo7QUFDRDs7O3lDQUVvQmdNLE8sRUFBUztBQUM1QjVSLHFDQUErQjtBQUMvQixXQUFLcUcsd0JBQUwsQ0FBOEI7QUFDNUIxRCxjQUFNLEVBQUVrUCwrR0FEb0I7QUFFNUJELGVBQU8sRUFBUEE7QUFGNEIsT0FBOUI7QUFJQSxhQUFPLElBQVA7QUFDRDs7O3dDQUVtQjtBQUNsQjVSLHFDQUErQjtBQUMvQixhQUFPLEtBQUtzRSxrQkFBWjtBQUNEOzs7cURBRWdDO0FBQy9CLGFBQU8sS0FBSzFKLGFBQUwsQ0FBbUJJLDhCQUExQjtBQUNEOzs7c0RBRWlDNFcsTyxFQUFTO0FBQ3pDLFVBQUksS0FBS2hOLFVBQUwsS0FBb0J3Qyw2RkFBeEIsRUFBNEM7QUFDMUMsY0FBTSxJQUFJakgsS0FBSixDQUNKLGlFQURJLENBQU47QUFHRDs7QUFDRCxXQUFLdkYsYUFBTCxDQUFtQkksOEJBQW5CLEdBQW9ENFcsT0FBcEQ7QUFDQSxXQUFLdkwsd0JBQUwsQ0FBOEI7QUFDNUIxRCxjQUFNLEVBQUVtUCw2SEFEb0I7QUFFNUJGLGVBQU8sRUFBUEE7QUFGNEIsT0FBOUI7QUFJQSxhQUFPLElBQVA7QUFDRDs7OzswSEFFd0I7QUFBQTs7QUFDdkIsWUFBSSxLQUFLOU4sZUFBVCxFQUEwQjtBQUN4QixjQUFJaU8sR0FBRyxTQUFTNVEsU0FBUyxDQUFDVSxZQUFWLENBQXVCUSxnQkFBdkIsRUFBaEI7QUFDQSxpQkFBTztBQUFFRSxtQkFBTyxFQUFFd1AsR0FBRyxDQUFDQyxHQUFKLENBQVEsVUFBQ0MsQ0FBRDtBQUFBLHFCQUFPN1osSUFBSSxDQUFDOFosS0FBTCxDQUFXOVosSUFBSSxDQUFDQyxTQUFMLENBQWU0WixDQUFmLENBQVgsQ0FBUDtBQUFBLGFBQVI7QUFBWCxXQUFQO0FBQ0Q7O0FBRUQsZUFBTyxJQUFJeEosT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVStDLENBQVYsRUFBZ0I7QUFDakMsY0FBSXhPLENBQUMsR0FBRyxTQUFKQSxDQUFJLENBQUMyTCxHQUFELEVBQVM7QUFDZkYsbUJBQU8sQ0FBQztBQUFFbkcscUJBQU8sRUFBRXFHLEdBQUcsQ0FBQ3JHO0FBQWYsYUFBRCxDQUFQO0FBQ0QsV0FGRDs7QUFHQSxpQkFBSSxDQUFDOEQsd0JBQUwsQ0FDRTtBQUFFMUQsa0JBQU0sRUFBRXdQLHlHQUE4QkE7QUFBeEMsV0FERixFQUVFbFYsQ0FGRjtBQUlELFNBUk0sQ0FBUDtBQVNELE87Ozs7Ozs7Ozs7bUNBRWM5RyxJLEVBQWdCO0FBQUEsVUFBVmljLEVBQVUsdUVBQUwsR0FBSzs7QUFDN0IsVUFBSWhhLElBQUksQ0FBQ0MsU0FBTCxDQUFlbEMsSUFBZixFQUFxQmtWLE1BQXJCLEdBQThCZ0gsMkZBQWxDLEVBQW9EO0FBQ2xELGNBQU0sSUFBSWxTLEtBQUosQ0FDSix5Q0FBeUNrUywyRkFEckMsQ0FBTjtBQUdEOztBQUNELFdBQUtoTSx3QkFBTCxDQUE4QjtBQUFFMUQsY0FBTSxFQUFFMlAsK0ZBQVY7QUFBZ0NuYyxZQUFJLEVBQUpBLElBQWhDO0FBQXNDaWMsVUFBRSxFQUFGQTtBQUF0QyxPQUE5QjtBQUNBLGFBQU8sSUFBUDtBQUNEOzs7dUNBRWtCeEMsSSxFQUFNO0FBQ3ZCNVAscUNBQStCO0FBQy9CLFdBQUtxRyx3QkFBTDtBQUNFMUQsY0FBTSxFQUFFNFAsNEdBQWlDQTtBQUQzQyxTQUVLM0MsSUFGTDtBQUlBLGFBQU8sSUFBUDtBQUNEOzs7cUNBRWdCekUsSSxFQUFNO0FBQ3JCbkwscUNBQStCOztBQUMvQixVQUFJbUwsSUFBSSxJQUFJLEVBQUVBLElBQUksS0FBSyxRQUFULElBQXFCQSxJQUFJLEtBQUssT0FBaEMsQ0FBWixFQUFzRDtBQUNwRHpSLGVBQU8sQ0FBQ0MsS0FBUixDQUNFLGlFQURGO0FBR0EsZUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsV0FBSzBNLHdCQUFMLENBQThCO0FBQzVCMUQsY0FBTSxFQUFFNlAsc0dBRG9CO0FBRTVCckgsWUFBSSxFQUFFQTtBQUZzQixPQUE5QjtBQUlBLGFBQU8sSUFBUDtBQUNEOzs7d0NBRThCO0FBQUEsVUFBYnNILElBQWEsdUVBQU4sSUFBTTtBQUM3QnpTLHFDQUErQjs7QUFDL0IsVUFBSSxPQUFPeVMsSUFBUCxLQUFnQixTQUFwQixFQUErQjtBQUM3Qi9ZLGVBQU8sQ0FBQ0MsS0FBUixDQUFjLGdEQUFkO0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLbUssZUFBVCxFQUEwQjtBQUN4QnBLLGVBQU8sQ0FBQ0MsS0FBUixDQUFjLHVEQUFkO0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsVUFBSSxLQUFLaUwsVUFBTCxLQUFvQndDLDZGQUF4QixFQUE0QztBQUMxQzFOLGVBQU8sQ0FBQ0MsS0FBUixDQUNFLDZEQURGO0FBR0EsZUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsV0FBSzBNLHdCQUFMLENBQThCO0FBQzVCMUQsY0FBTSxFQUFFK1AsNEdBRG9CO0FBRTVCRCxZQUFJLEVBQUpBO0FBRjRCLE9BQTlCO0FBSUEsV0FBS3ZPLGVBQUwsR0FBdUJ1TyxJQUF2QjtBQUNBLGFBQU8sSUFBUDtBQUNEOzs7cUNBRWdCO0FBQ2Z6UyxxQ0FBK0I7O0FBQy9CLFVBQUksS0FBSzhELGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FBYyxvREFBZDtBQUNBLGVBQU8sSUFBUDtBQUNEOztBQUNELGFBQU8sS0FBS3VLLGVBQVo7QUFDRDs7OzZDQUVtQztBQUFBLFVBQWJ1TyxJQUFhLHVFQUFOLElBQU07QUFDbEN6UyxxQ0FBK0I7O0FBQy9CLFVBQUksT0FBT3lTLElBQVAsS0FBZ0IsU0FBcEIsRUFBK0I7QUFDN0IvWSxlQUFPLENBQUNDLEtBQVIsQ0FBYyxxREFBZDtBQUNBLGVBQU8sSUFBUDtBQUNEOztBQUNELFVBQUksS0FBS21LLGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FDRSw0REFERjtBQUdBLGVBQU8sSUFBUDtBQUNEOztBQUNELFVBQUksS0FBS2lMLFVBQUwsS0FBb0J3Qyw2RkFBeEIsRUFBNEM7QUFDMUMxTixlQUFPLENBQUNDLEtBQVIsQ0FDRSxrRUFERjtBQUdBLGVBQU8sSUFBUDtBQUNEOztBQUNELFdBQUswTSx3QkFBTCxDQUE4QjtBQUM1QjFELGNBQU0sRUFBRWdRLGlIQURvQjtBQUU1QkYsWUFBSSxFQUFKQTtBQUY0QixPQUE5QjtBQUlBLFdBQUt0TyxvQkFBTCxHQUE0QnNPLElBQTVCO0FBQ0EsYUFBTyxJQUFQO0FBQ0Q7OzswQ0FFcUI7QUFDcEJ6UyxxQ0FBK0I7O0FBQy9CLFVBQUksS0FBSzhELGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FBYyx5REFBZDtBQUNBLGVBQU8sSUFBUDtBQUNEOztBQUNELGFBQU8sS0FBS3dLLG9CQUFaO0FBQ0Q7Ozt5Q0FFb0I7QUFDbkJuRSxxQ0FBK0I7O0FBQy9CLFVBQUksS0FBSzhELGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FBYyx3REFBZDtBQUNBLGVBQU8sSUFBUDtBQUNEOztBQUNELGFBQU8sS0FBS3lLLG1CQUFaO0FBQ0Q7Ozs2Q0FFd0J3TyxZLEVBQWM7QUFDckM1UyxxQ0FBK0I7O0FBQy9CLFVBQUksS0FBSzhELGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FDRSw4REFERjtBQUdBLGVBQU8sSUFBUDtBQUNEOztBQUNELFVBQUksS0FBS2lMLFVBQUwsS0FBb0J3Qyw2RkFBeEIsRUFBNEM7QUFDMUMxTixlQUFPLENBQUNDLEtBQVIsQ0FDRSxvRUFERjtBQUdBLGVBQU8sSUFBUDtBQUNELE9BYm9DLENBY3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBSzBNLHdCQUFMLENBQThCO0FBQzVCMUQsY0FBTSxFQUFFa1Esa0hBRG9CO0FBRTVCRCxvQkFBWSxFQUFaQTtBQUY0QixPQUE5QjtBQUlBLFdBQUt4TyxtQkFBTCxHQUEyQndPLFlBQTNCO0FBQ0EsYUFBTyxJQUFQO0FBQ0Q7Ozt3Q0FFbUI7QUFDbEI1UyxxQ0FBK0I7O0FBQy9CLFVBQUksS0FBSzhELGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FBYyx1REFBZDtBQUNBLGVBQU8sSUFBUDtBQUNEOztBQUNELGFBQU8sS0FBSzBLLGtCQUFaO0FBQ0Q7Ozs0Q0FFdUJ5TyxJLEVBQU07QUFDNUI5UyxxQ0FBK0I7O0FBQy9CLFVBQUksS0FBSzhELGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FDRSw2REFERjtBQUdBLGVBQU8sSUFBUDtBQUNEOztBQUNELFVBQUksS0FBS2lMLFVBQUwsS0FBb0J3Qyw2RkFBeEIsRUFBNEM7QUFDMUMxTixlQUFPLENBQUNDLEtBQVIsQ0FDRSxtRUFERjtBQUdBLGVBQU8sSUFBUDtBQUNEOztBQUNELFVBQUksQ0FBQ3pCLHlCQUF5QixDQUFDNGEsSUFBRCxDQUE5QixFQUFzQztBQUNwQ3BaLGVBQU8sQ0FBQ0MsS0FBUix5RUFDbUV2QixJQUFJLENBQUNDLFNBQUwsQ0FDL0RiLHFCQUQrRCxDQURuRTtBQUtBLGVBQU8sSUFBUDtBQUNEOztBQUNELFdBQUs2Tyx3QkFBTCxDQUE4QjtBQUM1QjFELGNBQU0sRUFBRW9RLGtIQURvQjtBQUU1QkQsWUFBSSxFQUFKQTtBQUY0QixPQUE5QjtBQUlBLFdBQUt6TyxrQkFBTCxHQUEwQnlPLElBQTFCO0FBQ0EsYUFBTyxJQUFQO0FBQ0Q7Ozs0QkFFTztBQUNOLFVBQUksS0FBS2hQLGVBQVQsRUFBMEI7QUFDeEJwSyxlQUFPLENBQUNDLEtBQVIsQ0FBYywyQ0FBZDtBQUNBLGVBQU8sSUFBUDtBQUNEOztBQUNELGFBQU8sS0FBS21HLFVBQUwsQ0FBZ0I3RSxLQUF2QjtBQUNEOzs7NkJBRVFBLEssRUFBTztBQUFBOztBQUNkLGFBQU8sSUFBSXdOLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFBcUI7QUFDdEMsWUFBSSxPQUFJLENBQUM3RSxlQUFULEVBQTBCO0FBQ3hCNkUsZ0JBQU0sQ0FBQyw4Q0FBRCxDQUFOO0FBQ0E7QUFDRDs7QUFDRCxZQUFJO0FBQ0YsaUJBQUksQ0FBQ2xFLGtCQUFMLENBQXdCO0FBQ3RCeEosaUJBQUssRUFBTEE7QUFEc0IsV0FBeEI7O0FBR0EsaUJBQUksQ0FBQzZFLFVBQUwsQ0FBZ0I3RSxLQUFoQixxQkFDS0EsS0FETCxFQUpFLENBT0Y7O0FBQ0EsaUJBQUksQ0FBQ29MLHdCQUFMLENBQThCO0FBQzVCMUQsa0JBQU0sRUFBRXFRLGlHQURvQjtBQUU1Qi9YLGlCQUFLLEVBQUUsT0FBSSxDQUFDNkUsVUFBTCxDQUFnQjdFO0FBRkssV0FBOUI7QUFJQTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDUSxjQUFJO0FBQ0YsbUJBQUksQ0FBQ3dILElBQUwsQ0FBVXdRLG9HQUFWLEVBQXFDO0FBQ25DdFEsb0JBQU0sRUFBRXNRLG9HQUQyQjtBQUVuQ2hZLG1CQUFLLEVBQUUsT0FBSSxDQUFDNkUsVUFBTCxDQUFnQjdFO0FBRlksYUFBckM7QUFJRCxXQUxELENBS0UsT0FBT3hCLENBQVAsRUFBVTtBQUNWQyxtQkFBTyxDQUFDa1UsR0FBUixDQUFZLGdDQUFaLEVBQThDblUsQ0FBOUM7QUFDRDs7QUFDRGlQLGlCQUFPLENBQUMsT0FBSSxDQUFDNUksVUFBTCxDQUFnQjdFLEtBQWpCLENBQVA7QUFDRCxTQTdCRCxDQTZCRSxPQUFPeEIsQ0FBUCxFQUFVO0FBQ1ZrUCxnQkFBTSxDQUFDbFAsQ0FBRCxDQUFOO0FBQ0Q7QUFDRixPQXJDTSxDQUFQO0FBc0NEOzs7cUNBRWdCO0FBQUE7O0FBQ2Z1RyxxQ0FBK0I7QUFDL0IsYUFBTyxJQUFJeUksT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVStDLENBQVYsRUFBZ0I7QUFDakMsWUFBSXhPLENBQUMsR0FBRyxTQUFKQSxDQUFJLENBQUMyTCxHQUFELEVBQVM7QUFDZixpQkFBT0EsR0FBRyxDQUFDakcsTUFBWDtBQUNBLGlCQUFPaUcsR0FBRyxDQUFDb0IsYUFBWDtBQUNBdEIsaUJBQU8sQ0FBQ0UsR0FBRCxDQUFQO0FBQ0QsU0FKRDs7QUFLQSxlQUFJLENBQUN2Qyx3QkFBTCxDQUNFO0FBQUUxRCxnQkFBTSxFQUFFdVEsd0dBQTZCQTtBQUF2QyxTQURGLEVBRUVqVyxDQUZGO0FBSUQsT0FWTSxDQUFQO0FBV0Q7Ozs7MkhBRXlCO0FBQ3hCK0MsdUNBQStCOztBQUMvQixZQUNFLENBQUMsS0FBSzZELE9BQU4sSUFDQXJELFFBQVEsQ0FBQzJGLGlCQURULElBRUEsQ0FBQ3pHLHFHQUFxQixFQUh4QixFQUlFO0FBQ0E7QUFDRDs7QUFDRCxZQUFJO0FBQ0YsaUJBQU8sS0FBS21FLE9BQUwsQ0FBYXFDLGlCQUFwQixJQUNJLEtBQUtyQyxPQUFMLENBQWFxQyxpQkFBYixFQURKLEdBRUksS0FBS3JDLE9BQUwsQ0FBYTBDLHVCQUFiLEVBRko7QUFHRCxTQUpELENBSUUsT0FBTzlNLENBQVAsRUFBVTtBQUNWQyxpQkFBTyxDQUFDa1UsR0FBUixDQUFZLHNDQUFaLEVBQW9EblUsQ0FBcEQ7QUFDRDtBQUNGLE87Ozs7Ozs7Ozs7cUNBRWdCO0FBQ2Z1RyxxQ0FBK0I7O0FBQy9CLFVBQUlRLFFBQVEsQ0FBQzJGLGlCQUFiLEVBQWdDO0FBQzlCM0YsZ0JBQVEsQ0FBQzJTLGNBQVQ7QUFDRCxPQUZELE1BRU8sSUFBSTNTLFFBQVEsQ0FBQ2dHLHVCQUFiLEVBQXNDO0FBQzNDaEcsZ0JBQVEsQ0FBQzRTLG9CQUFUO0FBQ0Q7QUFDRjs7Ozs4R0FFcUQ7QUFBQTs7QUFBQSx5RkFBSixFQUFJO0FBQUEsMkNBQXpDQyx5QkFBeUM7QUFBQSxZQUF6Q0EseUJBQXlDLHNDQUFiLElBQWE7O0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLFlBQ0UsS0FBS3RPLFlBQUwsQ0FBa0JDLE1BQWxCLEtBQTZCQywrRkFBN0IsSUFDQSxDQUFDLEtBQUs0RixTQUFMLEVBRkgsRUFHRTtBQUNBO0FBQ0EsaUJBQU8sSUFBSXBDLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVUrQyxDQUFWLEVBQWdCO0FBQ2pDLGdCQUFJeE8sQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQzJMLEdBQUQsRUFBUztBQUNmLHFCQUFPQSxHQUFHLENBQUNqRyxNQUFYO0FBQ0EscUJBQU9pRyxHQUFHLENBQUNvQixhQUFYO0FBQ0F0QixxQkFBTyxDQUFDRSxHQUFELENBQVA7QUFDRCxhQUpEOztBQUtBLG1CQUFJLENBQUN2Qyx3QkFBTCxDQUNFO0FBQUUxRCxvQkFBTSxFQUFFMlEsNEZBQVY7QUFBNkJELHVDQUF5QixFQUF6QkE7QUFBN0IsYUFERixFQUVFcFcsQ0FGRjtBQUlELFdBVk0sQ0FBUDtBQVdELFNBaEJELE1BZ0JPO0FBQ0w7QUFDQTtBQUNBLGNBQUksS0FBSzZDLFVBQUwsQ0FBZ0J4SCxHQUFwQixFQUF5QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQU87QUFBRWliLGdDQUFrQixFQUFFLEtBQUt6VCxVQUFMLENBQWdCeEg7QUFBdEMsYUFBUDtBQUNEOztBQUNELGlCQUFPLElBQVA7QUFDRDtBQUNGLE87Ozs7Ozs7Ozs7OzZHQUVXO0FBQ1YsZUFBTyxJQUFJbVEsT0FBSjtBQUFBLHNHQUFZLFdBQU9DLE9BQVAsRUFBZ0IrQyxDQUFoQixFQUFzQjtBQUN2QyxnQkFBSTtBQUNGLGtCQUFJblQsR0FBRyxHQUFHLG1DQUFWO0FBQ0Esa0JBQUlrYixHQUFHLFNBQVNDLEtBQUssQ0FBQ25iLEdBQUQsQ0FBckI7QUFDQSxrQkFBSW5DLElBQUksU0FBU3FkLEdBQUcsQ0FBQ0UsSUFBSixFQUFqQjtBQUNBaEwscUJBQU8sQ0FBQztBQUFFaUwsdUJBQU8sRUFBRXhkLElBQUksQ0FBQ3lkO0FBQWhCLGVBQUQsQ0FBUDtBQUNELGFBTEQsQ0FLRSxPQUFPbmEsQ0FBUCxFQUFVO0FBQ1ZDLHFCQUFPLENBQUNDLEtBQVIsQ0FBYyxtQkFBZCxFQUFtQ0YsQ0FBbkM7QUFDQWlQLHFCQUFPLENBQUM7QUFBRWlMLHVCQUFPLEVBQUU7QUFBWCxlQUFELENBQVA7QUFDRDtBQUNGLFdBVk07O0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBUDtBQVdELE87Ozs7Ozs7Ozs7OzBIQUV3QkUsSSxFQUFNO0FBQUE7O0FBQzdCN1QsdUNBQStCO0FBQy9CLGVBQU8sSUFBSXlJLE9BQUo7QUFBQSxzR0FBWSxXQUFPQyxPQUFQLEVBQWdCQyxNQUFoQixFQUEyQjtBQUM1QyxnQkFBSTFMLENBQUMsR0FBRyxTQUFKQSxDQUFJLENBQUMyTCxHQUFELEVBQVM7QUFDZixrQkFBSUEsR0FBRyxDQUFDalAsS0FBUixFQUFlO0FBQ2JnUCxzQkFBTSxDQUFDO0FBQUVoUCx1QkFBSyxFQUFFaVAsR0FBRyxDQUFDalA7QUFBYixpQkFBRCxDQUFOO0FBQ0QsZUFGRCxNQUVPO0FBQ0wrTyx1QkFBTyxDQUFDO0FBQUVvTCwwQkFBUSxFQUFFbEwsR0FBRyxDQUFDa0w7QUFBaEIsaUJBQUQsQ0FBUDtBQUNEO0FBQ0YsYUFORDs7QUFPQSxtQkFBSSxDQUFDek4sd0JBQUwsQ0FDRTtBQUFFMUQsb0JBQU0sRUFBRW9SLDRHQUFWO0FBQTZDRixrQkFBSSxFQUFKQTtBQUE3QyxhQURGLEVBRUU1VyxDQUZGO0FBSUQsV0FaTTs7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFQO0FBYUQsTzs7Ozs7Ozs7Ozs7NEhBRTBCO0FBQUE7O0FBQ3pCLGVBQU8sSUFBSXdMLE9BQUo7QUFBQSxzR0FBWSxXQUFPQyxPQUFQLEVBQWdCQyxNQUFoQixFQUEyQjtBQUM1QyxnQkFBSTFMLENBQUMsR0FBRyxTQUFKQSxDQUFJLENBQUMyTCxHQUFELEVBQVM7QUFDZixrQkFBSUEsR0FBRyxDQUFDalAsS0FBUixFQUFlO0FBQ2JnUCxzQkFBTSxDQUFDO0FBQUVoUCx1QkFBSyxFQUFFaVAsR0FBRyxDQUFDalA7QUFBYixpQkFBRCxDQUFOO0FBQ0QsZUFGRCxNQUVPO0FBQ0wrTyx1QkFBTyxDQUFDO0FBQUV0UywwQkFBUSxFQUFFd1MsR0FBRyxDQUFDeFM7QUFBaEIsaUJBQUQsQ0FBUDtBQUNEO0FBQ0YsYUFORDs7QUFPQSxtQkFBSSxDQUFDaVEsd0JBQUwsQ0FDRTtBQUFFMUQsb0JBQU0sRUFBRXFSLDRHQUFpQ0E7QUFBM0MsYUFERixFQUVFL1csQ0FGRjtBQUlELFdBWk07O0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBUDtBQWFELE87Ozs7Ozs7Ozs7K0NBRTBCZ1gsRyxFQUFLO0FBQzlCalUscUNBQStCOztBQUMvQixVQUFJLEVBQUUsT0FBT2lVLEdBQVAsS0FBZSxRQUFmLElBQTJCQSxHQUFHLEtBQUssSUFBbkMsSUFBMkNBLEdBQUcsS0FBSyxLQUFyRCxDQUFKLEVBQWlFO0FBQy9ELGNBQU0sSUFBSTlULEtBQUosbUdBQ3VGOFQsR0FEdkYsRUFBTjtBQUdEOztBQUNELFdBQUs1Tix3QkFBTCxDQUE4QjtBQUFFMUQsY0FBTSxFQUFFdVIscUdBQVY7QUFBc0NELFdBQUcsRUFBSEE7QUFBdEMsT0FBOUI7QUFDRDs7O3VCQUVFdkYsUyxFQUFXelIsQyxFQUFHO0FBQ2YsV0FBS3VJLGNBQUwsQ0FBb0JrSixTQUFwQixJQUFpQyxFQUFqQztBQUNBLFdBQUtySSx3QkFBTCxDQUE4QjtBQUM1QjFELGNBQU0sRUFBRWdNLDhHQURvQjtBQUU1QkMsVUFBRSxFQUFFRjtBQUZ3QixPQUE5QjtBQUlBLGFBQU95Riw4Q0FBWSxDQUFDQyxTQUFiLENBQXVCeEYsRUFBdkIsQ0FBMEJ5RixJQUExQixDQUErQixJQUEvQixFQUFxQzNGLFNBQXJDLEVBQWdEelIsQ0FBaEQsQ0FBUDtBQUNELEssQ0FFRDtBQUNBO0FBQ0E7QUFDQTs7Ozt5QkFDS3lSLFMsRUFBV3pSLEMsRUFBRztBQUNqQixXQUFLdUksY0FBTCxDQUFvQmtKLFNBQXBCLElBQWlDLEVBQWpDO0FBQ0EsV0FBS3JJLHdCQUFMLENBQThCO0FBQzVCMUQsY0FBTSxFQUFFZ00sOEdBRG9CO0FBRTVCQyxVQUFFLEVBQUVGO0FBRndCLE9BQTlCO0FBSUEsYUFBT3lGLDhDQUFZLENBQUNDLFNBQWIsQ0FBdUJFLElBQXZCLENBQTRCRCxJQUE1QixDQUFpQyxJQUFqQyxFQUF1QzNGLFNBQXZDLEVBQWtEelIsQ0FBbEQsQ0FBUDtBQUNEOzs7d0JBRUd5UixTLEVBQVd6UixDLEVBQUc7QUFDaEIsYUFBTyxLQUFLdUksY0FBTCxDQUFvQmtKLFNBQXBCLENBQVA7QUFDQSxXQUFLckksd0JBQUwsQ0FBOEI7QUFDNUIxRCxjQUFNLEVBQUVnTSw4R0FEb0I7QUFFNUI0RixXQUFHLEVBQUU3RjtBQUZ1QixPQUE5QjtBQUlBLGFBQU95Riw4Q0FBWSxDQUFDQyxTQUFiLENBQXVCRyxHQUF2QixDQUEyQkYsSUFBM0IsQ0FBZ0MsSUFBaEMsRUFBc0MzRixTQUF0QyxFQUFpRHpSLENBQWpELENBQVA7QUFDRCxLLENBRUQ7QUFDQTtBQUNBOzs7O3VDQUVtQjZDLFUsRUFBWTtBQUM3QixXQUFLLElBQUk3QyxDQUFULElBQWM2QyxVQUFkLEVBQTBCO0FBQ3hCLFlBQUksQ0FBQ2hJLFdBQVcsQ0FBQ21GLENBQUQsQ0FBaEIsRUFBcUI7QUFDbkIsZ0JBQU0sSUFBSWtELEtBQUosa0NBQW9DbEQsQ0FBcEMsT0FBTjtBQUNEOztBQUNELFlBQ0VuRixXQUFXLENBQUNtRixDQUFELENBQVgsQ0FBZWhGLFFBQWYsSUFDQSxDQUFDSCxXQUFXLENBQUNtRixDQUFELENBQVgsQ0FBZWhGLFFBQWYsQ0FBd0I2SCxVQUFVLENBQUM3QyxDQUFELENBQWxDLEVBQXVDLElBQXZDLENBRkgsRUFHRTtBQUNBLGdCQUFNLElBQUlrRCxLQUFKLHFCQUF1QmxELENBQXZCLGdCQUE4Qm5GLFdBQVcsQ0FBQ21GLENBQUQsQ0FBWCxDQUFlOUUsSUFBN0MsRUFBTjtBQUNEO0FBQ0Y7QUFDRjs7O3lDQUVvQjtBQUNuQjtBQUNBLFVBQUlxYyxLQUFLLG1DQUNGLEtBQUsxVSxVQURIO0FBRUxsRCxXQUFHLEVBQUUsS0FBS2lKLFlBRkw7QUFHTGhKLGVBQU8sRUFBRTRYLGtCQUFrQixDQUFDN2IsTUFBTSxDQUFDOGIsUUFBUCxDQUFnQkMsSUFBakI7QUFIdEIsUUFBVDtBQUFBLFVBS0VDLFFBQVEsR0FBR0osS0FBSyxDQUFDbGMsR0FBTixDQUFVb0QsS0FBVixDQUFnQixJQUFoQixJQUF3QixHQUF4QixHQUE4QixHQUwzQztBQUFBLFVBTUVwRCxHQUFHLEdBQUdrYyxLQUFLLENBQUNsYyxHQU5kO0FBQUEsVUFPRXVjLFFBQVEsR0FBR3ZaLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZekQsV0FBWixFQUF5QmdkLE1BQXpCLENBQ1QsVUFBQ0MsQ0FBRDtBQUFBLGVBQU9qZCxXQUFXLENBQUNpZCxDQUFELENBQVgsQ0FBZXRjLFdBQWYsSUFBOEIrYixLQUFLLENBQUNPLENBQUQsQ0FBTCxLQUFhOVEsU0FBbEQ7QUFBQSxPQURTLENBUGI7O0FBVUEsVUFBSStRLGNBQWMsR0FBR0gsUUFBUSxDQUMxQjdDLEdBRGtCLENBQ2QsVUFBQytDLENBQUQ7QUFBQSx5QkFBVWpkLFdBQVcsQ0FBQ2lkLENBQUQsQ0FBWCxDQUFldGMsV0FBekIsY0FBd0MrYixLQUFLLENBQUNPLENBQUQsQ0FBN0M7QUFBQSxPQURjLEVBRWxCdFosSUFGa0IsQ0FFYixHQUZhLENBQXJCO0FBR0EsYUFBT25ELEdBQUcsR0FBR3NjLFFBQU4sR0FBaUJJLGNBQXhCO0FBQ0QsSyxDQUVEO0FBQ0E7QUFDQTtBQUNBOzs7O2dDQUNZO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFPLENBQ0xuUSwwRkFESyxFQUVMd0MsOEZBRkssRUFHTCtILDJGQUhLLEVBSUxmLDRGQUpLLEVBS0xoVixRQUxLLENBS0ksS0FBS3VMLFVBTFQsQ0FBUDtBQU1EOzs7NkNBRXdCcVEsTyxFQUFTQyxRLEVBQVU7QUFDMUMsV0FBS25QLGVBQUwsQ0FBcUJNLHdCQUFyQixDQUNFNE8sT0FERixFQUVFQyxRQUZGLEVBR0UsS0FBS3JSLE9BSFAsRUFJRSxLQUFLZ0MsWUFKUDtBQU1ELEssQ0FFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7d0RBRW9DK0MsRyxFQUFLO0FBQ3ZDLFdBQUs3QyxlQUFMLENBQXFCb1AsbUNBQXJCLENBQ0V2TSxHQURGLEVBRUUsS0FBSy9FLE9BRlAsRUFHRSxLQUFLZ0MsWUFIUDtBQUtEOzs7a0VBRTZDdVAsUSxFQUFVO0FBQ3RELGFBQU8sS0FBS3JQLGVBQUwsQ0FBcUJzUCw2Q0FBckIsQ0FDTEQsUUFESyxFQUVMLEtBQUt2UCxZQUZBLENBQVA7QUFJRDs7O3FFQUVnRHlQLFUsRUFBWTtBQUMzRCxXQUFLdlAsZUFBTCxDQUFxQndQLGdEQUFyQixDQUNFRCxVQURGO0FBR0Q7OztpREFFNEIxTSxHLEVBQUs7QUFDaEMsY0FBUUEsR0FBRyxDQUFDakcsTUFBWjtBQUNFLGFBQUs2UyxxSEFBTDtBQUNFLGVBQUtuUCx3QkFBTDtBQUNFMUQsa0JBQU0sRUFBRThTLDJHQUFnQ0E7QUFEMUMsYUFFSyxLQUFLM1YsVUFGVjtBQUlBOztBQUNGLGFBQUttTyw2RkFBTDtBQUNFLGNBQUksS0FBS08sZUFBVCxFQUEwQjtBQUN4QixpQkFBS0EsZUFBTDs7QUFDQSxpQkFBS0EsZUFBTCxHQUF1QixJQUF2QjtBQUNEOztBQUNELGNBQUk7QUFDRixpQkFBSy9MLElBQUwsQ0FBVW1HLEdBQUcsQ0FBQ2pHLE1BQWQsRUFBc0JpRyxHQUF0QjtBQUNELFdBRkQsQ0FFRSxPQUFPblAsQ0FBUCxFQUFVO0FBQ1ZDLG1CQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7O0FBQ0Q7O0FBQ0YsYUFBS2ljLHFHQUFMO0FBQ0UsY0FBSSxLQUFLekcsZUFBVCxFQUEwQjtBQUN4QixpQkFBS0EsZUFBTCxDQUFxQnJHLEdBQUcsQ0FBQ0wsWUFBekI7O0FBQ0EsaUJBQUswRyxlQUFMLEdBQXVCLElBQXZCO0FBQ0Q7O0FBQ0QsY0FBSTtBQUNGLGlCQUFLeE0sSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQmlHLEdBQXRCO0FBQ0QsV0FGRCxDQUVFLE9BQU9uUCxDQUFQLEVBQVU7QUFDVkMsbUJBQU8sQ0FBQ2tVLEdBQVIsQ0FBWSxnQkFBWixFQUE4QmhGLEdBQTlCLEVBQW1DblAsQ0FBbkM7QUFDRDs7QUFDRDs7QUFDRixhQUFLa2MseUdBQUw7QUFDQSxhQUFLQywwR0FBTDtBQUNFLGNBQUksS0FBS2hSLFVBQUwsS0FBb0J3SywyRkFBeEIsRUFBMEM7QUFDeEM7QUFDRDs7QUFDRCxjQUFJeEcsR0FBRyxDQUFDdEwsV0FBSixJQUFtQnNMLEdBQUcsQ0FBQ3RMLFdBQUosQ0FBZ0I0SyxVQUF2QyxFQUFtRDtBQUNqRCxnQkFBSXpRLEVBQUUsR0FBR21SLEdBQUcsQ0FBQ3RMLFdBQUosQ0FBZ0IySyxLQUFoQixHQUF3QixPQUF4QixHQUFrQ1csR0FBRyxDQUFDdEwsV0FBSixDQUFnQjRLLFVBQTNEOztBQUNBLGdCQUFJLEtBQUtwRSxlQUFULEVBQTBCO0FBQ3hCb0wscUVBQUEsQ0FBc0J0RyxHQUFHLENBQUN0TCxXQUExQjtBQUNBNFIsMkVBQUEsQ0FBNEJ0RyxHQUFHLENBQUN0TCxXQUFoQztBQUNBNFIsMkVBQUEsQ0FDRXRHLEdBQUcsQ0FBQ3RMLFdBRE4sRUFFRSxLQUFLOEgsYUFBTCxDQUFtQjNOLEVBQW5CLENBRkY7QUFJRDs7QUFFRCxnQkFBSTtBQUNGO0FBQ0EsbUJBQUtvZSxzQkFBTCxDQUNFLEtBQUt6USxhQUFMLENBQW1CM04sRUFBbkIsQ0FERixFQUVFbVIsR0FBRyxDQUFDdEwsV0FGTixFQUdFLFlBSEY7QUFLQSxtQkFBS3VZLHNCQUFMLENBQ0UsS0FBS3pRLGFBQUwsQ0FBbUIzTixFQUFuQixDQURGLEVBRUVtUixHQUFHLENBQUN0TCxXQUZOLEVBR0UsWUFIRjtBQUtBLG1CQUFLdVksc0JBQUwsQ0FDRSxLQUFLelEsYUFBTCxDQUFtQjNOLEVBQW5CLENBREYsRUFFRW1SLEdBQUcsQ0FBQ3RMLFdBRk4sRUFHRSxrQkFIRjtBQUtBLG1CQUFLdVksc0JBQUwsQ0FDRSxLQUFLelEsYUFBTCxDQUFtQjNOLEVBQW5CLENBREYsRUFFRW1SLEdBQUcsQ0FBQ3RMLFdBRk4sRUFHRSxrQkFIRjtBQUtBLG1CQUFLd1ksc0JBQUwsQ0FDRSxLQUFLMVEsYUFBTCxDQUFtQjNOLEVBQW5CLENBREYsRUFFRW1SLEdBQUcsQ0FBQ3RMLFdBRk4sRUFHRSxZQUhGO0FBS0EsbUJBQUt3WSxzQkFBTCxDQUNFLEtBQUsxUSxhQUFMLENBQW1CM04sRUFBbkIsQ0FERixFQUVFbVIsR0FBRyxDQUFDdEwsV0FGTixFQUdFLFlBSEY7QUFLQSxtQkFBS3dZLHNCQUFMLENBQ0UsS0FBSzFRLGFBQUwsQ0FBbUIzTixFQUFuQixDQURGLEVBRUVtUixHQUFHLENBQUN0TCxXQUZOLEVBR0Usa0JBSEY7QUFLQSxtQkFBS3dZLHNCQUFMLENBQ0UsS0FBSzFRLGFBQUwsQ0FBbUIzTixFQUFuQixDQURGLEVBRUVtUixHQUFHLENBQUN0TCxXQUZOLEVBR0Usa0JBSEYsRUFyQ0UsQ0EwQ0Y7QUFDQTs7QUFDQSxtQkFBS3lZLHFDQUFMLENBQ0UsS0FBSzNRLGFBQUwsQ0FBbUIzTixFQUFuQixDQURGLEVBRUVtUixHQUFHLENBQUN0TCxXQUZOO0FBSUEsbUJBQUswWSxxQ0FBTCxDQUNFLEtBQUs1USxhQUFMLENBQW1CM04sRUFBbkIsQ0FERixFQUVFbVIsR0FBRyxDQUFDdEwsV0FGTixFQWhERSxDQXFERjs7QUFDQSxtQkFBSzJZLDBCQUFMLENBQ0UsS0FBSzdRLGFBQUwsQ0FBbUIzTixFQUFuQixDQURGLEVBRUVtUixHQUFHLENBQUN0TCxXQUZOO0FBSUEsbUJBQUs0WSwwQkFBTCxDQUNFLEtBQUs5USxhQUFMLENBQW1CM04sRUFBbkIsQ0FERixFQUVFbVIsR0FBRyxDQUFDdEwsV0FGTjtBQUlELGFBOURELENBOERFLE9BQU83RCxDQUFQLEVBQVU7QUFDVkMscUJBQU8sQ0FBQ0MsS0FBUixDQUFjLG9CQUFkLEVBQW9DRixDQUFwQztBQUNELGFBM0VnRCxDQTRFakQ7OztBQUNBLGdCQUNFLENBQUMsS0FBSzBjLHFDQUFMLENBQ0N2TixHQUFHLENBQUN0TCxXQURMLEVBRUMsS0FBSzhILGFBQUwsQ0FBbUIzTixFQUFuQixDQUZELENBREgsRUFLRTtBQUNBLG1CQUFLMk4sYUFBTCxDQUFtQjNOLEVBQW5CLHNCQUE4Qm1SLEdBQUcsQ0FBQ3RMLFdBQWxDO0FBQ0EsbUJBQUttRyw2Q0FBTDs7QUFDQSxrQkFBSTtBQUNGLHFCQUFLaEIsSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQmlHLEdBQXRCO0FBQ0QsZUFGRCxDQUVFLE9BQU9uUCxDQUFQLEVBQVU7QUFDVkMsdUJBQU8sQ0FBQ2tVLEdBQVIsQ0FBWSxnQkFBWixFQUE4QmhGLEdBQTlCLEVBQW1DblAsQ0FBbkM7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0Q7O0FBQ0YsYUFBSzJjLHVHQUFMO0FBQ0UsY0FBSXhOLEdBQUcsQ0FBQ3RMLFdBQUosSUFBbUJzTCxHQUFHLENBQUN0TCxXQUFKLENBQWdCNEssVUFBdkMsRUFBbUQ7QUFDakQ7QUFDQSxnQkFBSW1PLEtBQUssR0FBRyxLQUFLalIsYUFBTCxDQUFtQndELEdBQUcsQ0FBQ3RMLFdBQUosQ0FBZ0I0SyxVQUFuQyxDQUFaOztBQUNBLGdCQUFJbU8sS0FBSixFQUFXO0FBQ1QsbUJBQUtSLHNCQUFMLENBQTRCUSxLQUE1QixFQUFtQyxJQUFuQyxFQUF5QyxZQUF6QztBQUNBLG1CQUFLUixzQkFBTCxDQUE0QlEsS0FBNUIsRUFBbUMsSUFBbkMsRUFBeUMsWUFBekM7QUFDQSxtQkFBS1Isc0JBQUwsQ0FBNEJRLEtBQTVCLEVBQW1DLElBQW5DLEVBQXlDLGtCQUF6QztBQUNBLG1CQUFLUixzQkFBTCxDQUE0QlEsS0FBNUIsRUFBbUMsSUFBbkMsRUFBeUMsa0JBQXpDO0FBQ0EsbUJBQUtOLHFDQUFMLENBQTJDTSxLQUEzQyxFQUFrRCxJQUFsRDtBQUNELGFBVGdELENBVWpEOzs7QUFDQSxtQkFBTyxLQUFLalIsYUFBTCxDQUFtQndELEdBQUcsQ0FBQ3RMLFdBQUosQ0FBZ0I0SyxVQUFuQyxDQUFQOztBQUNBLGdCQUFJO0FBQ0YsbUJBQUt6RixJQUFMLENBQVVtRyxHQUFHLENBQUNqRyxNQUFkLEVBQXNCaUcsR0FBdEI7QUFDRCxhQUZELENBRUUsT0FBT25QLENBQVAsRUFBVTtBQUNWQyxxQkFBTyxDQUFDa1UsR0FBUixDQUFZLGdCQUFaLEVBQThCaEYsR0FBOUIsRUFBbUNuUCxDQUFuQztBQUNEO0FBQ0Y7O0FBQ0Q7O0FBQ0YsYUFBSzZjLGlIQUFMO0FBQ0UsY0FBSSxDQUFDQyw4REFBUyxDQUFDLEtBQUtsUixrQkFBTixFQUEwQnVELEdBQUcsQ0FBQzROLGlCQUE5QixDQUFkLEVBQWdFO0FBQzlELGlCQUFLblIsa0JBQUwsR0FBMEJ1RCxHQUFHLENBQUM0TixpQkFBOUI7O0FBQ0EsZ0JBQUk7QUFDRixtQkFBSy9ULElBQUwsQ0FBVW1HLEdBQUcsQ0FBQ2pHLE1BQWQsRUFBc0JpRyxHQUF0QjtBQUNELGFBRkQsQ0FFRSxPQUFPblAsQ0FBUCxFQUFVO0FBQ1ZDLHFCQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7QUFDRjs7QUFDRDs7QUFDRixhQUFLZ2QsMkdBQUw7QUFBdUM7QUFDckMsZ0JBQUlDLGNBQWMsR0FBRztBQUNuQjFSLG9CQUFNLEVBQUU0RCxHQUFHLENBQUM1RDtBQURPLGFBQXJCOztBQUdBLGdCQUFJNEQsR0FBRyxDQUFDK04sY0FBUixFQUF3QjtBQUN0QkQsNEJBQWMsQ0FBQ0MsY0FBZixHQUFnQy9OLEdBQUcsQ0FBQytOLGNBQXBDO0FBQ0Q7O0FBQ0QsZ0JBQUksQ0FBQ0osOERBQVMsQ0FBQyxLQUFLeFIsWUFBTixFQUFvQjJSLGNBQXBCLENBQWQsRUFBbUQ7QUFDakQsbUJBQUszUixZQUFMLEdBQW9CMlIsY0FBcEI7O0FBQ0Esa0JBQUk7QUFDRixxQkFBS2pVLElBQUwsQ0FBVW1HLEdBQUcsQ0FBQ2pHLE1BQWQsRUFBc0JpRyxHQUF0QjtBQUNELGVBRkQsQ0FFRSxPQUFPblAsQ0FBUCxFQUFVO0FBQ1ZDLHVCQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7QUFDRjs7QUFDRDtBQUNEOztBQUNELGFBQUttZCw4R0FBTDtBQUNFLGNBQUloTyxHQUFHLENBQUNpTyxjQUFSLEVBQXdCO0FBQ3RCLGdCQUFJO0FBQ0YscUJBQU9qTyxHQUFHLENBQUN1QixXQUFYO0FBQ0EsbUJBQUsxSCxJQUFMLENBQVVtRyxHQUFHLENBQUNqRyxNQUFkLEVBQXNCaUcsR0FBdEI7QUFDRCxhQUhELENBR0UsT0FBT25QLENBQVAsRUFBVTtBQUNWQyxxQkFBTyxDQUFDa1UsR0FBUixDQUFZLGdCQUFaLEVBQThCaEYsR0FBOUIsRUFBbUNuUCxDQUFuQztBQUNEO0FBQ0Y7O0FBQ0Q7O0FBQ0YsYUFBSzZVLDRGQUFMO0FBQ0UsY0FBSSxLQUFLekssT0FBTCxJQUFnQixDQUFDK0UsR0FBRyxDQUFDa08sY0FBekIsRUFBeUM7QUFDdkMsaUJBQUtqVCxPQUFMLENBQWEzRCxHQUFiLEdBQW1CLEVBQW5CO0FBQ0Q7O0FBQ0QsZUFBS3dOLGdCQUFMLENBQXNCVyw0RkFBdEI7O0FBQ0EsZUFBS3pHLHlCQUFMOztBQUNBLGNBQUksS0FBSzRHLGVBQVQsRUFBMEI7QUFDeEIsaUJBQUtBLGVBQUwsQ0FBcUI1RixHQUFHLENBQUNzRixRQUF6Qjs7QUFDQSxpQkFBS00sZUFBTCxHQUF1QixJQUF2QjtBQUNEOztBQUNELGNBQUksS0FBS1MsZUFBVCxFQUEwQjtBQUN4QixpQkFBS0EsZUFBTCxDQUFxQixJQUFyQixFQUEyQnJHLEdBQUcsQ0FBQ3NGLFFBQS9COztBQUNBLGlCQUFLZSxlQUFMLEdBQXVCLElBQXZCO0FBQ0Q7O0FBQ0QsY0FBSTtBQUFBLGdCQUNJNkgsY0FESixHQUNpQ2xPLEdBRGpDLENBQ0lrTyxjQURKO0FBQUEsZ0JBQ3VCQyxLQUR2Qix5RkFDaUNuTyxHQURqQzs7QUFFRixpQkFBS25HLElBQUwsQ0FBVW1HLEdBQUcsQ0FBQ2pHLE1BQWQsRUFBc0JvVSxLQUF0QjtBQUNELFdBSEQsQ0FHRSxPQUFPdGQsQ0FBUCxFQUFVO0FBQ1ZDLG1CQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7O0FBQ0Q7O0FBQ0YsYUFBS3VkLG1HQUFMO0FBQ0U7QUFDQTtBQUNBO0FBQ0EsY0FBSSxLQUFLcFMsVUFBTCxLQUFvQnlKLDRGQUF4QixFQUEyQztBQUN6QyxpQkFBS1gsZ0JBQUwsQ0FBc0IwQiwyRkFBdEI7QUFDRDs7QUFDRCxlQUFLeEgseUJBQUw7O0FBQ0EsY0FBSSxLQUFLeUgsYUFBVCxFQUF3QjtBQUN0QixpQkFBS0EsYUFBTDs7QUFDQSxpQkFBS0EsYUFBTCxHQUFxQixJQUFyQjtBQUNEOztBQUNELGNBQUk7QUFDRixpQkFBSzVNLElBQUwsQ0FBVW1HLEdBQUcsQ0FBQ2pHLE1BQWQsRUFBc0JpRyxHQUF0QjtBQUNELFdBRkQsQ0FFRSxPQUFPblAsQ0FBUCxFQUFVO0FBQ1ZDLG1CQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7O0FBQ0Q7O0FBQ0YsYUFBS3dkLGtHQUFMO0FBQ0UsY0FBSWxDLENBQUMsR0FBRyxLQUFLM1AsYUFBTCxDQUFtQndELEdBQUcsQ0FBQ1YsVUFBdkIsQ0FBUjs7QUFDQSxjQUFJLENBQUM2TSxDQUFMLEVBQVE7QUFDTixnQkFBSW5NLEdBQUcsQ0FBQ1YsVUFBSixLQUFtQixLQUFLOUMsYUFBTCxDQUFtQjZDLEtBQW5CLENBQXlCQyxVQUFoRCxFQUE0RDtBQUMxRDZNLGVBQUMsR0FBRyxLQUFLM1AsYUFBTCxDQUFtQjZDLEtBQXZCO0FBQ0QsYUFGRCxNQUVPO0FBQ0w4TSxlQUFDLEdBQUcsRUFBSjtBQUNEO0FBQ0Y7O0FBQ0QsY0FBSTtBQUNGLGlCQUFLdFMsSUFBTCxDQUFVbUcsR0FBRyxDQUFDbU8sS0FBSixDQUFVRyxJQUFwQixFQUEwQjtBQUN4QnZVLG9CQUFNLEVBQUVpRyxHQUFHLENBQUNtTyxLQUFKLENBQVVHLElBRE07QUFFeEJILG1CQUFLLEVBQUVuTyxHQUFHLENBQUNtTyxLQUZhO0FBR3hCeloseUJBQVcsb0JBQU95WCxDQUFQO0FBSGEsYUFBMUI7QUFLRCxXQU5ELENBTUUsT0FBT3RiLENBQVAsRUFBVTtBQUNWQyxtQkFBTyxDQUFDa1UsR0FBUixDQUFZLGdCQUFaLEVBQThCaEYsR0FBOUIsRUFBbUNuUCxDQUFuQztBQUNEOztBQUNEOztBQUNGLGFBQUswZCwrR0FBTDtBQUNFLGNBQUl2TyxHQUFHLENBQUNyRyxPQUFSLEVBQWlCO0FBQ2YsZ0JBQUk7QUFDRixtQkFBS0UsSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQmlHLEdBQXRCO0FBQ0QsYUFGRCxDQUVFLE9BQU9uUCxDQUFQLEVBQVU7QUFDVkMscUJBQU8sQ0FBQ2tVLEdBQVIsQ0FBWSxnQkFBWixFQUE4QmhGLEdBQTlCLEVBQW1DblAsQ0FBbkM7QUFDRDtBQUNGOztBQUNEOztBQUNGLGFBQUsyZCw2R0FBTDtBQUFBLGNBQ1ExUixTQURSLEdBQytCa0QsR0FEL0IsQ0FDUWxELFNBRFI7QUFBQSxjQUNtQkMsT0FEbkIsR0FDK0JpRCxHQUQvQixDQUNtQmpELE9BRG5COztBQUVFLGNBQ0VELFNBQVMsS0FBSyxLQUFLRCxRQUFMLENBQWNDLFNBQTVCLElBQ0FDLE9BQU8sS0FBSyxLQUFLRixRQUFMLENBQWNFLE9BRjVCLEVBR0U7QUFDQSxpQkFBS0YsUUFBTCxDQUFjRSxPQUFkLEdBQXdCQSxPQUF4QjtBQUNBLGlCQUFLRixRQUFMLENBQWNDLFNBQWQsR0FBMEJBLFNBQTFCOztBQUNBLGdCQUFJO0FBQ0YsbUJBQUtqRCxJQUFMLENBQVVtRyxHQUFHLENBQUNqRyxNQUFkLEVBQXNCaUcsR0FBdEI7QUFDRCxhQUZELENBRUUsT0FBT25QLENBQVAsRUFBVTtBQUNWQyxxQkFBTyxDQUFDa1UsR0FBUixDQUFZLGdCQUFaLEVBQThCaEYsR0FBOUIsRUFBbUNuUCxDQUFuQztBQUNEO0FBQ0Y7O0FBQ0Q7O0FBQ0YsYUFBSzRkLDRHQUFMO0FBQUEsY0FDUUMsYUFEUixHQUMwQjFPLEdBRDFCLENBQ1EwTyxhQURSOztBQUVFLGNBQUksS0FBSzFSLGNBQUwsQ0FBb0IyUixNQUFwQixLQUErQkQsYUFBYSxDQUFDQyxNQUFqRCxFQUF5RDtBQUN2RCxpQkFBSzNSLGNBQUwsQ0FBb0IyUixNQUFwQixHQUE2QkQsYUFBYSxDQUFDQyxNQUEzQzs7QUFDQSxnQkFBSTtBQUNGLG1CQUFLOVUsSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQjtBQUNwQkEsc0JBQU0sRUFBRWlHLEdBQUcsQ0FBQ2pHLE1BRFE7QUFFcEIyVSw2QkFBYSxFQUFFLEtBQUsxUjtBQUZBLGVBQXRCO0FBSUQsYUFMRCxDQUtFLE9BQU9uTSxDQUFQLEVBQVU7QUFDVkMscUJBQU8sQ0FBQ2tVLEdBQVIsQ0FBWSxnQkFBWixFQUE4QmhGLEdBQTlCLEVBQW1DblAsQ0FBbkM7QUFDRDtBQUNGOztBQUNEOztBQUNGLGFBQUsrZCwrR0FBTDtBQUNFLGNBQUksS0FBSzFULGVBQVQsRUFBMEI7QUFENUIsY0FFVTJPLElBRlYsR0FFbUI3SixHQUZuQixDQUVVNkosSUFGVjtBQUdFLGVBQUt2TyxlQUFMLEdBQXVCdU8sSUFBdkI7O0FBQ0EsY0FBSTtBQUNGLGlCQUFLaFEsSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQjtBQUNwQkEsb0JBQU0sRUFBRWlHLEdBQUcsQ0FBQ2pHLE1BRFE7QUFFcEI4UCxrQkFBSSxFQUFKQTtBQUZvQixhQUF0QjtBQUlELFdBTEQsQ0FLRSxPQUFPaFosQ0FBUCxFQUFVO0FBQ1ZDLG1CQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7O0FBQ0Q7O0FBQ0YsYUFBS2dlLGlIQUFMO0FBQUEsY0FDVTdGLE9BRFYsR0FDc0JoSixHQUR0QixDQUNVZ0osT0FEVjs7QUFFRSxjQUFJLEtBQUt0TixrQkFBTCxLQUE0QnNOLE9BQWhDLEVBQXlDO0FBQ3ZDLGlCQUFLdE4sa0JBQUwsR0FBMEJzTixPQUExQjs7QUFDQSxnQkFBSTtBQUNGLG1CQUFLblAsSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQjtBQUNwQkEsc0JBQU0sRUFBRWlHLEdBQUcsQ0FBQ2pHLE1BRFE7QUFFcEJpUCx1QkFBTyxFQUFFLEtBQUt0TjtBQUZNLGVBQXRCO0FBSUQsYUFMRCxDQUtFLE9BQU83SyxDQUFQLEVBQVU7QUFDVkMscUJBQU8sQ0FBQ2tVLEdBQVIsQ0FBWSxnQkFBWixFQUE4QmhGLEdBQTlCLEVBQW1DblAsQ0FBbkM7QUFDRDtBQUNGOztBQUNEOztBQUNGLGFBQUtpZSxnSEFBTDtBQUNBLGFBQUtDLGtIQUFMO0FBQ0EsYUFBS0Msa0hBQUw7QUFDRSxlQUFLclMsb0JBQUwsR0FBNEJxRCxHQUFHLENBQUNpUCxzQkFBaEM7O0FBQ0EsY0FBSTtBQUNGLGlCQUFLcFYsSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQjtBQUNwQkEsb0JBQU0sRUFBRWlHLEdBQUcsQ0FBQ2pHLE1BRFE7QUFFcEJyRix5QkFBVyxFQUFFc0wsR0FBRyxDQUFDdEw7QUFGRyxhQUF0QjtBQUlELFdBTEQsQ0FLRSxPQUFPN0QsQ0FBUCxFQUFVO0FBQ1ZDLG1CQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7O0FBQ0Q7O0FBQ0YsYUFBS3FlLCtHQUFMO0FBQ0U7QUFDQTtBQUNBO0FBQ0EsY0FBSSxDQUFDdkIsOERBQVMsQ0FBQyxLQUFLaFMsZ0JBQU4sRUFBd0JxRSxHQUFHLENBQUN4TSxlQUE1QixDQUFkLEVBQTREO0FBQzFELGlCQUFLbUksZ0JBQUwsR0FBd0JxRSxHQUFHLENBQUN4TSxlQUE1Qjs7QUFDQSxnQkFBSTtBQUNGLG1CQUFLcUcsSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQjtBQUNwQkEsc0JBQU0sRUFBRWlHLEdBQUcsQ0FBQ2pHLE1BRFE7QUFFcEJ2RywrQkFBZSxFQUFFd00sR0FBRyxDQUFDeE07QUFGRCxlQUF0QjtBQUlELGFBTEQsQ0FLRSxPQUFPM0MsQ0FBUCxFQUFVO0FBQ1ZDLHFCQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7QUFDRjs7QUFDRDs7QUFDRixhQUFLc2UsNkdBQUw7QUFDRTtBQUNBO0FBQ0E7QUFDQSxjQUFJLENBQUN4Qiw4REFBUyxDQUFDLEtBQUsvUixjQUFOLEVBQXNCb0UsR0FBRyxDQUFDcE0sYUFBMUIsQ0FBZCxFQUF3RDtBQUN0RCxpQkFBS2dJLGNBQUwsR0FBc0JvRSxHQUFHLENBQUNwTSxhQUExQjs7QUFDQSxnQkFBSTtBQUNGLG1CQUFLaUcsSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQjtBQUNwQkEsc0JBQU0sRUFBRWlHLEdBQUcsQ0FBQ2pHLE1BRFE7QUFFcEJuRyw2QkFBYSxFQUFFb00sR0FBRyxDQUFDcE07QUFGQyxlQUF0QjtBQUlELGFBTEQsQ0FLRSxPQUFPL0MsQ0FBUCxFQUFVO0FBQ1ZDLHFCQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7QUFDRjs7QUFDRDs7QUFDRixhQUFLdWUsa0hBQUw7QUFDRTtBQUNFLGdCQUFJQyxhQUFhLEdBQUdyUCxHQUFHLENBQUNWLFVBQXhCO0FBQ0EsaUJBQUs1QyxlQUFMLENBQXFCMlMsYUFBckIsSUFBc0NyUCxHQUFHLENBQUNzUCxXQUExQztBQUNBLGlCQUFLQyxnQkFBTCxDQUFzQnZQLEdBQXRCO0FBQ0Q7QUFDRDs7QUFFRixhQUFLd1Asa0hBQUw7QUFDRSxpQkFBTyxLQUFLOVMsZUFBTCxDQUFxQnNELEdBQUcsQ0FBQ1YsVUFBekIsQ0FBUDtBQUNBLGVBQUtpUSxnQkFBTCxDQUFzQnZQLEdBQXRCO0FBQ0E7O0FBRUYsYUFBS3lQLGtIQUFMO0FBQ0U7QUFDRSxnQkFBSUosY0FBYSxHQUFHclAsR0FBRyxDQUFDVixVQUF4QjtBQUNBLGdCQUFJb1EsY0FBYyxHQUFHLEtBQUtoVCxlQUFMLENBQXFCMlMsY0FBckIsQ0FBckI7O0FBQ0EsZ0JBQ0UsQ0FBQ0ssY0FBRCxJQUNBLENBQUMsS0FBS0MsNkJBQUwsQ0FDQ0QsY0FERCxFQUVDMVAsR0FBRyxDQUFDc0ksc0JBRkwsQ0FGSCxFQU1FO0FBQ0EsbUJBQUs1TCxlQUFMLENBQXFCMlMsY0FBckIsSUFBc0NyUCxHQUFHLENBQUNzSSxzQkFBMUM7QUFDQSxtQkFBS2lILGdCQUFMLENBQXNCdlAsR0FBdEI7QUFDRDtBQUNGO0FBQ0Q7O0FBQ0YsYUFBSzRQLDBHQUFMO0FBQ0UsZUFBS0wsZ0JBQUwsQ0FBc0J2UCxHQUF0QjtBQUNBOztBQUNGLGFBQUs2UCxvSEFBTDtBQUNFLGVBQUt2VCxvQkFBTCxHQUE0QjBELEdBQUcsQ0FBQzhQLG1CQUFoQztBQUNBLGVBQUtQLGdCQUFMLENBQXNCdlAsR0FBdEI7QUFDQTs7QUFDRixhQUFLK1Asd0dBQUw7QUFDQSxhQUFLQyx3R0FBTDtBQUNBLGFBQUtDLHNHQUFMO0FBQ0EsYUFBS0Msc0dBQUw7QUFDQSxhQUFLQyxpSEFBTDtBQUNBLGFBQUtDLDRHQUFMO0FBQ0EsYUFBS0MsNEdBQUw7QUFDQSxhQUFLQywwR0FBTDtBQUNBLGFBQUtDLHFHQUFMO0FBQ0EsYUFBS0MsbUdBQUw7QUFDQSxhQUFLQyw4RkFBTDtBQUNBLGFBQUtDLGlIQUFMO0FBQ0EsYUFBS0MsaUhBQUw7QUFDQSxhQUFLQyx5R0FBTDtBQUNBLGFBQUtDLHFHQUFMO0FBQ0EsYUFBS0MsNkdBQUw7QUFDQSxhQUFLQyw2R0FBTDtBQUNBLGFBQUtDLDJHQUFMO0FBQ0EsYUFBS0MscUdBQUw7QUFDQSxhQUFLQyxtR0FBTDtBQUNFLGNBQUk7QUFDRixpQkFBS3JYLElBQUwsQ0FBVW1HLEdBQUcsQ0FBQ2pHLE1BQWQsRUFBc0JpRyxHQUF0QjtBQUNELFdBRkQsQ0FFRSxPQUFPblAsQ0FBUCxFQUFVO0FBQ1ZDLG1CQUFPLENBQUNrVSxHQUFSLENBQVksZ0JBQVosRUFBOEJoRixHQUE5QixFQUFtQ25QLENBQW5DO0FBQ0Q7O0FBQ0Q7O0FBQ0YsYUFBS3NnQixzR0FBTDtBQUNFLGVBQUs3VCxpQkFBTDtBQUNBOztBQUNGLGFBQUs4VCxtR0FBTDtBQUNFLGVBQUs3RyxjQUFMO0FBQ0E7O0FBQ0YsZ0JBcGFGLENBb2FXOztBQXBhWDtBQXNhRDs7OytDQUUwQmtELEssRUFBTzRELEssRUFBTztBQUN2QyxVQUFNemUsR0FBRyxHQUFHLFFBQVo7O0FBQ0EsVUFBSSxDQUFDNmEsS0FBTCxFQUFZO0FBQ1Y7QUFDRDs7QUFDRCxVQUFJLENBQUM0RCxLQUFLLENBQUNoUyxLQUFQLElBQWdCZ1MsS0FBSyxDQUFDemUsR0FBRCxDQUFMLEtBQWUsS0FBL0IsSUFBd0M2YSxLQUFLLENBQUM3YSxHQUFELENBQUwsS0FBZXllLEtBQUssQ0FBQ3plLEdBQUQsQ0FBaEUsRUFBdUU7QUFDckUsWUFBSTtBQUNGLGVBQUtpSCxJQUFMLENBQVVtVyx3R0FBVixFQUF5QztBQUN2Q2pXLGtCQUFNLEVBQUVpVyx3R0FBNkJBO0FBREUsV0FBekM7QUFHRCxTQUpELENBSUUsT0FBT25mLENBQVAsRUFBVTtBQUNWQyxpQkFBTyxDQUFDa1UsR0FBUixDQUFZLGdCQUFaLEVBQThCblUsQ0FBOUI7QUFDRDtBQUNGO0FBQ0Y7OzsrQ0FFMEI0YyxLLEVBQU80RCxLLEVBQU87QUFDdkMsVUFBTXplLEdBQUcsR0FBRyxRQUFaOztBQUNBLFVBQUksQ0FBQzZhLEtBQUwsRUFBWTtBQUNWO0FBQ0Q7O0FBQ0QsVUFBSSxDQUFDNEQsS0FBSyxDQUFDaFMsS0FBUCxJQUFnQmdTLEtBQUssQ0FBQ3plLEdBQUQsQ0FBTCxLQUFlLElBQS9CLElBQXVDNmEsS0FBSyxDQUFDN2EsR0FBRCxDQUFMLEtBQWV5ZSxLQUFLLENBQUN6ZSxHQUFELENBQS9ELEVBQXNFO0FBQ3BFLFlBQUk7QUFDRixlQUFLaUgsSUFBTCxDQUFVa1csd0dBQVYsRUFBeUM7QUFDdkNoVyxrQkFBTSxFQUFFZ1csd0dBQTZCQTtBQURFLFdBQXpDO0FBR0QsU0FKRCxDQUlFLE9BQU9sZixDQUFQLEVBQVU7QUFDVkMsaUJBQU8sQ0FBQ2tVLEdBQVIsQ0FBWSxnQkFBWixFQUE4Qm5VLENBQTlCO0FBQ0Q7QUFDRjtBQUNGOzs7MkNBRXNCNGMsSyxFQUFPNEQsSyxFQUFPemUsRyxFQUFLO0FBQ3hDLFVBQUksQ0FBQzZhLEtBQUwsRUFBWTtBQUNWO0FBQ0Q7O0FBQ0QsVUFDR0EsS0FBSyxDQUFDN2EsR0FBRCxDQUFMLElBQWM2YSxLQUFLLENBQUM3YSxHQUFELENBQUwsQ0FBVzBlLFVBQVgsS0FBMEIsT0FBekMsSUFDQzdELEtBQUssQ0FBQzdhLEdBQUQsQ0FBTCxJQUFjLEVBQUV5ZSxLQUFLLElBQUlBLEtBQUssQ0FBQ3plLEdBQUQsQ0FBaEIsQ0FEZixJQUVDNmEsS0FBSyxDQUFDN2EsR0FBRCxDQUFMLElBQWM2YSxLQUFLLENBQUM3YSxHQUFELENBQUwsQ0FBVy9ELEVBQVgsS0FBa0J3aUIsS0FBSyxDQUFDemUsR0FBRCxDQUFMLENBQVcvRCxFQUg5QyxFQUlFO0FBQ0EsWUFBSTtBQUNGLGVBQUtnTCxJQUFMLENBQVUwWCxvR0FBVixFQUFxQztBQUNuQ3hYLGtCQUFNLEVBQUV3WCxvR0FEMkI7QUFFbkNqUCxpQkFBSyxFQUFFbUwsS0FBSyxDQUFDN2EsR0FBRCxDQUZ1QjtBQUduQzhCLHVCQUFXLEVBQUUyYztBQUhzQixXQUFyQztBQUtELFNBTkQsQ0FNRSxPQUFPeGdCLENBQVAsRUFBVTtBQUNWQyxpQkFBTyxDQUFDa1UsR0FBUixDQUFZLGdCQUFaLEVBQThCblUsQ0FBOUI7QUFDRDtBQUNGO0FBQ0Y7OztpREFFNEIyZ0IsUyxFQUFXQyxTLEVBQVdKLEssRUFBTztBQUN4RCxVQUFJLENBQUNHLFNBQUwsRUFBZ0I7QUFDZDtBQUNEOztBQUNELFVBQ0dBLFNBQVMsSUFBSUEsU0FBUyxDQUFDRixVQUFWLEtBQXlCLE9BQXZDLElBQ0NFLFNBQVMsSUFBSSxDQUFDQyxTQURmLElBRUNELFNBQVMsSUFBSUEsU0FBUyxDQUFDM2lCLEVBQVYsS0FBaUI0aUIsU0FBUyxDQUFDNWlCLEVBSDNDLEVBSUU7QUFDQSxZQUFJO0FBQ0YsZUFBS2dMLElBQUwsQ0FBVTBYLG9HQUFWLEVBQXFDO0FBQ25DeFgsa0JBQU0sRUFBRXdYLG9HQUQyQjtBQUVuQ2pQLGlCQUFLLEVBQUVrUCxTQUY0QjtBQUduQzljLHVCQUFXLEVBQUUyYztBQUhzQixXQUFyQztBQUtELFNBTkQsQ0FNRSxPQUFPeGdCLENBQVAsRUFBVTtBQUNWQyxpQkFBTyxDQUFDa1UsR0FBUixDQUFZLDhDQUFaLEVBQTREblUsQ0FBNUQ7QUFDRDtBQUNGO0FBQ0Y7OztpREFFNEIyZ0IsUyxFQUFXQyxTLEVBQVdKLEssRUFBTztBQUN4RCxVQUNHSSxTQUFTLElBQUksQ0FBQ0QsU0FBZixJQUNDQyxTQUFTLElBQUlELFNBQVMsQ0FBQ0YsVUFBVixLQUF5QixPQUR2QyxJQUVDRyxTQUFTLElBQUlBLFNBQVMsQ0FBQzVpQixFQUFWLEtBQWlCMmlCLFNBQVMsQ0FBQzNpQixFQUgzQyxFQUlFO0FBQ0EsWUFBSTtBQUNGLGVBQUtnTCxJQUFMLENBQVU2WCxvR0FBVixFQUFxQztBQUNuQzNYLGtCQUFNLEVBQUUyWCxvR0FEMkI7QUFFbkNwUCxpQkFBSyxFQUFFbVAsU0FGNEI7QUFHbkMvYyx1QkFBVyxFQUFFMmM7QUFIc0IsV0FBckM7QUFLRCxTQU5ELENBTUUsT0FBT3hnQixDQUFQLEVBQVU7QUFDVkMsaUJBQU8sQ0FBQ2tVLEdBQVIsQ0FBWSw4Q0FBWixFQUE0RG5VLENBQTVEO0FBQ0Q7QUFDRjtBQUNGOzs7MkNBRXNCNGMsSyxFQUFPNEQsSyxFQUFPemUsRyxFQUFLO0FBQ3hDLFVBQ0d5ZSxLQUFLLENBQUN6ZSxHQUFELENBQUwsSUFBYyxFQUFFNmEsS0FBSyxJQUFJQSxLQUFLLENBQUM3YSxHQUFELENBQWhCLENBQWYsSUFDQ3llLEtBQUssQ0FBQ3plLEdBQUQsQ0FBTCxJQUFjNmEsS0FBSyxDQUFDN2EsR0FBRCxDQUFMLENBQVcwZSxVQUFYLEtBQTBCLE9BRHpDLElBRUNELEtBQUssQ0FBQ3plLEdBQUQsQ0FBTCxJQUFjeWUsS0FBSyxDQUFDemUsR0FBRCxDQUFMLENBQVcvRCxFQUFYLEtBQWtCNGUsS0FBSyxDQUFDN2EsR0FBRCxDQUFMLENBQVcvRCxFQUg5QyxFQUlFO0FBQ0EsWUFBSTtBQUNGLGVBQUtnTCxJQUFMLENBQVU2WCxvR0FBVixFQUFxQztBQUNuQzNYLGtCQUFNLEVBQUUyWCxvR0FEMkI7QUFFbkNwUCxpQkFBSyxFQUFFK08sS0FBSyxDQUFDemUsR0FBRCxDQUZ1QjtBQUduQzhCLHVCQUFXLEVBQUUyYztBQUhzQixXQUFyQztBQUtELFNBTkQsQ0FNRSxPQUFPeGdCLENBQVAsRUFBVTtBQUNWQyxpQkFBTyxDQUFDa1UsR0FBUixDQUFZLGdCQUFaLEVBQThCblUsQ0FBOUI7QUFDRDtBQUNGO0FBQ0Y7OzswREFFcUM0YyxLLEVBQU80RCxLLEVBQU87QUFDbEQsVUFBSSxDQUFDNUQsS0FBTCxFQUFZO0FBQ1Y7QUFDRDs7QUFDRCxXQUFLLElBQU1rRSxRQUFYLElBQXVCbEUsS0FBSyxDQUFDbUUsTUFBN0IsRUFBcUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsWUFBSXRMLCtEQUFBLENBQThCcUwsUUFBOUIsQ0FBSixFQUE2QztBQUMzQztBQUNEOztBQUNELGFBQUtFLDRCQUFMLENBQ0VwRSxLQUFLLENBQUNtRSxNQUFOLENBQWFELFFBQWIsRUFBdUJyUCxLQUR6QixFQUVFK08sS0FBSyxJQUFJQSxLQUFLLENBQUNPLE1BQU4sQ0FBYUQsUUFBYixDQUFULEdBQWtDTixLQUFLLENBQUNPLE1BQU4sQ0FBYUQsUUFBYixFQUF1QnJQLEtBQXpELEdBQWlFLElBRm5FLEVBR0UrTyxLQUhGO0FBS0Q7QUFDRjs7OzBEQUVxQzVELEssRUFBTzRELEssRUFBTztBQUNsRCxVQUFJLENBQUNBLEtBQUwsRUFBWTtBQUNWO0FBQ0Q7O0FBQ0QsV0FBSyxJQUFNTSxRQUFYLElBQXVCTixLQUFLLENBQUNPLE1BQTdCLEVBQXFDO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLFlBQUl0TCwrREFBQSxDQUE4QnFMLFFBQTlCLENBQUosRUFBNkM7QUFDM0M7QUFDRDs7QUFDRCxhQUFLRyw0QkFBTCxDQUNFckUsS0FBSyxJQUFJQSxLQUFLLENBQUNtRSxNQUFOLENBQWFELFFBQWIsQ0FBVCxHQUFrQ2xFLEtBQUssQ0FBQ21FLE1BQU4sQ0FBYUQsUUFBYixFQUF1QnJQLEtBQXpELEdBQWlFLElBRG5FLEVBRUUrTyxLQUFLLENBQUNPLE1BQU4sQ0FBYUQsUUFBYixFQUF1QnJQLEtBRnpCLEVBR0UrTyxLQUhGO0FBS0Q7QUFDRjs7O2tEQUU2QlUsQyxFQUFHQyxDLEVBQUc7QUFBQTs7QUFDbEMsVUFBSUQsQ0FBQyxDQUFDcFIsS0FBRixLQUFZcVIsQ0FBQyxDQUFDclIsS0FBZCxJQUF1QixnQkFBQW9SLENBQUMsQ0FBQ2hLLFFBQUYsNERBQVlrSyxNQUFaLHNCQUF1QkQsQ0FBQyxDQUFDakssUUFBekIsZ0RBQXVCLFlBQVlrSyxNQUFuQyxDQUEzQixFQUFzRTtBQUNwRSxlQUFPLElBQVA7QUFDRDs7QUFDRCxhQUFPLEtBQVA7QUFDRDs7O3FDQUVnQmpTLEcsRUFBSztBQUNwQjtBQUNFLFlBQUk7QUFDRixlQUFLbkcsSUFBTCxDQUFVbUcsR0FBRyxDQUFDakcsTUFBZCxFQUFzQmlHLEdBQXRCO0FBQ0QsU0FGRCxDQUVFLE9BQU9uUCxDQUFQLEVBQVU7QUFDVkMsaUJBQU8sQ0FBQ2tVLEdBQVIsQ0FBWSxnQkFBWixFQUE4QmhGLEdBQTlCLEVBQW1DblAsQ0FBbkM7QUFDRDtBQUNGO0FBQ0Y7OzswREFFcUNraEIsQyxFQUFHQyxDLEVBQUc7QUFDMUMsVUFBSSxDQUFDckUsOERBQVMsQ0FBQ29FLENBQUQsRUFBSUMsQ0FBSixDQUFkLEVBQXNCO0FBQ3BCLGVBQU8sS0FBUDtBQUNEOztBQUNELFVBQ0VELENBQUMsQ0FBQ0csVUFBRixJQUNBRixDQUFDLENBQUNFLFVBREYsS0FFQ0gsQ0FBQyxDQUFDRyxVQUFGLENBQWFyakIsRUFBYixLQUFvQm1qQixDQUFDLENBQUNFLFVBQUYsQ0FBYXJqQixFQUFqQyxJQUNDa2pCLENBQUMsQ0FBQ0csVUFBRixDQUFhQyxLQUFiLEtBQXVCSCxDQUFDLENBQUNFLFVBQUYsQ0FBYUMsS0FEckMsSUFFQ0osQ0FBQyxDQUFDRyxVQUFGLENBQWFsSixPQUFiLEtBQXlCZ0osQ0FBQyxDQUFDRSxVQUFGLENBQWFsSixPQUp4QyxDQURGLEVBTUU7QUFDQSxlQUFPLEtBQVA7QUFDRDs7QUFDRCxVQUNFK0ksQ0FBQyxDQUFDSyxVQUFGLElBQ0FKLENBQUMsQ0FBQ0ksVUFERixLQUVDTCxDQUFDLENBQUNLLFVBQUYsQ0FBYXZqQixFQUFiLEtBQW9CbWpCLENBQUMsQ0FBQ0ksVUFBRixDQUFhdmpCLEVBQWpDLElBQ0NrakIsQ0FBQyxDQUFDSyxVQUFGLENBQWFELEtBQWIsS0FBdUJILENBQUMsQ0FBQ0ksVUFBRixDQUFhRCxLQURyQyxJQUVDSixDQUFDLENBQUNLLFVBQUYsQ0FBYXBKLE9BQWIsS0FBeUJnSixDQUFDLENBQUNJLFVBQUYsQ0FBYXBKLE9BSnhDLENBREYsRUFNRTtBQUNBLGVBQU8sS0FBUDtBQUNEOztBQUNELGFBQU8sSUFBUDtBQUNEOzs7a0NBRWE7QUFDWixVQUFJLENBQUMxYiw2RkFBYSxFQUFsQixFQUFzQjtBQUNwQixlQUFPLElBQVA7QUFDRDs7QUFDRCxVQUFJLE9BQU8ra0IsZ0JBQVAsS0FBNEIsV0FBaEMsRUFBNkM7QUFDM0N2aEIsZUFBTyxDQUFDb04sSUFBUixDQUNFLCtEQURGO0FBR0EsZUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsYUFBT21VLGdCQUFQO0FBQ0Q7Ozs0Q0FFdUJDLGlCLEVBQW1CO0FBQ3pDLFdBQUt4TixnQkFBTCxDQUFzQixLQUFLOUksVUFBM0IsRUFBdUNzVyxpQkFBdkM7QUFDRDs7O3FDQUVnQkMsUyxFQUF3RDtBQUFBLFVBQTdDRCxpQkFBNkMsdUVBQXpCLEtBQUtwVyxrQkFBb0I7O0FBQ3ZFO0FBQ0EsVUFDRXFXLFNBQVMsS0FBSyxLQUFLdlcsVUFBbkIsSUFDQXNXLGlCQUFpQixLQUFLLEtBQUtwVyxrQkFGN0IsRUFHRTtBQUNBO0FBQ0QsT0FQc0UsQ0FTdkU7OztBQUNBLFVBQU1zVyxlQUFlLEdBQUcsS0FBS3hXLFVBQTdCO0FBQ0EsVUFBTXlXLG9CQUFvQixHQUFHLEtBQUt2VyxrQkFBbEM7QUFDQSxXQUFLRixVQUFMLEdBQWtCdVcsU0FBbEI7QUFDQSxXQUFLclcsa0JBQUwsR0FBMEJvVyxpQkFBMUIsQ0FidUUsQ0FldkU7QUFDQTs7QUFDQSxVQUFNSSw0QkFBNEIsR0FBRyxLQUFLaE8sdUJBQUwsQ0FDbkM4TixlQURtQyxFQUVuQ0Msb0JBRm1DLENBQXJDOztBQUlBLFVBQU0vTix1QkFBdUIsR0FBRyxLQUFLQSx1QkFBTCxDQUM5QixLQUFLMUksVUFEeUIsRUFFOUIsS0FBS0Usa0JBRnlCLENBQWhDOztBQUlBLFVBQUl3Vyw0QkFBNEIsS0FBS2hPLHVCQUFyQyxFQUE4RDtBQUM1RDtBQUNEOztBQUNELFdBQUtpTyxxQkFBTCxDQUEyQmpPLHVCQUEzQjtBQUNBLFdBQUtrTyxxQkFBTCxDQUEyQmxPLHVCQUEzQjtBQUNBLFdBQUttTywyQ0FBTCxDQUFpRG5PLHVCQUFqRDtBQUNBLFdBQUtvTywrQ0FBTCxDQUNFcE8sdUJBREY7QUFHRCxLLENBRUQ7QUFDQTtBQUNBO0FBQ0E7Ozs7Z0RBQzRCO0FBQzFCLFdBQUtsSSxhQUFMLEdBQXFCLEVBQXJCO0FBQ0EsV0FBS0Msa0JBQUwsR0FBMEJoUCx3QkFBMUI7QUFDQSxXQUFLa1Asb0JBQUwsR0FBNEIsRUFBNUI7QUFDQSxXQUFLSyxjQUFMLEdBQXNCLEVBQXRCO0FBQ0EsV0FBS3RCLGtCQUFMLEdBQTBCLEtBQTFCO0FBQ0EsV0FBS2tKLFdBQUwsR0FBbUIsS0FBbkI7QUFDQSxXQUFLekksWUFBTCxHQUFvQjtBQUFFQyxjQUFNLEVBQUVDLCtGQUFvQkE7QUFBOUIsT0FBcEI7QUFDQSxXQUFLQyxvQkFBTCxHQUE0QmpQLHFCQUE1QjtBQUNBLFdBQUtzTyxnQkFBTCxHQUF3QixFQUF4QjtBQUNBLFdBQUtDLGNBQUwsR0FBc0IsRUFBdEI7QUFDQW1YLHVCQUFpQixDQUFDLEtBQUsvZ0IsYUFBTixDQUFqQjtBQUNEOzs7MENBRXFCZ2hCLFMsRUFBVztBQUMvQixVQUFJLENBQUMxbEIsNkZBQWEsRUFBbEIsRUFBc0I7QUFDcEI7QUFDRDs7QUFDRCxXQUFLdVEsV0FBTCxHQUFtQm9WLGtCQUFuQixDQUFzQ0QsU0FBdEMsRUFBaUQsS0FBSy9WLFlBQXREO0FBQ0Q7OzswQ0FFcUJpVyxrQixFQUFvQjtBQUN4QyxVQUNFLENBQUM1bEIsNkZBQWEsRUFBZCxJQUNBLEtBQUtpTixzQ0FBTCxDQUE0QyxPQUE1QyxDQUZGLEVBR0U7QUFDQTtBQUNEOztBQUNELFVBQU00WSxTQUFTLEdBQUdELGtCQUFrQixHQUNoQyxLQUFLM1csc0JBRDJCLEdBRWhDelAsc0JBRko7QUFHQSxXQUFLK1EsV0FBTCxHQUFtQjhHLFlBQW5CLENBQWdDd08sU0FBaEM7QUFDRCxLLENBRUQ7Ozs7Z0VBQzRDQyxnQixFQUFrQjtBQUM1RDtBQUNBLFVBQ0UsRUFBRTlsQiw2RkFBYSxNQUFNLEtBQUt1USxXQUFMLEdBQW1Cd1YsaUNBQXhDLENBREYsRUFFRTtBQUNBO0FBQ0QsT0FOMkQsQ0FPNUQ7OztBQUNBLFVBQUlobEIsS0FBSixFQUFXQyxRQUFYLEVBQXFCQyxRQUFyQixFQUErQkMsd0JBQS9COztBQUNBLFVBQ0UsS0FBSzBJLFVBQUwsQ0FBZ0I1RyxpQkFBaEIsSUFDQSxLQUFLNEcsVUFBTCxDQUFnQjVHLGlCQUFoQixDQUFrQ2xDLHlCQUZwQyxFQUdFO0FBQUEsb0NBRUUsS0FBSzhJLFVBQUwsQ0FBZ0I1RyxpQkFBaEIsQ0FBa0NsQyx5QkFGcEM7QUFDR0MsYUFESCx5QkFDR0EsS0FESDtBQUNVQyxnQkFEVix5QkFDVUEsUUFEVjtBQUNvQkMsZ0JBRHBCLHlCQUNvQkEsUUFEcEI7QUFDOEJDLGdDQUQ5Qix5QkFDOEJBLHdCQUQ5QjtBQUdEOztBQUNELFVBQUlBLHdCQUFKLEVBQThCO0FBQzVCNGtCLHdCQUFnQixHQUFHLEtBQW5CO0FBQ0Q7O0FBQ0QsV0FBS3ZWLFdBQUwsR0FBbUJ3VixpQ0FBbkIsQ0FDRUQsZ0JBREYsRUFFRS9rQixLQUZGLEVBR0VDLFFBSEYsRUFJRUMsUUFKRixFQUtFLEtBQUswTyxZQUxQO0FBT0QsSyxDQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7b0VBQ2dEcVcsbUIsRUFBcUI7QUFDbkUsVUFDRSxFQUNFaG1CLDZGQUFhLE1BQ2IsS0FBS3VRLFdBQUwsR0FBbUIwViwrQ0FGckIsQ0FERixFQUtFO0FBQ0E7QUFDRDs7QUFDRCxXQUFLMVYsV0FBTCxHQUFtQjBWLCtDQUFuQixDQUNFRCxtQkFERjtBQUdEOzs7NENBRXVCZixTLEVBQVdELGlCLEVBQW1CO0FBQ3BELGFBQ0UsQ0FBQ3RRLDhGQUFELEVBQXNCeEQsNkZBQXRCLEVBQTBDL04sUUFBMUMsQ0FBbUQ4aEIsU0FBbkQsS0FDQUQsaUJBRkY7QUFJRDs7O29FQXNIK0M7QUFDOUMsVUFBSSxDQUFDaGxCLDZGQUFhLEVBQWxCLEVBQXNCO0FBQ3BCO0FBQ0QsT0FINkMsQ0FJOUM7QUFDQTs7O0FBQ0EsVUFBTXFULEtBQUssR0FBRzZTLEtBQUssQ0FBQ0MsUUFBTixFQUFkOztBQUNBLFdBQUssSUFBTUMsUUFBWCxJQUF1Qi9TLEtBQUssQ0FBQ2dULE9BQTdCLEVBQXNDO0FBQ3BDLFlBQU1DLFVBQVUsR0FBR2pULEtBQUssQ0FBQ2dULE9BQU4sQ0FBY0QsUUFBZCxDQUFuQjs7QUFDQSxZQUNFRSxVQUFVLElBQ1ZBLFVBQVUsQ0FBQ0MsWUFEWCxJQUVBRCxVQUFVLENBQUNDLFlBQVgsQ0FBd0JDLElBQXhCLEtBQWlDLE9BSG5DLEVBSUU7QUFDQUYsb0JBQVUsQ0FBQ0MsWUFBWCxDQUF3QjdLLE9BQXhCLEdBQWtDLEtBQUtwTyxvQkFBdkM7QUFDRDtBQUNGO0FBQ0YsSyxDQUVEOzs7OzJEQUN1QzBULEksRUFBTTtBQUMzQyxhQUNFLEtBQUtwWCxVQUFMLENBQWdCNUcsaUJBQWhCLElBQ0EsS0FBSzRHLFVBQUwsQ0FBZ0I1RyxpQkFBaEIsQ0FBa0M3QiwyQkFEbEMsSUFFQSxLQUFLeUksVUFBTCxDQUFnQjVHLGlCQUFoQixDQUFrQzdCLDJCQUFsQyxDQUE4RDZmLElBQTlELENBSEY7QUFLRDs7O2dDQUVXNWUsRyxFQUFLO0FBQ2YsVUFBSSxnQkFBZ0IsT0FBT0EsR0FBM0IsRUFBZ0M7QUFDOUIsZUFBTzJMLFNBQVA7QUFDRDs7QUFDRCxVQUFJMFcsQ0FBQyxHQUFHbmEsUUFBUSxDQUFDVSxhQUFULENBQXVCLEdBQXZCLENBQVI7QUFDQXlaLE9BQUMsQ0FBQ2hHLElBQUYsR0FBU3JjLEdBQVQ7QUFDQSxhQUFPcWlCLENBQUMsQ0FBQ2hHLElBQVQ7QUFDRDs7OytCQUVVO0FBQ1QsVUFBTWdJLEdBQUcsR0FBRyxlQUFaO0FBQ0FqakIsYUFBTyxDQUFDa1UsR0FBUixDQUFZK08sR0FBWjtBQUNBLGFBQU9BLEdBQVA7QUFDRDs7OztFQXhwR3NDeEksOEM7Ozs7QUEycEd6QyxTQUFTcFEsc0JBQVQsQ0FBZ0NwSixVQUFoQyxFQUE0Q21GLFVBQTVDLEVBQXdEO0FBQ3RELFNBQU87QUFDTDlFLGtDQUE4QixFQUFFLElBRDNCO0FBRUxELGlCQUFhLEVBQUUsSUFGVjtBQUdMRixpQkFBYSxFQUFFLElBSFY7QUFJTGtTLGtCQUFjLEVBQUU7QUFKWCxHQUFQO0FBTUQ7O0FBRUQsU0FBUzRPLGlCQUFULENBQTJCaUIsQ0FBM0IsRUFBOEIsQ0FDNUI7QUFDQTtBQUNEOztBQUVELFNBQVM1UixzQkFBVCxDQUFnQ3dKLEtBQWhDLEVBQXVDO0FBQ3JDLE1BQU1xSSxJQUFJLEdBQUcsRUFBYjs7QUFDQSxPQUFLLElBQUk5SCxDQUFULElBQWNQLEtBQWQsRUFBcUI7QUFDbkIsUUFBSUEsS0FBSyxDQUFDTyxDQUFELENBQUwsWUFBb0J4SixnQkFBeEIsRUFBMEM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQXNSLFVBQUksQ0FBQzlILENBQUQsQ0FBSixHQUFVbkosNkZBQVY7QUFDRCxLQU5ELE1BTU8sSUFBSW1KLENBQUMsS0FBSyxhQUFWLEVBQXlCO0FBQzlCLFVBQUlQLEtBQUssQ0FBQ08sQ0FBRCxDQUFMLENBQVMrSCxrQkFBYixFQUFpQztBQUMvQixZQUFJbGtCLE1BQU0sQ0FBQ0MsWUFBWCxFQUF5QjtBQUN2QkQsZ0JBQU0sQ0FBQ0MsWUFBUCxDQUFvQmlrQixrQkFBcEIsR0FBeUN0SSxLQUFLLENBQUNPLENBQUQsQ0FBTCxDQUFTK0gsa0JBQWxEO0FBQ0Q7O0FBQ0QsZUFBT3RJLEtBQUssQ0FBQ08sQ0FBRCxDQUFMLENBQVMrSCxrQkFBaEI7QUFDRDs7QUFDRCxVQUFJdEksS0FBSyxDQUFDTyxDQUFELENBQUwsQ0FBU2dJLG1CQUFiLEVBQWtDO0FBQ2hDLFlBQUlua0IsTUFBTSxDQUFDQyxZQUFYLEVBQXlCO0FBQ3ZCRCxnQkFBTSxDQUFDQyxZQUFQLENBQW9Ca2tCLG1CQUFwQixHQUNFdkksS0FBSyxDQUFDTyxDQUFELENBQUwsQ0FBU2dJLG1CQURYO0FBRUQ7O0FBQ0QsZUFBT3ZJLEtBQUssQ0FBQ08sQ0FBRCxDQUFMLENBQVNnSSxtQkFBaEI7QUFDRDs7QUFDREYsVUFBSSxDQUFDOUgsQ0FBRCxDQUFKLEdBQVVQLEtBQUssQ0FBQ08sQ0FBRCxDQUFmO0FBQ0QsS0FmTSxNQWVBO0FBQ0w4SCxVQUFJLENBQUM5SCxDQUFELENBQUosR0FBVVAsS0FBSyxDQUFDTyxDQUFELENBQWY7QUFDRDtBQUNGOztBQUNELFNBQU84SCxJQUFQO0FBQ0Q7O0FBRUQsU0FBUzdjLCtCQUFULEdBQTJDO0FBQ3pDLE1BQUk5Siw2RkFBYSxFQUFqQixFQUFxQjtBQUNuQixVQUFNLElBQUlpSyxLQUFKLENBQ0osaUVBREksQ0FBTjtBQUdEO0FBQ0Y7O0FBRUQsU0FBUzZMLGdDQUFULEdBQTRDO0FBQzFDLE1BQUksQ0FBQzlWLDZGQUFhLEVBQWxCLEVBQXNCO0FBQ3BCLFVBQU0sSUFBSWlLLEtBQUosQ0FBVSx3REFBVixDQUFOO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTbUsseUJBQVQsQ0FBbUNuVSxJQUFuQyxFQUF5Q2tVLGFBQXpDLEVBQXdEO0FBQ3REO0FBQ0E7QUFDQSxNQUFJMlMseUZBQUosQ0FBc0I7QUFBRTdtQixRQUFJLEVBQUpBLElBQUY7QUFBUWtVLGlCQUFhLEVBQWJBO0FBQVIsR0FBdEI7QUFDQSxTQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFTN1EsZ0JBQVQsQ0FBMEJyRCxJQUExQixFQUFnQztBQUM5QjtBQUNBLE1BQUlBLElBQUksS0FBSzhOLFNBQWIsRUFBd0I7QUFDdEIsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsTUFBSWdaLE9BQUo7O0FBQ0EsTUFBSSxPQUFPOW1CLElBQVAsS0FBZ0IsUUFBcEIsRUFBOEI7QUFDNUI7QUFDQTtBQUNBOG1CLFdBQU8sR0FBRzltQixJQUFWO0FBQ0QsR0FKRCxNQUlPO0FBQ0wsUUFBSTtBQUNGOG1CLGFBQU8sR0FBRzdrQixJQUFJLENBQUNDLFNBQUwsQ0FBZWxDLElBQWYsQ0FBVixDQURFLENBR0Y7O0FBQ0EsVUFBSSxDQUFDb2dCLDhEQUFTLENBQUNuZSxJQUFJLENBQUM4WixLQUFMLENBQVcrSyxPQUFYLENBQUQsRUFBc0I5bUIsSUFBdEIsQ0FBZCxFQUEyQztBQUN6Q3VELGVBQU8sQ0FBQ29OLElBQVI7QUFDRDtBQUNGLEtBUEQsQ0FPRSxPQUFPck4sQ0FBUCxFQUFVO0FBQ1YsWUFBTTBHLEtBQUssa0RBQTJDMUcsQ0FBM0MsRUFBWDtBQUNEO0FBQ0YsR0F0QjZCLENBdUI5Qjs7O0FBQ0EsTUFBSXdqQixPQUFPLENBQUM1UixNQUFSLEdBQWlCNlIsNkZBQXJCLEVBQXlDO0FBQ3ZDLFVBQU0vYyxLQUFLLGtDQUNpQjhjLE9BQU8sQ0FBQzVSLE1BRHpCLHNEQUMyRTZSLDZGQUQzRSxPQUFYO0FBR0Q7O0FBQ0QsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBUzdnQix1QkFBVCxDQUNFOGdCLG9CQURGLFVBR0U7QUFBQSxNQURFN2dCLHVCQUNGLFVBREVBLHVCQUNGOztBQUNBLE1BQU04Z0Isb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUF1QixDQUFDbkYsYUFBRCxFQUFtQjtBQUM5QyxRQUFNb0YsY0FBYyxHQUFHLENBQUMsT0FBRCxDQUF2QjtBQUNBLFFBQUksQ0FBQy9nQix1QkFBTCxFQUE4QitnQixjQUFjLENBQUNDLElBQWYsQ0FBb0IsR0FBcEI7QUFDOUIsV0FBT3JGLGFBQWEsSUFBSSxDQUFDb0YsY0FBYyxDQUFDaGtCLFFBQWYsQ0FBd0I0ZSxhQUF4QixDQUF6QjtBQUNELEdBSkQ7O0FBS0EsTUFBTXNGLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBK0IsQ0FBQ0Msb0JBQUQsRUFBMEI7QUFDN0QsUUFBSUEsb0JBQW9CLENBQUNDLEtBQXJCLEtBQStCeFosU0FBbkMsRUFBOEM7QUFDNUMsVUFDRSxFQUNHakksTUFBTSxDQUFDQyxTQUFQLENBQWlCdWhCLG9CQUFvQixDQUFDQyxLQUF0QyxLQUNDRCxvQkFBb0IsQ0FBQ0MsS0FBckIsSUFBOEIsQ0FEaEMsSUFFQUQsb0JBQW9CLENBQUNDLEtBQXJCLEtBQStCLFNBSGpDLENBREYsRUFNRTtBQUNBLGVBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsV0FBTyxJQUFQO0FBQ0QsR0FiRCxDQU5BLENBb0JBO0FBQ0E7QUFDQTs7O0FBQ0EsTUFBTUMsa0NBQWtDLEdBQUcsU0FBckNBLGtDQUFxQyxDQUFDdGhCLGVBQUQsRUFBcUI7QUFDOUQsUUFBSSxDQUFDQSxlQUFMLEVBQXNCLE9BQU8sS0FBUDs7QUFDdEIsUUFBSUEsZUFBZSxDQUFDN0UsS0FBcEIsRUFBMkI7QUFDekIsVUFBSSxDQUFDZ21CLDRCQUE0QixDQUFDbmhCLGVBQWUsQ0FBQzdFLEtBQWpCLENBQWpDLEVBQTBEO0FBQ3hELGVBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsUUFBSTZFLGVBQWUsQ0FBQ3VoQixXQUFwQixFQUFpQztBQUMvQixVQUFJLENBQUNKLDRCQUE0QixDQUFDbmhCLGVBQWUsQ0FBQ3VoQixXQUFqQixDQUFqQyxFQUFnRTtBQUM5RCxlQUFPLEtBQVA7QUFDRDtBQUNGOztBQUNELFdBQU8sSUFBUDtBQUNELEdBYkQ7O0FBY0EsdUNBQStDcmlCLE1BQU0sQ0FBQzZDLE9BQVAsQ0FDN0NnZixvQkFENkMsQ0FBL0Msd0NBRUc7QUFBQTtBQUFBLFFBRlNsRixhQUVUO0FBQUEsUUFGd0I3YixlQUV4Qjs7QUFDRCxRQUNFLEVBQ0VnaEIsb0JBQW9CLENBQUNuRixhQUFELENBQXBCLElBQ0F5RixrQ0FBa0MsQ0FBQ3RoQixlQUFELENBRnBDLENBREYsRUFLRTtBQUNBLGFBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBTyxJQUFQO0FBQ0QsQyxDQUVEO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU0sscUJBQVQsQ0FBK0JrVSxRQUEvQixFQUF5QztBQUN2QyxNQUFJLHNFQUFPQSxRQUFQLE1BQW9CLFFBQXhCLEVBQWtDLE9BQU8sS0FBUDtBQUNsQyxNQUFJLEVBQUVBLFFBQVEsQ0FBQ3BaLEtBQVQsSUFBa0Isc0VBQU9vWixRQUFRLENBQUNwWixLQUFoQixNQUEwQixRQUE5QyxDQUFKLEVBQTZELE9BQU8sS0FBUDtBQUM3RCxNQUFJLENBQUNxbUIsc0JBQXNCLENBQUNqTixRQUFRLENBQUNwWixLQUFULENBQWVzbUIsU0FBaEIsQ0FBM0IsRUFBdUQsT0FBTyxLQUFQO0FBQ3ZELFNBQU8sSUFBUDtBQUNEOztBQUVELFNBQVNELHNCQUFULENBQWdDN0ksQ0FBaEMsRUFBbUM7QUFDakM7QUFDQTtBQUNBO0FBQ0EsTUFBTStJLG9CQUFvQixHQUFHLENBQUMsTUFBRCxZQUFtQixTQUFuQixDQUE3QjtBQUNBLE1BQUksQ0FBQy9JLENBQUwsRUFBUSxPQUFPLEtBQVA7QUFDUixNQUFJLHNFQUFPQSxDQUFQLE1BQWEsUUFBakIsRUFBMkIsT0FBTyxLQUFQO0FBQzNCLE1BQUl6WixNQUFNLENBQUNDLElBQVAsQ0FBWXdaLENBQVosRUFBZTFKLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUMsT0FBTyxLQUFQLENBUEEsQ0FPYzs7QUFDL0MsTUFBSTBKLENBQUMsQ0FBQ21DLElBQUYsSUFBVSxDQUFDNkcsMEJBQTBCLENBQUNoSixDQUFDLENBQUNtQyxJQUFILENBQXpDLEVBQW1ELE9BQU8sS0FBUDtBQUNuRCxNQUFJbkMsQ0FBQyxDQUFDaUosT0FBRixLQUFjL1osU0FBZCxJQUEyQixPQUFPOFEsQ0FBQyxDQUFDaUosT0FBVCxLQUFxQixTQUFwRCxFQUErRCxPQUFPLEtBQVAsQ0FUOUIsQ0FVakM7O0FBQ0EsTUFBSSxPQUFPakosQ0FBQyxDQUFDaUosT0FBVCxLQUFxQixTQUF6QixFQUFvQztBQUNsQ3RrQixXQUFPLENBQUNvTixJQUFSLENBQ0Usb0ZBREY7QUFHRDs7QUFFRCxNQUFJaU8sQ0FBQyxDQUFDcGMsTUFBTixFQUFjO0FBQ1osUUFBSSxzRUFBT29jLENBQUMsQ0FBQ3BjLE1BQVQsTUFBb0IsUUFBeEIsRUFBa0MsT0FBTyxLQUFQO0FBQ2xDLFFBQUksQ0FBQ3NsQiw0QkFBNEIsQ0FBQ2xKLENBQUMsQ0FBQ21DLElBQUgsRUFBU25DLENBQUMsQ0FBQ3BjLE1BQVgsQ0FBakMsRUFBcUQsT0FBTyxLQUFQO0FBQ3RELEdBcEJnQyxDQXFCakM7OztBQUNBMkMsUUFBTSxDQUFDQyxJQUFQLENBQVl3WixDQUFaLEVBQ0dELE1BREgsQ0FDVSxVQUFDN1gsQ0FBRDtBQUFBLFdBQU8sQ0FBQzZnQixvQkFBb0IsQ0FBQ3prQixRQUFyQixDQUE4QjRELENBQTlCLENBQVI7QUFBQSxHQURWLEVBRUd3RSxPQUZILENBRVcsVUFBQ3hFLENBQUQsRUFBTztBQUNkdkQsV0FBTyxDQUFDb04sSUFBUiw2REFBa0U3SixDQUFsRTtBQUNBLFdBQU84WCxDQUFDLENBQUM5WCxDQUFELENBQVI7QUFDRCxHQUxIO0FBTUEsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU2doQiw0QkFBVCxDQUFzQy9HLElBQXRDLEVBQTRDdmUsTUFBNUMsRUFBb0Q7QUFDbEQsTUFBSTRDLElBQUksR0FBR0QsTUFBTSxDQUFDQyxJQUFQLENBQVk1QyxNQUFaLENBQVg7QUFDQSxNQUFJNEMsSUFBSSxDQUFDOFAsTUFBTCxLQUFnQixDQUFwQixFQUF1QixPQUFPLElBQVA7QUFDdkIsTUFBTTZTLFlBQVksR0FDaEIsaUVBREY7O0FBRUEsVUFBUWhILElBQVI7QUFDRSxTQUFLaUgseUdBQXFCLENBQUNDLE1BQTNCO0FBQ0UsVUFBSTdpQixJQUFJLENBQUM4UCxNQUFMLEdBQWMsQ0FBZCxJQUFtQjlQLElBQUksQ0FBQyxDQUFELENBQUosS0FBWSxVQUFuQyxFQUErQztBQUM3QzdCLGVBQU8sQ0FBQ0MsS0FBUixDQUFjdWtCLFlBQWQ7QUFDQSxlQUFPLEtBQVA7QUFDRDs7QUFDRCxVQUNFLE9BQU92bEIsTUFBTSxDQUFDMGxCLFFBQWQsS0FBMkIsUUFBM0IsSUFDQTFsQixNQUFNLENBQUMwbEIsUUFBUCxJQUFtQixDQURuQixJQUVBMWxCLE1BQU0sQ0FBQzBsQixRQUFQLEdBQWtCLENBRmxCLElBR0FDLEtBQUssQ0FBQzNsQixNQUFNLENBQUMwbEIsUUFBUixDQUpQLEVBS0U7QUFDQTNrQixlQUFPLENBQUNDLEtBQVIsV0FDS3VrQixZQURMLG1EQUMwRHZsQixNQUFNLENBQUMwbEIsUUFEakU7QUFHQSxlQUFPLEtBQVA7QUFDRDs7QUFDRCxhQUFPLElBQVA7O0FBQ0YsU0FBS0YseUdBQXFCLENBQUNJLE9BQTNCO0FBQ0UsVUFBSTVsQixNQUFNLENBQUM2bEIsTUFBUCxLQUFrQnZhLFNBQXRCLEVBQWlDO0FBQy9CLFlBQUksQ0FBQ3dhLDJCQUEyQixDQUFDOWxCLE1BQUQsQ0FBaEMsRUFBMEMsT0FBTyxLQUFQO0FBQzNDOztBQUNELGFBQU8sSUFBUDs7QUFDRjtBQUNFLGFBQU8sSUFBUDtBQXhCSjtBQTBCRDs7QUFFRCxTQUFTOGxCLDJCQUFULENBQXFDOWxCLE1BQXJDLEVBQTZDO0FBQzNDLE1BQUlBLE1BQU0sQ0FBQzZsQixNQUFQLEtBQWtCLFNBQXRCLEVBQWlDO0FBQy9CN2xCLFVBQU0sQ0FBQ3VlLElBQVAsR0FBYyxTQUFkO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsTUFBSXdILGtFQUFlLENBQUMvbEIsTUFBTSxDQUFDNmxCLE1BQVIsQ0FBbkIsRUFBb0M7QUFDbEM3bEIsVUFBTSxDQUFDdWUsSUFBUCxHQUFjLEtBQWQ7O0FBQ0EsUUFBSSxDQUFDeUgsdUJBQXVCLENBQUNobUIsTUFBTSxDQUFDNmxCLE1BQVIsQ0FBNUIsRUFBNkM7QUFDM0M5a0IsYUFBTyxDQUFDQyxLQUFSLGlEQUMyQ2lsQix1R0FBNEIsQ0FBQ25qQixJQUE3QixDQUN2QyxJQUR1QyxDQUQzQztBQUtBLGFBQU8sS0FBUDtBQUNEOztBQUNELFdBQU8sSUFBUDtBQUNEOztBQUNELE1BQUlvakIsc0JBQXNCLENBQUNsbUIsTUFBTSxDQUFDNmxCLE1BQVIsQ0FBMUIsRUFBMkM7QUFDekM3bEIsVUFBTSxDQUFDdWUsSUFBUCxHQUFjLGlCQUFkO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FIRCxNQUdPO0FBQ0x4ZCxXQUFPLENBQUNDLEtBQVIsNERBQ3NEbWxCLGlIQUR0RDtBQUdBLFdBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU0gsdUJBQVQsQ0FBaUNybUIsR0FBakMsRUFBc0M7QUFDcEM7QUFDQSxNQUFNeW1CLFNBQVMsR0FBRyxJQUFJQyxHQUFKLENBQVExbUIsR0FBUixDQUFsQjtBQUNBLE1BQU0ybUIsUUFBUSxHQUFHRixTQUFTLENBQUNHLFFBQTNCOztBQUVBLE1BQUlILFNBQVMsQ0FBQ0ksUUFBVixLQUF1QixPQUEzQixFQUFvQztBQUNsQyxRQUFJO0FBQ0YsVUFBTUMsZUFBZSxHQUFHSCxRQUFRLENBQUNJLFNBQVQsQ0FDdEJKLFFBQVEsQ0FBQ0ssT0FBVCxDQUFpQixHQUFqQixJQUF3QixDQURGLEVBRXRCTCxRQUFRLENBQUNLLE9BQVQsQ0FBaUIsR0FBakIsQ0FGc0IsQ0FBeEI7QUFJQSxVQUFNQyxhQUFhLEdBQUdILGVBQWUsQ0FBQ0ksS0FBaEIsQ0FBc0IsR0FBdEIsRUFBMkIsQ0FBM0IsQ0FBdEI7QUFDQSxhQUFPWix1R0FBNEIsQ0FBQ3ZsQixRQUE3QixDQUFzQ2ttQixhQUF0QyxDQUFQO0FBQ0QsS0FQRCxDQU9FLE9BQU85bEIsQ0FBUCxFQUFVO0FBQ1ZDLGFBQU8sQ0FBQ0MsS0FBUixDQUFjLG9DQUFkLEVBQW9ERixDQUFwRDtBQUNBLGFBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBRUQsTUFBTWdtQixXQUFXLEdBQUdSLFFBQVEsQ0FBQ08sS0FBVCxDQUFlLEdBQWYsRUFBb0JFLEVBQXBCLENBQXVCLENBQUMsQ0FBeEIsRUFBMkJDLFdBQTNCLEdBQXlDQyxJQUF6QyxFQUFwQjtBQUNBLFNBQU9oQix1R0FBNEIsQ0FBQ3ZsQixRQUE3QixDQUFzQ29tQixXQUF0QyxDQUFQO0FBQ0Q7O0FBRUQsU0FBU1osc0JBQVQsQ0FBZ0NnQixTQUFoQyxFQUEyQztBQUN6QyxNQUFJQyxNQUFNLEdBQUc5akIsTUFBTSxDQUFDNmpCLFNBQUQsQ0FBbkI7QUFDQSxNQUFJdkIsS0FBSyxDQUFDd0IsTUFBRCxDQUFULEVBQW1CLE9BQU8sS0FBUDtBQUNuQixNQUFJLENBQUM5akIsTUFBTSxDQUFDQyxTQUFQLENBQWlCNmpCLE1BQWpCLENBQUwsRUFBK0IsT0FBTyxLQUFQO0FBQy9CLE1BQUlBLE1BQU0sSUFBSSxDQUFkLEVBQWlCLE9BQU8sS0FBUDtBQUNqQixNQUFJQSxNQUFNLEdBQUdoQixpSEFBYixFQUFxRCxPQUFPLEtBQVA7QUFDckQsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU2YsMEJBQVQsQ0FBb0M3RyxJQUFwQyxFQUEwQztBQUN4QyxNQUFJLE9BQU9BLElBQVAsS0FBZ0IsUUFBcEIsRUFBOEIsT0FBTyxLQUFQOztBQUM5QixNQUFJLENBQUM1YixNQUFNLENBQUN5a0IsTUFBUCxDQUFjNUIseUdBQWQsRUFBcUM5a0IsUUFBckMsQ0FBOEM2ZCxJQUE5QyxDQUFMLEVBQTBEO0FBQ3hEeGQsV0FBTyxDQUFDQyxLQUFSLENBQWMsNENBQWQ7QUFDQSxXQUFPLEtBQVA7QUFDRDs7QUFDRCxTQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFTK0MsOEJBQVQsR0FBMEM7QUFDeEMsTUFBSXNqQixhQUFhLEdBQUcxa0IsTUFBTSxDQUFDeWtCLE1BQVAsQ0FBYzVCLHlHQUFkLEVBQXFDMWlCLElBQXJDLENBQTBDLEtBQTFDLENBQXBCO0FBQ0EsOEVBQXFFdWtCLGFBQXJFO0FBQ0Q7O0FBRUQsU0FBU3pqQixnQ0FBVCxTQUF1RTtBQUFBLE1BQTNCRCx1QkFBMkIsVUFBM0JBLHVCQUEyQjtBQUNyRSxTQUNFLDJFQUFvRTJqQiwwR0FBcEUsU0FDRTNqQix1QkFBdUIsa0JBQ1o0akIsc0hBRFksVUFFbkIsRUFITixXQUtBLElBTEEsR0FNQSwwRUFOQSxHQU9BLCtFQVBBLEdBUUEsS0FURjtBQVdEOztBQUVELFNBQVNob0IseUJBQVQsQ0FBbUM0YSxJQUFuQyxFQUF5QztBQUN2QyxNQUFLQSxJQUFJLElBQUksc0VBQU9BLElBQVAsTUFBZ0IsUUFBekIsSUFBc0NxTixLQUFLLENBQUNDLE9BQU4sQ0FBY3ROLElBQWQsQ0FBMUMsRUFBK0Q7QUFDN0RwWixXQUFPLENBQUNDLEtBQVIsNkRBQ3VEdkIsSUFBSSxDQUFDQyxTQUFMLENBQ25EYixxQkFEbUQsQ0FEdkQ7QUFLQSxXQUFPLEtBQVA7QUFDRDs7QUFFRCxNQUFJc2IsSUFBSixFQUFVO0FBQ1IseUNBQXdCeFgsTUFBTSxDQUFDNkMsT0FBUCxDQUFlMlUsSUFBZixDQUF4Qix3Q0FBOEM7QUFBQTtBQUFBLFVBQWxDdU4sT0FBa0M7O0FBQzVDLDJDQUFpQy9rQixNQUFNLENBQUM2QyxPQUFQLENBQWUyVSxJQUFJLENBQUN1TixPQUFELENBQW5CLENBQWpDLHdDQUFnRTtBQUFBO0FBQUEsWUFBcERDLE1BQW9EO0FBQUEsWUFBNUNDLFFBQTRDOztBQUM5RCxZQUFJRCxNQUFNLEtBQUssVUFBWCxJQUF5QixDQUFDNUIsa0VBQWUsQ0FBQzZCLFFBQUQsQ0FBN0MsRUFBeUQ7QUFDdkQ3bUIsaUJBQU8sQ0FBQ0MsS0FBUiw0QkFBa0MybUIsTUFBbEM7QUFDQSxpQkFBTyxLQUFQO0FBQ0Q7O0FBQ0QsWUFBSUEsTUFBTSxLQUFLLGtCQUFYLElBQWlDLENBQUM1QixrRUFBZSxDQUFDNkIsUUFBRCxDQUFyRCxFQUFpRTtBQUMvRDdtQixpQkFBTyxDQUFDQyxLQUFSLDRCQUFrQzJtQixNQUFsQztBQUNBLGlCQUFPLEtBQVA7QUFDRDs7QUFDRCxZQUFNRSxXQUFXLEdBQUdocEIscUJBQXFCLENBQUNDLEVBQXRCLENBQXlCNm9CLE1BQXpCLENBQXBCOztBQUNBLFlBQUksQ0FBQ0UsV0FBTCxFQUFrQjtBQUNoQjltQixpQkFBTyxDQUFDQyxLQUFSLGlEQUF1RDJtQixNQUF2RDtBQUNBLGlCQUFPLEtBQVA7QUFDRDs7QUFDRCxZQUFJLHNFQUFPQyxRQUFQLE1BQW9CQyxXQUF4QixFQUFxQztBQUNuQzltQixpQkFBTyxDQUFDQyxLQUFSLDRCQUNzQjJtQixNQUR0QiwwQkFDNENFLFdBRDVDO0FBR0EsaUJBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELFNBQU8sSUFBUDtBQUNEOztBQUVELFNBQVNybkIseUJBQVQsQ0FBbUNSLE1BQW5DLEVBQTJDO0FBQ3pDLFNBQU84bkIsc0JBQXNCLENBQUM5bkIsTUFBRCxFQUFTNUIscUJBQVQsQ0FBN0I7QUFDRDs7QUFFRCxTQUFTMHBCLHNCQUFULENBQWdDelksSUFBaEMsRUFBc0MwWSxRQUF0QyxFQUFnRDtBQUM5QyxNQUFJQSxRQUFRLEtBQUt6YyxTQUFqQixFQUE0QjtBQUMxQixXQUFPLEtBQVA7QUFDRDs7QUFDRCxnRkFBZXljLFFBQWY7QUFDRSxTQUFLLFFBQUw7QUFDRSxhQUFPLHNFQUFPMVksSUFBUCxNQUFnQjBZLFFBQXZCOztBQUNGLFNBQUssUUFBTDtBQUNFLFVBQUksc0VBQU8xWSxJQUFQLE1BQWdCLFFBQXBCLEVBQThCO0FBQzVCLGVBQU8sS0FBUDtBQUNEOztBQUNELFdBQUssSUFBTXhNLEdBQVgsSUFBa0J3TSxJQUFsQixFQUF3QjtBQUN0QixZQUFJLENBQUN5WSxzQkFBc0IsQ0FBQ3pZLElBQUksQ0FBQ3hNLEdBQUQsQ0FBTCxFQUFZa2xCLFFBQVEsQ0FBQ2xsQixHQUFELENBQXBCLENBQTNCLEVBQXVEO0FBQ3JELGlCQUFPLEtBQVA7QUFDRDtBQUNGOztBQUNELGFBQU8sSUFBUDs7QUFDRjtBQUNFO0FBQ0E7QUFDQTtBQUNBLGFBQU8sS0FBUDtBQWpCSjtBQW1CRDs7QUFFRCxTQUFTeVYsdUNBQVQsR0FBbUQ7QUFDakQ7QUFJRDs7QUFFRCxTQUFTSSx3Q0FBVCxHQUFvRDtBQUNsRDtBQUdEOztBQUVELFNBQVNQLHVCQUFULENBQWlDeFksR0FBakMsRUFBc0M7QUFDcEM7QUFDQSxNQUFJLE9BQU9BLEdBQVAsS0FBZSxRQUFuQixFQUE2QjtBQUMzQixVQUFNLElBQUk2SCxLQUFKLHlDQUFOO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTNFEsNEJBQVQsQ0FBc0M0UCxjQUF0QyxFQUFzRDtBQUNwRCxNQUFJLHNFQUFPQSxjQUFQLE1BQTBCLFFBQTlCLEVBQXdDO0FBQ3RDLFVBQU0sSUFBSXhnQixLQUFKLHNEQUFOO0FBQ0Q7O0FBRUQsTUFBSXdnQixjQUFjLENBQUNwWCxLQUFuQixFQUEwQjtBQUN4QixRQUNFLENBQUNqTyxNQUFNLENBQUN5a0IsTUFBUCxDQUFjblAsK0dBQWQsRUFBb0R2WCxRQUFwRCxDQUNDc25CLGNBQWMsQ0FBQ3BYLEtBRGhCLENBREgsRUFJRTtBQUNBLFlBQU0sSUFBSXBKLEtBQUosQ0FDSiwwRUFDRS9ILElBQUksQ0FBQ0MsU0FBTCxDQUFldVksK0dBQWYsQ0FGRSxDQUFOO0FBSUQ7QUFDRjs7QUFFRCxNQUFJK1AsY0FBYyxDQUFDOUYsTUFBbkIsRUFBMkI7QUFDekIsUUFBSSxPQUFPOEYsY0FBYyxDQUFDOUYsTUFBdEIsS0FBaUMsUUFBckMsRUFBK0M7QUFDN0MsWUFBTSxJQUFJMWEsS0FBSiw2REFBTjtBQUdEOztBQUNELFFBQUl3Z0IsY0FBYyxDQUFDOUYsTUFBZixHQUF3QixDQUF4QixJQUE2QjhGLGNBQWMsQ0FBQzlGLE1BQWYsR0FBd0IsQ0FBekQsRUFBNEQ7QUFDMUQsWUFBTSxJQUFJMWEsS0FBSiwrREFBTjtBQUdEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTeWdCLGNBQVQsQ0FBd0JDLEdBQXhCLEVBQTZCbnFCLEdBQTdCLEVBQWtDQyxHQUFsQyxFQUF1QztBQUNyQyxNQUFJLE9BQU9rcUIsR0FBUCxLQUFlLFFBQWYsSUFBMkJBLEdBQUcsR0FBR25xQixHQUFqQyxJQUF3Q21xQixHQUFHLEdBQUdscUIsR0FBbEQsRUFBdUQ7QUFDckQsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU3FhLG9DQUFULENBQThDMlAsY0FBOUMsRUFBOEQ7QUFDNUQsT0FBSyxJQUFJM1ksSUFBVCxJQUFpQjJZLGNBQWpCLEVBQWlDO0FBQy9CLFFBQUksQ0FBQzdwQix5QkFBeUIsQ0FBQ3VDLFFBQTFCLENBQW1DMk8sSUFBbkMsQ0FBTCxFQUErQztBQUM3QyxZQUFNLElBQUk3SCxLQUFKLHVCQUNXNkgsSUFEWCwrQkFDb0NsUix5QkFEcEMsRUFBTjtBQUdEO0FBQ0YsR0FQMkQsQ0FRNUQ7OztBQUNBLE1BQUk2cEIsY0FBYyxDQUFDRyxrQkFBbkIsRUFBdUM7QUFDckMsUUFBSSxFQUFFSCxjQUFjLENBQUNHLGtCQUFmLFlBQTZDWCxLQUEvQyxDQUFKLEVBQTJEO0FBQ3pELFlBQU0sSUFBSWhnQixLQUFKLHdDQUFOO0FBQ0QsS0FIb0MsQ0FJckM7OztBQUNBLFFBQ0UsQ0FBQ3lnQixjQUFjLENBQ2JELGNBQWMsQ0FBQ0csa0JBQWYsQ0FBa0N6VixNQURyQixFQUViLENBRmEsRUFHYnhWLG9CQUhhLENBRGpCLEVBTUU7QUFDQSxZQUFNLElBQUlzSyxLQUFKLGtFQUFOO0FBR0QsS0Fmb0MsQ0FnQnJDOzs7QUFDQXdnQixrQkFBYyxDQUFDRyxrQkFBZixDQUFrQ0MsS0FBbEMsQ0FBd0MsVUFBQ3RELEtBQUQsRUFBVztBQUNqRCxXQUFLLElBQUl6VixLQUFULElBQWlCeVYsS0FBakIsRUFBd0I7QUFDdEI7QUFDQSxZQUFJLENBQUNqbkIsNkJBQTZCLENBQUN3cUIsY0FBOUIsQ0FBNkNoWixLQUE3QyxDQUFMLEVBQXlEO0FBQ3ZELGdCQUFNLElBQUk3SCxLQUFKLENBQ0osc0JBQWU2SCxLQUFmLHlCQUNFMU0sTUFBTSxDQUFDQyxJQUFQLENBQVkvRSw2QkFBWixDQUZFLENBQU47QUFJRCxTQVBxQixDQVF0Qjs7O0FBQ0EsWUFBSSxPQUFPaW5CLEtBQUssQ0FBQ3pWLEtBQUQsQ0FBWixLQUF1QixRQUEzQixFQUFxQztBQUNuQyxnQkFBTSxJQUFJN0gsS0FBSixnQ0FBa0M2SCxLQUFsQyx5QkFBTjtBQUNELFNBWHFCLENBWXRCOzs7QUFac0Isb0NBYUh4Uiw2QkFBNkIsQ0FBQ3dSLEtBQUQsQ0FiMUI7QUFBQSxZQWFoQnRSLEdBYmdCLHlCQWFoQkEsR0FiZ0I7QUFBQSxZQWFYQyxHQWJXLHlCQWFYQSxHQWJXOztBQWN0QixZQUFJLENBQUNpcUIsY0FBYyxDQUFDbkQsS0FBSyxDQUFDelYsS0FBRCxDQUFOLEVBQWN0UixHQUFkLEVBQW1CQyxHQUFuQixDQUFuQixFQUE0QztBQUMxQyxnQkFBTSxJQUFJd0osS0FBSixnQ0FBa0M2SCxLQUFsQyxzREFDTnRSLEdBRE0saUJBQ0lDLEdBREosRUFBTjtBQUVEO0FBQ0YsT0FuQmdELENBb0JqRDs7O0FBQ0EsVUFBSSxDQUFDOG1CLEtBQUssQ0FBQ3VELGNBQU4sQ0FBcUIsWUFBckIsQ0FBTCxFQUF5QztBQUN2QyxjQUFNLElBQUk3Z0IsS0FBSixvREFBTjtBQUNEO0FBQ0YsS0F4QkQ7QUF5QkQ7QUFDRiIsImZpbGUiOiIuL3NyYy9tb2R1bGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICdmYXN0LWVxdWFscyc7XG5pbXBvcnQgQm93c2VyIGZyb20gJ2Jvd3Nlcic7XG5cbmltcG9ydCB7XG4gIC8vIHJlLWV4cG9ydFxuICAvL1xuICAvLyBjYWxsIHN0YXRlc1xuICBEQUlMWV9TVEFURV9ORVcsXG4gIERBSUxZX1NUQVRFX0xPQURJTkcsXG4gIERBSUxZX1NUQVRFX0xPQURFRCxcbiAgREFJTFlfU1RBVEVfSk9JTklORyxcbiAgREFJTFlfU1RBVEVfSk9JTkVELFxuICBEQUlMWV9TVEFURV9MRUZULFxuICBEQUlMWV9TVEFURV9FUlJPUixcbiAgLy8gdHJhY2sgc3RhdGVzXG4gIERBSUxZX1RSQUNLX1NUQVRFX0JMT0NLRUQsXG4gIERBSUxZX1RSQUNLX1NUQVRFX09GRixcbiAgREFJTFlfVFJBQ0tfU1RBVEVfU0VOREFCTEUsXG4gIERBSUxZX1RSQUNLX1NUQVRFX0xPQURJTkcsXG4gIERBSUxZX1RSQUNLX1NUQVRFX0lOVEVSUlVQVEVELFxuICBEQUlMWV9UUkFDS19TVEFURV9QTEFZQUJMRSxcbiAgLy8gbWVldGluZyBhY2Nlc3NcbiAgREFJTFlfQUNDRVNTX1VOS05PV04sXG4gIERBSUxZX0FDQ0VTU19MRVZFTF9GVUxMLFxuICBEQUlMWV9BQ0NFU1NfTEVWRUxfTE9CQlksXG4gIERBSUxZX0FDQ0VTU19MRVZFTF9OT05FLFxuICAvLyByZWNlaXZlIHNldHRpbmdzXG4gIERBSUxZX1JFQ0VJVkVfU0VUVElOR1NfQkFTRV9LRVksXG4gIERBSUxZX1JFQ0VJVkVfU0VUVElOR1NfQUxMX1BBUlRJQ0lQQU5UU19LRVksXG4gIC8vIGVycm9yIHR5cGVzXG4gIERBSUxZX0ZBVEFMX0VSUk9SX0VKRUNURUQsXG4gIERBSUxZX0ZBVEFMX0VSUk9SX05CRl9ST09NLFxuICBEQUlMWV9GQVRBTF9FUlJPUl9OQkZfVE9LRU4sXG4gIERBSUxZX0ZBVEFMX0VSUk9SX0VYUF9ST09NLFxuICBEQUlMWV9GQVRBTF9FUlJPUl9FWFBfVE9LRU4sXG4gIERBSUxZX0ZBVEFMX0VSUk9SX01FRVRJTkdfRlVMTCxcbiAgREFJTFlfQ0FNRVJBX0VSUk9SX0NBTV9JTl9VU0UsXG4gIERBSUxZX0NBTUVSQV9FUlJPUl9NSUNfSU5fVVNFLFxuICBEQUlMWV9DQU1FUkFfRVJST1JfQ0FNX0FORF9NSUNfSU5fVVNFLFxuICBEQUlMWV9DQU1FUkFfRVJST1JfUEVSTUlTU0lPTlMsXG4gIERBSUxZX0NBTUVSQV9FUlJPUl9VTkRFRl9NRURJQURFVklDRVMsXG4gIERBSUxZX0NBTUVSQV9FUlJPUl9OT1RfRk9VTkQsXG4gIERBSUxZX0NBTUVSQV9FUlJPUl9DT05TVFJBSU5UUyxcbiAgREFJTFlfQ0FNRVJBX0VSUk9SX1VOS05PV04sXG4gIC8vIGV2ZW50c1xuICBEQUlMWV9FVkVOVF9JRlJBTUVfUkVBRFlfRk9SX0xBVU5DSF9DT05GSUcsXG4gIERBSUxZX0VWRU5UX0lGUkFNRV9MQVVOQ0hfQ09ORklHLFxuICBEQUlMWV9FVkVOVF9USEVNRV9VUERBVEVELFxuICBEQUlMWV9FVkVOVF9MT0FESU5HLFxuICBEQUlMWV9FVkVOVF9MT0FERUQsXG4gIERBSUxZX0VWRU5UX0xPQURfQVRURU1QVF9GQUlMRUQsXG4gIERBSUxZX0VWRU5UX1NUQVJURURfQ0FNRVJBLFxuICBEQUlMWV9FVkVOVF9DQU1FUkFfRVJST1IsXG4gIERBSUxZX0VWRU5UX0pPSU5JTkdfTUVFVElORyxcbiAgREFJTFlfRVZFTlRfSk9JTkVEX01FRVRJTkcsXG4gIERBSUxZX0VWRU5UX0xFRlRfTUVFVElORyxcbiAgREFJTFlfRVZFTlRfUEFSVElDSVBBTlRfSk9JTkVELFxuICBEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9VUERBVEVELFxuICBEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9MRUZULFxuICBEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9DT1VOVFNfVVBEQVRFRCxcbiAgREFJTFlfRVZFTlRfVFJBQ0tfU1RBUlRFRCxcbiAgREFJTFlfRVZFTlRfVFJBQ0tfU1RPUFBFRCxcbiAgREFJTFlfRVZFTlRfUkVDT1JESU5HX1NUQVJURUQsXG4gIERBSUxZX0VWRU5UX1JFQ09SRElOR19TVE9QUEVELFxuICBEQUlMWV9FVkVOVF9SRU1PVEVfTUVESUFfUExBWUVSX1NUQVJURUQsXG4gIERBSUxZX0VWRU5UX1JFTU9URV9NRURJQV9QTEFZRVJfVVBEQVRFRCxcbiAgREFJTFlfRVZFTlRfUkVNT1RFX01FRElBX1BMQVlFUl9TVE9QUEVELFxuICBEQUlMWV9FVkVOVF9UUkFOU0NSSVBUSU9OX1NUQVJURUQsXG4gIERBSUxZX0VWRU5UX1RSQU5TQ1JJUFRJT05fU1RPUFBFRCxcbiAgREFJTFlfRVZFTlRfVFJBTlNDUklQVElPTl9FUlJPUixcbiAgREFJTFlfRVZFTlRfUkVDT1JESU5HX1NUQVRTLFxuICBEQUlMWV9FVkVOVF9SRUNPUkRJTkdfRVJST1IsXG4gIERBSUxZX0VWRU5UX1JFQ09SRElOR19VUExPQURfQ09NUExFVEVELFxuICBEQUlMWV9FVkVOVF9FUlJPUixcbiAgREFJTFlfRVZFTlRfQVBQX01TRyxcbiAgREFJTFlfRVZFTlRfSU5QVVRfRVZFTlQsXG4gIERBSUxZX0VWRU5UX0xPQ0FMX1NDUkVFTl9TSEFSRV9TVEFSVEVELFxuICBEQUlMWV9FVkVOVF9MT0NBTF9TQ1JFRU5fU0hBUkVfU1RPUFBFRCxcbiAgREFJTFlfRVZFTlRfTkVUV09SS19RVUFMSVRZX0NIQU5HRSxcbiAgREFJTFlfRVZFTlRfQUNUSVZFX1NQRUFLRVJfQ0hBTkdFLFxuICBEQUlMWV9FVkVOVF9BQ1RJVkVfU1BFQUtFUl9NT0RFX0NIQU5HRSxcbiAgREFJTFlfRVZFTlRfRlVMTFNDUkVFTixcbiAgREFJTFlfRVZFTlRfRVhJVF9GVUxMU0NSRUVOLFxuICBEQUlMWV9FVkVOVF9ORVRXT1JLX0NPTk5FQ1RJT04sXG4gIERBSUxZX0VWRU5UX1JFQ09SRElOR19EQVRBLFxuICBEQUlMWV9FVkVOVF9MSVZFX1NUUkVBTUlOR19TVEFSVEVELFxuICBEQUlMWV9FVkVOVF9MSVZFX1NUUkVBTUlOR19TVE9QUEVELFxuICBEQUlMWV9FVkVOVF9MSVZFX1NUUkVBTUlOR19FUlJPUixcbiAgREFJTFlfRVZFTlRfTEFOR19VUERBVEVELFxuICBEQUlMWV9FVkVOVF9TSE9XX0xPQ0FMX1ZJREVPX0NIQU5HRUQsXG4gIERBSUxZX0VWRU5UX0FDQ0VTU19TVEFURV9VUERBVEVELFxuICBEQUlMWV9FVkVOVF9NRUVUSU5HX1NFU1NJT05fVVBEQVRFRCxcbiAgREFJTFlfRVZFTlRfTUVFVElOR19TRVNTSU9OX1NUQVRFX1VQREFURUQsXG4gIERBSUxZX0VWRU5UX01FRVRJTkdfU0VTU0lPTl9EQVRBX0VSUk9SLFxuICBEQUlMWV9FVkVOVF9XQUlUSU5HX1BBUlRJQ0lQQU5UX0FEREVELFxuICBEQUlMWV9FVkVOVF9XQUlUSU5HX1BBUlRJQ0lQQU5UX1JFTU9WRUQsXG4gIERBSUxZX0VWRU5UX1dBSVRJTkdfUEFSVElDSVBBTlRfVVBEQVRFRCxcbiAgREFJTFlfRVZFTlRfUkVDRUlWRV9TRVRUSU5HU19VUERBVEVELFxuICBEQUlMWV9FVkVOVF9JTlBVVF9TRVRUSU5HU19VUERBVEVELFxuICBEQUlMWV9FVkVOVF9OT05GQVRBTF9FUlJPUixcblxuICAvLyBpbnRlcm5hbHNcbiAgLy9cbiAgREFJTFlfTUVUSE9EX1NFVF9USEVNRSxcbiAgREFJTFlfTUVUSE9EX1NUQVJUX0NBTUVSQSxcbiAgREFJTFlfTUVUSE9EX1NFVF9JTlBVVF9ERVZJQ0VTLFxuICBEQUlMWV9NRVRIT0RfU0VUX09VVFBVVF9ERVZJQ0UsXG4gIERBSUxZX01FVEhPRF9HRVRfSU5QVVRfREVWSUNFUyxcbiAgREFJTFlfTUVUSE9EX0pPSU4sXG4gIERBSUxZX01FVEhPRF9MRUFWRSxcbiAgREFJTFlfTUVUSE9EX1VQREFURV9QQVJUSUNJUEFOVCxcbiAgREFJTFlfTUVUSE9EX1VQREFURV9QQVJUSUNJUEFOVFMsXG4gIERBSUxZX01FVEhPRF9MT0NBTF9BVURJTyxcbiAgREFJTFlfTUVUSE9EX0xPQ0FMX1ZJREVPLFxuICBEQUlMWV9NRVRIT0RfU1RBUlRfU0NSRUVOU0hBUkUsXG4gIERBSUxZX01FVEhPRF9TVE9QX1NDUkVFTlNIQVJFLFxuICBEQUlMWV9NRVRIT0RfU1RBUlRfUkVDT1JESU5HLFxuICBEQUlMWV9NRVRIT0RfVVBEQVRFX1JFQ09SRElORyxcbiAgREFJTFlfTUVUSE9EX1NUT1BfUkVDT1JESU5HLFxuICBEQUlMWV9NRVRIT0RfTE9BRF9DU1MsXG4gIERBSUxZX01FVEhPRF9TRVRfQkFORFdJRFRILFxuICBEQUlMWV9NRVRIT0RfR0VUX0NBTENfU1RBVFMsXG4gIERBSUxZX01FVEhPRF9FTlVNRVJBVEVfREVWSUNFUyxcbiAgREFJTFlfTUVUSE9EX0NZQ0xFX0NBTUVSQSxcbiAgREFJTFlfTUVUSE9EX0NZQ0xFX01JQyxcbiAgREFJTFlfTUVUSE9EX0FQUF9NU0csXG4gIERBSUxZX01FVEhPRF9BRERfRkFLRV9QQVJUSUNJUEFOVCxcbiAgREFJTFlfTUVUSE9EX1NFVF9TSE9XX05BTUVTLFxuICBEQUlMWV9NRVRIT0RfU0VUX1NIT1dfTE9DQUxfVklERU8sXG4gIERBSUxZX01FVEhPRF9TRVRfU0hPV19QQVJUSUNJUEFOVFNfQkFSLFxuICBEQUlMWV9NRVRIT0RfU0VUX0FDVElWRV9TUEVBS0VSX01PREUsXG4gIERBSUxZX01FVEhPRF9HRVRfTEFORyxcbiAgREFJTFlfTUVUSE9EX1NFVF9MQU5HLFxuICBEQUlMWV9NRVRIT0RfR0VUX01FRVRJTkdfU0VTU0lPTixcbiAgREFJTFlfTUVUSE9EX1NFVF9TRVNTSU9OX0RBVEEsXG4gIERBSUxZX01FVEhPRF9SRUdJU1RFUl9JTlBVVF9IQU5ETEVSLFxuICBEQUlMWV9NRVRIT0RfREVURUNUX0FMTF9GQUNFUyxcbiAgREFJTFlfTUVUSE9EX1JPT00sXG4gIERBSUxZX01FVEhPRF9HRVRfTkVUV09SS19UT1BPTE9HWSxcbiAgREFJTFlfTUVUSE9EX1NFVF9ORVRXT1JLX1RPUE9MT0dZLFxuICBEQUlMWV9NRVRIT0RfU0VUX1BMQVlfRElORyxcbiAgREFJTFlfTUVUSE9EX1NFVF9TVUJTQ1JJQkVfVE9fVFJBQ0tTX0FVVE9NQVRJQ0FMTFksXG4gIERBSUxZX01FVEhPRF9TVEFSVF9MSVZFX1NUUkVBTUlORyxcbiAgREFJTFlfTUVUSE9EX1VQREFURV9MSVZFX1NUUkVBTUlORyxcbiAgREFJTFlfTUVUSE9EX1VQREFURV9MSVZFX1NUUkVBTUlOR19FTkRQT0lOVFMsXG4gIFVQREFURV9MSVZFX1NUUkVBTUlOR19FTkRQT0lOVFNfT1AsXG4gIERBSUxZX01FVEhPRF9TVE9QX0xJVkVfU1RSRUFNSU5HLFxuICBEQUlMWV9NRVRIT0RfU1RBUlRfVFJBTlNDUklQVElPTixcbiAgREFJTFlfTUVUSE9EX1NUT1BfVFJBTlNDUklQVElPTixcbiAgREFJTFlfQ1VTVE9NX1RSQUNLLFxuICBEQUlMWV9VSV9SRVFVRVNUX0ZVTExTQ1JFRU4sXG4gIERBSUxZX1VJX0VYSVRfRlVMTFNDUkVFTixcbiAgREFJTFlfTUVUSE9EX0dFVF9DQU1FUkFfRkFDSU5HX01PREUsXG4gIERBSUxZX01FVEhPRF9TRVRfVVNFUl9OQU1FLFxuICBEQUlMWV9NRVRIT0RfU0VUX1VTRVJfREFUQSxcbiAgREFJTFlfTUVUSE9EX1BSRUFVVEgsXG4gIERBSUxZX01FVEhPRF9SRVFVRVNUX0FDQ0VTUyxcbiAgREFJTFlfTUVUSE9EX1VQREFURV9XQUlUSU5HX1BBUlRJQ0lQQU5ULFxuICBEQUlMWV9NRVRIT0RfVVBEQVRFX1dBSVRJTkdfUEFSVElDSVBBTlRTLFxuICBEQUlMWV9NRVRIT0RfR0VUX1NJTkdMRV9QQVJUSUNJUEFOVF9SRUNFSVZFX1NFVFRJTkdTLFxuICBEQUlMWV9NRVRIT0RfVVBEQVRFX1JFQ0VJVkVfU0VUVElOR1MsXG4gIERBSUxZX0pTX1ZJREVPX1BST0NFU1NPUl9UWVBFUyBhcyBWSURFT19QUk9DRVNTT1JfVFlQRVMsXG4gIERBSUxZX01FVEhPRF9VUERBVEVfSU5QVVRfU0VUVElOR1MsXG4gIERBSUxZX01FVEhPRF9TVEFSVF9SRU1PVEVfTUVESUFfUExBWUVSLFxuICBEQUlMWV9NRVRIT0RfU1RPUF9SRU1PVEVfTUVESUFfUExBWUVSLFxuICBEQUlMWV9NRVRIT0RfVVBEQVRFX1JFTU9URV9NRURJQV9QTEFZRVIsXG4gIERBSUxZX0pTX1JFTU9URV9NRURJQV9QTEFZRVJfU0VUVElORyxcbiAgREFJTFlfSlNfUkVNT1RFX01FRElBX1BMQVlFUl9TVEFURSxcbiAgREFJTFlfUFJFU0VMRUNURURfQkdfSU1BR0VfVVJMU19MRU5HVEgsXG4gIERBSUxZX1NVUFBPUlRFRF9CR19JTUdfVFlQRVMsXG4gIERBSUxZX01FVEhPRF9VUERBVEVfQ1VTVE9NX1RSQVlfQlVUVE9OUyxcbiAgREFJTFlfRVZFTlRfQ1VTVE9NX0JVVFRPTl9DTElDSyxcbiAgREFJTFlfTUVUSE9EX1NFVF9DQU1FUkEsXG4gIERBSUxZX01FVEhPRF9TVEFSVF9DVVNUT01fVFJBQ0ssXG4gIERBSUxZX01FVEhPRF9TVE9QX0NVU1RPTV9UUkFDSyxcbiAgREFJTFlfRVZFTlRfQVZBSUxBQkxFX0RFVklDRVNfVVBEQVRFRCxcbiAgREFJTFlfRVZFTlRfU0VMRUNURURfREVWSUNFU19VUERBVEVELFxuICBNQVhfQVBQX01TR19TSVpFLFxuICBNQVhfVVNFUl9EQVRBX1NJWkUsXG4gIERBSUxZX01FVEhPRF9VUERBVEVfQ1VTVE9NX0lOVEVHUkFUSU9OUyxcbn0gZnJvbSAnLi9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL0NvbW1vbkluY2x1ZGVzLmpzJztcbmltcG9ydCB7XG4gIGlzUmVhY3ROYXRpdmUsXG4gIGJyb3dzZXJWaWRlb1N1cHBvcnRlZF9wLFxuICBnZXRVc2VyQWdlbnQsXG4gIGlzRnVsbHNjcmVlblN1cHBvcnRlZCxcbiAgaXNTY3JlZW5TaGFyaW5nU3VwcG9ydGVkLFxuICBpc1ZpZGVvUHJvY2Vzc2luZ1N1cHBvcnRlZCxcbn0gZnJvbSAnLi9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL0Vudmlyb25tZW50LmpzJztcbmltcG9ydCBXZWJNZXNzYWdlQ2hhbm5lbCBmcm9tICcuL3NoYXJlZC13aXRoLXBsdW90LWNvcmUvc2NyaXB0LW1lc3NhZ2UtY2hhbm5lbHMvV2ViTWVzc2FnZUNoYW5uZWwnO1xuaW1wb3J0IFJlYWN0TmF0aXZlTWVzc2FnZUNoYW5uZWwgZnJvbSAnLi9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL3NjcmlwdC1tZXNzYWdlLWNoYW5uZWxzL1JlYWN0TmF0aXZlTWVzc2FnZUNoYW5uZWwnO1xuaW1wb3J0IHsgU2Vzc2lvbkRhdGFVcGRhdGUgfSBmcm9tICcuL3NoYXJlZC13aXRoLXBsdW90LWNvcmUvU2Vzc2lvbkRhdGEuanMnO1xuaW1wb3J0IENhbGxPYmplY3RMb2FkZXIgZnJvbSAnLi9DYWxsT2JqZWN0TG9hZGVyJztcbmltcG9ydCB7XG4gIGNhbGxPYmplY3RCdW5kbGVVcmwsXG4gIHJhbmRvbVN0cmluZ0lkLFxuICB2YWxpZGF0ZUh0dHBVcmwsXG59IGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0ICogYXMgUGFydGljaXBhbnQgZnJvbSAnLi9QYXJ0aWNpcGFudCc7XG5cbi8vIGNhbGwgc3RhdGVzXG5leHBvcnQge1xuICBEQUlMWV9TVEFURV9ORVcsXG4gIERBSUxZX1NUQVRFX0pPSU5JTkcsXG4gIERBSUxZX1NUQVRFX0pPSU5FRCxcbiAgREFJTFlfU1RBVEVfTEVGVCxcbiAgREFJTFlfU1RBVEVfRVJST1IsXG59O1xuXG4vLyB0cmFjayBzdGF0ZXNcbmV4cG9ydCB7XG4gIERBSUxZX1RSQUNLX1NUQVRFX0JMT0NLRUQsXG4gIERBSUxZX1RSQUNLX1NUQVRFX09GRixcbiAgREFJTFlfVFJBQ0tfU1RBVEVfU0VOREFCTEUsXG4gIERBSUxZX1RSQUNLX1NUQVRFX0xPQURJTkcsXG4gIERBSUxZX1RSQUNLX1NUQVRFX0lOVEVSUlVQVEVELFxuICBEQUlMWV9UUkFDS19TVEFURV9QTEFZQUJMRSxcbn07XG5cbi8vIG1lZXRpbmcgYWNjZXNzXG5leHBvcnQge1xuICBEQUlMWV9BQ0NFU1NfVU5LTk9XTixcbiAgREFJTFlfQUNDRVNTX0xFVkVMX0ZVTEwsXG4gIERBSUxZX0FDQ0VTU19MRVZFTF9MT0JCWSxcbiAgREFJTFlfQUNDRVNTX0xFVkVMX05PTkUsXG59O1xuXG4vLyByZWNlaXZlIHNldHRpbmdzXG5leHBvcnQge1xuICBEQUlMWV9SRUNFSVZFX1NFVFRJTkdTX0JBU0VfS0VZLFxuICBEQUlMWV9SRUNFSVZFX1NFVFRJTkdTX0FMTF9QQVJUSUNJUEFOVFNfS0VZLFxufTtcblxuLy8gZXJyb3IgdHlwZXNcbmV4cG9ydCB7XG4gIERBSUxZX0ZBVEFMX0VSUk9SX0VKRUNURUQsXG4gIERBSUxZX0ZBVEFMX0VSUk9SX05CRl9ST09NLFxuICBEQUlMWV9GQVRBTF9FUlJPUl9OQkZfVE9LRU4sXG4gIERBSUxZX0ZBVEFMX0VSUk9SX0VYUF9ST09NLFxuICBEQUlMWV9GQVRBTF9FUlJPUl9FWFBfVE9LRU4sXG4gIERBSUxZX0ZBVEFMX0VSUk9SX01FRVRJTkdfRlVMTCxcbiAgREFJTFlfQ0FNRVJBX0VSUk9SX0NBTV9JTl9VU0UsXG4gIERBSUxZX0NBTUVSQV9FUlJPUl9NSUNfSU5fVVNFLFxuICBEQUlMWV9DQU1FUkFfRVJST1JfQ0FNX0FORF9NSUNfSU5fVVNFLFxuICBEQUlMWV9DQU1FUkFfRVJST1JfUEVSTUlTU0lPTlMsXG4gIERBSUxZX0NBTUVSQV9FUlJPUl9VTkRFRl9NRURJQURFVklDRVMsXG4gIERBSUxZX0NBTUVSQV9FUlJPUl9OT1RfRk9VTkQsXG4gIERBSUxZX0NBTUVSQV9FUlJPUl9DT05TVFJBSU5UUyxcbiAgREFJTFlfQ0FNRVJBX0VSUk9SX1VOS05PV04sXG59O1xuXG4vLyBldmVudHNcbmV4cG9ydCB7XG4gIERBSUxZX0VWRU5UX0lGUkFNRV9SRUFEWV9GT1JfTEFVTkNIX0NPTkZJRyxcbiAgREFJTFlfRVZFTlRfSUZSQU1FX0xBVU5DSF9DT05GSUcsXG4gIERBSUxZX0VWRU5UX1RIRU1FX1VQREFURUQsXG4gIERBSUxZX0VWRU5UX0xPQURJTkcsXG4gIERBSUxZX0VWRU5UX0xPQURFRCxcbiAgREFJTFlfRVZFTlRfTE9BRF9BVFRFTVBUX0ZBSUxFRCxcbiAgREFJTFlfRVZFTlRfU1RBUlRFRF9DQU1FUkEsXG4gIERBSUxZX0VWRU5UX0NBTUVSQV9FUlJPUixcbiAgREFJTFlfRVZFTlRfSk9JTklOR19NRUVUSU5HLFxuICBEQUlMWV9FVkVOVF9KT0lORURfTUVFVElORyxcbiAgREFJTFlfRVZFTlRfTEVGVF9NRUVUSU5HLFxuICBEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9KT0lORUQsXG4gIERBSUxZX0VWRU5UX1BBUlRJQ0lQQU5UX1VQREFURUQsXG4gIERBSUxZX0VWRU5UX1BBUlRJQ0lQQU5UX0xFRlQsXG4gIERBSUxZX0VWRU5UX1BBUlRJQ0lQQU5UX0NPVU5UU19VUERBVEVELFxuICBEQUlMWV9FVkVOVF9UUkFDS19TVEFSVEVELFxuICBEQUlMWV9FVkVOVF9UUkFDS19TVE9QUEVELFxuICBEQUlMWV9FVkVOVF9SRUNPUkRJTkdfU1RBUlRFRCxcbiAgREFJTFlfRVZFTlRfUkVDT1JESU5HX1NUT1BQRUQsXG4gIERBSUxZX0VWRU5UX1JFQ09SRElOR19TVEFUUyxcbiAgREFJTFlfRVZFTlRfUkVDT1JESU5HX0VSUk9SLFxuICBEQUlMWV9FVkVOVF9SRUNPUkRJTkdfVVBMT0FEX0NPTVBMRVRFRCxcbiAgREFJTFlfRVZFTlRfUkVNT1RFX01FRElBX1BMQVlFUl9TVEFSVEVELFxuICBEQUlMWV9FVkVOVF9SRU1PVEVfTUVESUFfUExBWUVSX1VQREFURUQsXG4gIERBSUxZX0VWRU5UX1JFTU9URV9NRURJQV9QTEFZRVJfU1RPUFBFRCxcbiAgREFJTFlfRVZFTlRfVFJBTlNDUklQVElPTl9TVEFSVEVELFxuICBEQUlMWV9FVkVOVF9UUkFOU0NSSVBUSU9OX1NUT1BQRUQsXG4gIERBSUxZX0VWRU5UX1RSQU5TQ1JJUFRJT05fRVJST1IsXG4gIERBSUxZX0VWRU5UX0VSUk9SLFxuICBEQUlMWV9FVkVOVF9BUFBfTVNHLFxuICBEQUlMWV9FVkVOVF9JTlBVVF9FVkVOVCxcbiAgREFJTFlfRVZFTlRfTE9DQUxfU0NSRUVOX1NIQVJFX1NUQVJURUQsXG4gIERBSUxZX0VWRU5UX0xPQ0FMX1NDUkVFTl9TSEFSRV9TVE9QUEVELFxuICBEQUlMWV9FVkVOVF9ORVRXT1JLX1FVQUxJVFlfQ0hBTkdFLFxuICBEQUlMWV9FVkVOVF9BQ1RJVkVfU1BFQUtFUl9DSEFOR0UsXG4gIERBSUxZX0VWRU5UX0FDVElWRV9TUEVBS0VSX01PREVfQ0hBTkdFLFxuICBEQUlMWV9FVkVOVF9GVUxMU0NSRUVOLFxuICBEQUlMWV9FVkVOVF9FWElUX0ZVTExTQ1JFRU4sXG4gIERBSUxZX0VWRU5UX05FVFdPUktfQ09OTkVDVElPTixcbiAgREFJTFlfRVZFTlRfUkVDT1JESU5HX0RBVEEsXG4gIERBSUxZX0VWRU5UX0xJVkVfU1RSRUFNSU5HX1NUQVJURUQsXG4gIERBSUxZX0VWRU5UX0xJVkVfU1RSRUFNSU5HX1NUT1BQRUQsXG4gIERBSUxZX0VWRU5UX0xJVkVfU1RSRUFNSU5HX0VSUk9SLFxuICBEQUlMWV9FVkVOVF9MQU5HX1VQREFURUQsXG4gIERBSUxZX0VWRU5UX0FDQ0VTU19TVEFURV9VUERBVEVELFxuICBEQUlMWV9FVkVOVF9NRUVUSU5HX1NFU1NJT05fVVBEQVRFRCxcbiAgREFJTFlfRVZFTlRfTUVFVElOR19TRVNTSU9OX1NUQVRFX1VQREFURUQsXG4gIERBSUxZX0VWRU5UX01FRVRJTkdfU0VTU0lPTl9EQVRBX0VSUk9SLFxuICBEQUlMWV9FVkVOVF9XQUlUSU5HX1BBUlRJQ0lQQU5UX0FEREVELFxuICBEQUlMWV9FVkVOVF9XQUlUSU5HX1BBUlRJQ0lQQU5UX1JFTU9WRUQsXG4gIERBSUxZX0VWRU5UX1dBSVRJTkdfUEFSVElDSVBBTlRfVVBEQVRFRCxcbiAgREFJTFlfRVZFTlRfUkVDRUlWRV9TRVRUSU5HU19VUERBVEVELFxuICBEQUlMWV9FVkVOVF9JTlBVVF9TRVRUSU5HU19VUERBVEVELFxuICBEQUlMWV9FVkVOVF9OT05GQVRBTF9FUlJPUixcbn07XG5cbi8vIEF1ZGlvIG1vZGVzIGZvciBSZWFjdCBOYXRpdmU6IHdoZXRoZXIgd2Ugc2hvdWxkIGNvbmZpZ3VyZSBhdWRpbyBmb3IgdmlkZW9cbi8vIGNhbGxzIG9yIGF1ZGlvIGNhbGxzIChpLmUuIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZSBzcGVha2VycGhvbmUpLlxuY29uc3QgTkFUSVZFX0FVRElPX01PREVfVklERU9fQ0FMTCA9ICd2aWRlbyc7XG5jb25zdCBOQVRJVkVfQVVESU9fTU9ERV9WT0lDRV9DQUxMID0gJ3ZvaWNlJztcbmNvbnN0IE5BVElWRV9BVURJT19NT0RFX0lETEUgPSAnaWRsZSc7XG5cbmNvbnN0IE1BWF9STVBfRlBTID0gMzA7XG5jb25zdCBNSU5fUk1QX0ZQUyA9IDE7XG5jb25zdCBNQVhfU0lNVUxDQVNUX0xBWUVSUyA9IDM7XG5jb25zdCBNQVhfU0NBTEVfUkVTT0xVVElPTl9CWSA9IDg7XG5jb25zdCBNQVhfTEFZRVJfQklUUkFURSA9IDI1MDAwMDA7XG5jb25zdCBNSU5fTEFZRVJfQklUUkFURSA9IDEwMDAwMDtcblxuY29uc3QgREVGQVVMVF9TRVNTSU9OX1NUQVRFID0gaXNSZWFjdE5hdGl2ZSgpXG4gID8geyBkYXRhOiB7fSB9XG4gIDoge1xuICAgICAgZGF0YToge30sXG4gICAgICB0b3BvbG9neTogJ25vbmUnLFxuICAgIH07XG5cbmNvbnN0IEVNUFRZX1BBUlRJQ0lQQU5UX0NPVU5UUyA9IHsgcHJlc2VudDogMCwgaGlkZGVuOiAwIH07XG5cbmNvbnN0IHNpbXVsY2FzdEVuY29kaW5nc1ZhbGlkUmFuZ2VzID0ge1xuICBtYXhCaXRyYXRlOiB7IG1pbjogTUlOX0xBWUVSX0JJVFJBVEUsIG1heDogTUFYX0xBWUVSX0JJVFJBVEUgfSxcbiAgbWF4RnJhbWVyYXRlOiB7IG1pbjogTUlOX1JNUF9GUFMsIG1heDogTUFYX1JNUF9GUFMgfSxcbiAgc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiB7IG1pbjogMSwgbWF4OiBNQVhfU0NBTEVfUkVTT0xVVElPTl9CWSB9LFxufTtcblxuY29uc3Qgc3RhcnRSbXBTZXR0aW5nc1ZhbGlkS2V5cyA9IFsnc3RhdGUnLCAndm9sdW1lJywgJ3NpbXVsY2FzdEVuY29kaW5ncyddO1xuLy9cbi8vXG4vL1xuXG5jb25zdCByZWFjdE5hdGl2ZUNvbmZpZ1R5cGUgPSB7XG4gIGFuZHJvaWRJbkNhbGxOb3RpZmljYXRpb246IHtcbiAgICB0aXRsZTogJ3N0cmluZycsXG4gICAgc3VidGl0bGU6ICdzdHJpbmcnLFxuICAgIGljb25OYW1lOiAnc3RyaW5nJyxcbiAgICBkaXNhYmxlRm9yQ3VzdG9tT3ZlcnJpZGU6ICdib29sZWFuJyxcbiAgfSxcbiAgZGlzYWJsZUF1dG9EZXZpY2VNYW5hZ2VtZW50OiB7XG4gICAgYXVkaW86ICdib29sZWFuJyxcbiAgICB2aWRlbzogJ2Jvb2xlYW4nLFxuICB9LFxufTtcblxuY29uc3QgY3VzdG9tVHJheUJ1dHRvbnNUeXBlID0ge1xuICBpZDoge1xuICAgIGljb25QYXRoOiAnc3RyaW5nJyxcbiAgICBpY29uUGF0aERhcmtNb2RlOiAnc3RyaW5nJyxcbiAgICBsYWJlbDogJ3N0cmluZycsXG4gICAgdG9vbHRpcDogJ3N0cmluZycsXG4gIH0sXG59O1xuXG5jb25zdCBGUkFNRV9QUk9QUyA9IHtcbiAgY3VzdG9tSW50ZWdyYXRpb25zOiB0cnVlLFxuICBjdXN0b21UcmF5QnV0dG9uczoge1xuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZUN1c3RvbVRyYXlCdXR0b25zLFxuICAgIGhlbHA6IGBjdXN0b21UcmF5QnV0dG9ucyBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5IG9mIHRoZSB0eXBlICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBjdXN0b21UcmF5QnV0dG9uc1R5cGVcbiAgICApfWAsXG4gIH0sXG4gIHVybDoge1xuICAgIHZhbGlkYXRlOiAodXJsKSA9PiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyxcbiAgICBoZWxwOiAndXJsIHNob3VsZCBiZSBhIHN0cmluZycsXG4gIH0sXG4gIGJhc2VVcmw6IHtcbiAgICB2YWxpZGF0ZTogKHVybCkgPT4gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycsXG4gICAgaGVscDogJ2Jhc2VVcmwgc2hvdWxkIGJlIGEgc3RyaW5nJyxcbiAgfSxcbiAgdG9rZW46IHtcbiAgICB2YWxpZGF0ZTogKHRva2VuKSA9PiB0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnLFxuICAgIGhlbHA6ICd0b2tlbiBzaG91bGQgYmUgYSBzdHJpbmcnLFxuICAgIHF1ZXJ5U3RyaW5nOiAndCcsXG4gIH0sXG4gIGRhaWx5Q29uZmlnOiB7XG4gICAgLy8gb25seSBmb3IgY2FsbCBvYmplY3QgbW9kZSwgZm9yIG5vd1xuICAgIHZhbGlkYXRlOiAoY29uZmlnKSA9PiB7XG4gICAgICBpZiAoIXdpbmRvdy5fZGFpbHlDb25maWcpIHtcbiAgICAgICAgd2luZG93Ll9kYWlseUNvbmZpZyA9IHt9O1xuICAgICAgfVxuICAgICAgd2luZG93Ll9kYWlseUNvbmZpZy5leHBlcmltZW50YWxHZXRVc2VyTWVkaWFDb25zdHJhaW50c01vZGlmeSA9XG4gICAgICAgIGNvbmZpZy5leHBlcmltZW50YWxHZXRVc2VyTWVkaWFDb25zdHJhaW50c01vZGlmeTtcbiAgICAgIHdpbmRvdy5fZGFpbHlDb25maWcudXNlck1lZGlhVmlkZW9Db25zdHJhaW50cyA9XG4gICAgICAgIGNvbmZpZy51c2VyTWVkaWFWaWRlb0NvbnN0cmFpbnRzO1xuICAgICAgd2luZG93Ll9kYWlseUNvbmZpZy51c2VyTWVkaWFBdWRpb0NvbnN0cmFpbnRzID1cbiAgICAgICAgY29uZmlnLnVzZXJNZWRpYUF1ZGlvQ29uc3RyYWludHM7XG4gICAgICB3aW5kb3cuX2RhaWx5Q29uZmlnLmNhbGxPYmplY3RCdW5kbGVVcmxPdmVycmlkZSA9XG4gICAgICAgIGNvbmZpZy5jYWxsT2JqZWN0QnVuZGxlVXJsT3ZlcnJpZGU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9LFxuICByZWFjdE5hdGl2ZUNvbmZpZzoge1xuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVJlYWN0TmF0aXZlQ29uZmlnLFxuICAgIGhlbHA6IGByZWFjdE5hdGl2ZUNvbmZpZyBzaG91bGQgbG9vayBsaWtlICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICByZWFjdE5hdGl2ZUNvbmZpZ1R5cGVcbiAgICApfSwgYWxsIGZpZWxkcyBvcHRpb25hbGAsXG4gIH0sXG4gIGxhbmc6IHtcbiAgICB2YWxpZGF0ZTogKGxhbmcpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICdkZScsXG4gICAgICAgICdlbi11cycsIC8vIEhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBidXQgbm90IGVuY291cmFnZWQgKGp1c3QgbWFwcyB0byAnZW4nIGFueXdheSlcbiAgICAgICAgJ2VuJyxcbiAgICAgICAgJ2VzJyxcbiAgICAgICAgJ2ZpJyxcbiAgICAgICAgJ2ZyJyxcbiAgICAgICAgJ2l0JyxcbiAgICAgICAgJ2pwJyxcbiAgICAgICAgJ2thJyxcbiAgICAgICAgJ25sJyxcbiAgICAgICAgJ25vJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3B0JyxcbiAgICAgICAgJ3J1JyxcbiAgICAgICAgJ3N2JyxcbiAgICAgICAgJ3RyJyxcbiAgICAgICAgJ3VzZXInLFxuICAgICAgXS5pbmNsdWRlcyhsYW5nKTtcbiAgICB9LFxuICAgIGhlbHA6ICdsYW5ndWFnZSBub3Qgc3VwcG9ydGVkLiBPcHRpb25zIGFyZTogZGUsIGVuLXVzLCBlbiwgZXMsIGZpLCBmciwgaXQsIGpwLCBrYSwgbmwsIG5vLCBwbCwgcHQsIHJ1LCBzdiwgdHIsIHVzZXInLFxuICB9LFxuICB1c2VyTmFtZTogdHJ1ZSwgLy8gaWdub3JlZCBpZiB0aGVyZSdzIGEgdG9rZW5cbiAgdXNlckRhdGE6IHtcbiAgICB2YWxpZGF0ZTogKGRhdGEpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlVXNlckRhdGEoZGF0YSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBoZWxwOiAnaW52YWxpZCB1c2VyRGF0YSB0eXBlIHByb3ZpZGVkJyxcbiAgfSxcbiAgc3RhcnRWaWRlb09mZjogdHJ1ZSxcbiAgc3RhcnRBdWRpb09mZjogdHJ1ZSxcbiAgYWN0aXZlU3BlYWtlck1vZGU6IHRydWUsXG4gIHNob3dMZWF2ZUJ1dHRvbjogdHJ1ZSxcbiAgc2hvd0xvY2FsVmlkZW86IHRydWUsXG4gIHNob3dQYXJ0aWNpcGFudHNCYXI6IHRydWUsXG4gIHNob3dGdWxsc2NyZWVuQnV0dG9uOiB0cnVlLFxuICBzaG93VXNlck5hbWVDaGFuZ2VVSTogdHJ1ZSxcbiAgLy8gc3R5bGUgdG8gYXBwbHkgdG8gaWZyYW1lIGluIGNyZWF0ZUZyYW1lIGZhY3RvcnkgbWV0aG9kXG4gIGlmcmFtZVN0eWxlOiB0cnVlLFxuICAvLyBzdHlsZXMgcGFzc2VkIHRocm91Z2ggdG8gdmlkZW8gY2FsbHMgaW5zaWRlIHRoZSBpZnJhbWVcbiAgY3VzdG9tTGF5b3V0OiB0cnVlLFxuICBjc3NGaWxlOiB0cnVlLFxuICBjc3NUZXh0OiB0cnVlLFxuICBib2R5Q2xhc3M6IHRydWUsXG4gIHZpZGVvU291cmNlOiB7XG4gICAgdmFsaWRhdGU6IChzLCBjYWxsT2JqZWN0KSA9PiB7XG4gICAgICBjYWxsT2JqZWN0Ll9wcmVsb2FkQ2FjaGUudmlkZW9EZXZpY2VJZCA9IHM7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9LFxuICBhdWRpb1NvdXJjZToge1xuICAgIHZhbGlkYXRlOiAocywgY2FsbE9iamVjdCkgPT4ge1xuICAgICAgY2FsbE9iamVjdC5fcHJlbG9hZENhY2hlLmF1ZGlvRGV2aWNlSWQgPSBzO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgfSxcbiAgc3Vic2NyaWJlVG9UcmFja3NBdXRvbWF0aWNhbGx5OiB7XG4gICAgdmFsaWRhdGU6IChzLCBjYWxsT2JqZWN0KSA9PiB7XG4gICAgICBjYWxsT2JqZWN0Ll9wcmVsb2FkQ2FjaGUuc3Vic2NyaWJlVG9UcmFja3NBdXRvbWF0aWNhbGx5ID0gcztcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH0sXG4gIHRoZW1lOiB7XG4gICAgdmFsaWRhdGU6IChvKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZENvbG9ycyA9IFtcbiAgICAgICAgJ2FjY2VudCcsXG4gICAgICAgICdhY2NlbnRUZXh0JyxcbiAgICAgICAgJ2JhY2tncm91bmQnLFxuICAgICAgICAnYmFja2dyb3VuZEFjY2VudCcsXG4gICAgICAgICdiYXNlVGV4dCcsXG4gICAgICAgICdib3JkZXInLFxuICAgICAgICAnbWFpbkFyZWFCZycsXG4gICAgICAgICdtYWluQXJlYUJnQWNjZW50JyxcbiAgICAgICAgJ21haW5BcmVhVGV4dCcsXG4gICAgICAgICdzdXBwb3J0aXZlVGV4dCcsXG4gICAgICBdO1xuICAgICAgY29uc3QgY29udGFpbnNWYWxpZENvbG9ycyA9IChjb2xvcnMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29sb3JzKSkge1xuICAgICAgICAgIGlmICghdmFsaWRDb2xvcnMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgLy8gS2V5IGlzIG5vdCBhIHN1cHBvcnRlZCB0aGVtZSBjb2xvclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYHVuc3VwcG9ydGVkIGNvbG9yIFwiJHtrZXl9XCIuIFZhbGlkIGNvbG9yczogJHt2YWxpZENvbG9ycy5qb2luKFxuICAgICAgICAgICAgICAgICcsICdcbiAgICAgICAgICAgICAgKX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWNvbG9yc1trZXldLm1hdGNoKC9eI1swLTlhLWZdezZ9fCNbMC05YS1mXXszfSQvaSkpIHtcbiAgICAgICAgICAgIC8vIENvbG9yIGlzIG5vdCBpbiBoZXggZm9ybWF0XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgJHtrZXl9IHRoZW1lIGNvbG9yIHNob3VsZCBiZSBwcm92aWRlZCBpbiB2YWxpZCBoZXggY29sb3IgZm9ybWF0LiBSZWNlaXZlZDogXCIke2NvbG9yc1trZXldfVwiYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgbyAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgISgoJ2xpZ2h0JyBpbiBvICYmICdkYXJrJyBpbiBvKSB8fCAnY29sb3JzJyBpbiBvKVxuICAgICAgKSB7XG4gICAgICAgIC8vIE11c3QgZGVmaW5lIGVpdGhlciBib3RoIHRoZW1lcyBvciBjb2xvcnNcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnVGhlbWUgbXVzdCBjb250YWluIGVpdGhlciBib3RoIFwibGlnaHRcIiBhbmQgXCJkYXJrXCIgcHJvcGVydGllcywgb3IgXCJjb2xvcnNcIi4nLFxuICAgICAgICAgIG9cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCdsaWdodCcgaW4gbyAmJiAnZGFyaycgaW4gbykge1xuICAgICAgICBpZiAoISgnY29sb3JzJyBpbiBvLmxpZ2h0KSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0xpZ2h0IHRoZW1lIGlzIG1pc3NpbmcgXCJjb2xvcnNcIiBwcm9wZXJ0eS4nLCBvKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoJ2NvbG9ycycgaW4gby5kYXJrKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RhcmsgdGhlbWUgaXMgbWlzc2luZyBcImNvbG9yc1wiIHByb3BlcnR5LicsIG8pO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnRhaW5zVmFsaWRDb2xvcnMoby5saWdodC5jb2xvcnMpICYmXG4gICAgICAgICAgY29udGFpbnNWYWxpZENvbG9ycyhvLmRhcmsuY29sb3JzKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRhaW5zVmFsaWRDb2xvcnMoby5jb2xvcnMpO1xuICAgIH0sXG4gICAgaGVscDogJ3Vuc3VwcG9ydGVkIHRoZW1lIGNvbmZpZ3VyYXRpb24uIENoZWNrIGVycm9yIGxvZ3MgZm9yIGRldGFpbGVkIGluZm8uJyxcbiAgfSxcbiAgbGF5b3V0Q29uZmlnOiB7XG4gICAgdmFsaWRhdGU6IChsYXlvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICgnZ3JpZCcgaW4gbGF5b3V0Q29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGdyaWRDb25maWcgPSBsYXlvdXRDb25maWcuZ3JpZDtcbiAgICAgICAgaWYgKCdtYXhUaWxlc1BlclBhZ2UnIGluIGdyaWRDb25maWcpIHtcbiAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZ3JpZENvbmZpZy5tYXhUaWxlc1BlclBhZ2UpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgZ3JpZC5tYXhUaWxlc1BlclBhZ2Ugc2hvdWxkIGJlIGFuIGludGVnZXIuIFlvdSBwYXNzZWQgJHtncmlkQ29uZmlnLm1heFRpbGVzUGVyUGFnZX0uYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGdyaWRDb25maWcubWF4VGlsZXNQZXJQYWdlID4gNDkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBncmlkLm1heFRpbGVzUGVyUGFnZSBjYW4ndCBiZSBsYXJnZXIgdGhhbiA0OSB3aXRob3V0IHNhY3JpZmljaW5nIGJyb3dzZXIgcGVyZm9ybWFuY2UuIFBsZWFzZSBjb250YWN0IHVzIGF0IGh0dHBzOi8vd3d3LmRhaWx5LmNvL2NvbnRhY3QgdG8gdGFsayBhYm91dCB5b3VyIHVzZSBjYXNlLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgnbWluVGlsZXNQZXJQYWdlJyBpbiBncmlkQ29uZmlnKSB7XG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGdyaWRDb25maWcubWluVGlsZXNQZXJQYWdlKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYGdyaWQubWluVGlsZXNQZXJQYWdlIHNob3VsZCBiZSBhbiBpbnRlZ2VyLiBZb3UgcGFzc2VkICR7Z3JpZENvbmZpZy5taW5UaWxlc1BlclBhZ2V9LmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChncmlkQ29uZmlnLm1pblRpbGVzUGVyUGFnZSA8IDEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGdyaWQubWluVGlsZXNQZXJQYWdlIGNhbid0IGJlIGxvd2VyIHRoYW4gMS5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgJ21heFRpbGVzUGVyUGFnZScgaW4gZ3JpZENvbmZpZyAmJlxuICAgICAgICAgICAgZ3JpZENvbmZpZy5taW5UaWxlc1BlclBhZ2UgPiBncmlkQ29uZmlnLm1heFRpbGVzUGVyUGFnZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYGdyaWQubWluVGlsZXNQZXJQYWdlIGNhbid0IGJlIGhpZ2hlciB0aGFuIGdyaWQubWF4VGlsZXNQZXJQYWdlLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGhlbHA6ICd1bnN1cHBvcnRlZCBsYXlvdXRDb25maWcuIENoZWNrIGVycm9yIGxvZ3MgZm9yIGRldGFpbGVkIGluZm8uJyxcbiAgfSxcbiAgcmVjZWl2ZVNldHRpbmdzOiB7XG4gICAgLy8gRGlzYWxsb3cgXCIqXCIgc2hvcnRoYW5kIGtleSBzaW5jZSBpdCdzIGEgc2hvcnRoYW5kIGZvciBwYXJ0aWNpcGFudHNcbiAgICAvLyBjdXJyZW50bHkgY29ubmVjdGVkICp0byB5b3UqIChpLmUuIHBhcnRpY2lwYW50cyBhbHJlYWR5IGluXG4gICAgLy8gcGFydGljaXBhbnRzKCkpLCB3aGljaCBpcyBuZWNlc3NhcmlseSBlbXB0eSBhdCBqb2luIHRpbWUuIEFsbG93aW5nIHRoaXNcbiAgICAvLyBrZXkgbWlnaHQgb25seSBzb3cgY29uZnVzaW9uOiBpdCBtaWdodCBsZWFkIHBlb3BsZSB0byB0aGluayBpdCdzIGFcbiAgICAvLyBzaG9ydGhhbmQgZm9yIHBhcnRpY2lwYW50cyBjdXJyZW50bHkgY29ubmVjdGVkICp0byB0aGUgcm9vbSouXG4gICAgdmFsaWRhdGU6IChyZWNlaXZlU2V0dGluZ3MpID0+XG4gICAgICB2YWxpZGF0ZVJlY2VpdmVTZXR0aW5ncyhyZWNlaXZlU2V0dGluZ3MsIHtcbiAgICAgICAgYWxsb3dBbGxQYXJ0aWNpcGFudHNLZXk6IGZhbHNlLFxuICAgICAgfSksXG4gICAgaGVscDogcmVjZWl2ZVNldHRpbmdzVmFsaWRhdGlvbkhlbHBNc2coe1xuICAgICAgYWxsb3dBbGxQYXJ0aWNpcGFudHNLZXk6IGZhbHNlLFxuICAgIH0pLFxuICB9LFxuICBpbnB1dFNldHRpbmdzOiB7XG4gICAgdmFsaWRhdGU6IChpbnB1dFNldHRpbmdzKSA9PiB2YWxpZGF0ZUlucHV0U2V0dGluZ3MoaW5wdXRTZXR0aW5ncyksXG4gICAgaGVscDogaW5wdXRTZXR0aW5nc1ZhbGlkYXRpb25IZWxwTXNnKCksXG4gIH0sXG4gIC8vIHVzZWQgaW50ZXJuYWxseVxuICBsYXlvdXQ6IHtcbiAgICB2YWxpZGF0ZTogKGxheW91dCkgPT5cbiAgICAgIGxheW91dCA9PT0gJ2N1c3RvbS12MScgfHwgbGF5b3V0ID09PSAnYnJvd3NlcicgfHwgbGF5b3V0ID09PSAnbm9uZScsXG4gICAgaGVscDogJ2xheW91dCBtYXkgb25seSBiZSBzZXQgdG8gXCJjdXN0b20tdjFcIicsXG4gICAgcXVlcnlTdHJpbmc6ICdsYXlvdXQnLFxuICB9LFxuICBlbWI6IHtcbiAgICBxdWVyeVN0cmluZzogJ2VtYicsXG4gIH0sXG4gIGVtYkhyZWY6IHtcbiAgICBxdWVyeVN0cmluZzogJ2VtYkhyZWYnLFxuICB9LFxuICBkYWlseUpzVmVyc2lvbjoge1xuICAgIHF1ZXJ5U3RyaW5nOiAnZGFpbHlKc1ZlcnNpb24nLFxuICB9LFxufTtcblxuLy8gdG9kbzogbW9yZSB2YWxpZGF0aW9uP1xuY29uc3QgUEFSVElDSVBBTlRfUFJPUFMgPSB7XG4gIHN0eWxlczoge1xuICAgIHZhbGlkYXRlOiAoc3R5bGVzKSA9PiB7XG4gICAgICBmb3IgKHZhciBrIGluIHN0eWxlcykge1xuICAgICAgICBpZiAoayAhPT0gJ2NhbScgJiYgayAhPT0gJ3NjcmVlbicpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZXMuY2FtKSB7XG4gICAgICAgIGZvciAodmFyIGsgaW4gc3R5bGVzLmNhbSkge1xuICAgICAgICAgIGlmIChrICE9PSAnZGl2JyAmJiBrICE9PSAndmlkZW8nKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3R5bGVzLnNjcmVlbikge1xuICAgICAgICBmb3IgKHZhciBrIGluIHN0eWxlcy5zY3JlZW4pIHtcbiAgICAgICAgICBpZiAoayAhPT0gJ2RpdicgJiYgayAhPT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBoZWxwOlxuICAgICAgJ3N0eWxlcyBmb3JtYXQgc2hvdWxkIGJlIGEgc3Vic2V0IG9mOiAnICtcbiAgICAgICd7IGNhbToge2Rpdjoge30sIHZpZGVvOiB7fX0sIHNjcmVlbjoge2Rpdjoge30sIHZpZGVvOiB7fX0gfScsXG4gIH0sXG4gIHNldFN1YnNjcmliZWRUcmFja3M6IHtcbiAgICB2YWxpZGF0ZTogKHN1YnMsIGNhbGxPYmplY3QsIHBhcnRpY2lwYW50KSA9PiB7XG4gICAgICBpZiAoY2FsbE9iamVjdC5fcHJlbG9hZENhY2hlLnN1YnNjcmliZVRvVHJhY2tzQXV0b21hdGljYWxseSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWxpZFByaW1pdGl2ZVZhbHVlcyA9IFt0cnVlLCBmYWxzZSwgJ3N0YWdlZCddO1xuICAgICAgaWYgKFxuICAgICAgICB2YWxpZFByaW1pdGl2ZVZhbHVlcy5pbmNsdWRlcyhzdWJzKSB8fFxuICAgICAgICAoIWlzUmVhY3ROYXRpdmUoKSAmJiBzdWJzID09PSAnYXZhdGFyJylcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtub3duVHJhY2tzID0gW1xuICAgICAgICAnYXVkaW8nLFxuICAgICAgICAndmlkZW8nLFxuICAgICAgICAnc2NyZWVuQXVkaW8nLFxuICAgICAgICAnc2NyZWVuVmlkZW8nLFxuICAgICAgICAncm1wQXVkaW8nLFxuICAgICAgICAncm1wVmlkZW8nLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHZhbGlkYXRlVHJhY2tTdWJzID0gKHN1YnMsIGN1c3RvbSA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcyBpbiBzdWJzKSB7XG4gICAgICAgICAgaWYgKHMgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluc1ZhbGlkVmFsdWUgPSB2YWxpZFByaW1pdGl2ZVZhbHVlcy5pbmNsdWRlcyhzdWJzW3NdKTtcbiAgICAgICAgICAgIGlmICghY29udGFpbnNWYWxpZFZhbHVlICYmICF2YWxpZGF0ZVRyYWNrU3VicyhzdWJzW3NdLCB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlzVW5leHBlY3RlZFRyYWNrVHlwZSA9ICFjdXN0b20gJiYgIWtub3duVHJhY2tzLmluY2x1ZGVzKHMpO1xuICAgICAgICAgICAgY29uc3QgaXNVbmV4cGVjdGVkVmFsdWUgPSAhdmFsaWRQcmltaXRpdmVWYWx1ZXMuaW5jbHVkZXMoc3Vic1tzXSk7XG4gICAgICAgICAgICBpZiAoaXNVbmV4cGVjdGVkVHJhY2tUeXBlIHx8IGlzVW5leHBlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHZhbGlkYXRlVHJhY2tTdWJzKHN1YnMpO1xuICAgIH0sXG4gICAgaGVscDpcbiAgICAgICdzZXRTdWJzY3JpYmVkVHJhY2tzIGNhbm5vdCBiZSB1c2VkIHdoZW4gc2V0U3Vic2NyaWJlVG9UcmFja3NBdXRvbWF0aWNhbGx5IGlzIGVuYWJsZWQsIGFuZCBzaG91bGQgYmUgb2YgdGhlIGZvcm06ICcgK1xuICAgICAgYHRydWUke1xuICAgICAgICAhaXNSZWFjdE5hdGl2ZSgpID8gXCIgfCAnYXZhdGFyJ1wiIDogJydcbiAgICAgIH0gfCBmYWxzZSB8ICdzdGFnZWQnIHwgeyBbYXVkaW86IHRydWV8ZmFsc2V8J3N0YWdlZCddLCBbdmlkZW86IHRydWV8ZmFsc2V8J3N0YWdlZCddLCBbc2NyZWVuQXVkaW86IHRydWV8ZmFsc2V8J3N0YWdlZCddLCBbc2NyZWVuVmlkZW86IHRydWV8ZmFsc2V8J3N0YWdlZCddIH1gLFxuICB9LFxuICBzZXRBdWRpbzogdHJ1ZSxcbiAgc2V0VmlkZW86IHRydWUsXG4gIGVqZWN0OiB0cnVlLFxuICB1cGRhdGVQZXJtaXNzaW9uczoge1xuICAgIHZhbGlkYXRlOiAocGVybWlzc2lvbnNVcGRhdGUpID0+IHtcbiAgICAgIC8vIE5vdGU6IHRoaXMgdmFsaWRhdGlvbiBsb2dpYyBzaG91bGQgcHJvYmFibHkgYmUgbW92ZWQgaW50b1xuICAgICAgLy8gUGVybWlzc2lvbnMuanMsIHdoaWNoIHNob3VsZCB0aGVuIGJlIHVzZWQgYnkgdGhpcyBmaWxlLiBJdCdkIGJlIGEgZmlyc3RcbiAgICAgIC8vIGZvciB1cyB0byBkZXBlbmQgb24gYSBmaWxlIG91dHNpZGUgZGFpbHktanMsIHRob3VnaC5cbiAgICAgIGZvciAoY29uc3QgW3Blcm1pc3Npb25OYW1lLCBwZXJtaXNzaW9uXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgcGVybWlzc2lvbnNVcGRhdGVcbiAgICAgICkpIHtcbiAgICAgICAgc3dpdGNoIChwZXJtaXNzaW9uTmFtZSkge1xuICAgICAgICAgIGNhc2UgJ2hhc1ByZXNlbmNlJzpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2NhblNlbmQnOlxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24gaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgICAgY29uc3Qga25vd25NZWRpYVR5cGVzID0gW1xuICAgICAgICAgICAgICAgICd2aWRlbycsXG4gICAgICAgICAgICAgICAgJ2F1ZGlvJyxcbiAgICAgICAgICAgICAgICAnc2NyZWVuVmlkZW8nLFxuICAgICAgICAgICAgICAgICdzY3JlZW5BdWRpbycsXG4gICAgICAgICAgICAgICAgJ2N1c3RvbVZpZGVvJyxcbiAgICAgICAgICAgICAgICAnY3VzdG9tQXVkaW8nLFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1lZGlhVHlwZSBvZiBwZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrbm93bk1lZGlhVHlwZXMuaW5jbHVkZXMobWVkaWFUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGVybWlzc2lvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgaGVscDogJ3VwZGF0ZVBlcm1pc3Npb25zIGNhbiB0YWtlIGhhc1ByZXNlbmNlIGFuZCBjYW5TZW5kIHBlcm1pc3Npb25zLiBoYXNQcmVzZW5jZSBtdXN0IGJlIGEgYm9vbGVhbi4gY2FuU2VuZCBjYW4gYmUgYSBib29sZWFuIG9yIGFuIGFycmF5IG9mIG1lZGlhIHR5cGVzICh2aWRlbywgYXVkaW8sIHNjcmVlblZpZGVvLCBzY3JlZW5BdWRpbywgY3VzdG9tVmlkZW8sIGN1c3RvbUF1ZGlvKS4nLFxuICB9LFxufTtcblxuLy9cbi8vXG4vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYWlseUlmcmFtZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8vXG4gIC8vIHN0YXRpYyBtZXRob2RzXG4gIC8vXG5cbiAgc3RhdGljIHN1cHBvcnRlZEJyb3dzZXIoKSB7XG4gICAgaWYgKGlzUmVhY3ROYXRpdmUoKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VwcG9ydGVkOiB0cnVlLFxuICAgICAgICBtb2JpbGU6IHRydWUsXG4gICAgICAgIG5hbWU6ICdSZWFjdCBOYXRpdmUnLFxuICAgICAgICB2ZXJzaW9uOiBudWxsLFxuICAgICAgICBzdXBwb3J0c1NjcmVlblNoYXJlOiBmYWxzZSxcbiAgICAgICAgc3VwcG9ydHNTZnU6IHRydWUsXG4gICAgICAgIHN1cHBvcnRzVmlkZW9Qcm9jZXNzaW5nOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJyb3dzZXIgPSBCb3dzZXIuZ2V0UGFyc2VyKGdldFVzZXJBZ2VudCgpKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3VwcG9ydGVkOiAhIWJyb3dzZXJWaWRlb1N1cHBvcnRlZF9wKCksXG4gICAgICBtb2JpbGU6IGJyb3dzZXIuZ2V0UGxhdGZvcm1UeXBlKCkgPT09ICdtb2JpbGUnLFxuICAgICAgbmFtZTogYnJvd3Nlci5nZXRCcm93c2VyTmFtZSgpLFxuICAgICAgdmVyc2lvbjogYnJvd3Nlci5nZXRCcm93c2VyVmVyc2lvbigpLFxuICAgICAgc3VwcG9ydHNGdWxsc2NyZWVuOiAhIWlzRnVsbHNjcmVlblN1cHBvcnRlZCgpLFxuICAgICAgc3VwcG9ydHNTY3JlZW5TaGFyZTogISFpc1NjcmVlblNoYXJpbmdTdXBwb3J0ZWQoKSxcbiAgICAgIHN1cHBvcnRzU2Z1OiAhIWJyb3dzZXJWaWRlb1N1cHBvcnRlZF9wKCksXG4gICAgICBzdXBwb3J0c1ZpZGVvUHJvY2Vzc2luZzogaXNWaWRlb1Byb2Nlc3NpbmdTdXBwb3J0ZWQoKSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHZlcnNpb24oKSB7XG4gICAgcmV0dXJuIF9fZGFpbHlKc1ZlcnNpb25fXztcbiAgfVxuXG4gIC8vXG4gIC8vIGNvbnN0cnVjdG9yc1xuICAvL1xuXG4gIHN0YXRpYyBjcmVhdGVDYWxsT2JqZWN0KHByb3BlcnRpZXMgPSB7fSkge1xuICAgIHByb3BlcnRpZXMubGF5b3V0ID0gJ25vbmUnO1xuICAgIHJldHVybiBuZXcgRGFpbHlJZnJhbWUobnVsbCwgcHJvcGVydGllcyk7XG4gIH1cblxuICBzdGF0aWMgd3JhcChpZnJhbWVpc2gsIHByb3BlcnRpZXMgPSB7fSkge1xuICAgIG1ldGhvZE5vdFN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICBpZiAoXG4gICAgICAhaWZyYW1laXNoIHx8XG4gICAgICAhaWZyYW1laXNoLmNvbnRlbnRXaW5kb3cgfHxcbiAgICAgICdzdHJpbmcnICE9PSB0eXBlb2YgaWZyYW1laXNoLnNyY1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYWlseUlmcmFtZTo6V3JhcCBuZWVkcyBhbiBpZnJhbWUtbGlrZSBmaXJzdCBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBpZiAoIXByb3BlcnRpZXMubGF5b3V0KSB7XG4gICAgICBpZiAocHJvcGVydGllcy5jdXN0b21MYXlvdXQpIHtcbiAgICAgICAgcHJvcGVydGllcy5sYXlvdXQgPSAnY3VzdG9tLXYxJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnRpZXMubGF5b3V0ID0gJ2Jyb3dzZXInO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IERhaWx5SWZyYW1lKGlmcmFtZWlzaCwgcHJvcGVydGllcyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRnJhbWUoYXJnMSwgYXJnMikge1xuICAgIG1ldGhvZE5vdFN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICBsZXQgcGFyZW50RWwsIHByb3BlcnRpZXM7XG4gICAgaWYgKGFyZzEgJiYgYXJnMikge1xuICAgICAgcGFyZW50RWwgPSBhcmcxO1xuICAgICAgcHJvcGVydGllcyA9IGFyZzI7XG4gICAgfSBlbHNlIGlmIChhcmcxICYmIGFyZzEuYXBwZW5kKSB7XG4gICAgICBwYXJlbnRFbCA9IGFyZzE7XG4gICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudEVsID0gZG9jdW1lbnQuYm9keTtcbiAgICAgIHByb3BlcnRpZXMgPSBhcmcxIHx8IHt9O1xuICAgIH1cbiAgICBsZXQgaWZyYW1lU3R5bGUgPSBwcm9wZXJ0aWVzLmlmcmFtZVN0eWxlO1xuICAgIGlmICghaWZyYW1lU3R5bGUpIHtcbiAgICAgIGlmIChwYXJlbnRFbCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBpZnJhbWVTdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgYmxhY2snLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICB3aWR0aDogJzM3NXB4JyxcbiAgICAgICAgICBoZWlnaHQ6ICc0NTBweCcsXG4gICAgICAgICAgcmlnaHQ6ICcxZW0nLFxuICAgICAgICAgIGJvdHRvbTogJzFlbScsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZnJhbWVTdHlsZSA9IHtcbiAgICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaWZyYW1lRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAvLyBzcGVjaWFsLWNhc2UgZm9yIG9sZCBFbGVjdHJvbiBmb3IgRmlnbWFcbiAgICBpZiAod2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvNjFcXC4vKSkge1xuICAgICAgaWZyYW1lRWwuYWxsb3cgPSAnbWljcm9waG9uZSwgY2FtZXJhJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWZyYW1lRWwuYWxsb3cgPSAnbWljcm9waG9uZTsgY2FtZXJhOyBhdXRvcGxheTsgZGlzcGxheS1jYXB0dXJlJztcbiAgICB9XG4gICAgaWZyYW1lRWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKGlmcmFtZUVsKTtcbiAgICBpZnJhbWVFbC5zdHlsZS52aXNpYmlsaXR5ID0gbnVsbDtcbiAgICBPYmplY3Qua2V5cyhpZnJhbWVTdHlsZSkuZm9yRWFjaChcbiAgICAgIChrKSA9PiAoaWZyYW1lRWwuc3R5bGVba10gPSBpZnJhbWVTdHlsZVtrXSlcbiAgICApO1xuICAgIGlmICghcHJvcGVydGllcy5sYXlvdXQpIHtcbiAgICAgIGlmIChwcm9wZXJ0aWVzLmN1c3RvbUxheW91dCkge1xuICAgICAgICBwcm9wZXJ0aWVzLmxheW91dCA9ICdjdXN0b20tdjEnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcGVydGllcy5sYXlvdXQgPSAnYnJvd3Nlcic7XG4gICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsZXQgY2FsbEZyYW1lID0gbmV3IERhaWx5SWZyYW1lKGlmcmFtZUVsLCBwcm9wZXJ0aWVzKTtcbiAgICAgIHJldHVybiBjYWxsRnJhbWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc29tZXRoaW5nIHdoZW4gd3Jvbmcgd2hpbGUgY29uc3RydWN0aW5nIHRoZSBvYmplY3QuIHNvIGxldCdzIGNsZWFuXG4gICAgICAvLyB1cCBieSByZW1vdmluZyBvdXJzZWx2ZXMgZnJvbSB0aGUgcGFnZSwgdGhlbiByZXRocm93IHRoZSBlcnJvci5cbiAgICAgIHBhcmVudEVsLnJlbW92ZUNoaWxkKGlmcmFtZUVsKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVRyYW5zcGFyZW50RnJhbWUocHJvcGVydGllcyA9IHt9KSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIGxldCBpZnJhbWVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIGlmcmFtZUVsLmFsbG93ID0gJ21pY3JvcGhvbmU7IGNhbWVyYTsgYXV0b3BsYXknO1xuICAgIGlmcmFtZUVsLnN0eWxlLmNzc1RleHQgPSBgXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBgO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lRWwpO1xuICAgIGlmICghcHJvcGVydGllcy5sYXlvdXQpIHtcbiAgICAgIHByb3BlcnRpZXMubGF5b3V0ID0gJ2N1c3RvbS12MSc7XG4gICAgfVxuICAgIHJldHVybiBEYWlseUlmcmFtZS53cmFwKGlmcmFtZUVsLCBwcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGlmcmFtZWlzaCwgcHJvcGVydGllcyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICBwcm9wZXJ0aWVzLmRhaWx5SnNWZXJzaW9uID0gRGFpbHlJZnJhbWUudmVyc2lvbigpO1xuICAgIHRoaXMuX2lmcmFtZSA9IGlmcmFtZWlzaDtcbiAgICB0aGlzLl9jYWxsT2JqZWN0TW9kZSA9IHByb3BlcnRpZXMubGF5b3V0ID09PSAnbm9uZScgJiYgIXRoaXMuX2lmcmFtZTtcbiAgICB0aGlzLl9wcmVsb2FkQ2FjaGUgPSBpbml0aWFsaXplUHJlbG9hZENhY2hlKCk7XG4gICAgaWYgKHRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICB3aW5kb3cuX2RhaWx5UHJlbG9hZENhY2hlID0gdGhpcy5fcHJlbG9hZENhY2hlO1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0aWVzLnNob3dMb2NhbFZpZGVvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdzaG93TG9jYWxWaWRlbyBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGwgb2JqZWN0IG1vZGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3Nob3dMb2NhbFZpZGVvID0gISFwcm9wZXJ0aWVzLnNob3dMb2NhbFZpZGVvO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zaG93TG9jYWxWaWRlbyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnRpZXMuc2hvd1BhcnRpY2lwYW50c0JhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnc2hvd1BhcnRpY2lwYW50c0JhciBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGwgb2JqZWN0IG1vZGUnXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zaG93UGFydGljaXBhbnRzQmFyID0gISFwcm9wZXJ0aWVzLnNob3dQYXJ0aWNpcGFudHNCYXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Nob3dQYXJ0aWNpcGFudHNCYXIgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0aWVzLmN1c3RvbUludGVncmF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignY3VzdG9tSW50ZWdyYXRpb25zIGlzIG5vdCBhdmFpbGFibGUgaW4gY2FsbCBvYmplY3QgbW9kZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY3VzdG9tSW50ZWdyYXRpb25zID0gcHJvcGVydGllcy5jdXN0b21JbnRlZ3JhdGlvbnM7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2N1c3RvbUludGVncmF0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0aWVzLmN1c3RvbVRyYXlCdXR0b25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdjdXN0b21UcmF5QnV0dG9ucyBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGwgb2JqZWN0IG1vZGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2N1c3RvbVRyYXlCdXR0b25zID0gcHJvcGVydGllcy5jdXN0b21UcmF5QnV0dG9ucztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY3VzdG9tVHJheUJ1dHRvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydGllcy5hY3RpdmVTcGVha2VyTW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignYWN0aXZlU3BlYWtlck1vZGUgaXMgbm90IGF2YWlsYWJsZSBpbiBjYWxsIG9iamVjdCBtb2RlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9hY3RpdmVTcGVha2VyTW9kZSA9ICEhcHJvcGVydGllcy5hY3RpdmVTcGVha2VyTW9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYWN0aXZlU3BlYWtlck1vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydGllcy5yZWNlaXZlU2V0dGluZ3MpIHtcbiAgICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgICB0aGlzLl9yZWNlaXZlU2V0dGluZ3MgPSBwcm9wZXJ0aWVzLnJlY2VpdmVTZXR0aW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlY2VpdmVTZXR0aW5ncyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBjYWxsIG9iamVjdCBtb2RlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhlcmUgd2UgYXZvaWQgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzLCBpbnN0ZWFkIGxldHRpbmcgdGhlIGNhbGxcbiAgICAgIC8vIG1hY2hpbmUgZGVjaWRlIG9uIGRlZmF1bHRzIHdoZW4gaXRzIGxvYWRlZCBhbmQgdGVsbGluZyB1cyBhYm91dCB0aGVtXG4gICAgICAvLyB2aWEgYSBEQUlMWV9FVkVOVF9SRUNFSVZFX1NFVFRJTkdTX1VQREFURUQgZXZlbnQuIFRoaXMgd2lsbCBtYWtlIGl0XG4gICAgICAvLyBlYXNpZXIgdG8gdXBkYXRlIGRlZmF1bHRzIGluIHRoZSBmdXR1cmUsIGVsaW1pbmF0aW5nIHRoZSB3b3JyeSBvZlxuICAgICAgLy8gZGFpbHktanMgZ2V0dGluZyBvdXQgb2Ygc3luYyB3aXRoIHRoZSBjYWxsIG1hY2hpbmUuXG4gICAgICB0aGlzLl9yZWNlaXZlU2V0dGluZ3MgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dFNldHRpbmdzID0ge307XG4gICAgaWYgKHByb3BlcnRpZXMuaW5wdXRTZXR0aW5ncykge1xuICAgICAgLy8gI1F1ZXN0aW9uOiBEbyBJIG5lZWQgdGhlIGNhbGwtb2JqZWN0IGNoZWNrIGhlcmU/XG4gICAgICB0aGlzLl9pbnB1dFNldHRpbmdzID0gcHJvcGVydGllcy5pbnB1dFNldHRpbmdzO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHsgLi4ucHJvcGVydGllcyB9O1xuICAgIHRoaXMuX2NhbGxPYmplY3RMb2FkZXIgPSB0aGlzLl9jYWxsT2JqZWN0TW9kZVxuICAgICAgPyBuZXcgQ2FsbE9iamVjdExvYWRlcigpXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5fY2FsbFN0YXRlID0gREFJTFlfU1RBVEVfTkVXOyAvLyBvbmx5IHVwZGF0ZSB2aWEgdXBkYXRlSXNQcmVwYXJpbmdUb0pvaW4oKSBvciBfdXBkYXRlQ2FsbFN0YXRlKClcbiAgICB0aGlzLl9pc1ByZXBhcmluZ1RvSm9pbiA9IGZhbHNlOyAvLyBvbmx5IHVwZGF0ZSB2aWEgX3VwZGF0ZUNhbGxTdGF0ZSgpXG4gICAgdGhpcy5fYWNjZXNzU3RhdGUgPSB7IGFjY2VzczogREFJTFlfQUNDRVNTX1VOS05PV04gfTtcbiAgICB0aGlzLl9tZWV0aW5nU2Vzc2lvblN0YXRlID0gREVGQVVMVF9TRVNTSU9OX1NUQVRFO1xuICAgIHRoaXMuX25hdGl2ZUluQ2FsbEF1ZGlvTW9kZSA9IE5BVElWRV9BVURJT19NT0RFX1ZJREVPX0NBTEw7XG4gICAgdGhpcy5fcGFydGljaXBhbnRzID0ge307XG4gICAgdGhpcy5fcGFydGljaXBhbnRDb3VudHMgPSBFTVBUWV9QQVJUSUNJUEFOVF9DT1VOVFM7XG4gICAgdGhpcy5fcm1wUGxheWVyU3RhdGUgPSB7fTtcbiAgICB0aGlzLl93YWl0aW5nUGFydGljaXBhbnRzID0ge307XG4gICAgdGhpcy5faW5wdXRFdmVudHNPbiA9IHt9OyAvLyBuZWVkIHRvIGNhY2hlIHRoZXNlIHVudGlsIGxvYWRlZFxuICAgIHRoaXMuX25ldHdvcmsgPSB7IHRocmVzaG9sZDogJ2dvb2QnLCBxdWFsaXR5OiAxMDAgfTtcbiAgICB0aGlzLl9hY3RpdmVTcGVha2VyID0ge307XG4gICAgdGhpcy5fY2FsbEZyYW1lSWQgPSByYW5kb21TdHJpbmdJZCgpO1xuICAgIHRoaXMuX21lc3NhZ2VDaGFubmVsID0gaXNSZWFjdE5hdGl2ZSgpXG4gICAgICA/IG5ldyBSZWFjdE5hdGl2ZU1lc3NhZ2VDaGFubmVsKClcbiAgICAgIDogbmV3IFdlYk1lc3NhZ2VDaGFubmVsKCk7XG5cbiAgICAvLyBmdWxsc2NyZWVuIGV2ZW50IGxpc3RlbmVyXG4gICAgaWYgKHRoaXMuX2lmcmFtZSkge1xuICAgICAgaWYgKHRoaXMuX2lmcmFtZS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAvLyBjaHJvbWUgKG5vdCBzYWZhcmkpXG4gICAgICAgIHRoaXMuX2lmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdmdWxsc2NyZWVuY2hhbmdlJywgKGUpID0+IHtcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQgPT09IHRoaXMuX2lmcmFtZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KERBSUxZX0VWRU5UX0ZVTExTQ1JFRU4sIHtcbiAgICAgICAgICAgICAgYWN0aW9uOiBEQUlMWV9FVkVOVF9GVUxMU0NSRUVOLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7IGFjdGlvbjogREFJTFlfRVZFTlRfRlVMTFNDUkVFTiB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KERBSUxZX0VWRU5UX0VYSVRfRlVMTFNDUkVFTiwge1xuICAgICAgICAgICAgICBhY3Rpb246IERBSUxZX0VWRU5UX0VYSVRfRlVMTFNDUkVFTixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoe1xuICAgICAgICAgICAgICBhY3Rpb246IERBSUxZX0VWRU5UX0VYSVRfRlVMTFNDUkVFTixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2lmcmFtZS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAvLyBzYWZhcmlcbiAgICAgICAgdGhpcy5faWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCAoZSkgPT4ge1xuICAgICAgICAgIGlmIChkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCA9PT0gdGhpcy5faWZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoREFJTFlfRVZFTlRfRlVMTFNDUkVFTiwge1xuICAgICAgICAgICAgICBhY3Rpb246IERBSUxZX0VWRU5UX0ZVTExTQ1JFRU4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHsgYWN0aW9uOiBEQUlMWV9FVkVOVF9GVUxMU0NSRUVOIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoREFJTFlfRVZFTlRfRVhJVF9GVUxMU0NSRUVOLCB7XG4gICAgICAgICAgICAgIGFjdGlvbjogREFJTFlfRVZFTlRfRVhJVF9GVUxMU0NSRUVOLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICAgICAgICAgIGFjdGlvbjogREFJTFlfRVZFTlRfRVhJVF9GVUxMU0NSRUVOLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGQgbmF0aXZlIGV2ZW50IGxpc3RlbmVyc1xuICAgIGlmIChpc1JlYWN0TmF0aXZlKCkpIHtcbiAgICAgIGNvbnN0IG5hdGl2ZVV0aWxzID0gdGhpcy5uYXRpdmVVdGlscygpO1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIG5hdGl2ZVV0aWxzLmFkZEF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lciAmJlxuICAgICAgICAgIG5hdGl2ZVV0aWxzLnJlbW92ZUF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lciAmJlxuICAgICAgICAgIG5hdGl2ZVV0aWxzLmFkZEFwcEFjdGl2ZVN0YXRlQ2hhbmdlTGlzdGVuZXIgJiZcbiAgICAgICAgICBuYXRpdmVVdGlscy5yZW1vdmVBcHBBY3RpdmVTdGF0ZUNoYW5nZUxpc3RlbmVyXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ2V4cGVjdGVkIChhZGR8cmVtb3ZlKShBdWRpb0ZvY3VzfEFwcEFjdGl2ZVN0YXRlKUNoYW5nZUxpc3RlbmVyIHRvIGJlIGF2YWlsYWJsZSBpbiBSZWFjdCBOYXRpdmUnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBhdWRpbyBmb2N1cyBldmVudCwgdXNlZCBmb3IgYXV0by1tdXRpbmcgbWljXG4gICAgICB0aGlzLl9oYXNOYXRpdmVBdWRpb0ZvY3VzID0gdHJ1ZTtcbiAgICAgIG5hdGl2ZVV0aWxzLmFkZEF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5oYW5kbGVOYXRpdmVBdWRpb0ZvY3VzQ2hhbmdlXG4gICAgICApO1xuICAgICAgLy8gYXBwIGFjdGl2ZSBzdGF0ZSBldmVudCwgdXNlZCBmb3IgYXV0by1tdXRpbmcgY2FtXG4gICAgICBuYXRpdmVVdGlscy5hZGRBcHBBY3RpdmVTdGF0ZUNoYW5nZUxpc3RlbmVyKFxuICAgICAgICB0aGlzLmhhbmRsZU5hdGl2ZUFwcEFjdGl2ZVN0YXRlQ2hhbmdlXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IGF2YWlsYWJsZSBkZXZpY2UgY2hhbmdlIGxpc3RlbmVyIGluIGNhbGwgb2JqZWN0IG1vZGUgKGluY2x1ZGluZyBSTikuXG4gICAgLy8gbm90ZTogaW4gaWZyYW1lIG1vZGUsIFByZWJ1aWx0J3MgaW50ZXJuYWwgY2FsbCBvYmplY3Qgd2lsbCBoYW5kbGUgdGhpcyxcbiAgICAvLyBhbmQgdGhlIGV2ZW50cyBpdCBzZW5kcyB3aWxsIHByb3BhZ2F0ZSB1cCBhcHByb3ByaWF0ZWx5LlxuICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgdGhpcy5zdGFydExpc3RlbmluZ0ZvckRldmljZUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXNzYWdlQ2hhbm5lbC5hZGRMaXN0ZW5lckZvck1lc3NhZ2VzRnJvbUNhbGxNYWNoaW5lKFxuICAgICAgdGhpcy5oYW5kbGVNZXNzYWdlRnJvbUNhbGxNYWNoaW5lLFxuICAgICAgdGhpcy5fY2FsbEZyYW1lSWQsXG4gICAgICB0aGlzXG4gICAgKTtcbiAgfVxuXG4gIC8vXG4gIC8vIGluc3RhbmNlIG1ldGhvZHNcbiAgLy9cblxuICBhc3luYyBkZXN0cm95KCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoW0RBSUxZX1NUQVRFX0pPSU5FRCwgREFJTFlfU1RBVEVfTE9BRElOR10uaW5jbHVkZXModGhpcy5fY2FsbFN0YXRlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxlYXZlKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICBsZXQgaWZyYW1lID0gdGhpcy5faWZyYW1lO1xuICAgIGlmIChpZnJhbWUpIHtcbiAgICAgIGxldCBwYXJlbnQgPSBpZnJhbWUucGFyZW50RWxlbWVudDtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21lc3NhZ2VDaGFubmVsLnJlbW92ZUxpc3RlbmVyKHRoaXMuaGFuZGxlTWVzc2FnZUZyb21DYWxsTWFjaGluZSk7XG5cbiAgICAvLyB0ZWFyIGRvd24gbmF0aXZlIGV2ZW50IGxpc3RlbmVyc1xuICAgIGlmIChpc1JlYWN0TmF0aXZlKCkpIHtcbiAgICAgIGNvbnN0IG5hdGl2ZVV0aWxzID0gdGhpcy5uYXRpdmVVdGlscygpO1xuICAgICAgbmF0aXZlVXRpbHMucmVtb3ZlQXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyKFxuICAgICAgICB0aGlzLmhhbmRsZU5hdGl2ZUF1ZGlvRm9jdXNDaGFuZ2VcbiAgICAgICk7XG4gICAgICBuYXRpdmVVdGlscy5yZW1vdmVBcHBBY3RpdmVTdGF0ZUNoYW5nZUxpc3RlbmVyKFxuICAgICAgICB0aGlzLmhhbmRsZU5hdGl2ZUFwcEFjdGl2ZVN0YXRlQ2hhbmdlXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRlYXIgZG93biBhdmFpbGFibGUgZGV2aWNlIGNoYW5nZSBsaXN0ZW5lclxuICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nRm9yRGV2aWNlQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRNZWV0aW5nRGVwZW5kZW50VmFycygpO1xuICB9XG5cbiAgbG9hZENzcyh7IGJvZHlDbGFzcywgY3NzRmlsZSwgY3NzVGV4dCB9KSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHtcbiAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX0xPQURfQ1NTLFxuICAgICAgY3NzRmlsZTogdGhpcy5hYnNvbHV0ZVVybChjc3NGaWxlKSxcbiAgICAgIGJvZHlDbGFzcyxcbiAgICAgIGNzc1RleHQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZnJhbWUoKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIHJldHVybiB0aGlzLl9pZnJhbWU7XG4gIH1cblxuICBtZWV0aW5nU3RhdGUoKSB7XG4gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0ZWQgYW5kIHJlbmFtZWQgdG8gY2FsbFN0YXRlKClcbiAgICAvLyAgICAgICBmb3IgYmV0dGVyIGNvbnNpc3RlbmN5IGluIG5hbWluZ1xuICAgIHJldHVybiB0aGlzLl9jYWxsU3RhdGU7XG4gIH1cblxuICBhY2Nlc3NTdGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdhY2Nlc3NTdGF0ZSgpIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBpbiBjYWxsIG9iamVjdCBtb2RlJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYWNjZXNzU3RhdGU7XG4gIH1cblxuICBwYXJ0aWNpcGFudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnRpY2lwYW50cztcbiAgfVxuXG4gIHBhcnRpY2lwYW50Q291bnRzKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJ0aWNpcGFudENvdW50cztcbiAgfVxuXG4gIHdhaXRpbmdQYXJ0aWNpcGFudHMoKSB7XG4gICAgaWYgKCF0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnd2FpdGluZ1BhcnRpY2lwYW50cygpIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBpbiBjYWxsIG9iamVjdCBtb2RlJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fd2FpdGluZ1BhcnRpY2lwYW50cztcbiAgfVxuXG4gIHZhbGlkYXRlUGFydGljaXBhbnRQcm9wZXJ0aWVzKHNlc3Npb25JZCwgcHJvcGVydGllcykge1xuICAgIGZvciAodmFyIHByb3AgaW4gcHJvcGVydGllcykge1xuICAgICAgaWYgKCFQQVJUSUNJUEFOVF9QUk9QU1twcm9wXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVucmVjb2duaXplZCB1cGRhdGVQYXJ0aWNpcGFudCBwcm9wZXJ0eSAke3Byb3B9YCk7XG4gICAgICB9XG4gICAgICBpZiAoUEFSVElDSVBBTlRfUFJPUFNbcHJvcF0udmFsaWRhdGUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFQQVJUSUNJUEFOVF9QUk9QU1twcm9wXS52YWxpZGF0ZShcbiAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcF0sXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgdGhpcy5fcGFydGljaXBhbnRzW3Nlc3Npb25JZF1cbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihQQVJUSUNJUEFOVF9QUk9QU1twcm9wXS5oZWxwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVBhcnRpY2lwYW50KHNlc3Npb25JZCwgcHJvcGVydGllcykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX3BhcnRpY2lwYW50cy5sb2NhbCAmJlxuICAgICAgdGhpcy5fcGFydGljaXBhbnRzLmxvY2FsLnNlc3Npb25faWQgPT09IHNlc3Npb25JZFxuICAgICkge1xuICAgICAgc2Vzc2lvbklkID0gJ2xvY2FsJztcbiAgICB9XG4gICAgaWYgKHNlc3Npb25JZCAmJiBwcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlUGFydGljaXBhbnRQcm9wZXJ0aWVzKHNlc3Npb25JZCwgcHJvcGVydGllcyk7XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1VQREFURV9QQVJUSUNJUEFOVCxcbiAgICAgICAgaWQ6IHNlc3Npb25JZCxcbiAgICAgICAgcHJvcGVydGllcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZVBhcnRpY2lwYW50cyhwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgbG9jYWxJZCA9XG4gICAgICB0aGlzLl9wYXJ0aWNpcGFudHMubG9jYWwgJiYgdGhpcy5fcGFydGljaXBhbnRzLmxvY2FsLnNlc3Npb25faWQ7XG4gICAgZm9yICh2YXIgc2Vzc2lvbklkIGluIHByb3BlcnRpZXMpIHtcbiAgICAgIGlmIChzZXNzaW9uSWQgPT09IGxvY2FsSWQpIHtcbiAgICAgICAgc2Vzc2lvbklkID0gJ2xvY2FsJztcbiAgICAgIH1cbiAgICAgIGlmIChzZXNzaW9uSWQgJiYgcHJvcGVydGllc1tzZXNzaW9uSWRdKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVQYXJ0aWNpcGFudFByb3BlcnRpZXMoc2Vzc2lvbklkLCBwcm9wZXJ0aWVzW3Nlc3Npb25JZF0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9VUERBVEVfUEFSVElDSVBBTlRTLFxuICAgICAgcGFydGljaXBhbnRzOiBwcm9wZXJ0aWVzLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlV2FpdGluZ1BhcnRpY2lwYW50KGlkID0gJycsIHVwZGF0ZXMgPSB7fSkge1xuICAgIC8vIFZhbGlkYXRlIG1vZGUuXG4gICAgaWYgKCF0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndXBkYXRlV2FpdGluZ1BhcnRpY2lwYW50KCkgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGluIGNhbGwgb2JqZWN0IG1vZGUnXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNhbGwgc3RhdGU6IG9ubHkgYWxsb3dlZCBvbmNlIHlvdSd2ZSBqb2luZWQuXG4gICAgaWYgKHRoaXMuX2NhbGxTdGF0ZSAhPT0gREFJTFlfU1RBVEVfSk9JTkVEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd1cGRhdGVXYWl0aW5nUGFydGljaXBhbnQoKSBvbmx5IHN1cHBvcnRlZCBmb3Igam9pbmVkIG1lZXRpbmdzJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBhcmd1bWVudCBwcmVzZW5jZS5cbiAgICBpZiAoISh0eXBlb2YgaWQgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cGRhdGVzID09PSAnb2JqZWN0JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3VwZGF0ZVdhaXRpbmdQYXJ0aWNpcGFudCgpIG11c3QgdGFrZSBhbiBpZCBzdHJpbmcgYW5kIGEgdXBkYXRlcyBvYmplY3QnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBrID0gKG1zZykgPT4ge1xuICAgICAgICBpZiAobXNnLmVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KG1zZy5lcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1zZy5pZCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Vua25vd24gZXJyb3IgaW4gdXBkYXRlV2FpdGluZ1BhcnRpY2lwYW50KCknKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKHsgaWQ6IG1zZy5pZCB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1VQREFURV9XQUlUSU5HX1BBUlRJQ0lQQU5ULFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVXYWl0aW5nUGFydGljaXBhbnRzKHVwZGF0ZXNCeUlkID0ge30pIHtcbiAgICAvLyBWYWxpZGF0ZSBtb2RlLlxuICAgIGlmICghdGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3VwZGF0ZVdhaXRpbmdQYXJ0aWNpcGFudHMoKSBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgaW4gY2FsbCBvYmplY3QgbW9kZSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY2FsbCBzdGF0ZTogb25seSBhbGxvd2VkIG9uY2UgeW91J3ZlIGpvaW5lZC5cbiAgICBpZiAodGhpcy5fY2FsbFN0YXRlICE9PSBEQUlMWV9TVEFURV9KT0lORUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3VwZGF0ZVdhaXRpbmdQYXJ0aWNpcGFudHMoKSBvbmx5IHN1cHBvcnRlZCBmb3Igam9pbmVkIG1lZXRpbmdzJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBhcmd1bWVudCBwcmVzZW5jZS5cbiAgICBpZiAodHlwZW9mIHVwZGF0ZXNCeUlkICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndXBkYXRlV2FpdGluZ1BhcnRpY2lwYW50cygpIG11c3QgdGFrZSBhIG1hcHBpbmcgYmV0d2VlbiBpZHMgYW5kIHVwZGF0ZSBvYmplY3RzJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgayA9IChtc2cpID0+IHtcbiAgICAgICAgaWYgKG1zZy5lcnJvcikge1xuICAgICAgICAgIHJlamVjdChtc2cuZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtc2cuaWRzKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigndW5rbm93biBlcnJvciBpbiB1cGRhdGVXYWl0aW5nUGFydGljaXBhbnRzKCknKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKHsgaWRzOiBtc2cuaWRzIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiBEQUlMWV9NRVRIT0RfVVBEQVRFX1dBSVRJTkdfUEFSVElDSVBBTlRTLFxuICAgICAgICAgIHVwZGF0ZXNCeUlkLFxuICAgICAgICB9LFxuICAgICAgICBrXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdEFjY2Vzcyh7XG4gICAgYWNjZXNzID0geyBsZXZlbDogREFJTFlfQUNDRVNTX0xFVkVMX0ZVTEwgfSxcbiAgICBuYW1lID0gJycsXG4gIH0gPSB7fSkge1xuICAgIC8vIFZhbGlkYXRlIG1vZGUuXG4gICAgaWYgKCF0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAncmVxdWVzdEFjY2VzcygpIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBpbiBjYWxsIG9iamVjdCBtb2RlJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBjYWxsIHN0YXRlOiBhY2Nlc3MgcmVxdWVzdGluZyBpcyBvbmx5IGFsbG93ZWQgb25jZSB5b3UndmVcbiAgICAvLyBqb2luZWQuXG4gICAgaWYgKHRoaXMuX2NhbGxTdGF0ZSAhPT0gREFJTFlfU1RBVEVfSk9JTkVEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVlc3RBY2Nlc3MoKSBvbmx5IHN1cHBvcnRlZCBmb3Igam9pbmVkIG1lZXRpbmdzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGsgPSAobXNnKSA9PiB7XG4gICAgICAgIGlmIChtc2cuZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QobXNnLmVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbXNnLmFjY2Vzcykge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Vua25vd24gZXJyb3IgaW4gcmVxdWVzdEFjY2VzcygpJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZSh7IGFjY2VzczogbXNnLmFjY2VzcywgZ3JhbnRlZDogbXNnLmdyYW50ZWQgfSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9SRVFVRVNUX0FDQ0VTUyxcbiAgICAgICAgICBhY2Nlc3MsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAga1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvY2FsQXVkaW8oKSB7XG4gICAgaWYgKHRoaXMuX3BhcnRpY2lwYW50cy5sb2NhbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpY2lwYW50cy5sb2NhbC5hdWRpbztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsb2NhbFZpZGVvKCkge1xuICAgIGlmICh0aGlzLl9wYXJ0aWNpcGFudHMubG9jYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWNpcGFudHMubG9jYWwudmlkZW87XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0TG9jYWxBdWRpbyhib29sKSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoe1xuICAgICAgYWN0aW9uOiBEQUlMWV9NRVRIT0RfTE9DQUxfQVVESU8sXG4gICAgICBzdGF0ZTogYm9vbCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldExvY2FsVmlkZW8oYm9vbCkge1xuICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHtcbiAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX0xPQ0FMX1ZJREVPLFxuICAgICAgc3RhdGU6IGJvb2wsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBOT1RFOiBcImJhc2VcIiByZWNlaXZlIHNldHRpbmdzIHdpbGwgbm90IGFwcGVhciB1bnRpbCB0aGUgY2FsbCBtYWNoaW5lIGJ1bmRsZVxuICAvLyBpcyBpbml0aWFsaXplZCAoZS5nLiBhZnRlciBhIGNhbGwgdG8gam9pbigpKS5cbiAgLy8gTGlzdGVuIGZvciB0aGUgcmVjZWl2ZS1zZXR0aW5ncy11cGRhdGVkIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhvc2UgY29tZSBpbi5cbiAgYXN5bmMgZ2V0UmVjZWl2ZVNldHRpbmdzKGlkLCB7IHNob3dJbmhlcml0ZWRWYWx1ZXMgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAvLyBWYWxpZGF0ZSBtb2RlLlxuICAgIGlmICghdGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2dldFJlY2VpdmVTZXR0aW5ncygpIG9ubHkgc3VwcG9ydGVkIGluIGNhbGwgb2JqZWN0IG1vZGUnXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgaW4gdHdvIG1haW4gd2F5czpcbiAgICAvLyAtIGl0IGNhbiBnZXQgcmVjZWl2ZSBzZXR0aW5ncyBmb3IgYSBzcGVjaWZpYyBwYXJ0aWNpcGFudCAob3IgXCJiYXNlXCIpXG4gICAgLy8gLSBpdCBjYW4gZ2V0ICphbGwqIHJlY2VpdmUgc2V0dGluZ3NcbiAgICBzd2l0Y2ggKHR5cGVvZiBpZCkge1xuICAgICAgLy8gQ2FzZTogZ2V0dGluZyByZWNlaXZlIHNldHRpbmdzIGZvciBhIHNpbmdsZSBwYXJ0aWNpcGFudFxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgLy8gQXNrIGNhbGwgbWFjaGluZSB0byBnZXQgcmVjZWl2ZSBzZXR0aW5ncyBmb3IgdGhlIHBhcnRpY2lwYW50LlxuICAgICAgICAvLyBDZW50cmFsaXppbmcgdGhpcyBub250cml2aWFsIGZldGNoaW5nIGxvZ2ljIGluIHRoZSBjYWxsIG1hY2hpbmUsXG4gICAgICAgIC8vIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gZHVwbGljYXRlIGl0IGhlcmUsIGF2b2lkcyB0aGUgcHJvYmxlbSBvZlxuICAgICAgICAvLyBkYWlseS1qcyBhbmQgdGhlIGNhbGwgbWFjaGluZSBnZXR0aW5nIG91dCBvZiBzeW5jLlxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBjb25zdCBrID0gKG1zZykgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShtc2cucmVjZWl2ZVNldHRpbmdzKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9HRVRfU0lOR0xFX1BBUlRJQ0lQQU5UX1JFQ0VJVkVfU0VUVElOR1MsXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBzaG93SW5oZXJpdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIC8vIENhc2U6IGdldHRpbmcgYWxsIHJlY2VpdmUgc2V0dGluZ3NcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNlaXZlU2V0dGluZ3M7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ2ZpcnN0IGFyZ3VtZW50IHRvIGdldFJlY2VpdmVTZXR0aW5ncygpIG11c3QgYmUgYSBwYXJ0aWNpcGFudCBpZCAob3IgXCJiYXNlXCIpLCBvciB0aGVyZSBzaG91bGQgYmUgbm8gYXJndW1lbnRzJ1xuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJlY2VpdmVTZXR0aW5ncyhyZWNlaXZlU2V0dGluZ3MpIHtcbiAgICAvLyBWYWxpZGF0ZSBtb2RlLlxuICAgIGlmICghdGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3VwZGF0ZVJlY2VpdmVTZXR0aW5ncygpIG9ubHkgc3VwcG9ydGVkIGluIGNhbGwgb2JqZWN0IG1vZGUnXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHJlY2VpdmUgc2V0dGluZ3MuXG4gICAgaWYgKFxuICAgICAgIXZhbGlkYXRlUmVjZWl2ZVNldHRpbmdzKHJlY2VpdmVTZXR0aW5ncywge1xuICAgICAgICBhbGxvd0FsbFBhcnRpY2lwYW50c0tleTogdHJ1ZSxcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHJlY2VpdmVTZXR0aW5nc1ZhbGlkYXRpb25IZWxwTXNnKHsgYWxsb3dBbGxQYXJ0aWNpcGFudHNLZXk6IHRydWUgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBjYWxsIG1hY2hpbmUgaXMgam9pbmVkLlxuICAgIC8vIChXZSBuZWVkIHRoZSBSZWR1eCBzdGF0ZSB0byBiZSBzZXQgdXAgZmlyc3Q7IHRlY2huaWNhbGx5LCB3ZSBjb3VsZFxuICAgIC8vIHByb2NlZWQgaWYgd2UndmUgZWl0aGVyIGpvaW4oKWVkICpvciogcHJlQXV0aCgpZWQgKm9yKiBzdGFydENhbWVyYSgpZWRcbiAgICAvLyBidXQgc2luY2UgdGhlcmUncyBhbiBlYXN5IGFsdGVybmF0aXZlIHdheSB0byBzcGVjaWZ5IGluaXRpYWwgcmVjZWl2ZVxuICAgIC8vIHNldHRpbmdzIHVudGlsIGpvaW4oKSwgZm9yIHNpbXBsaWNpdHkgbGV0J3MganVzdCByZXF1aXJlIHRoYXQgd2UgYmVcbiAgICAvLyBqb2luZWQpLlxuICAgIGlmICh0aGlzLl9jYWxsU3RhdGUgIT09IERBSUxZX1NUQVRFX0pPSU5FRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndXBkYXRlUmVjZWl2ZVNldHRpbmdzKCkgaXMgb25seSBhbGxvd2VkIHdoZW4gam9pbmVkLiBUbyBzcGVjaWZ5IHJlY2VpdmUgc2V0dGluZ3MgZWFybGllciwgdXNlIHRoZSByZWNlaXZlU2V0dGluZ3MgY29uZmlnIHByb3BlcnR5LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQXNrIGNhbGwgbWFjaGluZSB0byB1cGRhdGUgcmVjZWl2ZSBzZXR0aW5ncywgdGhlbiBhd2FpdCBjYWxsYmFjay5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGsgPSAobXNnKSA9PiB7XG4gICAgICAgIHJlc29sdmUoeyByZWNlaXZlU2V0dGluZ3M6IG1zZy5yZWNlaXZlU2V0dGluZ3MgfSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9VUERBVEVfUkVDRUlWRV9TRVRUSU5HUyxcbiAgICAgICAgICByZWNlaXZlU2V0dGluZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBJbnB1dCBTZXR0aW5ncyBHZXR0ZXJcbiAgLy8geyB2aWRlbzogeyBwcm9jZXNzb3IgfSB9XG4gIC8vIEluIHRoZSBmdXR1cmU6XG4gIC8vIHsgdmlkZW86IHsuLi59LCBhdWRpbzogey4uLn0sIHNjcmVlblZpZGVvOiB7Li4ufSwgc2NyZWVuQXVkaW86IHsuLi59IH1cbiAgZ2V0SW5wdXRTZXR0aW5ncygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHJlc29sdmUodGhpcy5faW5wdXRTZXR0aW5ncyk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVJbnB1dFNldHRpbmdzKGlucHV0U2V0dGluZ3MpIHtcbiAgICAvLyBBc2sgY2FsbCBtYWNoaW5lIHRvIHVwZGF0ZSBpbnB1dCBzZXR0aW5ncywgdGhlbiBhd2FpdCBjYWxsYmFjay5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF2YWxpZGF0ZUlucHV0U2V0dGluZ3MoaW5wdXRTZXR0aW5ncykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihpbnB1dFNldHRpbmdzVmFsaWRhdGlvbkhlbHBNc2coKSk7XG4gICAgICAgIHJlamVjdChpbnB1dFNldHRpbmdzVmFsaWRhdGlvbkhlbHBNc2coKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgayA9IChtc2cpID0+IHtcbiAgICAgICAgaWYgKG1zZy5lcnJvcikge1xuICAgICAgICAgIHJlamVjdChtc2cuZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoeyBpbnB1dFNldHRpbmdzOiBtc2cuaW5wdXRTZXR0aW5ncyB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiBEQUlMWV9NRVRIT0RfVVBEQVRFX0lOUFVUX1NFVFRJTkdTLFxuICAgICAgICAgIGlucHV0U2V0dGluZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRCYW5kd2lkdGgoeyBrYnMsIHRyYWNrQ29uc3RyYWludHMgfSkge1xuICAgIG1ldGhvZE5vdFN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TRVRfQkFORFdJRFRILFxuICAgICAga2JzLFxuICAgICAgdHJhY2tDb25zdHJhaW50cyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldERhaWx5TGFuZygpIHtcbiAgICBtZXRob2ROb3RTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBrID0gKG1zZykgPT4ge1xuICAgICAgICBkZWxldGUgbXNnLmFjdGlvbjtcbiAgICAgICAgZGVsZXRlIG1zZy5jYWxsYmFja1N0YW1wO1xuICAgICAgICByZXNvbHZlKG1zZyk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoeyBhY3Rpb246IERBSUxZX01FVEhPRF9HRVRfTEFORyB9LCBrKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldERhaWx5TGFuZyhsYW5nKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHsgYWN0aW9uOiBEQUlMWV9NRVRIT0RfU0VUX0xBTkcsIGxhbmcgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3luYyBnZXRNZWV0aW5nU2Vzc2lvbigpIHtcbiAgICAvLyBWYWxpZGF0ZSBjYWxsIHN0YXRlOiBtZWV0aW5nIHNlc3Npb24gZGV0YWlscyBhcmUgb25seSBhdmFpbGFibGVcbiAgICAvLyBvbmNlIHlvdSBoYXZlIGpvaW5lZCB0aGUgbWVldGluZ1xuICAgIGlmICh0aGlzLl9jYWxsU3RhdGUgIT09IERBSUxZX1NUQVRFX0pPSU5FRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRNZWV0aW5nU2Vzc2lvbigpIGlzIG9ubHkgYWxsb3dlZCB3aGVuIGpvaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGsgPSAobXNnKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBtc2cuYWN0aW9uO1xuICAgICAgICBkZWxldGUgbXNnLmNhbGxiYWNrU3RhbXA7XG4gICAgICAgIGRlbGV0ZSBtc2cuY2FsbEZyYW1lSWQ7XG4gICAgICAgIHJlc29sdmUobXNnKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgICAgeyBhY3Rpb246IERBSUxZX01FVEhPRF9HRVRfTUVFVElOR19TRVNTSU9OIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBtZWV0aW5nU2Vzc2lvblN0YXRlKCkge1xuICAgIC8vIFZhbGlkYXRlIGNhbGwgc3RhdGU6IG1lZXRpbmcgc2Vzc2lvbiBkZXRhaWxzIGFyZSBvbmx5IGF2YWlsYWJsZVxuICAgIC8vIG9uY2UgeW91IGhhdmUgam9pbmVkIHRoZSBtZWV0aW5nXG4gICAgaWYgKHRoaXMuX2NhbGxTdGF0ZSAhPT0gREFJTFlfU1RBVEVfSk9JTkVEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21lZXRpbmdTZXNzaW9uU3RhdGUoKSBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIGpvaW5lZCcpO1xuICAgIH1cbiAgICAvLyBjdXJyZW50bHkgb25seSBkZWZhdWx0IHZhbHVlcyByZXR1cm5lZFxuICAgIHJldHVybiB0aGlzLl9tZWV0aW5nU2Vzc2lvblN0YXRlO1xuICB9XG5cbiAgc2V0TWVldGluZ1Nlc3Npb25EYXRhKGRhdGEsIG1lcmdlU3RyYXRlZ3kgPSAncmVwbGFjZScpIHtcbiAgICAvLyBWYWxpZGF0ZSBjYWxsIHN0YXRlOiBzZXNzaW9uIGRhdGEgY2FuIG9ubHkgYmUgc2V0IG9uY2UgeW91IGhhdmVcbiAgICAvLyBqb2luZWQgdGhlIG1lZXRpbmdcbiAgICBpZiAodGhpcy5fY2FsbFN0YXRlICE9PSBEQUlMWV9TVEFURV9KT0lORUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2V0TWVldGluZ1Nlc3Npb25EYXRhKCkgaXMgb25seSBhdmFpbGFibGUgd2hlbiBqb2luZWQnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlU2Vzc2lvbkRhdGFVcGRhdGUoZGF0YSwgbWVyZ2VTdHJhdGVneSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1NFVF9TRVNTSU9OX0RBVEEsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIG1lcmdlU3RyYXRlZ3ksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQcm9iYWJseSBkYXRhIHdhcyBub3Qgc3RydWN0dXJlZC1jbG9uYWJsZSBhbmQgY291bGRuJ3QgYmUgc2VudCBpbiB0aGVcbiAgICAgIC8vIG1lc3NhZ2UgdG8gdGhlIGNhbGwgbWFjaGluZS4uLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBzZXR0aW5nIG1lZXRpbmcgc2Vzc2lvbiBkYXRhOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgc2V0VXNlck5hbWUobmFtZSwgb3B0aW9ucykge1xuICAgIHRoaXMucHJvcGVydGllcy51c2VyTmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBrID0gKG1zZykgPT4ge1xuICAgICAgICBkZWxldGUgbXNnLmFjdGlvbjtcbiAgICAgICAgZGVsZXRlIG1zZy5jYWxsYmFja1N0YW1wO1xuICAgICAgICByZXNvbHZlKG1zZyk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TRVRfVVNFUl9OQU1FLFxuICAgICAgICAgIG5hbWU6IG5hbWUgPz8gJycsXG4gICAgICAgICAgdGhpc01lZXRpbmdPbmx5OlxuICAgICAgICAgICAgaXNSZWFjdE5hdGl2ZSgpIHx8IChvcHRpb25zID8gISFvcHRpb25zLnRoaXNNZWV0aW5nT25seSA6IGZhbHNlKSxcbiAgICAgICAgfSxcbiAgICAgICAga1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNldFVzZXJEYXRhKGRhdGEpIHtcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVVc2VyRGF0YShkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5wcm9wZXJ0aWVzLnVzZXJEYXRhID0gZGF0YTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgayA9IChtc2cpID0+IHtcbiAgICAgICAgZGVsZXRlIG1zZy5hY3Rpb247XG4gICAgICAgIGRlbGV0ZSBtc2cuY2FsbGJhY2tTdGFtcDtcbiAgICAgICAgZGVsZXRlIG1zZy5jYWxsRnJhbWVJZDtcbiAgICAgICAgcmVzb2x2ZShtc2cpO1xuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1NFVF9VU0VSX0RBVEEsXG4gICAgICAgICAgICB1c2VyRGF0YTogZGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGtcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gUHJvYmFibHkgdXNlckRhdGEgd2FzIG5vdCBzdHJ1Y3R1cmVkLWNsb25hYmxlIGFuZCBjb3VsZG4ndCBiZSBzZW50IGluXG4gICAgICAgIC8vIGEgbWVzc2FnZSB0byB0aGUgY2FsbCBtYWNoaW5lLi4uXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igc2V0dGluZyB1c2VyIGRhdGE6ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0Q2FtZXJhKHByb3BlcnRpZXMgPSB7fSkge1xuICAgIC8vIFZhbGlkYXRlIG1vZGUuXG4gICAgaWYgKCF0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnc3RhcnRDYW1lcmEoKSBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgaW4gY2FsbCBvYmplY3QgbW9kZSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY2FsbCBzdGF0ZTogc3RhcnRDYW1lcmEoKSBpcyBvbmx5IGFsbG93ZWQgaWYgeW91IGhhdmVuJ3RcbiAgICAvLyBhbHJlYWR5IGpvaW5lZCAob3IgYXJlbid0IGluIHRoZSBwcm9jZXNzIG9mIGpvaW5pbmcpLlxuICAgIGlmIChbREFJTFlfU1RBVEVfSk9JTklORywgREFJTFlfU1RBVEVfSk9JTkVEXS5pbmNsdWRlcyh0aGlzLl9jYWxsU3RhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdzdGFydENhbWVyYSgpIG5vdCBzdXBwb3J0ZWQgYWZ0ZXIgam9pbmluZyBhIG1lZXRpbmc6IGRpZCB5b3UgbWVhbiB0byB1c2Ugc2V0TG9jYWxBdWRpbygpIGFuZC9vciBzZXRMb2NhbFZpZGVvKCkgaW5zdGVhZD8nXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgayA9IChtc2cpID0+IHtcbiAgICAgICAgZGVsZXRlIG1zZy5hY3Rpb247XG4gICAgICAgIGRlbGV0ZSBtc2cuY2FsbGJhY2tTdGFtcDtcbiAgICAgICAgcmVzb2x2ZShtc2cpO1xuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLm5lZWRzTG9hZCgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2FkKHByb3BlcnRpZXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBldmVuIGlmIGlzIGFscmVhZHkgbG9hZGVkLCBuZWVkcyB0byB2YWxpZGF0ZSB0aGUgcHJvcGVydGllcywgc28gdGhlIGRhaWx5Q29uZmlnIHByb3BlcnRpZXMgY2FuIGJlIGluc2VydGVkIGluc2lkZSB3aW5kb3cuX2RhaWx5Q29uZmlnXG4gICAgICAgIHRoaXMudmFsaWRhdGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TVEFSVF9DQU1FUkEsXG4gICAgICAgICAgcHJvcGVydGllczogbWFrZVNhZmVGb3JQb3N0TWVzc2FnZSh0aGlzLnByb3BlcnRpZXMpLFxuICAgICAgICAgIHByZWxvYWRDYWNoZTogbWFrZVNhZmVGb3JQb3N0TWVzc2FnZSh0aGlzLl9wcmVsb2FkQ2FjaGUpLFxuICAgICAgICB9LFxuICAgICAgICBrXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVDdXN0b21UcmFjayh0cmFjaywgbW9kZSwgdHJhY2tOYW1lKSB7XG4gICAgaWYgKHRyYWNrTmFtZSAmJiB0cmFja05hbWUubGVuZ3RoID4gNTApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0N1c3RvbSB0cmFjayBgdHJhY2tOYW1lYCBtdXN0IG5vdCBiZSBtb3JlIHRoYW4gNTAgY2hhcmFjdGVycydcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChtb2RlKSB7XG4gICAgICAvLyBTaW5jZSBubyBwcm9wZXJ0eSBmcm9tIERhaWx5TWljQXVkaW9Nb2RlU2V0dGluZ3MgaXMgcmVxdWlyZWQsIHdlIGFyZSBqdXN0IGNoZWNraW5nIGlmIEl0IGlzIGFuIG9iamVjdFxuICAgICAgaWYgKG1vZGUgIT09ICdtdXNpYycgJiYgbW9kZSAhPT0gJ3NwZWVjaCcgJiYgIShtb2RlIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0N1c3RvbSB0cmFjayBgbW9kZWAgbXVzdCBiZSBlaXRoZXIgYG11c2ljYCB8IGBzcGVlY2hgIHwgYERhaWx5TWljQXVkaW9Nb2RlU2V0dGluZ3NgIG9yIGB1bmRlZmluZWRgJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpc1VzaW5nUmVzZXJ2ZWRUcmFja05hbWUgPSB0cmFja05hbWVcbiAgICAgID8gW1xuICAgICAgICAgICdjYW0tYXVkaW8nLFxuICAgICAgICAgICdjYW0tdmlkZW8nLFxuICAgICAgICAgICdzY3JlZW4tdmlkZW8nLFxuICAgICAgICAgICdzY3JlZW4tYXVkaW8nLFxuICAgICAgICAgICdybXBBdWRpbycsXG4gICAgICAgICAgJ3JtcFZpZGVvJyxcbiAgICAgICAgXS5pbmNsdWRlcyh0cmFja05hbWUpXG4gICAgICA6IGZhbHNlO1xuICAgIGlmIChpc1VzaW5nUmVzZXJ2ZWRUcmFja05hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0N1c3RvbSB0cmFjayBgdHJhY2tOYW1lYCBtdXN0IG5vdCBtYXRjaCBhIHRyYWNrIG5hbWUgYWxyZWFkeSB1c2VkIGJ5IGRhaWx5OiAnICtcbiAgICAgICAgICAnY2FtLWF1ZGlvLCBjYW0tdmlkZW8sIHNjcmVlbi12aWRlbywgc2NyZWVuLWF1ZGlvLCBybXBBdWRpbywgcm1wVmlkZW8nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoISh0cmFjayBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtVHJhY2spKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDdXN0b20gdHJhY2tzIHByb3ZpZGVkIG11c3QgYmUgaW5zdGFuY2VzIG9mIE1lZGlhU3RyZWFtVHJhY2snXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0Q3VzdG9tVHJhY2socHJvcGVydGllcyA9IHsgdHJhY2ssIG1vZGUsIHRyYWNrTmFtZSB9KSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIHRoaXMudmFsaWRhdGVDdXN0b21UcmFjayhcbiAgICAgIHByb3BlcnRpZXMudHJhY2ssXG4gICAgICBwcm9wZXJ0aWVzLm1vZGUsXG4gICAgICBwcm9wZXJ0aWVzLnRyYWNrTmFtZVxuICAgICk7XG4gICAgLy8gVmFsaWRhdGUgbWVldGluZyBzdGF0ZTogY3VzdG9tIHRyYWNrcyBhcmUgb25seSBhdmFpbGFibGVcbiAgICAvLyBvbmNlIHlvdSBoYXZlIGpvaW5lZCB0aGUgbWVldGluZ1xuICAgIGlmICh0aGlzLl9jYWxsU3RhdGUgIT09IERBSUxZX1NUQVRFX0pPSU5FRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydEN1c3RvbVRyYWNrKCkgaXMgb25seSBhbGxvd2VkIHdoZW4gam9pbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4ge1xuICAgICAgbGV0IGsgPSAobXNnKSA9PiB7XG4gICAgICAgIGlmIChtc2cuZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoeyBlcnJvcjogbXNnLmVycm9yIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUobXNnLm1lZGlhVGFnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHdpbmRvdy5fZGFpbHlQcmVsb2FkQ2FjaGUuY3VzdG9tVHJhY2sgPSBwcm9wZXJ0aWVzLnRyYWNrO1xuICAgICAgcHJvcGVydGllcy50cmFjayA9IERBSUxZX0NVU1RPTV9UUkFDSztcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiBEQUlMWV9NRVRIT0RfU1RBUlRfQ1VTVE9NX1RSQUNLLFxuICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzdG9wQ3VzdG9tVHJhY2sodHJhY2tOYW1lKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIC8vIFZhbGlkYXRlIG1lZXRpbmcgc3RhdGU6IGN1c3RvbSB0cmFja3MgYXJlIG9ubHkgYXZhaWxhYmxlXG4gICAgLy8gb25jZSB5b3UgaGF2ZSBqb2luZWQgdGhlIG1lZXRpbmdcbiAgICBpZiAodGhpcy5fY2FsbFN0YXRlICE9PSBEQUlMWV9TVEFURV9KT0lORUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RvcEN1c3RvbVRyYWNrKCkgaXMgb25seSBhbGxvd2VkIHdoZW4gam9pbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4ge1xuICAgICAgbGV0IGsgPSAobXNnKSA9PiB7XG4gICAgICAgIHJlc29sdmUobXNnLm1lZGlhVGFnKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1NUT1BfQ1VTVE9NX1RSQUNLLFxuICAgICAgICAgIG1lZGlhVGFnOiB0cmFja05hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRDYW1lcmEoY2FtZXJhRGV2aWNlSWQpIHtcbiAgICBtZXRob2RPbmx5U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIGlmICh0aGlzLm5lZWRzTG9hZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdCZWZvcmUgeW91IGNhbiBpbnZva2Ugc2V0Q2FtZXJhLCBmaXJzdCB5b3UgbmVlZCB0byBpbnZva2Ugb25lIG9mIHRoZXNlIG1ldGhvZHM6IGpvaW4sIHN0YXJ0Q2FtZXJhLCBvciBwcmVBdXRoJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICBsZXQgayA9IChtc2cpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh7IGRldmljZTogbXNnLmRldmljZSB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgICAgeyBhY3Rpb246IERBSUxZX01FVEhPRF9TRVRfQ0FNRVJBLCBjYW1lcmFEZXZpY2VJZCB9LFxuICAgICAgICBrXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0QXVkaW9EZXZpY2UoZGV2aWNlSWQpIHtcbiAgICBtZXRob2RPbmx5U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIHRoaXMubmF0aXZlVXRpbHMoKS5zZXRBdWRpb0RldmljZShkZXZpY2VJZCk7XG4gICAgY29uc3QgY3VycmVudEF1ZGlvRGV2aWNlID0gYXdhaXQgdGhpcy5uYXRpdmVVdGlscygpLmdldEF1ZGlvRGV2aWNlKCk7XG4gICAgcmV0dXJuIHsgZGV2aWNlSWQ6IGN1cnJlbnRBdWRpb0RldmljZSB9O1xuICB9XG5cbiAgY3ljbGVDYW1lcmEoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICBsZXQgayA9IChtc2cpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh7IGRldmljZTogbXNnLmRldmljZSB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7IGFjdGlvbjogREFJTFlfTUVUSE9EX0NZQ0xFX0NBTUVSQSB9LCBrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGN5Y2xlTWljKCkge1xuICAgIG1ldGhvZE5vdFN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHtcbiAgICAgIGxldCBrID0gKG1zZykgPT4ge1xuICAgICAgICByZXNvbHZlKHsgZGV2aWNlOiBtc2cuZGV2aWNlIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHsgYWN0aW9uOiBEQUlMWV9NRVRIT0RfQ1lDTEVfTUlDIH0sIGspO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2FtZXJhRmFjaW5nTW9kZSgpIHtcbiAgICBtZXRob2RPbmx5U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4ge1xuICAgICAgbGV0IGsgPSAobXNnKSA9PiB7XG4gICAgICAgIHJlc29sdmUobXNnLmZhY2luZ01vZGUpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgICB7IGFjdGlvbjogREFJTFlfTUVUSE9EX0dFVF9DQU1FUkFfRkFDSU5HX01PREUgfSxcbiAgICAgICAga1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldElucHV0RGV2aWNlcyh7IGF1ZGlvRGV2aWNlSWQsIHZpZGVvRGV2aWNlSWQsIGF1ZGlvU291cmNlLCB2aWRlb1NvdXJjZSB9KSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ3NldElucHV0RGV2aWNlcygpIGlzIGRlcHJlY2F0ZWQ6IGluc3RlYWQgdXNlIHNldElucHV0RGV2aWNlc0FzeW5jKCksIHdoaWNoIHJldHVybnMgYSBQcm9taXNlJ1xuICAgICk7XG4gICAgdGhpcy5zZXRJbnB1dERldmljZXNBc3luYyh7XG4gICAgICBhdWRpb0RldmljZUlkLFxuICAgICAgdmlkZW9EZXZpY2VJZCxcbiAgICAgIGF1ZGlvU291cmNlLFxuICAgICAgdmlkZW9Tb3VyY2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3luYyBzZXRJbnB1dERldmljZXNBc3luYyh7XG4gICAgYXVkaW9EZXZpY2VJZCxcbiAgICB2aWRlb0RldmljZUlkLFxuICAgIGF1ZGlvU291cmNlLFxuICAgIHZpZGVvU291cmNlLFxuICB9KSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIC8vIHVzZSBhdWRpb0RldmljZUlkIGFuZCB2aWRlb0RldmljZUlkIGludGVybmFsbHlcbiAgICBpZiAoYXVkaW9Tb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXVkaW9EZXZpY2VJZCA9IGF1ZGlvU291cmNlO1xuICAgIH1cbiAgICBpZiAodmlkZW9Tb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmlkZW9EZXZpY2VJZCA9IHZpZGVvU291cmNlO1xuICAgIH1cblxuICAgIC8vIGNhY2hlIHRoZXNlIGZvciB1c2UgaW4gc3Vic2VxdWVudCBjYWxsc1xuICAgIGlmIChhdWRpb0RldmljZUlkKSB7XG4gICAgICB0aGlzLl9wcmVsb2FkQ2FjaGUuYXVkaW9EZXZpY2VJZCA9IGF1ZGlvRGV2aWNlSWQ7XG4gICAgfVxuICAgIGlmICh2aWRlb0RldmljZUlkKSB7XG4gICAgICB0aGlzLl9wcmVsb2FkQ2FjaGUudmlkZW9EZXZpY2VJZCA9IHZpZGVvRGV2aWNlSWQ7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgaW4gY2FsbE9iamVjdCBtb2RlIGFuZCBub3QgbG9hZGVkIHlldCwgZG9uJ3QgZG8gYW55dGhpbmdcbiAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUgJiYgdGhpcy5uZWVkc0xvYWQoKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FtZXJhOiB7IGRldmljZUlkOiB0aGlzLl9wcmVsb2FkQ2FjaGUudmlkZW9EZXZpY2VJZCB9LFxuICAgICAgICBtaWM6IHsgZGV2aWNlSWQ6IHRoaXMuX3ByZWxvYWRDYWNoZS5hdWRpb0RldmljZUlkIH0sXG4gICAgICAgIHNwZWFrZXI6IHsgZGV2aWNlSWQ6IHRoaXMuX3ByZWxvYWRDYWNoZS5vdXRwdXREZXZpY2VJZCB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoYXVkaW9EZXZpY2VJZCBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtVHJhY2spIHtcbiAgICAgIGF1ZGlvRGV2aWNlSWQgPSBEQUlMWV9DVVNUT01fVFJBQ0s7XG4gICAgfVxuICAgIGlmICh2aWRlb0RldmljZUlkIGluc3RhbmNlb2YgTWVkaWFTdHJlYW1UcmFjaykge1xuICAgICAgdmlkZW9EZXZpY2VJZCA9IERBSUxZX0NVU1RPTV9UUkFDSztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGxldCBrID0gKG1zZykgPT4ge1xuICAgICAgICBkZWxldGUgbXNnLmFjdGlvbjtcbiAgICAgICAgZGVsZXRlIG1zZy5jYWxsYmFja1N0YW1wO1xuXG4gICAgICAgIGlmIChtc2cucmV0dXJuUHJlbG9hZENhY2hlKSB7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBjYW1lcmE6IHsgZGV2aWNlSWQ6IHRoaXMuX3ByZWxvYWRDYWNoZS52aWRlb0RldmljZUlkIH0sXG4gICAgICAgICAgICBtaWM6IHsgZGV2aWNlSWQ6IHRoaXMuX3ByZWxvYWRDYWNoZS5hdWRpb0RldmljZUlkIH0sXG4gICAgICAgICAgICBzcGVha2VyOiB7IGRldmljZUlkOiB0aGlzLl9wcmVsb2FkQ2FjaGUub3V0cHV0RGV2aWNlSWQgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKG1zZyk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TRVRfSU5QVVRfREVWSUNFUyxcbiAgICAgICAgICBhdWRpb0RldmljZUlkLFxuICAgICAgICAgIHZpZGVvRGV2aWNlSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRPdXRwdXREZXZpY2UoeyBvdXRwdXREZXZpY2VJZCB9KSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ3NldE91dHB1dERldmljZSgpIGlzIGRlcHJlY2F0ZWQ6IGluc3RlYWQgdXNlIHNldE91dHB1dERldmljZUFzeW5jKCksIHdoaWNoIHJldHVybnMgYSBQcm9taXNlJ1xuICAgICk7XG4gICAgdGhpcy5zZXRPdXRwdXREZXZpY2VBc3luYyh7IG91dHB1dERldmljZUlkIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXN5bmMgc2V0T3V0cHV0RGV2aWNlQXN5bmMoeyBvdXRwdXREZXZpY2VJZCB9KSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIC8vIGNhY2hlIHRoaXMgZm9yIHVzZSBsYXRlclxuICAgIGlmIChvdXRwdXREZXZpY2VJZCkge1xuICAgICAgdGhpcy5fcHJlbG9hZENhY2hlLm91dHB1dERldmljZUlkID0gb3V0cHV0RGV2aWNlSWQ7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgaW4gY2FsbE9iamVjdCBtb2RlIGFuZCBub3QgbG9hZGVkIHlldCwgZG9uJ3QgZG8gYW55dGhpbmdcbiAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUgJiYgdGhpcy5uZWVkc0xvYWQoKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FtZXJhOiB7IGRldmljZUlkOiB0aGlzLl9wcmVsb2FkQ2FjaGUudmlkZW9EZXZpY2VJZCB9LFxuICAgICAgICBtaWM6IHsgZGV2aWNlSWQ6IHRoaXMuX3ByZWxvYWRDYWNoZS5hdWRpb0RldmljZUlkIH0sXG4gICAgICAgIHNwZWFrZXI6IHsgZGV2aWNlSWQ6IHRoaXMuX3ByZWxvYWRDYWNoZS5vdXRwdXREZXZpY2VJZCB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGxldCBrID0gKG1zZykgPT4ge1xuICAgICAgICBkZWxldGUgbXNnLmFjdGlvbjtcbiAgICAgICAgZGVsZXRlIG1zZy5jYWxsYmFja1N0YW1wO1xuXG4gICAgICAgIGlmIChtc2cucmV0dXJuUHJlbG9hZENhY2hlKSB7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBjYW1lcmE6IHsgZGV2aWNlSWQ6IHRoaXMuX3ByZWxvYWRDYWNoZS52aWRlb0RldmljZUlkIH0sXG4gICAgICAgICAgICBtaWM6IHsgZGV2aWNlSWQ6IHRoaXMuX3ByZWxvYWRDYWNoZS5hdWRpb0RldmljZUlkIH0sXG4gICAgICAgICAgICBzcGVha2VyOiB7IGRldmljZUlkOiB0aGlzLl9wcmVsb2FkQ2FjaGUub3V0cHV0RGV2aWNlSWQgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1NFVF9PVVRQVVRfREVWSUNFLFxuICAgICAgICAgIG91dHB1dERldmljZUlkLFxuICAgICAgICB9LFxuICAgICAgICBrXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5wdXREZXZpY2VzKCkge1xuICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSAmJiB0aGlzLm5lZWRzTG9hZCgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW1lcmE6IHsgZGV2aWNlSWQ6IHRoaXMuX3ByZWxvYWRDYWNoZS52aWRlb0RldmljZUlkIH0sXG4gICAgICAgIG1pYzogeyBkZXZpY2VJZDogdGhpcy5fcHJlbG9hZENhY2hlLmF1ZGlvRGV2aWNlSWQgfSxcbiAgICAgICAgc3BlYWtlcjogeyBkZXZpY2VJZDogdGhpcy5fcHJlbG9hZENhY2hlLm91dHB1dERldmljZUlkIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgayA9IChtc2cpID0+IHtcbiAgICAgICAgZGVsZXRlIG1zZy5hY3Rpb247XG4gICAgICAgIGRlbGV0ZSBtc2cuY2FsbGJhY2tTdGFtcDtcblxuICAgICAgICBpZiAobXNnLnJldHVyblByZWxvYWRDYWNoZSkge1xuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgY2FtZXJhOiB7IGRldmljZUlkOiB0aGlzLl9wcmVsb2FkQ2FjaGUudmlkZW9EZXZpY2VJZCB9LFxuICAgICAgICAgICAgbWljOiB7IGRldmljZUlkOiB0aGlzLl9wcmVsb2FkQ2FjaGUuYXVkaW9EZXZpY2VJZCB9LFxuICAgICAgICAgICAgc3BlYWtlcjogeyBkZXZpY2VJZDogdGhpcy5fcHJlbG9hZENhY2hlLm91dHB1dERldmljZUlkIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShtc2cpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgICB7IGFjdGlvbjogREFJTFlfTUVUSE9EX0dFVF9JTlBVVF9ERVZJQ0VTIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBuYXRpdmVJbkNhbGxBdWRpb01vZGUoKSB7XG4gICAgbWV0aG9kT25seVN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICByZXR1cm4gdGhpcy5fbmF0aXZlSW5DYWxsQXVkaW9Nb2RlO1xuICB9XG5cbiAgc2V0TmF0aXZlSW5DYWxsQXVkaW9Nb2RlKGluQ2FsbEF1ZGlvTW9kZSkge1xuICAgIG1ldGhvZE9ubHlTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCk7XG4gICAgaWYgKFxuICAgICAgIVtOQVRJVkVfQVVESU9fTU9ERV9WSURFT19DQUxMLCBOQVRJVkVfQVVESU9fTU9ERV9WT0lDRV9DQUxMXS5pbmNsdWRlcyhcbiAgICAgICAgaW5DYWxsQXVkaW9Nb2RlXG4gICAgICApXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdpbnZhbGlkIGluLWNhbGwgYXVkaW8gbW9kZSBzcGVjaWZpZWQ6ICcsIGluQ2FsbEF1ZGlvTW9kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGluQ2FsbEF1ZGlvTW9kZSA9PT0gdGhpcy5fbmF0aXZlSW5DYWxsQXVkaW9Nb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IG5ldyBhdWRpbyBtb2RlICh2aWRlbyBjYWxsLCBhdWRpbyBjYWxsKSB0byB1c2Ugd2hlbiB3ZSdyZSBpbiBhIGNhbGxcbiAgICB0aGlzLl9uYXRpdmVJbkNhbGxBdWRpb01vZGUgPSBpbkNhbGxBdWRpb01vZGU7XG5cbiAgICAvLyBJZiB3ZSdyZSBpbiBhIGNhbGwgbm93LCBhcHBseSB0aGUgbmV3IGF1ZGlvIG1vZGVcbiAgICAvLyAoYXNzdW1pbmcgYXV0b21hdGljIGF1ZGlvIGRldmljZSBtYW5hZ2VtZW50IGlzbid0IGRpc2FibGVkKVxuICAgIGlmIChcbiAgICAgICF0aGlzLmRpc2FibGVSZWFjdE5hdGl2ZUF1dG9EZXZpY2VNYW5hZ2VtZW50KCdhdWRpbycpICYmXG4gICAgICB0aGlzLl9pc0NhbGxQZW5kaW5nT3JPbmdvaW5nKHRoaXMuX2NhbGxTdGF0ZSwgdGhpcy5faXNQcmVwYXJpbmdUb0pvaW4pXG4gICAgKSB7XG4gICAgICB0aGlzLm5hdGl2ZVV0aWxzKCkuc2V0QXVkaW9Nb2RlKHRoaXMuX25hdGl2ZUluQ2FsbEF1ZGlvTW9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3luYyBwcmVBdXRoKHByb3BlcnRpZXMgPSB7fSkge1xuICAgIC8vIFZhbGlkYXRlIG1vZGUuXG4gICAgaWYgKCF0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcmVBdXRoKCkgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGluIGNhbGwgb2JqZWN0IG1vZGUnKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBjYWxsIHN0YXRlOiBwcmUtYXV0aCBpcyBvbmx5IGFsbG93ZWQgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeVxuICAgIC8vIGpvaW5lZCAob3IgYXJlbid0IGluIHRoZSBwcm9jZXNzIG9mIGpvaW5pbmcpLlxuICAgIGlmIChbREFJTFlfU1RBVEVfSk9JTklORywgREFJTFlfU1RBVEVfSk9JTkVEXS5pbmNsdWRlcyh0aGlzLl9jYWxsU3RhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZUF1dGgoKSBub3Qgc3VwcG9ydGVkIGFmdGVyIGpvaW5pbmcgYSBtZWV0aW5nJyk7XG4gICAgfVxuXG4gICAgLy8gTG9hZCBjYWxsIG1hY2hpbmUgYnVuZGxlLCBpZiBuZWVkZWQuXG4gICAgaWYgKHRoaXMubmVlZHNMb2FkKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZChwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICAvLyBBc3NpZ24gcHJvcGVydGllcywgZW5zdXJpbmcgdGhhdCBhdCBhIG1pbmltdW0gdXJsIGlzIHNldC5cbiAgICBpZiAoIXByb3BlcnRpZXMudXJsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZUF1dGgoKSByZXF1aXJlcyBhdCBsZWFzdCBhIHVybCB0byBiZSBwcm92aWRlZCcpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlUHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSB7IC4uLnRoaXMucHJvcGVydGllcywgLi4ucHJvcGVydGllcyB9O1xuXG4gICAgLy8gUHJlLWF1dGggd2l0aCB0aGUgc2VydmVyLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBrID0gKG1zZykgPT4ge1xuICAgICAgICBpZiAobXNnLmVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChtc2cuZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtc2cuYWNjZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ3Vua25vd24gZXJyb3IgaW4gcHJlQXV0aCgpJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgd2UndmUgcHJlLWF1dGhlZC5cbiAgICAgICAgLy8gVGhpcyBmbGFnIGhhcyB0aGUgZWZmZWN0IG9mIFwibG9ja2luZyBpblwiIHVybCBhbmQgdG9rZW4sIHNvIHRoYXQgdGhleVxuICAgICAgICAvLyBjYW4ndCBiZSBjaGFuZ2VkIHN1YnNlcXVlbnRseSBvbiBqb2luKCksIHdoaWNoIHdvdWxkIGludmFsaWRhdGUgdGhpc1xuICAgICAgICAvLyBwcmUtYXV0aC5cbiAgICAgICAgdGhpcy5fZGlkUHJlQXV0aCA9IHRydWU7XG5cbiAgICAgICAgcmVzb2x2ZSh7IGFjY2VzczogbXNnLmFjY2VzcyB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1BSRUFVVEgsXG4gICAgICAgICAgcHJvcGVydGllczogbWFrZVNhZmVGb3JQb3N0TWVzc2FnZSh0aGlzLnByb3BlcnRpZXMpLFxuICAgICAgICB9LFxuICAgICAgICBrXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbG9hZChwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCF0aGlzLm5lZWRzTG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0geyAuLi50aGlzLnByb3BlcnRpZXMsIC4uLnByb3BlcnRpZXMgfTtcbiAgICB9XG5cbiAgICAvLyBJbiBpZnJhbWUgbW9kZSwgd2UgKm11c3QqIGhhdmUgYSBtZWV0aW5nIHVybFxuICAgIC8vIChBcyBvcHBvc2VkIHRvIGNhbGwgb2JqZWN0IG1vZGUsIHdoZXJlIGEgbWVldGluZyB1cmwsIGEgYmFzZSB1cmwsIG9yIG5vXG4gICAgLy8gdXJsIGF0IGFsbCBhcmUgYWxsIHZhbGlkIGhlcmUpXG4gICAgaWYgKCF0aGlzLl9jYWxsT2JqZWN0TW9kZSAmJiAhdGhpcy5wcm9wZXJ0aWVzLnVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImNhbid0IGxvYWQgaWZyYW1lIG1lZXRpbmcgYmVjYXVzZSB1cmwgcHJvcGVydHkgaXNuJ3Qgc2V0XCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ2FsbFN0YXRlKERBSUxZX1NUQVRFX0xPQURJTkcpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmVtaXQoREFJTFlfRVZFTlRfTE9BRElORywgeyBhY3Rpb246IERBSUxZX0VWRU5UX0xPQURJTkcgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coXCJjb3VsZCBub3QgZW1pdCAnbG9hZGluZydcIiwgZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICAvLyBub24taWZyYW1lLCBjYWxsT2JqZWN0TW9kZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5fY2FsbE9iamVjdExvYWRlci5jYW5jZWwoKTtcbiAgICAgICAgdGhpcy5fY2FsbE9iamVjdExvYWRlci5sb2FkKFxuICAgICAgICAgIHRoaXMuX2NhbGxGcmFtZUlkLFxuICAgICAgICAgIHRoaXMucHJvcGVydGllcy5kYWlseUNvbmZpZyAmJiB0aGlzLnByb3BlcnRpZXMuZGFpbHlDb25maWcuYXZvaWRFdmFsLFxuICAgICAgICAgICh3YXNOb09wKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDYWxsU3RhdGUoREFJTFlfU1RBVEVfTE9BREVEKTtcbiAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0byBlbWl0IGV2ZW50IGlmIGxvYWQgd2FzIGEgbm8tb3AsIHNpbmNlIHRoZSBsb2FkZWRcbiAgICAgICAgICAgIC8vIGJ1bmRsZSB3b24ndCBiZSBlbWl0dGluZyBpdCBpZiBpdCdzIG5vdCBleGVjdXRlZCBhZ2FpblxuICAgICAgICAgICAgd2FzTm9PcCAmJlxuICAgICAgICAgICAgICB0aGlzLmVtaXQoREFJTFlfRVZFTlRfTE9BREVELCB7IGFjdGlvbjogREFJTFlfRVZFTlRfTE9BREVEIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yTXNnLCB3aWxsUmV0cnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChEQUlMWV9FVkVOVF9MT0FEX0FUVEVNUFRfRkFJTEVELCB7XG4gICAgICAgICAgICAgIGFjdGlvbjogREFJTFlfRVZFTlRfTE9BRF9BVFRFTVBUX0ZBSUxFRCxcbiAgICAgICAgICAgICAgZXJyb3JNc2csXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghd2lsbFJldHJ5KSB7XG4gICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNhbGxTdGF0ZShEQUlMWV9TVEFURV9FUlJPUik7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRNZWV0aW5nRGVwZW5kZW50VmFycygpO1xuICAgICAgICAgICAgICB0aGlzLmVtaXQoREFJTFlfRVZFTlRfRVJST1IsIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IERBSUxZX0VWRU5UX0VSUk9SLFxuICAgICAgICAgICAgICAgIGVycm9yTXNnLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yTXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWZyYW1lXG4gICAgICB0aGlzLl9pZnJhbWUuc3JjID0gdGhpcy5hc3NlbWJsZU1lZXRpbmdVcmwoKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuX2xvYWRlZENhbGxiYWNrID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NhbGxTdGF0ZSA9PT0gREFJTFlfU1RBVEVfRVJST1IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX3VwZGF0ZUNhbGxTdGF0ZShEQUlMWV9TVEFURV9MT0FERUQpO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMuY3NzRmlsZSB8fCB0aGlzLnByb3BlcnRpZXMuY3NzVGV4dCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkQ3NzKHRoaXMucHJvcGVydGllcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGV2ZW50TmFtZSBpbiB0aGlzLl9pbnB1dEV2ZW50c09uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICAgICAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1JFR0lTVEVSX0lOUFVUX0hBTkRMRVIsXG4gICAgICAgICAgICAgIG9uOiBldmVudE5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgam9pbihwcm9wZXJ0aWVzID0ge30pIHtcbiAgICBsZXQgbmV3Q3NzID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubmVlZHNMb2FkKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlSXNQcmVwYXJpbmdUb0pvaW4odHJ1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWQocHJvcGVydGllcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSXNQcmVwYXJpbmdUb0pvaW4oZmFsc2UpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NzcyA9ICEhKHRoaXMucHJvcGVydGllcy5jc3NGaWxlIHx8IHRoaXMucHJvcGVydGllcy5jc3NUZXh0KTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhhdCBhbnkgcHJvdmlkZWQgdXJsIG9yIHRva2VuIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCB1cmwgb3JcbiAgICAgIC8vIHRva2VuIGFscmVhZHkgdXNlZCB0byBwcmVBdXRoKClcbiAgICAgIGlmICh0aGlzLl9kaWRQcmVBdXRoKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLnVybCAmJiBwcm9wZXJ0aWVzLnVybCAhPT0gdGhpcy5wcm9wZXJ0aWVzLnVybCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgdXJsIGluIGpvaW4oKSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIHVzZWQgaW4gcHJlQXV0aCgpYFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy51cGRhdGVJc1ByZXBhcmluZ1RvSm9pbihmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BlcnRpZXMudG9rZW4gJiYgcHJvcGVydGllcy50b2tlbiAhPT0gdGhpcy5wcm9wZXJ0aWVzLnRva2VuKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGB0b2tlbiBpbiBqb2luKCkgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG9uZSB1c2VkIGluIHByZUF1dGgoKWBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudXBkYXRlSXNQcmVwYXJpbmdUb0pvaW4oZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluIGlmcmFtZSBtb2RlLCB2YWxpZGF0ZSB0aGF0IHVybCB3ZSdyZSB1c2luZyB0byBqb2luKCkgZG9lc24ndFxuICAgICAgLy8gY29uZmxpY3Qgd2l0aCB0aGUgdXJsIHdlIHVzZWQgdG8gbG9hZCgpXG4gICAgICBpZiAocHJvcGVydGllcy51cmwgJiYgIXRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLnVybCAmJiBwcm9wZXJ0aWVzLnVybCAhPT0gdGhpcy5wcm9wZXJ0aWVzLnVybCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgdXJsIGluIGpvaW4oKSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIHVzZWQgaW4gbG9hZCgpICgke3RoaXMucHJvcGVydGllcy51cmx9IC0+ICR7cHJvcGVydGllcy51cmx9KWBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudXBkYXRlSXNQcmVwYXJpbmdUb0pvaW4oZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFuZCBhc3NpZ24gcHJvcGVydGllcyB0byB0aGlzLnByb3BlcnRpZXMsIGZvciB1c2UgYnkgY2FsbFxuICAgICAgLy8gbWFjaGluZVxuICAgICAgdGhpcy52YWxpZGF0ZVByb3BlcnRpZXMocHJvcGVydGllcyk7XG4gICAgICB0aGlzLnByb3BlcnRpZXMgPSB7IC4uLnRoaXMucHJvcGVydGllcywgLi4ucHJvcGVydGllcyB9O1xuICAgIH1cblxuICAgIC8vIG9ubHkgdXBkYXRlIGlmIHNob3dMb2NhbFZpZGVvL3Nob3dQYXJ0aWNpcGFudHNCYXIgYXJlIGJlaW5nIGV4cGxpY2l0bHkgc2V0XG4gICAgaWYgKHByb3BlcnRpZXMuc2hvd0xvY2FsVmlkZW8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3Nob3dMb2NhbFZpZGVvIGlzIG5vdCBhdmFpbGFibGUgaW4gY2FsbE9iamVjdCBtb2RlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zaG93TG9jYWxWaWRlbyA9ICEhcHJvcGVydGllcy5zaG93TG9jYWxWaWRlbztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BlcnRpZXMuc2hvd1BhcnRpY2lwYW50c0JhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnc2hvd1BhcnRpY2lwYW50c0JhciBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGxPYmplY3QgbW9kZSdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3Nob3dQYXJ0aWNpcGFudHNCYXIgPSAhIXByb3BlcnRpZXMuc2hvd1BhcnRpY2lwYW50c0JhcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9jYWxsU3RhdGUgPT09IERBSUxZX1NUQVRFX0pPSU5FRCB8fFxuICAgICAgdGhpcy5fY2FsbFN0YXRlID09PSBEQUlMWV9TVEFURV9KT0lOSU5HXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2FscmVhZHkgam9pbmVkIG1lZXRpbmcsIGNhbGwgbGVhdmUoKSBiZWZvcmUgam9pbmluZyBhZ2FpbicpO1xuICAgICAgdGhpcy51cGRhdGVJc1ByZXBhcmluZ1RvSm9pbihmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUNhbGxTdGF0ZShEQUlMWV9TVEFURV9KT0lOSU5HLCBmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZW1pdChEQUlMWV9FVkVOVF9KT0lOSU5HX01FRVRJTkcsIHtcbiAgICAgICAgYWN0aW9uOiBEQUlMWV9FVkVOVF9KT0lOSU5HX01FRVRJTkcsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNvdWxkIG5vdCBlbWl0ICdqb2luaW5nLW1lZXRpbmcnXCIsIGUpO1xuICAgIH1cbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9KT0lOLFxuICAgICAgcHJvcGVydGllczogbWFrZVNhZmVGb3JQb3N0TWVzc2FnZSh0aGlzLnByb3BlcnRpZXMpLFxuICAgICAgcHJlbG9hZENhY2hlOiBtYWtlU2FmZUZvclBvc3RNZXNzYWdlKHRoaXMuX3ByZWxvYWRDYWNoZSksXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2pvaW5lZENhbGxiYWNrID0gKHBhcnRpY2lwYW50cywgZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NhbGxTdGF0ZSA9PT0gREFJTFlfU1RBVEVfRVJST1IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVDYWxsU3RhdGUoREFJTFlfU1RBVEVfSk9JTkVEKTtcbiAgICAgICAgaWYgKHBhcnRpY2lwYW50cykge1xuICAgICAgICAgIGZvciAodmFyIGlkIGluIHBhcnRpY2lwYW50cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICAgICAgICAgIFBhcnRpY2lwYW50LmFkZFRyYWNrcyhwYXJ0aWNpcGFudHNbaWRdKTtcbiAgICAgICAgICAgICAgUGFydGljaXBhbnQuYWRkQ3VzdG9tVHJhY2tzKHBhcnRpY2lwYW50c1tpZF0pO1xuICAgICAgICAgICAgICBQYXJ0aWNpcGFudC5hZGRMZWdhY3lUcmFja3MoXG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnRzW2lkXSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJ0aWNpcGFudHNbaWRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wYXJ0aWNpcGFudHNbaWRdID0geyAuLi5wYXJ0aWNpcGFudHNbaWRdIH07XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBhcnRpY2lwYW50QXVkaW9CYXNlZE9uTmF0aXZlQXVkaW9Gb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3Q3NzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkQ3NzKHRoaXMucHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShwYXJ0aWNpcGFudHMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxlYXZlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NhbGxPYmplY3RMb2FkZXIgJiYgIXRoaXMuX2NhbGxPYmplY3RMb2FkZXIubG9hZGVkKSB7XG4gICAgICAgIC8vIElmIGNhbGwgb2JqZWN0IGJ1bmRsZSBuZXZlciBzdWNjZXNzZnVsbHkgbG9hZGVkLCBjYW5jZWwgbG9hZCBpZlxuICAgICAgICAvLyBuZWVkZWQgYW5kIGNsZWFuIHVwIHN0YXRlIGltbWVkaWF0ZWx5ICh3aXRob3V0IHdhaXRpbmcgZm9yIGNhbGxcbiAgICAgICAgLy8gbWFjaGluZSB0byBjbGVhbiB1cCBpdHMgc3RhdGUpLlxuICAgICAgICB0aGlzLl9jYWxsT2JqZWN0TG9hZGVyLmNhbmNlbCgpO1xuICAgICAgICB0aGlzLl91cGRhdGVDYWxsU3RhdGUoREFJTFlfU1RBVEVfTEVGVCk7XG4gICAgICAgIHRoaXMucmVzZXRNZWV0aW5nRGVwZW5kZW50VmFycygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuZW1pdChEQUlMWV9TVEFURV9MRUZULCB7IGFjdGlvbjogREFJTFlfU1RBVEVfTEVGVCB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY291bGQgbm90IGVtaXQgJ2xlZnQtbWVldGluZydcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5fY2FsbFN0YXRlID09PSBEQUlMWV9TVEFURV9MRUZUIHx8XG4gICAgICAgIHRoaXMuX2NhbGxTdGF0ZSA9PT0gREFJTFlfU1RBVEVfRVJST1JcbiAgICAgICkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIGRvLCBoZXJlLCBqdXN0IHJlc29sdmVcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUxlYXZlID0gcmVzb2x2ZTtcbiAgICAgICAgLy8gVE9ETzogdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGlmcmFtZSBjYWxsIG1hY2hpbmUgaXMgbm90IHlldCBsb2FkZWRcbiAgICAgICAgLy8gaXMgbmV2ZXIgaGFuZGxlZCBoZXJlLi4uXG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHsgYWN0aW9uOiBEQUlMWV9NRVRIT0RfTEVBVkUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGFydFNjcmVlblNoYXJlKGNhcHR1cmVPcHRpb25zID0ge30pIHtcbiAgICBtZXRob2ROb3RTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCk7XG4gICAgaWYgKGNhcHR1cmVPcHRpb25zLm1lZGlhU3RyZWFtKSB7XG4gICAgICB0aGlzLl9wcmVsb2FkQ2FjaGUuc2NyZWVuTWVkaWFTdHJlYW0gPSBjYXB0dXJlT3B0aW9ucy5tZWRpYVN0cmVhbTtcbiAgICAgIGNhcHR1cmVPcHRpb25zLm1lZGlhU3RyZWFtID0gREFJTFlfQ1VTVE9NX1RSQUNLO1xuICAgIH1cbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TVEFSVF9TQ1JFRU5TSEFSRSxcbiAgICAgIGNhcHR1cmVPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgc3RvcFNjcmVlblNoYXJlKCkge1xuICAgIG1ldGhvZE5vdFN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7IGFjdGlvbjogREFJTFlfTUVUSE9EX1NUT1BfU0NSRUVOU0hBUkUgfSk7XG4gIH1cblxuICBzdGFydFJlY29yZGluZyhhcmdzID0ge30pIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TVEFSVF9SRUNPUkRJTkcsXG4gICAgICAuLi5hcmdzLFxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlUmVjb3JkaW5nKHsgbGF5b3V0ID0geyBwcmVzZXQ6ICdkZWZhdWx0JyB9LCBpbnN0YW5jZUlkIH0pIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9VUERBVEVfUkVDT1JESU5HLFxuICAgICAgbGF5b3V0LFxuICAgICAgaW5zdGFuY2VJZCxcbiAgICB9KTtcbiAgfVxuXG4gIHN0b3BSZWNvcmRpbmcoYXJncyA9IHt9KSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoe1xuICAgICAgYWN0aW9uOiBEQUlMWV9NRVRIT0RfU1RPUF9SRUNPUkRJTkcsXG4gICAgICAuLi5hcmdzLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhcnRMaXZlU3RyZWFtaW5nKGFyZ3MgPSB7fSkge1xuICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHtcbiAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1NUQVJUX0xJVkVfU1RSRUFNSU5HLFxuICAgICAgLi4uYXJncyxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUxpdmVTdHJlYW1pbmcoeyBsYXlvdXQgPSB7IHByZXNldDogJ2RlZmF1bHQnIH0sIGluc3RhbmNlSWQgfSkge1xuICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHtcbiAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1VQREFURV9MSVZFX1NUUkVBTUlORyxcbiAgICAgIGxheW91dCxcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgfSk7XG4gIH1cblxuICBhZGRMaXZlU3RyZWFtaW5nRW5kcG9pbnRzKHsgZW5kcG9pbnRzLCBpbnN0YW5jZUlkIH0pIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9VUERBVEVfTElWRV9TVFJFQU1JTkdfRU5EUE9JTlRTLFxuICAgICAgZW5kcG9pbnRzT3A6IFVQREFURV9MSVZFX1NUUkVBTUlOR19FTkRQT0lOVFNfT1AuQUREX0VORFBPSU5UUyxcbiAgICAgIGVuZHBvaW50cyxcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVMaXZlU3RyZWFtaW5nRW5kcG9pbnRzKHsgZW5kcG9pbnRzLCBpbnN0YW5jZUlkIH0pIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9VUERBVEVfTElWRV9TVFJFQU1JTkdfRU5EUE9JTlRTLFxuICAgICAgZW5kcG9pbnRzT3A6IFVQREFURV9MSVZFX1NUUkVBTUlOR19FTkRQT0lOVFNfT1AuUkVNT1ZFX0VORFBPSU5UUyxcbiAgICAgIGVuZHBvaW50cyxcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgfSk7XG4gIH1cblxuICBzdG9wTGl2ZVN0cmVhbWluZyhhcmdzID0ge30pIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TVE9QX0xJVkVfU1RSRUFNSU5HLFxuICAgICAgLi4uYXJncyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0UmVtb3RlTWVkaWFQbGF5ZXIoe1xuICAgIHVybCxcbiAgICBzZXR0aW5ncyA9IHtcbiAgICAgIHN0YXRlOiBEQUlMWV9KU19SRU1PVEVfTUVESUFfUExBWUVSX1NFVFRJTkcuUExBWSxcbiAgICB9LFxuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlUmVtb3RlUGxheWVyVXJsKHVybCk7XG4gICAgICB2YWxpZGF0ZVJlbW90ZVBsYXllclNldHRpbmdzKHNldHRpbmdzKTtcbiAgICAgIHZhbGlkYXRlUmVtb3RlUGxheWVyRW5jb2RpbmdTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgaW52YWxpZCBhcmd1bWVudCBFcnJvcjogJHtlfWApO1xuICAgICAgY29uc29sZS5lcnJvcihyZW1vdGVNZWRpYVBsYXllclN0YXJ0VmFsaWRhdGlvbkhlbHBNc2coKSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgayA9IChtc2cpID0+IHtcbiAgICAgICAgaWYgKG1zZy5lcnJvcikge1xuICAgICAgICAgIHJlamVjdCh7IGVycm9yOiBtc2cuZXJyb3IsIGVycm9yTXNnOiBtc2cuZXJyb3JNc2cgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzZXNzaW9uX2lkOiBtc2cuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyU3RhdGU6IHtcbiAgICAgICAgICAgICAgc3RhdGU6IG1zZy5zdGF0ZSxcbiAgICAgICAgICAgICAgc2V0dGluZ3M6IG1zZy5zZXR0aW5ncyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1NUQVJUX1JFTU9URV9NRURJQV9QTEFZRVIsXG4gICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgc2V0dGluZ3M6IHNldHRpbmdzLFxuICAgICAgICB9LFxuICAgICAgICBrXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RvcFJlbW90ZU1lZGlhUGxheWVyKHNlc3Npb25faWQpIHtcbiAgICBpZiAodHlwZW9mIHNlc3Npb25faWQgIT09ICdzdHJpbmcnKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCcgcmVtb3RlUGxheWVySUQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZycpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBrID0gKG1zZykgPT4ge1xuICAgICAgICBpZiAobXNnLmVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KHsgZXJyb3I6IG1zZy5lcnJvciwgZXJyb3JNc2c6IG1zZy5lcnJvck1zZyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgICAgeyBhY3Rpb246IERBSUxZX01FVEhPRF9TVE9QX1JFTU9URV9NRURJQV9QTEFZRVIsIHNlc3Npb25faWQgfSxcbiAgICAgICAga1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJlbW90ZU1lZGlhUGxheWVyKHsgc2Vzc2lvbl9pZCwgc2V0dGluZ3MgfSkge1xuICAgIC8vIFRPRE86IEFkZCBjaGVjayBvZiB0aGUgY3VycmVudF9zdGF0ZSA9PT0gZGVzaXJlZCBzdGF0ZVxuICAgIC8vIEFuZCByZXNvbHZlKCkgZnJvbSBoZXJlIGl0c2VsZi5cbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVSZW1vdGVQbGF5ZXJTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgaW52YWxpZCBhcmd1bWVudCBFcnJvcjogJHtlfWApO1xuICAgICAgY29uc29sZS5lcnJvcihyZW1vdGVNZWRpYVBsYXllclVwZGF0ZVZhbGlkYXRpb25IZWxwTXNnKCkpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IGsgPSAobXNnKSA9PiB7XG4gICAgICAgIGlmIChtc2cuZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoeyBlcnJvcjogbXNnLmVycm9yLCBlcnJvck1zZzogbXNnLmVycm9yTXNnIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc2Vzc2lvbl9pZDogbXNnLnNlc3Npb25faWQsXG4gICAgICAgICAgICByZW1vdGVNZWRpYVBsYXllclN0YXRlOiB7XG4gICAgICAgICAgICAgIHN0YXRlOiBtc2cuc3RhdGUsXG4gICAgICAgICAgICAgIHNldHRpbmdzOiBtc2cuc2V0dGluZ3MsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9VUERBVEVfUkVNT1RFX01FRElBX1BMQVlFUixcbiAgICAgICAgICBzZXNzaW9uX2lkOiBzZXNzaW9uX2lkLFxuICAgICAgICAgIHNldHRpbmdzOiBzZXR0aW5ncyxcbiAgICAgICAgfSxcbiAgICAgICAga1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0VHJhbnNjcmlwdGlvbihhcmdzKSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoe1xuICAgICAgYWN0aW9uOiBEQUlMWV9NRVRIT0RfU1RBUlRfVFJBTlNDUklQVElPTixcbiAgICAgIC4uLmFyZ3MsXG4gICAgfSk7XG4gIH1cblxuICBzdG9wVHJhbnNjcmlwdGlvbigpIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7IGFjdGlvbjogREFJTFlfTUVUSE9EX1NUT1BfVFJBTlNDUklQVElPTiB9KTtcbiAgfVxuXG4gIGdldE5ldHdvcmtTdGF0cygpIHtcbiAgICBpZiAodGhpcy5fY2FsbFN0YXRlICE9PSBEQUlMWV9TVEFURV9KT0lORUQpIHtcbiAgICAgIGxldCBzdGF0cyA9IHsgbGF0ZXN0OiB7fSB9O1xuICAgICAgcmV0dXJuIHsgc3RhdHMgfTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICBsZXQgayA9IChtc2cpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh7IHN0YXRzOiBtc2cuc3RhdHMsIC4uLnRoaXMuX25ldHdvcmsgfSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoeyBhY3Rpb246IERBSUxZX01FVEhPRF9HRVRfQ0FMQ19TVEFUUyB9LCBrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFjdGl2ZVNwZWFrZXIoKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTcGVha2VyO1xuICB9XG5cbiAgc2V0QWN0aXZlU3BlYWtlck1vZGUoZW5hYmxlZCkge1xuICAgIG1ldGhvZE5vdFN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TRVRfQUNUSVZFX1NQRUFLRVJfTU9ERSxcbiAgICAgIGVuYWJsZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhY3RpdmVTcGVha2VyTW9kZSgpIHtcbiAgICBtZXRob2ROb3RTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCk7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVNwZWFrZXJNb2RlO1xuICB9XG5cbiAgc3Vic2NyaWJlVG9UcmFja3NBdXRvbWF0aWNhbGx5KCkge1xuICAgIHJldHVybiB0aGlzLl9wcmVsb2FkQ2FjaGUuc3Vic2NyaWJlVG9UcmFja3NBdXRvbWF0aWNhbGx5O1xuICB9XG5cbiAgc2V0U3Vic2NyaWJlVG9UcmFja3NBdXRvbWF0aWNhbGx5KGVuYWJsZWQpIHtcbiAgICBpZiAodGhpcy5fY2FsbFN0YXRlICE9PSBEQUlMWV9TVEFURV9KT0lORUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3NldFN1YnNjcmliZVRvVHJhY2tzQXV0b21hdGljYWxseSgpIGlzIG9ubHkgYWxsb3dlZCB3aGVuIGpvaW5lZCdcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3ByZWxvYWRDYWNoZS5zdWJzY3JpYmVUb1RyYWNrc0F1dG9tYXRpY2FsbHkgPSBlbmFibGVkO1xuICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHtcbiAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1NFVF9TVUJTQ1JJQkVfVE9fVFJBQ0tTX0FVVE9NQVRJQ0FMTFksXG4gICAgICBlbmFibGVkLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXN5bmMgZW51bWVyYXRlRGV2aWNlcygpIHtcbiAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgIGxldCByYXcgPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKTtcbiAgICAgIHJldHVybiB7IGRldmljZXM6IHJhdy5tYXAoKGQpID0+IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZCkpKSB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4ge1xuICAgICAgbGV0IGsgPSAobXNnKSA9PiB7XG4gICAgICAgIHJlc29sdmUoeyBkZXZpY2VzOiBtc2cuZGV2aWNlcyB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgICAgeyBhY3Rpb246IERBSUxZX01FVEhPRF9FTlVNRVJBVEVfREVWSUNFUyB9LFxuICAgICAgICBrXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgc2VuZEFwcE1lc3NhZ2UoZGF0YSwgdG8gPSAnKicpIHtcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZGF0YSkubGVuZ3RoID4gTUFYX0FQUF9NU0dfU0laRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTWVzc2FnZSBkYXRhIHRvbyBsYXJnZS4gTWF4IHNpemUgaXMgJyArIE1BWF9BUFBfTVNHX1NJWkVcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHsgYWN0aW9uOiBEQUlMWV9NRVRIT0RfQVBQX01TRywgZGF0YSwgdG8gfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRGYWtlUGFydGljaXBhbnQoYXJncykge1xuICAgIG1ldGhvZE5vdFN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9BRERfRkFLRV9QQVJUSUNJUEFOVCxcbiAgICAgIC4uLmFyZ3MsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRTaG93TmFtZXNNb2RlKG1vZGUpIHtcbiAgICBtZXRob2ROb3RTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCk7XG4gICAgaWYgKG1vZGUgJiYgIShtb2RlID09PSAnYWx3YXlzJyB8fCBtb2RlID09PSAnbmV2ZXInKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ3NldFNob3dOYW1lc01vZGUgYXJndW1lbnQgc2hvdWxkIGJlIFwiYWx3YXlzXCIsIFwibmV2ZXJcIiwgb3IgZmFsc2UnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHtcbiAgICAgIGFjdGlvbjogREFJTFlfTUVUSE9EX1NFVF9TSE9XX05BTUVTLFxuICAgICAgbW9kZTogbW9kZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldFNob3dMb2NhbFZpZGVvKHNob3cgPSB0cnVlKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIGlmICh0eXBlb2Ygc2hvdyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdzZXRTaG93TG9jYWxWaWRlbyBvbmx5IGFjY2VwdHMgYSBib29sZWFuIHZhbHVlJyk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdzZXRTaG93TG9jYWxWaWRlbyBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGxPYmplY3QgbW9kZScpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jYWxsU3RhdGUgIT09IERBSUxZX1NUQVRFX0pPSU5FRCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ3RoZSBtZWV0aW5nIG11c3QgYmUgam9pbmVkIGJlZm9yZSBjYWxsaW5nIHNldFNob3dMb2NhbFZpZGVvJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TRVRfU0hPV19MT0NBTF9WSURFTyxcbiAgICAgIHNob3csXG4gICAgfSk7XG4gICAgdGhpcy5fc2hvd0xvY2FsVmlkZW8gPSBzaG93O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2hvd0xvY2FsVmlkZW8oKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgY29uc29sZS5lcnJvcignc2hvd0xvY2FsVmlkZW8gaXMgbm90IGF2YWlsYWJsZSBpbiBjYWxsT2JqZWN0IG1vZGUnKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc2hvd0xvY2FsVmlkZW87XG4gIH1cblxuICBzZXRTaG93UGFydGljaXBhbnRzQmFyKHNob3cgPSB0cnVlKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIGlmICh0eXBlb2Ygc2hvdyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdzZXRTaG93UGFydGljaXBhbnRzQmFyIG9ubHkgYWNjZXB0cyBhIGJvb2xlYW4gdmFsdWUnKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdzZXRTaG93UGFydGljaXBhbnRzQmFyIGlzIG5vdCBhdmFpbGFibGUgaW4gY2FsbE9iamVjdCBtb2RlJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY2FsbFN0YXRlICE9PSBEQUlMWV9TVEFURV9KT0lORUQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICd0aGUgbWVldGluZyBtdXN0IGJlIGpvaW5lZCBiZWZvcmUgY2FsbGluZyBzZXRTaG93UGFydGljaXBhbnRzQmFyJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TRVRfU0hPV19QQVJUSUNJUEFOVFNfQkFSLFxuICAgICAgc2hvdyxcbiAgICB9KTtcbiAgICB0aGlzLl9zaG93UGFydGljaXBhbnRzQmFyID0gc2hvdztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNob3dQYXJ0aWNpcGFudHNCYXIoKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgY29uc29sZS5lcnJvcignc2hvd1BhcnRpY2lwYW50c0JhciBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGxPYmplY3QgbW9kZScpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zaG93UGFydGljaXBhbnRzQmFyO1xuICB9XG5cbiAgY3VzdG9tSW50ZWdyYXRpb25zKCkge1xuICAgIG1ldGhvZE5vdFN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2N1c3RvbUludGVncmF0aW9ucyBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGxPYmplY3QgbW9kZScpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jdXN0b21JbnRlZ3JhdGlvbnM7XG4gIH1cblxuICB1cGRhdGVDdXN0b21JbnRlZ3JhdGlvbnMoaW50ZWdyYXRpb25zKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ3VwZGF0ZUN1c3RvbUludGVncmF0aW9ucyBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGxPYmplY3QgbW9kZSdcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NhbGxTdGF0ZSAhPT0gREFJTFlfU1RBVEVfSk9JTkVEKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAndGhlIG1lZXRpbmcgbXVzdCBiZSBqb2luZWQgYmVmb3JlIGNhbGxpbmcgdXBkYXRlQ3VzdG9tSW50ZWdyYXRpb25zJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBUT0RPOiBXcml0ZSB2YWxpZGF0b3IgZm9yIGN1c3RvbSBpbnRlZ3JhdGlvbnMuXG4gICAgLy8gaWYgKCF2YWxpZGF0ZUN1c3RvbUludGVncmF0aW9ucyhpbnRlZ3JhdGlvbnMpKSB7XG4gICAgLy8gICBjb25zb2xlLmVycm9yKFxuICAgIC8vICAgICBgdXBkYXRlQ3VzdG9tSW50ZWdyYXRpb25zIG9ubHkgYWNjZXB0cyBhIGRpY3Rpb25hcnkgb2YgdGhlIHR5cGUgJHtKU09OLnN0cmluZ2lmeShcbiAgICAvLyAgICAgICBjdXN0b21JbnRlZ3JhdGlvbnNUeXBlXG4gICAgLy8gICAgICl9YFxuICAgIC8vICAgKTtcbiAgICAvLyAgIHJldHVybiB0aGlzO1xuICAgIC8vIH1cbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9VUERBVEVfQ1VTVE9NX0lOVEVHUkFUSU9OUyxcbiAgICAgIGludGVncmF0aW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLl9jdXN0b21JbnRlZ3JhdGlvbnMgPSBpbnRlZ3JhdGlvbnM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjdXN0b21UcmF5QnV0dG9ucygpIHtcbiAgICBtZXRob2ROb3RTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCk7XG4gICAgaWYgKHRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdjdXN0b21UcmF5QnV0dG9ucyBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGxPYmplY3QgbW9kZScpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jdXN0b21UcmF5QnV0dG9ucztcbiAgfVxuXG4gIHVwZGF0ZUN1c3RvbVRyYXlCdXR0b25zKGJ0bnMpIHtcbiAgICBtZXRob2ROb3RTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCk7XG4gICAgaWYgKHRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAndXBkYXRlQ3VzdG9tVHJheUJ1dHRvbnMgaXMgbm90IGF2YWlsYWJsZSBpbiBjYWxsT2JqZWN0IG1vZGUnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jYWxsU3RhdGUgIT09IERBSUxZX1NUQVRFX0pPSU5FRCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ3RoZSBtZWV0aW5nIG11c3QgYmUgam9pbmVkIGJlZm9yZSBjYWxsaW5nIHVwZGF0ZUN1c3RvbVRyYXlCdXR0b25zJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAoIXZhbGlkYXRlQ3VzdG9tVHJheUJ1dHRvbnMoYnRucykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGB1cGRhdGVDdXN0b21UcmF5QnV0dG9ucyBvbmx5IGFjY2VwdHMgYSBkaWN0aW9uYXJ5IG9mIHRoZSB0eXBlICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgY3VzdG9tVHJheUJ1dHRvbnNUeXBlXG4gICAgICAgICl9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9VUERBVEVfQ1VTVE9NX1RSQVlfQlVUVE9OUyxcbiAgICAgIGJ0bnMsXG4gICAgfSk7XG4gICAgdGhpcy5fY3VzdG9tVHJheUJ1dHRvbnMgPSBidG5zO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhlbWUoKSB7XG4gICAgaWYgKHRoaXMuX2NhbGxPYmplY3RNb2RlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCd0aGVtZSBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGxPYmplY3QgbW9kZScpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMudGhlbWU7XG4gIH1cblxuICBzZXRUaGVtZSh0aGVtZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUpIHtcbiAgICAgICAgcmVqZWN0KCdzZXRUaGVtZSBpcyBub3QgYXZhaWxhYmxlIGluIGNhbGxPYmplY3QgbW9kZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUHJvcGVydGllcyh7XG4gICAgICAgICAgdGhlbWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMudGhlbWUgPSB7XG4gICAgICAgICAgLi4udGhlbWUsXG4gICAgICAgIH07XG4gICAgICAgIC8vIFNlbmQgbWVzc2FnZSB0byBQcmVidWlsdCBVSSBJZnJhbWUgZHJpdmVyXG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKHtcbiAgICAgICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9TRVRfVEhFTUUsXG4gICAgICAgICAgdGhlbWU6IHRoaXMucHJvcGVydGllcy50aGVtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGb3Igc2ltcGxpY2l0eSwgZW1pdHRpbmcgdGhlbWUtdXBkYXRlZCBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgICAqIGxpc3RlbmluZyBmb3IgaXQgZnJvbSBQcmVidWlsdCAmIHJlLWVtaXR0aW5nIGl0LCBzaW5jZTpcbiAgICAgICAgICogLSB3ZSd2ZSBmdWxseSB2YWxpZGF0ZWQgdGhlIHRoZW1lLCBzbyB0aGVyZSdzIG5vIHJpc2sgb2YgaXQgbm90IGJlaW5nIGFwcGxpZWRcbiAgICAgICAgICogLSB3ZSBzZXQgYHRoaXMucHJvcGVydGllcy50aGVtZWAgZmlyc3QsIHNvIGluIGEgY3VzdG9tZXIncyBgdGhlbWUtdXBkYXRlZGBcbiAgICAgICAgICogICBoYW5kbGVyLCBhIGNhbGwgdG8gYHRoZW1lKClgIHdpbGwgcmV0dXJuIHRoZSBsYXRlc3QgdmFsdWVcbiAgICAgICAgICogLSB0aGlzIG1ldGhvZCBpcyB0aGUgb25seSB3YXkgYHRoZW1lLXVwZGF0ZWRgIGNhbiBjaGFuZ2VcbiAgICAgICAgICovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5lbWl0KERBSUxZX0VWRU5UX1RIRU1FX1VQREFURUQsIHtcbiAgICAgICAgICAgIGFjdGlvbjogREFJTFlfRVZFTlRfVEhFTUVfVVBEQVRFRCxcbiAgICAgICAgICAgIHRoZW1lOiB0aGlzLnByb3BlcnRpZXMudGhlbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImNvdWxkIG5vdCBlbWl0ICd0aGVtZS11cGRhdGVkJ1wiLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHRoaXMucHJvcGVydGllcy50aGVtZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRldGVjdEFsbEZhY2VzKCkge1xuICAgIG1ldGhvZE5vdFN1cHBvcnRlZEluUmVhY3ROYXRpdmUoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHtcbiAgICAgIGxldCBrID0gKG1zZykgPT4ge1xuICAgICAgICBkZWxldGUgbXNnLmFjdGlvbjtcbiAgICAgICAgZGVsZXRlIG1zZy5jYWxsYmFja1N0YW1wO1xuICAgICAgICByZXNvbHZlKG1zZyk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoXG4gICAgICAgIHsgYWN0aW9uOiBEQUlMWV9NRVRIT0RfREVURUNUX0FMTF9GQUNFUyB9LFxuICAgICAgICBrXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdEZ1bGxzY3JlZW4oKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9pZnJhbWUgfHxcbiAgICAgIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50IHx8XG4gICAgICAhaXNGdWxsc2NyZWVuU3VwcG9ydGVkKClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIChhd2FpdCB0aGlzLl9pZnJhbWUucmVxdWVzdEZ1bGxzY3JlZW4pXG4gICAgICAgID8gdGhpcy5faWZyYW1lLnJlcXVlc3RGdWxsc2NyZWVuKClcbiAgICAgICAgOiB0aGlzLl9pZnJhbWUud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IG1ha2UgdmlkZW8gY2FsbCBmdWxsc2NyZWVuJywgZSk7XG4gICAgfVxuICB9XG5cbiAgZXhpdEZ1bGxzY3JlZW4oKSB7XG4gICAgbWV0aG9kTm90U3VwcG9ydGVkSW5SZWFjdE5hdGl2ZSgpO1xuICAgIGlmIChkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCkge1xuICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50KSB7XG4gICAgICBkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJvb20oeyBpbmNsdWRlUm9vbUNvbmZpZ0RlZmF1bHRzID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAvLyBUaGUgY2FsbCBtYWNoaW5lIGJ1bmRsZSBpcyBsb2FkZWQgYW5kIGl0J3MgYWxyZWFkeSBnaXZlbiB1cyBhbiBhY2Nlc3NcbiAgICAvLyBzdGF0ZSAod2hpY2ggaXMgYmFzZWQgb24gcm9vbSBpbmZvKSwgc28gd2Uga25vdyBpdCBjYW4gYmUgcXVlcmllZCBmb3JcbiAgICAvLyByb29tIGluZm8uXG4gICAgaWYgKFxuICAgICAgdGhpcy5fYWNjZXNzU3RhdGUuYWNjZXNzICE9PSBEQUlMWV9BQ0NFU1NfVU5LTk9XTiAmJlxuICAgICAgIXRoaXMubmVlZHNMb2FkKClcbiAgICApIHtcbiAgICAgIC8vIFdlJ3ZlIHN1Y2Nlc2Z1bGx5IGpvaW4oKWVkIG9yIHByZUF1dGgoKWVkLCBzbyB3ZSBzaG91bGQgaGF2ZSByb29tIGluZm8uXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHtcbiAgICAgICAgbGV0IGsgPSAobXNnKSA9PiB7XG4gICAgICAgICAgZGVsZXRlIG1zZy5hY3Rpb247XG4gICAgICAgICAgZGVsZXRlIG1zZy5jYWxsYmFja1N0YW1wO1xuICAgICAgICAgIHJlc29sdmUobXNnKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoXG4gICAgICAgICAgeyBhY3Rpb246IERBSUxZX01FVEhPRF9ST09NLCBpbmNsdWRlUm9vbUNvbmZpZ0RlZmF1bHRzIH0sXG4gICAgICAgICAga1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldHVybiB0aGUgVVJMIG9mIHRoZSByb29tIHdlJ2xsIGJlIGluIGlmL3doZW4gd2Ugc3VjY2Vzc2Z1bGx5IGpvaW4oKSxcbiAgICAgIC8vIHNpbmNlIHdlIGhhdmUgbm8gb3RoZXIgcm9vbSBpbmZvIHRvIHNob3cgeWV0LlxuICAgICAgaWYgKHRoaXMucHJvcGVydGllcy51cmwpIHtcbiAgICAgICAgLy8gTk9URTogdGVjaG5pY2FsbHkgdGhpcyBzaG91bGQgYmUgY2FsbGVkIFwicm9vbVVybFBlbmRpbmdKb2luT3JQcmVhdXRoXCJcbiAgICAgICAgLy8gdG8gaW5kaWNhdGUgdGhhdCAqZWl0aGVyKiBhIGpvaW4oKSBvciBhIHByZUF1dGgoKSB3aWxsIGFsbG93IHlvdSB0b1xuICAgICAgICAvLyBhY2Nlc3Mgcm9vbSBpbmZvLCBidXQgcHJlQXV0aCgpIHdhcyBhZGRlZCBsYXRlciBhbmQgdGhpcyBuYW1lIHdhc1xuICAgICAgICAvLyBwcmVzZXJ2ZWQgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eTogaWYgYSBjb25zdW1lciBoYXNuJ3RcbiAgICAgICAgLy8gdXBkYXRlZCB0aGVpciBhcHAgdG8gdXNlIHByZUF1dGgoKSwgdGhleSdsbCBiZSBub25lIHRoZSB3aXNlci5cbiAgICAgICAgcmV0dXJuIHsgcm9vbVVybFBlbmRpbmdKb2luOiB0aGlzLnByb3BlcnRpZXMudXJsIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZW8oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgdXJsID0gJ2h0dHBzOi8vZ3MuZGFpbHkuY28vX2tzXy94LXN3c2wvOic7XG4gICAgICAgIGxldCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIHJlc29sdmUoeyBjdXJyZW50OiBkYXRhLmdlbyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2VvIGxvb2t1cCBmYWlsZWQnLCBlKTtcbiAgICAgICAgcmVzb2x2ZSh7IGN1cnJlbnQ6ICcnIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0TmV0d29ya1RvcG9sb2d5KG9wdHMpIHtcbiAgICBtZXRob2ROb3RTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBrID0gKG1zZykgPT4ge1xuICAgICAgICBpZiAobXNnLmVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KHsgZXJyb3I6IG1zZy5lcnJvciB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHsgd29ya2VySWQ6IG1zZy53b3JrZXJJZCB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgICB7IGFjdGlvbjogREFJTFlfTUVUSE9EX1NFVF9ORVRXT1JLX1RPUE9MT0dZLCBvcHRzIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXROZXR3b3JrVG9wb2xvZ3koKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBrID0gKG1zZykgPT4ge1xuICAgICAgICBpZiAobXNnLmVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KHsgZXJyb3I6IG1zZy5lcnJvciB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHsgdG9wb2xvZ3k6IG1zZy50b3BvbG9neSB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgICB7IGFjdGlvbjogREFJTFlfTUVUSE9EX0dFVF9ORVRXT1JLX1RPUE9MT0dZIH0sXG4gICAgICAgIGtcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRQbGF5TmV3UGFydGljaXBhbnRTb3VuZChhcmcpIHtcbiAgICBtZXRob2ROb3RTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCk7XG4gICAgaWYgKCEodHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHwgYXJnID09PSB0cnVlIHx8IGFyZyA9PT0gZmFsc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBhcmd1bWVudCB0byBzZXRTaG91bGRQbGF5TmV3UGFydGljaXBhbnRTb3VuZCBzaG91bGQgYmUgdHJ1ZSwgZmFsc2UsIG9yIGEgbnVtYmVyLCBidXQgaXMgJHthcmd9YFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoeyBhY3Rpb246IERBSUxZX01FVEhPRF9TRVRfUExBWV9ESU5HLCBhcmcgfSk7XG4gIH1cblxuICBvbihldmVudE5hbWUsIGspIHtcbiAgICB0aGlzLl9pbnB1dEV2ZW50c09uW2V2ZW50TmFtZV0gPSB7fTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9SRUdJU1RFUl9JTlBVVF9IQU5ETEVSLFxuICAgICAgb246IGV2ZW50TmFtZSxcbiAgICB9KTtcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2ZW50TmFtZSwgayk7XG4gIH1cblxuICAvLyB0b2RvOiBvbmNlIGlzIGFsbW9zdCBjZXJ0YWlubHkgaW1wbGVtZW50ZWQgaW5jb3JyZWN0bHkuIHJlYWQgdGhlXG4gIC8vIEV2ZW50RW1pdHRlciBzb3VyY2UgdG8gZmlndXJlIG91dCBob3cgdG8gZG8gdGhpcyBwcm9wZXJseS4gc2luY2VcbiAgLy8gb3ZlcnJpZGluZyBvbi9vZmYvb25jZSBhcmUgb3B0aW1pemF0aW9ucywgYW55d2F5LCB3ZSB3b24ndCB3b3JyeVxuICAvLyBhYm91dCBpdCByaWdodCBub3cuXG4gIG9uY2UoZXZlbnROYW1lLCBrKSB7XG4gICAgdGhpcy5faW5wdXRFdmVudHNPbltldmVudE5hbWVdID0ge307XG4gICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoe1xuICAgICAgYWN0aW9uOiBEQUlMWV9NRVRIT0RfUkVHSVNURVJfSU5QVVRfSEFORExFUixcbiAgICAgIG9uOiBldmVudE5hbWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZS5jYWxsKHRoaXMsIGV2ZW50TmFtZSwgayk7XG4gIH1cblxuICBvZmYoZXZlbnROYW1lLCBrKSB7XG4gICAgZGVsZXRlIHRoaXMuX2lucHV0RXZlbnRzT25bZXZlbnROYW1lXTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZSh7XG4gICAgICBhY3Rpb246IERBSUxZX01FVEhPRF9SRUdJU1RFUl9JTlBVVF9IQU5ETEVSLFxuICAgICAgb2ZmOiBldmVudE5hbWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmLmNhbGwodGhpcywgZXZlbnROYW1lLCBrKTtcbiAgfVxuXG4gIC8vXG4gIC8vIGludGVybmFsIG1ldGhvZHNcbiAgLy9cblxuICB2YWxpZGF0ZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgIGZvciAodmFyIGsgaW4gcHJvcGVydGllcykge1xuICAgICAgaWYgKCFGUkFNRV9QUk9QU1trXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVucmVjb2duaXplZCBwcm9wZXJ0eSAnJHtrfSdgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgRlJBTUVfUFJPUFNba10udmFsaWRhdGUgJiZcbiAgICAgICAgIUZSQU1FX1BST1BTW2tdLnZhbGlkYXRlKHByb3BlcnRpZXNba10sIHRoaXMpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9wZXJ0eSAnJHtrfSc6ICR7RlJBTUVfUFJPUFNba10uaGVscH1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3NlbWJsZU1lZXRpbmdVcmwoKSB7XG4gICAgLy8gaGFuZGxlIGNhc2Ugb2YgdXJsIHdpdGggcXVlcnkgc3RyaW5nIGFuZCB3aXRob3V0XG4gICAgbGV0IHByb3BzID0ge1xuICAgICAgICAuLi50aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGVtYjogdGhpcy5fY2FsbEZyYW1lSWQsXG4gICAgICAgIGVtYkhyZWY6IGVuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cubG9jYXRpb24uaHJlZiksXG4gICAgICB9LFxuICAgICAgZmlyc3RTZXAgPSBwcm9wcy51cmwubWF0Y2goL1xcPy8pID8gJyYnIDogJz8nLFxuICAgICAgdXJsID0gcHJvcHMudXJsLFxuICAgICAgdXJsUHJvcHMgPSBPYmplY3Qua2V5cyhGUkFNRV9QUk9QUykuZmlsdGVyKFxuICAgICAgICAocCkgPT4gRlJBTUVfUFJPUFNbcF0ucXVlcnlTdHJpbmcgJiYgcHJvcHNbcF0gIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICBsZXQgbmV3UXVlcnlTdHJpbmcgPSB1cmxQcm9wc1xuICAgICAgLm1hcCgocCkgPT4gYCR7RlJBTUVfUFJPUFNbcF0ucXVlcnlTdHJpbmd9PSR7cHJvcHNbcF19YClcbiAgICAgIC5qb2luKCcmJyk7XG4gICAgcmV0dXJuIHVybCArIGZpcnN0U2VwICsgbmV3UXVlcnlTdHJpbmc7XG4gIH1cblxuICAvLyBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgYmVsb3cgbWV0aG9kIHJldHVybnMgdHJ1ZSwgbG9hZCgpIG1heSBkZWNpZGUgdGhhdFxuICAvLyB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkbyAoZS5nLiBpbiB0aGUgY2FzZSB0aGF0IHRoZSBjYWxsIG9iamVjdCBoYXNcbiAgLy8gYWxyZWFkeSBiZWVuIGxvYWRlZCBvbmNlKSBhbmQgc2ltcGx5IGNhcnJ5IG91dCB0aGUgYXBwcm9wcmlhdGUgbWVldGluZ1xuICAvLyBzdGF0ZSB0cmFuc2l0aW9uLlxuICBuZWVkc0xvYWQoKSB7XG4gICAgLy8gTk9URTogVGhlICpvbmx5KiByZWFzb24gREFJTFlfU1RBVEVfTE9BRElORyBpcyBoZXJlIGlzIHRvIHByZXNlcnZlIGEgYnVnXG4gICAgLy8gdGhhdCBJIChAa29tcGZuZXIpIGFtIGEgYml0IGhlc2l0YW50IHRvIGZpeCB1bnRpbCBtb3JlIHRpbWUgY2FuIGJlXG4gICAgLy8gZGVkaWNhdGVkIHRvIGRvaW5nIHRoZSAqcmlnaHQqIGZpeC4gSWYgd2UncmUgaW4gREFJTFlfU1RBVEVfTE9BRElORywgd2VcbiAgICAvLyBwcm9iYWJseSAqc2hvdWxkbid0KiBsZXQgeW91IHRyaWdnZXIgYW5vdGhlciBsb2FkKCkgYW5kIGdldCBpbnRvIGEgd2VpcmRcbiAgICAvLyBzdGF0ZSwgYnV0IHRoaXMgaGFzIGJlZW4gbG9uZy1zdGFuZGluZyBiZWhhdmlvci4gVGhlIGFsdGVybmF0aXZlIHdvdWxkIG1lYW5cbiAgICAvLyB0aGF0LCBpZiBsb2FkKCkgZmFpbGVkIHNpbGVudGx5IGZvciBzb21lIHJlYXNvbiwgeW91IGNvdWxkbid0IHJlLXRyaWdnZXIgaXRcbiAgICAvLyBzaW5jZSB3ZSdkIGJlIHN0dWNrIGluIHRoZSBEQUlMWV9TVEFURV9MT0FESU5HIHN0YXRlLlxuICAgIHJldHVybiBbXG4gICAgICBEQUlMWV9TVEFURV9ORVcsXG4gICAgICBEQUlMWV9TVEFURV9MT0FESU5HLFxuICAgICAgREFJTFlfU1RBVEVfTEVGVCxcbiAgICAgIERBSUxZX1NUQVRFX0VSUk9SLFxuICAgIF0uaW5jbHVkZXModGhpcy5fY2FsbFN0YXRlKTtcbiAgfVxuXG4gIHNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShtZXNzYWdlLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX21lc3NhZ2VDaGFubmVsLnNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBjYWxsYmFjayxcbiAgICAgIHRoaXMuX2lmcmFtZSxcbiAgICAgIHRoaXMuX2NhbGxGcmFtZUlkXG4gICAgKTtcbiAgfVxuXG4gIC8vL1xuICAvLy8gVGhlIGJlbG93ICpwYWNrYWdlZE1lc3NhZ2UqIG1ldGhvZHMgZmFjaWxpdGF0ZSB3aXJpbmcgdXAgYSBEYWlseUlmcmFtZVxuICAvLy8gaW5zdGFuY2UgYXMgYSByZW1vdGUgZHJpdmVyIG9mIGFub3RoZXIgRGFpbHlJZnJhbWUgaW5zdGFuY2UsIGxpa2UgaW4gdGhlXG4gIC8vLyBuZXcgcHJlYnVpbHQgVUkgY2FzZSwgd2hlcmUgYW4gXCJvdXRlclwiIGNhbGxGcmFtZSBjb250cm9scyBhbiBcImlubmVyXCJcbiAgLy8vIGNhbGxPYmplY3QgdGhyb3VnaCBhbiBpbnRlcm1lZGlhdGUgaWZyYW1lZCBhcHAuXG4gIC8vL1xuXG4gIGZvcndhcmRQYWNrYWdlZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKG1zZykge1xuICAgIHRoaXMuX21lc3NhZ2VDaGFubmVsLmZvcndhcmRQYWNrYWdlZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKFxuICAgICAgbXNnLFxuICAgICAgdGhpcy5faWZyYW1lLFxuICAgICAgdGhpcy5fY2FsbEZyYW1lSWRcbiAgICApO1xuICB9XG5cbiAgYWRkTGlzdGVuZXJGb3JQYWNrYWdlZE1lc3NhZ2VzRnJvbUNhbGxNYWNoaW5lKGxpc3RlbmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VDaGFubmVsLmFkZExpc3RlbmVyRm9yUGFja2FnZWRNZXNzYWdlc0Zyb21DYWxsTWFjaGluZShcbiAgICAgIGxpc3RlbmVyLFxuICAgICAgdGhpcy5fY2FsbEZyYW1lSWRcbiAgICApO1xuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXJGb3JQYWNrYWdlZE1lc3NhZ2VzRnJvbUNhbGxNYWNoaW5lKGxpc3RlbmVySWQpIHtcbiAgICB0aGlzLl9tZXNzYWdlQ2hhbm5lbC5yZW1vdmVMaXN0ZW5lckZvclBhY2thZ2VkTWVzc2FnZXNGcm9tQ2FsbE1hY2hpbmUoXG4gICAgICBsaXN0ZW5lcklkXG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZU1lc3NhZ2VGcm9tQ2FsbE1hY2hpbmUobXNnKSB7XG4gICAgc3dpdGNoIChtc2cuYWN0aW9uKSB7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX0lGUkFNRV9SRUFEWV9GT1JfTEFVTkNIX0NPTkZJRzpcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVRvQ2FsbE1hY2hpbmUoe1xuICAgICAgICAgIGFjdGlvbjogREFJTFlfRVZFTlRfSUZSQU1FX0xBVU5DSF9DT05GSUcsXG4gICAgICAgICAgLi4udGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX0xPQURFRDpcbiAgICAgICAgaWYgKHRoaXMuX2xvYWRlZENhbGxiYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZGVkQ2FsbGJhY2soKTtcbiAgICAgICAgICB0aGlzLl9sb2FkZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwgbXNnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgZW1pdCcsIG1zZywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX0pPSU5FRF9NRUVUSU5HOlxuICAgICAgICBpZiAodGhpcy5fam9pbmVkQ2FsbGJhY2spIHtcbiAgICAgICAgICB0aGlzLl9qb2luZWRDYWxsYmFjayhtc2cucGFydGljaXBhbnRzKTtcbiAgICAgICAgICB0aGlzLl9qb2luZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwgbXNnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgZW1pdCcsIG1zZywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX1BBUlRJQ0lQQU5UX0pPSU5FRDpcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfUEFSVElDSVBBTlRfVVBEQVRFRDpcbiAgICAgICAgaWYgKHRoaXMuX2NhbGxTdGF0ZSA9PT0gREFJTFlfU1RBVEVfTEVGVCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobXNnLnBhcnRpY2lwYW50ICYmIG1zZy5wYXJ0aWNpcGFudC5zZXNzaW9uX2lkKSB7XG4gICAgICAgICAgbGV0IGlkID0gbXNnLnBhcnRpY2lwYW50LmxvY2FsID8gJ2xvY2FsJyA6IG1zZy5wYXJ0aWNpcGFudC5zZXNzaW9uX2lkO1xuICAgICAgICAgIGlmICh0aGlzLl9jYWxsT2JqZWN0TW9kZSkge1xuICAgICAgICAgICAgUGFydGljaXBhbnQuYWRkVHJhY2tzKG1zZy5wYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICBQYXJ0aWNpcGFudC5hZGRDdXN0b21UcmFja3MobXNnLnBhcnRpY2lwYW50KTtcbiAgICAgICAgICAgIFBhcnRpY2lwYW50LmFkZExlZ2FjeVRyYWNrcyhcbiAgICAgICAgICAgICAgbXNnLnBhcnRpY2lwYW50LFxuICAgICAgICAgICAgICB0aGlzLl9wYXJ0aWNpcGFudHNbaWRdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyB0cmFjayBldmVudHNcbiAgICAgICAgICAgIHRoaXMubWF5YmVFdmVudFRyYWNrU3RvcHBlZChcbiAgICAgICAgICAgICAgdGhpcy5fcGFydGljaXBhbnRzW2lkXSxcbiAgICAgICAgICAgICAgbXNnLnBhcnRpY2lwYW50LFxuICAgICAgICAgICAgICAnYXVkaW9UcmFjaydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLm1heWJlRXZlbnRUcmFja1N0b3BwZWQoXG4gICAgICAgICAgICAgIHRoaXMuX3BhcnRpY2lwYW50c1tpZF0sXG4gICAgICAgICAgICAgIG1zZy5wYXJ0aWNpcGFudCxcbiAgICAgICAgICAgICAgJ3ZpZGVvVHJhY2snXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5tYXliZUV2ZW50VHJhY2tTdG9wcGVkKFxuICAgICAgICAgICAgICB0aGlzLl9wYXJ0aWNpcGFudHNbaWRdLFxuICAgICAgICAgICAgICBtc2cucGFydGljaXBhbnQsXG4gICAgICAgICAgICAgICdzY3JlZW5WaWRlb1RyYWNrJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubWF5YmVFdmVudFRyYWNrU3RvcHBlZChcbiAgICAgICAgICAgICAgdGhpcy5fcGFydGljaXBhbnRzW2lkXSxcbiAgICAgICAgICAgICAgbXNnLnBhcnRpY2lwYW50LFxuICAgICAgICAgICAgICAnc2NyZWVuQXVkaW9UcmFjaydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLm1heWJlRXZlbnRUcmFja1N0YXJ0ZWQoXG4gICAgICAgICAgICAgIHRoaXMuX3BhcnRpY2lwYW50c1tpZF0sXG4gICAgICAgICAgICAgIG1zZy5wYXJ0aWNpcGFudCxcbiAgICAgICAgICAgICAgJ2F1ZGlvVHJhY2snXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5tYXliZUV2ZW50VHJhY2tTdGFydGVkKFxuICAgICAgICAgICAgICB0aGlzLl9wYXJ0aWNpcGFudHNbaWRdLFxuICAgICAgICAgICAgICBtc2cucGFydGljaXBhbnQsXG4gICAgICAgICAgICAgICd2aWRlb1RyYWNrJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubWF5YmVFdmVudFRyYWNrU3RhcnRlZChcbiAgICAgICAgICAgICAgdGhpcy5fcGFydGljaXBhbnRzW2lkXSxcbiAgICAgICAgICAgICAgbXNnLnBhcnRpY2lwYW50LFxuICAgICAgICAgICAgICAnc2NyZWVuVmlkZW9UcmFjaydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLm1heWJlRXZlbnRUcmFja1N0YXJ0ZWQoXG4gICAgICAgICAgICAgIHRoaXMuX3BhcnRpY2lwYW50c1tpZF0sXG4gICAgICAgICAgICAgIG1zZy5wYXJ0aWNpcGFudCxcbiAgICAgICAgICAgICAgJ3NjcmVlbkF1ZGlvVHJhY2snXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gY3VzdG9tIHRyYWNrcyAocHJlc3VtYWJseSB3ZSdsbCBkbyBhbGwgdHJhY2tzIGNvbnNpc3RlbnRseSBpbiB0aGVcbiAgICAgICAgICAgIC8vIGZ1dHVyZSwgcmVmYWN0b3JpbmcgdGhlIGFib3ZlIG1heWJlRXZlbnRUcmFjayogZXZlbnRzKVxuICAgICAgICAgICAgdGhpcy5tYXliZUV2ZW50VHJhY2tTdG9wcGVkRm9yQ3VzdG9tVHJhY2tzKFxuICAgICAgICAgICAgICB0aGlzLl9wYXJ0aWNpcGFudHNbaWRdLFxuICAgICAgICAgICAgICBtc2cucGFydGljaXBhbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLm1heWJlRXZlbnRUcmFja1N0YXJ0ZWRGb3JDdXN0b21UcmFja3MoXG4gICAgICAgICAgICAgIHRoaXMuX3BhcnRpY2lwYW50c1tpZF0sXG4gICAgICAgICAgICAgIG1zZy5wYXJ0aWNpcGFudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gcmVjb3JkaW5nIGV2ZW50c1xuICAgICAgICAgICAgdGhpcy5tYXliZUV2ZW50UmVjb3JkaW5nU3RvcHBlZChcbiAgICAgICAgICAgICAgdGhpcy5fcGFydGljaXBhbnRzW2lkXSxcbiAgICAgICAgICAgICAgbXNnLnBhcnRpY2lwYW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5tYXliZUV2ZW50UmVjb3JkaW5nU3RhcnRlZChcbiAgICAgICAgICAgICAgdGhpcy5fcGFydGljaXBhbnRzW2lkXSxcbiAgICAgICAgICAgICAgbXNnLnBhcnRpY2lwYW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3RyYWNrIGV2ZW50cyBlcnJvcicsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBwYXJ0aWNpcGFudCBqb2luZWQvdXBkYXRlZCBldmVudHNcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jb21wYXJlRXF1YWxGb3JQYXJ0aWNpcGFudFVwZGF0ZUV2ZW50KFxuICAgICAgICAgICAgICBtc2cucGFydGljaXBhbnQsXG4gICAgICAgICAgICAgIHRoaXMuX3BhcnRpY2lwYW50c1tpZF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnRpY2lwYW50c1tpZF0gPSB7IC4uLm1zZy5wYXJ0aWNpcGFudCB9O1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQYXJ0aWNpcGFudEF1ZGlvQmFzZWRPbk5hdGl2ZUF1ZGlvRm9jdXMoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1pdChtc2cuYWN0aW9uLCBtc2cpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGVtaXQnLCBtc2csIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfUEFSVElDSVBBTlRfTEVGVDpcbiAgICAgICAgaWYgKG1zZy5wYXJ0aWNpcGFudCAmJiBtc2cucGFydGljaXBhbnQuc2Vzc2lvbl9pZCkge1xuICAgICAgICAgIC8vIHRyYWNrIGV2ZW50c1xuICAgICAgICAgIGxldCBwcmV2UCA9IHRoaXMuX3BhcnRpY2lwYW50c1ttc2cucGFydGljaXBhbnQuc2Vzc2lvbl9pZF07XG4gICAgICAgICAgaWYgKHByZXZQKSB7XG4gICAgICAgICAgICB0aGlzLm1heWJlRXZlbnRUcmFja1N0b3BwZWQocHJldlAsIG51bGwsICdhdWRpb1RyYWNrJyk7XG4gICAgICAgICAgICB0aGlzLm1heWJlRXZlbnRUcmFja1N0b3BwZWQocHJldlAsIG51bGwsICd2aWRlb1RyYWNrJyk7XG4gICAgICAgICAgICB0aGlzLm1heWJlRXZlbnRUcmFja1N0b3BwZWQocHJldlAsIG51bGwsICdzY3JlZW5WaWRlb1RyYWNrJyk7XG4gICAgICAgICAgICB0aGlzLm1heWJlRXZlbnRUcmFja1N0b3BwZWQocHJldlAsIG51bGwsICdzY3JlZW5BdWRpb1RyYWNrJyk7XG4gICAgICAgICAgICB0aGlzLm1heWJlRXZlbnRUcmFja1N0b3BwZWRGb3JDdXN0b21UcmFja3MocHJldlAsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBkZWxldGUgZnJvbSBsb2NhbCBjYWNoXG4gICAgICAgICAgZGVsZXRlIHRoaXMuX3BhcnRpY2lwYW50c1ttc2cucGFydGljaXBhbnQuc2Vzc2lvbl9pZF07XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChtc2cuYWN0aW9uLCBtc2cpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgZW1pdCcsIG1zZywgZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9DT1VOVFNfVVBEQVRFRDpcbiAgICAgICAgaWYgKCFkZWVwRXF1YWwodGhpcy5fcGFydGljaXBhbnRDb3VudHMsIG1zZy5wYXJ0aWNpcGFudENvdW50cykpIHtcbiAgICAgICAgICB0aGlzLl9wYXJ0aWNpcGFudENvdW50cyA9IG1zZy5wYXJ0aWNpcGFudENvdW50cztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KG1zZy5hY3Rpb24sIG1zZyk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCBlbWl0JywgbXNnLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX0FDQ0VTU19TVEFURV9VUERBVEVEOiB7XG4gICAgICAgIGxldCBuZXdBY2Nlc3NTdGF0ZSA9IHtcbiAgICAgICAgICBhY2Nlc3M6IG1zZy5hY2Nlc3MsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChtc2cuYXdhaXRpbmdBY2Nlc3MpIHtcbiAgICAgICAgICBuZXdBY2Nlc3NTdGF0ZS5hd2FpdGluZ0FjY2VzcyA9IG1zZy5hd2FpdGluZ0FjY2VzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlZXBFcXVhbCh0aGlzLl9hY2Nlc3NTdGF0ZSwgbmV3QWNjZXNzU3RhdGUpKSB7XG4gICAgICAgICAgdGhpcy5fYWNjZXNzU3RhdGUgPSBuZXdBY2Nlc3NTdGF0ZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KG1zZy5hY3Rpb24sIG1zZyk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCBlbWl0JywgbXNnLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX01FRVRJTkdfU0VTU0lPTl9VUERBVEVEOlxuICAgICAgICBpZiAobXNnLm1lZXRpbmdTZXNzaW9uKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBtc2cuY2FsbEZyYW1lSWQ7XG4gICAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwgbXNnKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGVtaXQnLCBtc2csIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfRVJST1I6XG4gICAgICAgIGlmICh0aGlzLl9pZnJhbWUgJiYgIW1zZy5wcmVzZXJ2ZUlmcmFtZSkge1xuICAgICAgICAgIHRoaXMuX2lmcmFtZS5zcmMgPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVDYWxsU3RhdGUoREFJTFlfU1RBVEVfRVJST1IpO1xuICAgICAgICB0aGlzLnJlc2V0TWVldGluZ0RlcGVuZGVudFZhcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuX2xvYWRlZENhbGxiYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZGVkQ2FsbGJhY2sobXNnLmVycm9yTXNnKTtcbiAgICAgICAgICB0aGlzLl9sb2FkZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2pvaW5lZENhbGxiYWNrKSB7XG4gICAgICAgICAgdGhpcy5fam9pbmVkQ2FsbGJhY2sobnVsbCwgbXNnLmVycm9yTXNnKTtcbiAgICAgICAgICB0aGlzLl9qb2luZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgeyBwcmVzZXJ2ZUlmcmFtZSwgLi4uZXZlbnQgfSA9IG1zZztcbiAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwgZXZlbnQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCBlbWl0JywgbXNnLCBlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfTEVGVF9NRUVUSU5HOlxuICAgICAgICAvLyBpZiB3ZSd2ZSBsZWZ0IGR1ZSB0byBlcnJvciwgdGhlIGVycm9yIG1zZyBzaG91bGQgaGF2ZVxuICAgICAgICAvLyBhbHJlYWR5IGJlZW4gaGFuZGxlZCBhbmQgd2UgZG8gbm90IHdhbnQgdG8gb3ZlcnJpZGVcbiAgICAgICAgLy8gdGhlIHN0YXRlLlxuICAgICAgICBpZiAodGhpcy5fY2FsbFN0YXRlICE9PSBEQUlMWV9TVEFURV9FUlJPUikge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUNhbGxTdGF0ZShEQUlMWV9TVEFURV9MRUZUKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0TWVldGluZ0RlcGVuZGVudFZhcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuX3Jlc29sdmVMZWF2ZSkge1xuICAgICAgICAgIHRoaXMuX3Jlc29sdmVMZWF2ZSgpO1xuICAgICAgICAgIHRoaXMuX3Jlc29sdmVMZWF2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwgbXNnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgZW1pdCcsIG1zZywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX0lOUFVUX0VWRU5UOlxuICAgICAgICBsZXQgcCA9IHRoaXMuX3BhcnRpY2lwYW50c1ttc2cuc2Vzc2lvbl9pZF07XG4gICAgICAgIGlmICghcCkge1xuICAgICAgICAgIGlmIChtc2cuc2Vzc2lvbl9pZCA9PT0gdGhpcy5fcGFydGljaXBhbnRzLmxvY2FsLnNlc3Npb25faWQpIHtcbiAgICAgICAgICAgIHAgPSB0aGlzLl9wYXJ0aWNpcGFudHMubG9jYWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAgPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmVtaXQobXNnLmV2ZW50LnR5cGUsIHtcbiAgICAgICAgICAgIGFjdGlvbjogbXNnLmV2ZW50LnR5cGUsXG4gICAgICAgICAgICBldmVudDogbXNnLmV2ZW50LFxuICAgICAgICAgICAgcGFydGljaXBhbnQ6IHsgLi4ucCB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCBlbWl0JywgbXNnLCBlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfU0VMRUNURURfREVWSUNFU19VUERBVEVEOlxuICAgICAgICBpZiAobXNnLmRldmljZXMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KG1zZy5hY3Rpb24sIG1zZyk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCBlbWl0JywgbXNnLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX05FVFdPUktfUVVBTElUWV9DSEFOR0U6XG4gICAgICAgIGxldCB7IHRocmVzaG9sZCwgcXVhbGl0eSB9ID0gbXNnO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhyZXNob2xkICE9PSB0aGlzLl9uZXR3b3JrLnRocmVzaG9sZCB8fFxuICAgICAgICAgIHF1YWxpdHkgIT09IHRoaXMuX25ldHdvcmsucXVhbGl0eVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9uZXR3b3JrLnF1YWxpdHkgPSBxdWFsaXR5O1xuICAgICAgICAgIHRoaXMuX25ldHdvcmsudGhyZXNob2xkID0gdGhyZXNob2xkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwgbXNnKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGVtaXQnLCBtc2csIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfQUNUSVZFX1NQRUFLRVJfQ0hBTkdFOlxuICAgICAgICBsZXQgeyBhY3RpdmVTcGVha2VyIH0gPSBtc2c7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmVTcGVha2VyLnBlZXJJZCAhPT0gYWN0aXZlU3BlYWtlci5wZWVySWQpIHtcbiAgICAgICAgICB0aGlzLl9hY3RpdmVTcGVha2VyLnBlZXJJZCA9IGFjdGl2ZVNwZWFrZXIucGVlcklkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwge1xuICAgICAgICAgICAgICBhY3Rpb246IG1zZy5hY3Rpb24sXG4gICAgICAgICAgICAgIGFjdGl2ZVNwZWFrZXI6IHRoaXMuX2FjdGl2ZVNwZWFrZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGVtaXQnLCBtc2csIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfU0hPV19MT0NBTF9WSURFT19DSEFOR0VEOlxuICAgICAgICBpZiAodGhpcy5fY2FsbE9iamVjdE1vZGUpIHJldHVybjtcbiAgICAgICAgY29uc3QgeyBzaG93IH0gPSBtc2c7XG4gICAgICAgIHRoaXMuX3Nob3dMb2NhbFZpZGVvID0gc2hvdztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwge1xuICAgICAgICAgICAgYWN0aW9uOiBtc2cuYWN0aW9uLFxuICAgICAgICAgICAgc2hvdyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgZW1pdCcsIG1zZywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX0FDVElWRV9TUEVBS0VSX01PREVfQ0hBTkdFOlxuICAgICAgICBjb25zdCB7IGVuYWJsZWQgfSA9IG1zZztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVNwZWFrZXJNb2RlICE9PSBlbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5fYWN0aXZlU3BlYWtlck1vZGUgPSBlbmFibGVkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwge1xuICAgICAgICAgICAgICBhY3Rpb246IG1zZy5hY3Rpb24sXG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuX2FjdGl2ZVNwZWFrZXJNb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCBlbWl0JywgbXNnLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX1dBSVRJTkdfUEFSVElDSVBBTlRfQURERUQ6XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX1dBSVRJTkdfUEFSVElDSVBBTlRfVVBEQVRFRDpcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfV0FJVElOR19QQVJUSUNJUEFOVF9SRU1PVkVEOlxuICAgICAgICB0aGlzLl93YWl0aW5nUGFydGljaXBhbnRzID0gbXNnLmFsbFdhaXRpbmdQYXJ0aWNpcGFudHM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5lbWl0KG1zZy5hY3Rpb24sIHtcbiAgICAgICAgICAgIGFjdGlvbjogbXNnLmFjdGlvbixcbiAgICAgICAgICAgIHBhcnRpY2lwYW50OiBtc2cucGFydGljaXBhbnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGVtaXQnLCBtc2csIGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9SRUNFSVZFX1NFVFRJTkdTX1VQREFURUQ6XG4gICAgICAgIC8vIE5PVEU6IGRvaW5nIGVxdWFsaXR5IGNoZWNrIGhlcmUgcmF0aGVyIHRoYW4gYmVmb3JlIHNlbmRpbmcgbWVzc2FnZSBpblxuICAgICAgICAvLyB0aGUgZmlyc3QgcGxhY2UgZnJvbSBjYWxsIG1hY2hpbmUsIHRvIHNpbXBsaWZ5IGhhbmRsaW5nIGluaXRpYWxcbiAgICAgICAgLy8gcmVjZWl2ZSBzZXR0aW5nc1xuICAgICAgICBpZiAoIWRlZXBFcXVhbCh0aGlzLl9yZWNlaXZlU2V0dGluZ3MsIG1zZy5yZWNlaXZlU2V0dGluZ3MpKSB7XG4gICAgICAgICAgdGhpcy5fcmVjZWl2ZVNldHRpbmdzID0gbXNnLnJlY2VpdmVTZXR0aW5ncztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KG1zZy5hY3Rpb24sIHtcbiAgICAgICAgICAgICAgYWN0aW9uOiBtc2cuYWN0aW9uLFxuICAgICAgICAgICAgICByZWNlaXZlU2V0dGluZ3M6IG1zZy5yZWNlaXZlU2V0dGluZ3MsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGVtaXQnLCBtc2csIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfSU5QVVRfU0VUVElOR1NfVVBEQVRFRDpcbiAgICAgICAgLy8gTk9URTogZG9pbmcgZXF1YWxpdHkgY2hlY2sgaGVyZSByYXRoZXIgdGhhbiBiZWZvcmUgc2VuZGluZyBtZXNzYWdlIGluXG4gICAgICAgIC8vIHRoZSBmaXJzdCBwbGFjZSBmcm9tIGNhbGwgbWFjaGluZSwgdG8gc2ltcGxpZnkgaGFuZGxpbmcgaW5pdGlhbFxuICAgICAgICAvLyBpbnB1dCBzZXR0aW5nc1xuICAgICAgICBpZiAoIWRlZXBFcXVhbCh0aGlzLl9pbnB1dFNldHRpbmdzLCBtc2cuaW5wdXRTZXR0aW5ncykpIHtcbiAgICAgICAgICB0aGlzLl9pbnB1dFNldHRpbmdzID0gbXNnLmlucHV0U2V0dGluZ3M7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChtc2cuYWN0aW9uLCB7XG4gICAgICAgICAgICAgIGFjdGlvbjogbXNnLmFjdGlvbixcbiAgICAgICAgICAgICAgaW5wdXRTZXR0aW5nczogbXNnLmlucHV0U2V0dGluZ3MsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGVtaXQnLCBtc2csIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfUkVNT1RFX01FRElBX1BMQVlFUl9TVEFSVEVEOlxuICAgICAgICB7XG4gICAgICAgICAgbGV0IHBhcnRpY2lwYW50SWQgPSBtc2cuc2Vzc2lvbl9pZDtcbiAgICAgICAgICB0aGlzLl9ybXBQbGF5ZXJTdGF0ZVtwYXJ0aWNpcGFudElkXSA9IG1zZy5wbGF5ZXJTdGF0ZTtcbiAgICAgICAgICB0aGlzLmVtaXREYWlseUpTRXZlbnQobXNnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9SRU1PVEVfTUVESUFfUExBWUVSX1NUT1BQRUQ6XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9ybXBQbGF5ZXJTdGF0ZVttc2cuc2Vzc2lvbl9pZF07XG4gICAgICAgIHRoaXMuZW1pdERhaWx5SlNFdmVudChtc2cpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9SRU1PVEVfTUVESUFfUExBWUVSX1VQREFURUQ6XG4gICAgICAgIHtcbiAgICAgICAgICBsZXQgcGFydGljaXBhbnRJZCA9IG1zZy5zZXNzaW9uX2lkO1xuICAgICAgICAgIGxldCBybXBQbGF5ZXJTdGF0ZSA9IHRoaXMuX3JtcFBsYXllclN0YXRlW3BhcnRpY2lwYW50SWRdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFybXBQbGF5ZXJTdGF0ZSB8fFxuICAgICAgICAgICAgIXRoaXMuY29tcGFyZUVxdWFsRm9yUk1QVXBkYXRlRXZlbnQoXG4gICAgICAgICAgICAgIHJtcFBsYXllclN0YXRlLFxuICAgICAgICAgICAgICBtc2cucmVtb3RlTWVkaWFQbGF5ZXJTdGF0ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fcm1wUGxheWVyU3RhdGVbcGFydGljaXBhbnRJZF0gPSBtc2cucmVtb3RlTWVkaWFQbGF5ZXJTdGF0ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdERhaWx5SlNFdmVudChtc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfQ1VTVE9NX0JVVFRPTl9DTElDSzpcbiAgICAgICAgdGhpcy5lbWl0RGFpbHlKU0V2ZW50KG1zZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9NRUVUSU5HX1NFU1NJT05fU1RBVEVfVVBEQVRFRDpcbiAgICAgICAgdGhpcy5fbWVldGluZ1Nlc3Npb25TdGF0ZSA9IG1zZy5tZWV0aW5nU2Vzc2lvblN0YXRlO1xuICAgICAgICB0aGlzLmVtaXREYWlseUpTRXZlbnQobXNnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX1JFQ09SRElOR19TVEFSVEVEOlxuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9SRUNPUkRJTkdfU1RPUFBFRDpcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfUkVDT1JESU5HX1NUQVRTOlxuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9SRUNPUkRJTkdfRVJST1I6XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX1JFQ09SRElOR19VUExPQURfQ09NUExFVEVEOlxuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9UUkFOU0NSSVBUSU9OX1NUQVJURUQ6XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX1RSQU5TQ1JJUFRJT05fU1RPUFBFRDpcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfVFJBTlNDUklQVElPTl9FUlJPUjpcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfU1RBUlRFRF9DQU1FUkE6XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX0NBTUVSQV9FUlJPUjpcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfQVBQX01TRzpcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfTE9DQUxfU0NSRUVOX1NIQVJFX1NUQVJURUQ6XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX0xPQ0FMX1NDUkVFTl9TSEFSRV9TVE9QUEVEOlxuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9ORVRXT1JLX0NPTk5FQ1RJT046XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX1JFQ09SRElOR19EQVRBOlxuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9MSVZFX1NUUkVBTUlOR19TVEFSVEVEOlxuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9MSVZFX1NUUkVBTUlOR19TVE9QUEVEOlxuICAgICAgY2FzZSBEQUlMWV9FVkVOVF9MSVZFX1NUUkVBTUlOR19FUlJPUjpcbiAgICAgIGNhc2UgREFJTFlfRVZFTlRfTk9ORkFUQUxfRVJST1I6XG4gICAgICBjYXNlIERBSUxZX0VWRU5UX0xBTkdfVVBEQVRFRDpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmVtaXQobXNnLmFjdGlvbiwgbXNnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgZW1pdCcsIG1zZywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBSUxZX1VJX1JFUVVFU1RfRlVMTFNDUkVFTjpcbiAgICAgICAgdGhpcy5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREFJTFlfVUlfRVhJVF9GVUxMU0NSRUVOOlxuICAgICAgICB0aGlzLmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gbm8gb3BcbiAgICB9XG4gIH1cblxuICBtYXliZUV2ZW50UmVjb3JkaW5nU3RvcHBlZChwcmV2UCwgdGhpc1ApIHtcbiAgICBjb25zdCBrZXkgPSAncmVjb3JkJztcbiAgICBpZiAoIXByZXZQKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpc1AubG9jYWwgJiYgdGhpc1Bba2V5XSA9PT0gZmFsc2UgJiYgcHJldlBba2V5XSAhPT0gdGhpc1Bba2V5XSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbWl0KERBSUxZX0VWRU5UX1JFQ09SRElOR19TVE9QUEVELCB7XG4gICAgICAgICAgYWN0aW9uOiBEQUlMWV9FVkVOVF9SRUNPUkRJTkdfU1RPUFBFRCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgZW1pdCcsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1heWJlRXZlbnRSZWNvcmRpbmdTdGFydGVkKHByZXZQLCB0aGlzUCkge1xuICAgIGNvbnN0IGtleSA9ICdyZWNvcmQnO1xuICAgIGlmICghcHJldlApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzUC5sb2NhbCAmJiB0aGlzUFtrZXldID09PSB0cnVlICYmIHByZXZQW2tleV0gIT09IHRoaXNQW2tleV0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW1pdChEQUlMWV9FVkVOVF9SRUNPUkRJTkdfU1RBUlRFRCwge1xuICAgICAgICAgIGFjdGlvbjogREFJTFlfRVZFTlRfUkVDT1JESU5HX1NUQVJURUQsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGVtaXQnLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXliZUV2ZW50VHJhY2tTdG9wcGVkKHByZXZQLCB0aGlzUCwga2V5KSB7XG4gICAgaWYgKCFwcmV2UCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAocHJldlBba2V5XSAmJiBwcmV2UFtrZXldLnJlYWR5U3RhdGUgPT09ICdlbmRlZCcpIHx8XG4gICAgICAocHJldlBba2V5XSAmJiAhKHRoaXNQICYmIHRoaXNQW2tleV0pKSB8fFxuICAgICAgKHByZXZQW2tleV0gJiYgcHJldlBba2V5XS5pZCAhPT0gdGhpc1Bba2V5XS5pZClcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW1pdChEQUlMWV9FVkVOVF9UUkFDS19TVE9QUEVELCB7XG4gICAgICAgICAgYWN0aW9uOiBEQUlMWV9FVkVOVF9UUkFDS19TVE9QUEVELFxuICAgICAgICAgIHRyYWNrOiBwcmV2UFtrZXldLFxuICAgICAgICAgIHBhcnRpY2lwYW50OiB0aGlzUCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgZW1pdCcsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1heWJlRXZlbnRDdXN0b21UcmFja1N0b3BwZWQocHJldlRyYWNrLCB0aGlzVHJhY2ssIHRoaXNQKSB7XG4gICAgaWYgKCFwcmV2VHJhY2spIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKHByZXZUcmFjayAmJiBwcmV2VHJhY2sucmVhZHlTdGF0ZSA9PT0gJ2VuZGVkJykgfHxcbiAgICAgIChwcmV2VHJhY2sgJiYgIXRoaXNUcmFjaykgfHxcbiAgICAgIChwcmV2VHJhY2sgJiYgcHJldlRyYWNrLmlkICE9PSB0aGlzVHJhY2suaWQpXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmVtaXQoREFJTFlfRVZFTlRfVFJBQ0tfU1RPUFBFRCwge1xuICAgICAgICAgIGFjdGlvbjogREFJTFlfRVZFTlRfVFJBQ0tfU1RPUFBFRCxcbiAgICAgICAgICB0cmFjazogcHJldlRyYWNrLFxuICAgICAgICAgIHBhcnRpY2lwYW50OiB0aGlzUCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdtYXliZUV2ZW50Q3VzdG9tVHJhY2tTdG9wcGVkOiBjb3VsZCBub3QgZW1pdCcsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1heWJlRXZlbnRDdXN0b21UcmFja1N0YXJ0ZWQocHJldlRyYWNrLCB0aGlzVHJhY2ssIHRoaXNQKSB7XG4gICAgaWYgKFxuICAgICAgKHRoaXNUcmFjayAmJiAhcHJldlRyYWNrKSB8fFxuICAgICAgKHRoaXNUcmFjayAmJiBwcmV2VHJhY2sucmVhZHlTdGF0ZSA9PT0gJ2VuZGVkJykgfHxcbiAgICAgICh0aGlzVHJhY2sgJiYgdGhpc1RyYWNrLmlkICE9PSBwcmV2VHJhY2suaWQpXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmVtaXQoREFJTFlfRVZFTlRfVFJBQ0tfU1RBUlRFRCwge1xuICAgICAgICAgIGFjdGlvbjogREFJTFlfRVZFTlRfVFJBQ0tfU1RBUlRFRCxcbiAgICAgICAgICB0cmFjazogdGhpc1RyYWNrLFxuICAgICAgICAgIHBhcnRpY2lwYW50OiB0aGlzUCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdtYXliZUV2ZW50Q3VzdG9tVHJhY2tTdGFydGVkOiBjb3VsZCBub3QgZW1pdCcsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1heWJlRXZlbnRUcmFja1N0YXJ0ZWQocHJldlAsIHRoaXNQLCBrZXkpIHtcbiAgICBpZiAoXG4gICAgICAodGhpc1Bba2V5XSAmJiAhKHByZXZQICYmIHByZXZQW2tleV0pKSB8fFxuICAgICAgKHRoaXNQW2tleV0gJiYgcHJldlBba2V5XS5yZWFkeVN0YXRlID09PSAnZW5kZWQnKSB8fFxuICAgICAgKHRoaXNQW2tleV0gJiYgdGhpc1Bba2V5XS5pZCAhPT0gcHJldlBba2V5XS5pZClcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW1pdChEQUlMWV9FVkVOVF9UUkFDS19TVEFSVEVELCB7XG4gICAgICAgICAgYWN0aW9uOiBEQUlMWV9FVkVOVF9UUkFDS19TVEFSVEVELFxuICAgICAgICAgIHRyYWNrOiB0aGlzUFtrZXldLFxuICAgICAgICAgIHBhcnRpY2lwYW50OiB0aGlzUCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgZW1pdCcsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1heWJlRXZlbnRUcmFja1N0b3BwZWRGb3JDdXN0b21UcmFja3MocHJldlAsIHRoaXNQKSB7XG4gICAgaWYgKCFwcmV2UCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHRyYWNrS2V5IGluIHByZXZQLnRyYWNrcykge1xuICAgICAgLy8gd2UgbWlnaHQgYmUgYWJsZSB0byB1c2UgdGhpcyBsb2dpYyBmb3IgYWxsIHRyYWNrcywgbm90IGp1c3QgYWRkaXRpb25hbCxcbiAgICAgIC8vIG5vbi1zdGFuZGFyZCB0cmFja3MuIGJ1dCBmb3Igbm93LCB3ZSdsbCBvbmx5IGhhbmRsZSB0aGUgbm9uLXN0YW5kYXJkXG4gICAgICAvLyB0cmFja3NcbiAgICAgIGlmIChQYXJ0aWNpcGFudC5pc1ByZWRlZmluZWRUcmFjayh0cmFja0tleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLm1heWJlRXZlbnRDdXN0b21UcmFja1N0b3BwZWQoXG4gICAgICAgIHByZXZQLnRyYWNrc1t0cmFja0tleV0udHJhY2ssXG4gICAgICAgIHRoaXNQICYmIHRoaXNQLnRyYWNrc1t0cmFja0tleV0gPyB0aGlzUC50cmFja3NbdHJhY2tLZXldLnRyYWNrIDogbnVsbCxcbiAgICAgICAgdGhpc1BcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbWF5YmVFdmVudFRyYWNrU3RhcnRlZEZvckN1c3RvbVRyYWNrcyhwcmV2UCwgdGhpc1ApIHtcbiAgICBpZiAoIXRoaXNQKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgdHJhY2tLZXkgaW4gdGhpc1AudHJhY2tzKSB7XG4gICAgICAvLyB3ZSBtaWdodCBiZSBhYmxlIHRvIHVzZSB0aGlzIGxvZ2ljIGZvciBhbGwgdHJhY2tzLCBub3QganVzdCBhZGRpdGlvbmFsLFxuICAgICAgLy8gbm9uLXN0YW5kYXJkIHRyYWNrcy4gYnV0IGZvciBub3csIHdlJ2xsIG9ubHkgaGFuZGxlIHRoZSBub24tc3RhbmRhcmRcbiAgICAgIC8vIHRyYWNrc1xuICAgICAgaWYgKFBhcnRpY2lwYW50LmlzUHJlZGVmaW5lZFRyYWNrKHRyYWNrS2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWF5YmVFdmVudEN1c3RvbVRyYWNrU3RhcnRlZChcbiAgICAgICAgcHJldlAgJiYgcHJldlAudHJhY2tzW3RyYWNrS2V5XSA/IHByZXZQLnRyYWNrc1t0cmFja0tleV0udHJhY2sgOiBudWxsLFxuICAgICAgICB0aGlzUC50cmFja3NbdHJhY2tLZXldLnRyYWNrLFxuICAgICAgICB0aGlzUFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb21wYXJlRXF1YWxGb3JSTVBVcGRhdGVFdmVudChhLCBiKSB7XG4gICAgaWYgKGEuc3RhdGUgPT09IGIuc3RhdGUgJiYgYS5zZXR0aW5ncz8udm9sdW1lID09PSBiLnNldHRpbmdzPy52b2x1bWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBlbWl0RGFpbHlKU0V2ZW50KG1zZykge1xuICAgIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW1pdChtc2cuYWN0aW9uLCBtc2cpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGVtaXQnLCBtc2csIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbXBhcmVFcXVhbEZvclBhcnRpY2lwYW50VXBkYXRlRXZlbnQoYSwgYikge1xuICAgIGlmICghZGVlcEVxdWFsKGEsIGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGEudmlkZW9UcmFjayAmJlxuICAgICAgYi52aWRlb1RyYWNrICYmXG4gICAgICAoYS52aWRlb1RyYWNrLmlkICE9PSBiLnZpZGVvVHJhY2suaWQgfHxcbiAgICAgICAgYS52aWRlb1RyYWNrLm11dGVkICE9PSBiLnZpZGVvVHJhY2subXV0ZWQgfHxcbiAgICAgICAgYS52aWRlb1RyYWNrLmVuYWJsZWQgIT09IGIudmlkZW9UcmFjay5lbmFibGVkKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhLmF1ZGlvVHJhY2sgJiZcbiAgICAgIGIuYXVkaW9UcmFjayAmJlxuICAgICAgKGEuYXVkaW9UcmFjay5pZCAhPT0gYi5hdWRpb1RyYWNrLmlkIHx8XG4gICAgICAgIGEuYXVkaW9UcmFjay5tdXRlZCAhPT0gYi5hdWRpb1RyYWNrLm11dGVkIHx8XG4gICAgICAgIGEuYXVkaW9UcmFjay5lbmFibGVkICE9PSBiLmF1ZGlvVHJhY2suZW5hYmxlZClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBuYXRpdmVVdGlscygpIHtcbiAgICBpZiAoIWlzUmVhY3ROYXRpdmUoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgRGFpbHlOYXRpdmVVdGlscyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ2luIFJlYWN0IE5hdGl2ZSwgRGFpbHlOYXRpdmVVdGlscyBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUnXG4gICAgICApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBEYWlseU5hdGl2ZVV0aWxzO1xuICB9XG5cbiAgdXBkYXRlSXNQcmVwYXJpbmdUb0pvaW4oaXNQcmVwYXJpbmdUb0pvaW4pIHtcbiAgICB0aGlzLl91cGRhdGVDYWxsU3RhdGUodGhpcy5fY2FsbFN0YXRlLCBpc1ByZXBhcmluZ1RvSm9pbik7XG4gIH1cblxuICBfdXBkYXRlQ2FsbFN0YXRlKGNhbGxTdGF0ZSwgaXNQcmVwYXJpbmdUb0pvaW4gPSB0aGlzLl9pc1ByZXBhcmluZ1RvSm9pbikge1xuICAgIC8vIElmIHN0YXRlIGhhc24ndCBjaGFuZ2VkLCBiYWlsXG4gICAgaWYgKFxuICAgICAgY2FsbFN0YXRlID09PSB0aGlzLl9jYWxsU3RhdGUgJiZcbiAgICAgIGlzUHJlcGFyaW5nVG9Kb2luID09PSB0aGlzLl9pc1ByZXBhcmluZ1RvSm9pblxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBzdGF0ZVxuICAgIGNvbnN0IG9sZE1lZXRpbmdTdGF0ZSA9IHRoaXMuX2NhbGxTdGF0ZTtcbiAgICBjb25zdCBvbGRJc1ByZXBhcmluZ1RvSm9pbiA9IHRoaXMuX2lzUHJlcGFyaW5nVG9Kb2luO1xuICAgIHRoaXMuX2NhbGxTdGF0ZSA9IGNhbGxTdGF0ZTtcbiAgICB0aGlzLl9pc1ByZXBhcmluZ1RvSm9pbiA9IGlzUHJlcGFyaW5nVG9Kb2luO1xuXG4gICAgLy8gVXBkYXRlIHN0YXRlIHNpZGUtZWZmZWN0cyAod2hpY2gsIGZvciBub3csIGFsbCBkZXBlbmQgb24gd2hldGhlclxuICAgIC8vIF9pc0NhbGxQZW5kaW5nT3JPbmdvaW5nKVxuICAgIGNvbnN0IG9sZElzTWVldGluZ1BlbmRpbmdPck9uZ29pbmcgPSB0aGlzLl9pc0NhbGxQZW5kaW5nT3JPbmdvaW5nKFxuICAgICAgb2xkTWVldGluZ1N0YXRlLFxuICAgICAgb2xkSXNQcmVwYXJpbmdUb0pvaW5cbiAgICApO1xuICAgIGNvbnN0IF9pc0NhbGxQZW5kaW5nT3JPbmdvaW5nID0gdGhpcy5faXNDYWxsUGVuZGluZ09yT25nb2luZyhcbiAgICAgIHRoaXMuX2NhbGxTdGF0ZSxcbiAgICAgIHRoaXMuX2lzUHJlcGFyaW5nVG9Kb2luXG4gICAgKTtcbiAgICBpZiAob2xkSXNNZWV0aW5nUGVuZGluZ09yT25nb2luZyA9PT0gX2lzQ2FsbFBlbmRpbmdPck9uZ29pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVLZWVwRGV2aWNlQXdha2UoX2lzQ2FsbFBlbmRpbmdPck9uZ29pbmcpO1xuICAgIHRoaXMudXBkYXRlRGV2aWNlQXVkaW9Nb2RlKF9pc0NhbGxQZW5kaW5nT3JPbmdvaW5nKTtcbiAgICB0aGlzLnVwZGF0ZVNob3dBbmRyb2lkT25nb2luZ01lZXRpbmdOb3RpZmljYXRpb24oX2lzQ2FsbFBlbmRpbmdPck9uZ29pbmcpO1xuICAgIHRoaXMudXBkYXRlTm9PcFJlY29yZGluZ0Vuc3VyaW5nQmFja2dyb3VuZENvbnRpbnVpdHkoXG4gICAgICBfaXNDYWxsUGVuZGluZ09yT25nb2luZ1xuICAgICk7XG4gIH1cblxuICAvLyBUbyBiZSBpbnZva2VkIHRoaXMgd2hlbiBsZWF2aW5nIG9yIGVycm9yaW5nIG91dCBvZiBhIG1lZXRpbmcuXG4gIC8vIE5PVEUgKFBhdWwsIDIwMjEtMDEtMDcpOiB0aGlzIGNvdWxkIHByb2JhYmx5IGJlIGV4cGFuZGVkIHRvIHJlc2V0ICphbGwqXG4gIC8vIG1lZXRpbmctZGVwZW5kZW50IHZhcnMsIGJ1dCBzdGFydGluZyB3aXRoIHRoaXMgdGFyZ2V0ZWQgc21hbGwgc2V0IHdoaWNoXG4gIC8vIHdlcmUgYmVpbmcgcmVzZXQgcHJvcGVybHkgb24gbGVhdmUoKSBidXQgbm90IHdoZW4gbGVhdmluZyB2aWEgcHJlYnVpbHQgdWkuXG4gIHJlc2V0TWVldGluZ0RlcGVuZGVudFZhcnMoKSB7XG4gICAgdGhpcy5fcGFydGljaXBhbnRzID0ge307XG4gICAgdGhpcy5fcGFydGljaXBhbnRDb3VudHMgPSBFTVBUWV9QQVJUSUNJUEFOVF9DT1VOVFM7XG4gICAgdGhpcy5fd2FpdGluZ1BhcnRpY2lwYW50cyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZVNwZWFrZXIgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmVTcGVha2VyTW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuX2RpZFByZUF1dGggPSBmYWxzZTtcbiAgICB0aGlzLl9hY2Nlc3NTdGF0ZSA9IHsgYWNjZXNzOiBEQUlMWV9BQ0NFU1NfVU5LTk9XTiB9O1xuICAgIHRoaXMuX21lZXRpbmdTZXNzaW9uU3RhdGUgPSBERUZBVUxUX1NFU1NJT05fU1RBVEU7XG4gICAgdGhpcy5fcmVjZWl2ZVNldHRpbmdzID0ge307XG4gICAgdGhpcy5faW5wdXRTZXR0aW5ncyA9IHt9O1xuICAgIHJlc2V0UHJlbG9hZENhY2hlKHRoaXMuX3ByZWxvYWRDYWNoZSk7XG4gIH1cblxuICB1cGRhdGVLZWVwRGV2aWNlQXdha2Uoa2VlcEF3YWtlKSB7XG4gICAgaWYgKCFpc1JlYWN0TmF0aXZlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5uYXRpdmVVdGlscygpLnNldEtlZXBEZXZpY2VBd2FrZShrZWVwQXdha2UsIHRoaXMuX2NhbGxGcmFtZUlkKTtcbiAgfVxuXG4gIHVwZGF0ZURldmljZUF1ZGlvTW9kZSh1c2VJbkNhbGxBdWRpb01vZGUpIHtcbiAgICBpZiAoXG4gICAgICAhaXNSZWFjdE5hdGl2ZSgpIHx8XG4gICAgICB0aGlzLmRpc2FibGVSZWFjdE5hdGl2ZUF1dG9EZXZpY2VNYW5hZ2VtZW50KCdhdWRpbycpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGF1ZGlvTW9kZSA9IHVzZUluQ2FsbEF1ZGlvTW9kZVxuICAgICAgPyB0aGlzLl9uYXRpdmVJbkNhbGxBdWRpb01vZGVcbiAgICAgIDogTkFUSVZFX0FVRElPX01PREVfSURMRTtcbiAgICB0aGlzLm5hdGl2ZVV0aWxzKCkuc2V0QXVkaW9Nb2RlKGF1ZGlvTW9kZSk7XG4gIH1cblxuICAvLyBOb3RlOiBub3RpZmljYXRpb24gcHJvcGVydGllcyBjYW4ndCBiZSBjaGFuZ2VkIHdoaWxlIGl0IGlzIG9uZ29pbmdcbiAgdXBkYXRlU2hvd0FuZHJvaWRPbmdvaW5nTWVldGluZ05vdGlmaWNhdGlvbihzaG93Tm90aWZpY2F0aW9uKSB7XG4gICAgLy8gQ2hlY2sgdGhhdCB3ZSdyZSBSZWFjdCBOYXRpdmUgYW5kIHRoYXQgdGhlIEFuZHJvaWQtb25seSBtZXRob2QgZXhpc3RzXG4gICAgaWYgKFxuICAgICAgIShpc1JlYWN0TmF0aXZlKCkgJiYgdGhpcy5uYXRpdmVVdGlscygpLnNldFNob3dPbmdvaW5nTWVldGluZ05vdGlmaWNhdGlvbilcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVXNlIGN1cnJlbnQgdGhpcy5wcm9wZXJ0aWVzIHRvIGN1c3RvbWl6ZSBub3RpZmljYXRpb24gYmVoYXZpb3JcbiAgICBsZXQgdGl0bGUsIHN1YnRpdGxlLCBpY29uTmFtZSwgZGlzYWJsZUZvckN1c3RvbU92ZXJyaWRlO1xuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcGVydGllcy5yZWFjdE5hdGl2ZUNvbmZpZyAmJlxuICAgICAgdGhpcy5wcm9wZXJ0aWVzLnJlYWN0TmF0aXZlQ29uZmlnLmFuZHJvaWRJbkNhbGxOb3RpZmljYXRpb25cbiAgICApIHtcbiAgICAgICh7IHRpdGxlLCBzdWJ0aXRsZSwgaWNvbk5hbWUsIGRpc2FibGVGb3JDdXN0b21PdmVycmlkZSB9ID1cbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzLnJlYWN0TmF0aXZlQ29uZmlnLmFuZHJvaWRJbkNhbGxOb3RpZmljYXRpb24pO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZUZvckN1c3RvbU92ZXJyaWRlKSB7XG4gICAgICBzaG93Tm90aWZpY2F0aW9uID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMubmF0aXZlVXRpbHMoKS5zZXRTaG93T25nb2luZ01lZXRpbmdOb3RpZmljYXRpb24oXG4gICAgICBzaG93Tm90aWZpY2F0aW9uLFxuICAgICAgdGl0bGUsXG4gICAgICBzdWJ0aXRsZSxcbiAgICAgIGljb25OYW1lLFxuICAgICAgdGhpcy5fY2FsbEZyYW1lSWRcbiAgICApO1xuICB9XG5cbiAgLy8gV2hldGhlciB0byBlbmFibGUgbm8tb3AgYXVkaW8gcmVjb3JkaW5nIHRvIGVuc3VyZSBjb250aW51aXR5IG9mIHRoZSBhcHBcbiAgLy8gd2hlbiBiYWNrZ3JvdW5kZWQuIFJlcXVpcmVkIGluIGlPUyB0byBlbnN1cmUgd2UgY2FuIGZpbmlzaCBqb2luaW5nIHdoZW4gdGhlXG4gIC8vIGFwcCBpcyBiYWNrZ3JvdW5kZWQgYmVmb3JlIGdVTSBpcyBjYWxsZWQsIGFuZCB0byBlbnN1cmUgdGhhdCBzaWduYWxpbmdcbiAgLy8gcmVtYWlucyBjb25uZWN0ZWQgd2hlbiB3ZSdyZSBpbiBhbiBlbXB0eSByb29tIGFuZCBvdXIgb3duIGNhbSBhbmQgbWljIGFyZVxuICAvLyBvZmYuXG4gIHVwZGF0ZU5vT3BSZWNvcmRpbmdFbnN1cmluZ0JhY2tncm91bmRDb250aW51aXR5KGVuYWJsZU5vT3BSZWNvcmRpbmcpIHtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICBpc1JlYWN0TmF0aXZlKCkgJiZcbiAgICAgICAgdGhpcy5uYXRpdmVVdGlscygpLmVuYWJsZU5vT3BSZWNvcmRpbmdFbnN1cmluZ0JhY2tncm91bmRDb250aW51aXR5XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubmF0aXZlVXRpbHMoKS5lbmFibGVOb09wUmVjb3JkaW5nRW5zdXJpbmdCYWNrZ3JvdW5kQ29udGludWl0eShcbiAgICAgIGVuYWJsZU5vT3BSZWNvcmRpbmdcbiAgICApO1xuICB9XG5cbiAgX2lzQ2FsbFBlbmRpbmdPck9uZ29pbmcoY2FsbFN0YXRlLCBpc1ByZXBhcmluZ1RvSm9pbikge1xuICAgIHJldHVybiAoXG4gICAgICBbREFJTFlfU1RBVEVfSk9JTklORywgREFJTFlfU1RBVEVfSk9JTkVEXS5pbmNsdWRlcyhjYWxsU3RhdGUpIHx8XG4gICAgICBpc1ByZXBhcmluZ1RvSm9pblxuICAgICk7XG4gIH1cblxuICBzdGFydExpc3RlbmluZ0ZvckRldmljZUNoYW5nZXMgPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5hdmlnYXRvci5tZWRpYURldmljZXMub25kZXZpY2VjaGFuZ2UgIT09ICd1bmRlZmluZWQnIHx8XG4gICAgICBpc1JlYWN0TmF0aXZlKClcbiAgICApIHtcbiAgICAgIC8vIERlc2t0b3Agd2ViLCBpT1Mgd2ViLCBhbmQgUmVhY3QgTmF0aXZlIHN1cHBvcnQgdGhlICdkZXZpY2VjaGFuZ2UnIGV2ZW50XG4gICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdkZXZpY2VjaGFuZ2UnLFxuICAgICAgICB0aGlzLmRldmljZUNoYW5nZUxpc3RlbmVyXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBbmRyb2lkIENocm9tZS9TYW1zdW5nIEludGVybmV0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgJ2RldmljZWNoYW5nZSdcbiAgICAgIC8vIGV2ZW50LCBzbyBkbyBwb2xsaW5nIGluc3RlYWRcbiAgICAgIHRoaXMuc3RhcnRQb2xsaW5nRm9yRGV2aWNlQ2hhbmdlcygpO1xuICAgIH1cbiAgfTtcblxuICBzdG9wTGlzdGVuaW5nRm9yRGV2aWNlQ2hhbmdlcyA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5vbmRldmljZWNoYW5nZSAhPT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIGlzUmVhY3ROYXRpdmUoKVxuICAgICkge1xuICAgICAgLy8gRGVza3RvcCB3ZWIsIGlPUyB3ZWIsIGFuZCBSZWFjdCBOYXRpdmUgc3VwcG9ydCB0aGUgJ2RldmljZWNoYW5nZScgZXZlbnRcbiAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2RldmljZWNoYW5nZScsXG4gICAgICAgIHRoaXMuZGV2aWNlQ2hhbmdlTGlzdGVuZXJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFuZHJvaWQgQ2hyb21lL1NhbXN1bmcgSW50ZXJuZXQgZG9lc24ndCBzdXBwb3J0IHRoZSAnZGV2aWNlY2hhbmdlJ1xuICAgICAgLy8gZXZlbnQsIHNvIGRvIHBvbGxpbmcgaW5zdGVhZFxuICAgICAgdGhpcy5zdG9wUG9sbGluZ0ZvckRldmljZUNoYW5nZXMoKTtcbiAgICB9XG4gIH07XG5cbiAgZGV2aWNlQ2hhbmdlTGlzdGVuZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8gTGV0IG91ciBvd24gZW51bWVyYXRlRGV2aWNlcygpIG1ldGhvZCBiZSB0aGUgc291cmNlIG9mIHRydXRoXG4gICAgY29uc3QgZGV2aWNlc0luZm8gPSBhd2FpdCB0aGlzLmVudW1lcmF0ZURldmljZXMoKTtcbiAgICB0aGlzLmhhbmRsZURldmljZUNoYW5nZShkZXZpY2VzSW5mby5kZXZpY2VzKTtcbiAgfTtcblxuICBoYW5kbGVEZXZpY2VDaGFuZ2UgPSAobmV3RGV2aWNlcykgPT4ge1xuICAgIHRoaXMuZW1pdChEQUlMWV9FVkVOVF9BVkFJTEFCTEVfREVWSUNFU19VUERBVEVELCB7XG4gICAgICBhY3Rpb246IERBSUxZX0VWRU5UX0FWQUlMQUJMRV9ERVZJQ0VTX1VQREFURUQsXG4gICAgICBhdmFpbGFibGVEZXZpY2VzOiBuZXdEZXZpY2VzLFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIE9ubHkgZm9yIEFuZHJvaWQgd2ViLCB3aGVyZSB0aGUgJ2RldmljZWNoYW5nZScgZXZlbnQgaXNuJ3Qgc3VwcG9ydGVkXG4gIC8vIChTZWUgc3RhcnRMaXN0ZW5pbmdGb3JEZXZpY2VDaGFuZ2VzKCkpXG4gIHN0YXJ0UG9sbGluZ0ZvckRldmljZUNoYW5nZXMgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2RldmljZUNoYW5nZUludGVydmFsKSByZXR1cm47XG4gICAgdGhpcy5fZGV2aWNlQ2hhbmdlSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAvLyBMZXQgb3VyIG93biBlbnVtZXJhdGVEZXZpY2VzKCkgbWV0aG9kIGJlIHRoZSBzb3VyY2Ugb2YgdHJ1dGhcbiAgICAgIGNvbnN0IGRldmljZXNJbmZvID0gYXdhaXQgdGhpcy5lbnVtZXJhdGVEZXZpY2VzKCk7XG4gICAgICBjb25zdCBkZXZpY2VzSlNPTiA9IEpTT04uc3RyaW5naWZ5KGRldmljZXNJbmZvKTtcbiAgICAgIGlmICh0aGlzLl9sYXN0RGV2aWNlc0pTT04gJiYgZGV2aWNlc0pTT04gIT09IHRoaXMuX2xhc3REZXZpY2VzSlNPTikge1xuICAgICAgICB0aGlzLmhhbmRsZURldmljZUNoYW5nZShkZXZpY2VzSW5mby5kZXZpY2VzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xhc3REZXZpY2VzSlNPTiA9IGRldmljZXNKU09OO1xuICAgIH0sIDMwMDApO1xuICB9O1xuXG4gIC8vIE9ubHkgZm9yIEFuZHJvaWQgd2ViLCB3aGVyZSB0aGUgJ2RldmljZWNoYW5nZScgZXZlbnQgaXNuJ3Qgc3VwcG9ydGVkXG4gIC8vIChTZWUgc3RvcExpc3RlbmluZ0ZvckRldmljZUNoYW5nZXMoKSlcbiAgc3RvcFBvbGxpbmdGb3JEZXZpY2VDaGFuZ2VzID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5fZGV2aWNlQ2hhbmdlSW50ZXJ2YWwpIHJldHVybjtcbiAgICBjbGVhckludGVydmFsKHRoaXMuX2RldmljZUNoYW5nZUludGVydmFsKTtcbiAgICB0aGlzLl9kZXZpY2VDaGFuZ2VJbnRlcnZhbCA9IG51bGw7XG4gICAgdGhpcy5fbGFzdERldmljZXNKU09OID0gbnVsbDtcbiAgfTtcblxuICBoYW5kbGVOYXRpdmVBcHBBY3RpdmVTdGF0ZUNoYW5nZSA9IChpc0FjdGl2ZSkgPT4ge1xuICAgIC8vIElmIGF1dG9tYXRpYyB2aWRlbyBkZXZpY2UgbWFuYWdlbWVudCBpcyBkaXNhYmxlZCwgYmFpbFxuICAgIGlmICh0aGlzLmRpc2FibGVSZWFjdE5hdGl2ZUF1dG9EZXZpY2VNYW5hZ2VtZW50KCd2aWRlbycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgLy8gSWYgY2FtIHdhcyB1bm11dGVkIGJlZm9yZSBsb3NpbmcgZm9jdXMsIHVubXV0ZVxuICAgICAgLy8gKE5vdGUgdGhpcyBpcyBhc3N1bXB0aW9uIGlzIG5vdCBwZXJmZWN0LCBzaW5jZSB0aGVvcmV0aWNhbGx5IGFuIGFwcFxuICAgICAgLy8gY291bGQgdW5tdXRlIHdoaWxlIGluIHRoZSBiYWNrZ3JvdW5kLCBidXQgaXQncyBkZWNlbnQgZm9yIG5vdylcbiAgICAgIGlmICh0aGlzLmNhbVVubXV0ZWRCZWZvcmVMb3NpbmdOYXRpdmVBY3RpdmVTdGF0ZSkge1xuICAgICAgICB0aGlzLnNldExvY2FsVmlkZW8odHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FtVW5tdXRlZEJlZm9yZUxvc2luZ05hdGl2ZUFjdGl2ZVN0YXRlID0gdGhpcy5sb2NhbFZpZGVvKCk7XG4gICAgICAvLyBNdXRlIGNhbSwgYnV0IGNoZWNrIGZpcnN0IHdoZXRoZXIgd2UgaGF2ZSBsb2NhbCB2aWRlbyBpbiB0aGUgZmlyc3RcbiAgICAgIC8vIHBsYWNlOiBpZiB3ZSBkb24ndCwgd2UgbWF5IHN0aWxsIGJlIGluIHRoZSBnVU0gcHJvY2Vzcywgd2l0aCB0aGUgYXBwXG4gICAgICAvLyBcImluYWN0aXZlXCIgc2ltcGx5IGJlY2F1c2UgaXQncyBiZWhpbmQgdGhlIHBlcm1pc3Npb25zIGRpYWxvZ3MuXG4gICAgICBpZiAodGhpcy5jYW1Vbm11dGVkQmVmb3JlTG9zaW5nTmF0aXZlQWN0aXZlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5zZXRMb2NhbFZpZGVvKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgaGFuZGxlTmF0aXZlQXVkaW9Gb2N1c0NoYW5nZSA9IChoYXNGb2N1cykgPT4ge1xuICAgIC8vIElmIGF1dG9tYXRpYyBhdWRpbyBkZXZpY2UgbWFuYWdlbWVudCBpcyBkaXNhYmxlZCwgYmFpbFxuICAgIGlmICh0aGlzLmRpc2FibGVSZWFjdE5hdGl2ZUF1dG9EZXZpY2VNYW5hZ2VtZW50KCdhdWRpbycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2hhc05hdGl2ZUF1ZGlvRm9jdXMgPSBoYXNGb2N1cztcbiAgICAvLyB0b2dnbGUgcGFydGljaXBhbnQgYXVkaW8gaWYgbmVlZGVkXG4gICAgdGhpcy50b2dnbGVQYXJ0aWNpcGFudEF1ZGlvQmFzZWRPbk5hdGl2ZUF1ZGlvRm9jdXMoKTtcbiAgICAvLyB0b2dnbGUgbWljIG11dGUgaWYgbmVlZGVkXG4gICAgaWYgKHRoaXMuX2hhc05hdGl2ZUF1ZGlvRm9jdXMpIHtcbiAgICAgIC8vIElmIG1pYyB3YXMgdW5tdXRlZCBiZWZvcmUgbG9zaW5nIGZvY3VzLCB1bm11dGVcbiAgICAgIC8vIChOb3RlIHRoaXMgaXMgYXNzdW1wdGlvbiBpcyBub3QgcGVyZmVjdCwgc2luY2UgdGhlb3JldGljYWxseSBhbiBhcHBcbiAgICAgIC8vIGNvdWxkIHVubXV0ZSB3aGlsZSBpbiB0aGUgYmFja2dyb3VuZCwgYnV0IGl0J3MgZGVjZW50IGZvciBub3cpXG4gICAgICBpZiAodGhpcy5taWNVbm11dGVkQmVmb3JlTG9zaW5nTmF0aXZlQXVkaW9Gb2N1cykge1xuICAgICAgICB0aGlzLnNldExvY2FsQXVkaW8odHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWljVW5tdXRlZEJlZm9yZUxvc2luZ05hdGl2ZUF1ZGlvRm9jdXMgPSB0aGlzLmxvY2FsQXVkaW8oKTtcbiAgICAgIHRoaXMuc2V0TG9jYWxBdWRpbyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHRvZ2dsZVBhcnRpY2lwYW50QXVkaW9CYXNlZE9uTmF0aXZlQXVkaW9Gb2N1cygpIHtcbiAgICBpZiAoIWlzUmVhY3ROYXRpdmUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBOZWVkIHRvIGFjY2VzcyBzdG9yZSBkaXJlY3RseSBzaW5jZSB3aGVuIHBhcnRpY2lwYW50IG11dGVkIHRoZWlyIGF1ZGlvIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgYXVkaW8gdHJhY2tzIGluIHRoaXMuX3BhcnRpY2lwYW50c1xuICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBmb3IgKGNvbnN0IHN0cmVhbUlkIGluIHN0YXRlLnN0cmVhbXMpIHtcbiAgICAgIGNvbnN0IHN0cmVhbURhdGEgPSBzdGF0ZS5zdHJlYW1zW3N0cmVhbUlkXTtcbiAgICAgIGlmIChcbiAgICAgICAgc3RyZWFtRGF0YSAmJlxuICAgICAgICBzdHJlYW1EYXRhLnBlbmRpbmdUcmFjayAmJlxuICAgICAgICBzdHJlYW1EYXRhLnBlbmRpbmdUcmFjay5raW5kID09PSAnYXVkaW8nXG4gICAgICApIHtcbiAgICAgICAgc3RyZWFtRGF0YS5wZW5kaW5nVHJhY2suZW5hYmxlZCA9IHRoaXMuX2hhc05hdGl2ZUF1ZGlvRm9jdXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gdHlwZSBtdXN0IGJlIGVpdGhlciAnYXVkaW8nIG9yICd2aWRlbydcbiAgZGlzYWJsZVJlYWN0TmF0aXZlQXV0b0RldmljZU1hbmFnZW1lbnQodHlwZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BlcnRpZXMucmVhY3ROYXRpdmVDb25maWcgJiZcbiAgICAgIHRoaXMucHJvcGVydGllcy5yZWFjdE5hdGl2ZUNvbmZpZy5kaXNhYmxlQXV0b0RldmljZU1hbmFnZW1lbnQgJiZcbiAgICAgIHRoaXMucHJvcGVydGllcy5yZWFjdE5hdGl2ZUNvbmZpZy5kaXNhYmxlQXV0b0RldmljZU1hbmFnZW1lbnRbdHlwZV1cbiAgICApO1xuICB9XG5cbiAgYWJzb2x1dGVVcmwodXJsKSB7XG4gICAgaWYgKCd1bmRlZmluZWQnID09PSB0eXBlb2YgdXJsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBhLmhyZWYgPSB1cmw7XG4gICAgcmV0dXJuIGEuaHJlZjtcbiAgfVxuXG4gIHNheUhlbGxvKCkge1xuICAgIGNvbnN0IHN0ciA9ICdoZWxsbywgd29ybGQuJztcbiAgICBjb25zb2xlLmxvZyhzdHIpO1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVByZWxvYWRDYWNoZShjYWxsT2JqZWN0LCBwcm9wZXJ0aWVzKSB7XG4gIHJldHVybiB7XG4gICAgc3Vic2NyaWJlVG9UcmFja3NBdXRvbWF0aWNhbGx5OiB0cnVlLFxuICAgIGF1ZGlvRGV2aWNlSWQ6IG51bGwsXG4gICAgdmlkZW9EZXZpY2VJZDogbnVsbCxcbiAgICBvdXRwdXREZXZpY2VJZDogbnVsbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzZXRQcmVsb2FkQ2FjaGUoYykge1xuICAvLyBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLCB1bnRpbCB3ZSBhZGQgc3R1ZmYgdG8gdGhlIHByZWxvYWRcbiAgLy8gY2FjaGUgdGhhdCBzaG91bGQgbm90IHBlcnNpc3Rcbn1cblxuZnVuY3Rpb24gbWFrZVNhZmVGb3JQb3N0TWVzc2FnZShwcm9wcykge1xuICBjb25zdCBzYWZlID0ge307XG4gIGZvciAobGV0IHAgaW4gcHJvcHMpIHtcbiAgICBpZiAocHJvcHNbcF0gaW5zdGFuY2VvZiBNZWRpYVN0cmVhbVRyYWNrKSB7XG4gICAgICAvLyBub3RlOiBjb3VsZCBzdG9yZSB0aGUgdHJhY2sgaW4gYSBnbG9iYWwgdmFyaWFibGUgZm9yIGFjY2Vzc2luZ1xuICAgICAgLy8gb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIHBvc3RNZXNzYWdlLCBoZXJlLCBpbnN0ZWFkIG9mIGFzIHdlXG4gICAgICAvLyBjdXJyZW50bHkgZG8gaW4gdGhlIHZhbGlkYXRlLXByb3BlcnRpZXMgcm91dGluZXMsIHdoaWNoIGRlZmluaXRlbHlcbiAgICAgIC8vIGlzIGEgc3Bvb2t5LWFjdGlvbi1hdC1hLWRpc3RhbmNlIGNvZGUgYW50aS1wYXR0ZXJuXG4gICAgICBzYWZlW3BdID0gREFJTFlfQ1VTVE9NX1RSQUNLO1xuICAgIH0gZWxzZSBpZiAocCA9PT0gJ2RhaWx5Q29uZmlnJykge1xuICAgICAgaWYgKHByb3BzW3BdLm1vZGlmeUxvY2FsU2RwSG9vaykge1xuICAgICAgICBpZiAod2luZG93Ll9kYWlseUNvbmZpZykge1xuICAgICAgICAgIHdpbmRvdy5fZGFpbHlDb25maWcubW9kaWZ5TG9jYWxTZHBIb29rID0gcHJvcHNbcF0ubW9kaWZ5TG9jYWxTZHBIb29rO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBwcm9wc1twXS5tb2RpZnlMb2NhbFNkcEhvb2s7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcF0ubW9kaWZ5UmVtb3RlU2RwSG9vaykge1xuICAgICAgICBpZiAod2luZG93Ll9kYWlseUNvbmZpZykge1xuICAgICAgICAgIHdpbmRvdy5fZGFpbHlDb25maWcubW9kaWZ5UmVtb3RlU2RwSG9vayA9XG4gICAgICAgICAgICBwcm9wc1twXS5tb2RpZnlSZW1vdGVTZHBIb29rO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBwcm9wc1twXS5tb2RpZnlSZW1vdGVTZHBIb29rO1xuICAgICAgfVxuICAgICAgc2FmZVtwXSA9IHByb3BzW3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzYWZlW3BdID0gcHJvcHNbcF07XG4gICAgfVxuICB9XG4gIHJldHVybiBzYWZlO1xufVxuXG5mdW5jdGlvbiBtZXRob2ROb3RTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCkge1xuICBpZiAoaXNSZWFjdE5hdGl2ZSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1RoaXMgZGFpbHktanMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIFJlYWN0IE5hdGl2ZSdcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1ldGhvZE9ubHlTdXBwb3J0ZWRJblJlYWN0TmF0aXZlKCkge1xuICBpZiAoIWlzUmVhY3ROYXRpdmUoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBkYWlseS1qcyBtZXRob2QgaXMgb25seSBzdXBwb3J0ZWQgaW4gUmVhY3QgTmF0aXZlJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTZXNzaW9uRGF0YVVwZGF0ZShkYXRhLCBtZXJnZVN0cmF0ZWd5KSB7XG4gIC8vIHRoZSBTZXNzaW9uRGF0YVVwZGF0ZSBjb25zdHJ1Y3RvciB2YWxpZGF0ZXMgZXZlcnl0aGluZyBhbmQgd2lsbFxuICAvLyB0aHJvdyB0aGUgZXJyb3JzIG5lY2Vzc2FyeSBpZiB0aGluZ3MgZG9uJ3QgY2hlY2sgb3V0XG4gIG5ldyBTZXNzaW9uRGF0YVVwZGF0ZSh7IGRhdGEsIG1lcmdlU3RyYXRlZ3kgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVVzZXJEYXRhKGRhdGEpIHtcbiAgLy8gdW5kZWZpbmVkIGlzIGNvbnNpZGVyZWQgdmFsaWQgYnV0IHdvdWxkIGZhaWwgdGhlIGNoZWNrcyBiZWxvd1xuICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsZXQgZGF0YVN0cjtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIC8vIEpTT04uc3RyaW5naWZ5IGFkZHMgdHdvIGNoYXJhY3RlcnMgdG8gdGhlIHN0cmluZywgc28gZG8gc2l6aW5nIGNoZWNrc1xuICAgIC8vIG9uIHRoZSByYXcgc3RyaW5nLlxuICAgIGRhdGFTdHIgPSBkYXRhO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBkYXRhU3RyID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG5cbiAgICAgIC8vIGNoZWNrIHRoYXQgd2hhdCBnb2VzIGluIGlzIHRoZSBzYW1lIGNvbWluZyBvdXQgOilcbiAgICAgIGlmICghZGVlcEVxdWFsKEpTT04ucGFyc2UoZGF0YVN0ciksIGRhdGEpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgVGhlIHVzZXJEYXRhIHByb3ZpZGVkIHdpbGwgYmUgbW9kaWZpZWQgd2hlbiBzZXJpYWxpemVkLmApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IEVycm9yKGB1c2VyRGF0YSBtdXN0IGJlIHNlcmlhbGl6YWJsZSB0byBKU09OOiAke2V9YCk7XG4gICAgfVxuICB9XG4gIC8vIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkXG4gIGlmIChkYXRhU3RyLmxlbmd0aCA+IE1BWF9VU0VSX0RBVEFfU0laRSkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgYHVzZXJEYXRhIGlzIHRvbyBsYXJnZSAoJHtkYXRhU3RyLmxlbmd0aH0gY2hhcmFjdGVycykuIE1heGltdW0gc2l6ZSBzdXBwcG9ydGVkIGlzICR7TUFYX1VTRVJfREFUQV9TSVpFfS5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZWNlaXZlU2V0dGluZ3MoXG4gIHJlY2VpdmVTZXR0aW5nc1BhcmFtLFxuICB7IGFsbG93QWxsUGFydGljaXBhbnRzS2V5IH1cbikge1xuICBjb25zdCBpc1BhcnRpY2lwYW50SWRWYWxpZCA9IChwYXJ0aWNpcGFudElkKSA9PiB7XG4gICAgY29uc3QgZGlzYWxsb3dlZEtleXMgPSBbJ2xvY2FsJ107XG4gICAgaWYgKCFhbGxvd0FsbFBhcnRpY2lwYW50c0tleSkgZGlzYWxsb3dlZEtleXMucHVzaCgnKicpO1xuICAgIHJldHVybiBwYXJ0aWNpcGFudElkICYmICFkaXNhbGxvd2VkS2V5cy5pbmNsdWRlcyhwYXJ0aWNpcGFudElkKTtcbiAgfTtcbiAgY29uc3QgYXJlVmlkZW9SZWNlaXZlU2V0dGluZ3NWYWxpZCA9ICh2aWRlb1JlY2VpdmVTZXR0aW5ncykgPT4ge1xuICAgIGlmICh2aWRlb1JlY2VpdmVTZXR0aW5ncy5sYXllciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgKE51bWJlci5pc0ludGVnZXIodmlkZW9SZWNlaXZlU2V0dGluZ3MubGF5ZXIpICYmXG4gICAgICAgICAgICB2aWRlb1JlY2VpdmVTZXR0aW5ncy5sYXllciA+PSAwKSB8fFxuICAgICAgICAgIHZpZGVvUmVjZWl2ZVNldHRpbmdzLmxheWVyID09PSAnaW5oZXJpdCdcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8vIE5PVEU6IHBhcnRpYWwgcmVjZWl2ZSBzZXR0aW5ncyAqYXJlKiBhbGxvd2VkLCBpbiBib3RoIHNlbnNlczpcbiAgLy8gLSBvbmx5IGEgc3Vic2V0IG9mIG1lZGlhIHR5cGVzIChlLmcuIG9ubHkgXCJ2aWRlb1wiKVxuICAvLyAtIG9ubHkgYSBzdWJzZXQgb2Ygc2V0dGluZ3MgcGVyIG1lZGlhIHR5cGUgKGUuZy4gb25seSBcImxheWVyXCIpXG4gIGNvbnN0IGFyZVBhcnRpY2lwYW50UmVjZWl2ZVNldHRpbmdzVmFsaWQgPSAocmVjZWl2ZVNldHRpbmdzKSA9PiB7XG4gICAgaWYgKCFyZWNlaXZlU2V0dGluZ3MpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocmVjZWl2ZVNldHRpbmdzLnZpZGVvKSB7XG4gICAgICBpZiAoIWFyZVZpZGVvUmVjZWl2ZVNldHRpbmdzVmFsaWQocmVjZWl2ZVNldHRpbmdzLnZpZGVvKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZWNlaXZlU2V0dGluZ3Muc2NyZWVuVmlkZW8pIHtcbiAgICAgIGlmICghYXJlVmlkZW9SZWNlaXZlU2V0dGluZ3NWYWxpZChyZWNlaXZlU2V0dGluZ3Muc2NyZWVuVmlkZW8pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIGZvciAoY29uc3QgW3BhcnRpY2lwYW50SWQsIHJlY2VpdmVTZXR0aW5nc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgcmVjZWl2ZVNldHRpbmdzUGFyYW1cbiAgKSkge1xuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIGlzUGFydGljaXBhbnRJZFZhbGlkKHBhcnRpY2lwYW50SWQpICYmXG4gICAgICAgIGFyZVBhcnRpY2lwYW50UmVjZWl2ZVNldHRpbmdzVmFsaWQocmVjZWl2ZVNldHRpbmdzKVxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gU2luY2UgY3VycmVudGx5IHZpZGVvUHJvY2Vzc29yIGlzIHRoZSBvbmx5IGlucHV0U2V0dGluZy4gSSB3cm90ZSB0aGlzIGNvZGUgdG8gcmVqZWN0XG4vLyBldmVyeXRoaW5nIGVsc2UuIEkgZmVlbCBpdCBpcyB0aGUgc2FmZSBhcHByb2FjaC4gVGhpcyB3aWxsIG5lZWQgY2hhbmdlcyBhcyBtb3JlXG4vLyBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkIHRvIGlucHV0U2V0dGluZ3MgaW4gdGhlIGZ1dHVyZS5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5wdXRTZXR0aW5ncyhzZXR0aW5ncykge1xuICBpZiAodHlwZW9mIHNldHRpbmdzICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAoIShzZXR0aW5ncy52aWRlbyAmJiB0eXBlb2Ygc2V0dGluZ3MudmlkZW8gPT09ICdvYmplY3QnKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIXZhbGlkYXRlVmlkZW9Qcm9jZXNzb3Ioc2V0dGluZ3MudmlkZW8ucHJvY2Vzc29yKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVWaWRlb1Byb2Nlc3NvcihwKSB7XG4gIC8vIHB1Ymxpc2ggaGFzIGJlZW4gZGVwcmVjYXRlZC4gSXQgaGFzbnQgYmVlbiByZW1vdmVkIGZyb20gVkFMSURfUFJPQ0VTU09SX0tFWVNcbiAgLy8gc28gYXMgdG8gbm90IHRocm93IGFuIGVycm9yIGZvciBhbnkgYWN0aXZlIHVzZXJzOyBBZGRlZCBhIHdhcm5pbmcgYWJvdXQgdGhlXG4gIC8vIGRlcHJlY2F0aW9uIGJlbG93LlxuICBjb25zdCBWQUxJRF9QUk9DRVNTT1JfS0VZUyA9IFsndHlwZScsIGBjb25maWdgLCAncHVibGlzaCddO1xuICBpZiAoIXApIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBwICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LmtleXMocCkubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7IC8vIGxvZGFzaCBpc0VtcHR5IGRpZCBub3Qgd29yayB3ZWxsIHdpdGggZ2l0aHViIHdvcmtmbG93IGZvciBzb21lIHJlYXNvblxuICBpZiAocC50eXBlICYmICF2YWxpZGF0ZVZpZGVvUHJvY2Vzc29yVHlwZShwLnR5cGUpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChwLnB1Ymxpc2ggIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcC5wdWJsaXNoICE9PSAnYm9vbGVhbicpIHJldHVybiBmYWxzZTtcbiAgLy8gcHVibGlzaCBmbGFnIGhhcyBiZWVuIGRlcHJlY2F0ZWRcbiAgaWYgKHR5cGVvZiBwLnB1Ymxpc2ggPT09ICdib29sZWFuJykge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdpbnB1dFNldHRpbmdzLnZpZGVvLnByb2Nlc3NvcjogcHVibGlzaCBrZXkgaGFzIGJlZW4gZGVwcmVjYXRlZDsgaXQgd2lsbCBiZSBpZ25vcmVkJ1xuICAgICk7XG4gIH1cblxuICBpZiAocC5jb25maWcpIHtcbiAgICBpZiAodHlwZW9mIHAuY29uZmlnICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghdmFsaWRhdGVWaWRlb1Byb2Nlc3NvckNvbmZpZyhwLnR5cGUsIHAuY29uZmlnKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIHNjcnViIGludmFsaWQga2V5cyBpbiBwcm9jZXNzb3Igb2JqZWN0XG4gIE9iamVjdC5rZXlzKHApXG4gICAgLmZpbHRlcigoaykgPT4gIVZBTElEX1BST0NFU1NPUl9LRVlTLmluY2x1ZGVzKGspKVxuICAgIC5mb3JFYWNoKChrKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oYGludmFsaWQga2V5IGlucHV0U2V0dGluZ3MgLT4gdmlkZW8gLT4gcHJvY2Vzc29yIDogJHtrfWApO1xuICAgICAgZGVsZXRlIHBba107XG4gICAgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVZpZGVvUHJvY2Vzc29yQ29uZmlnKHR5cGUsIGNvbmZpZykge1xuICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZyk7XG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGNvbmZpZ0Vyck1zZyA9XG4gICAgJ2ludmFsaWQgb2JqZWN0IGluIGlucHV0U2V0dGluZ3MgLT4gdmlkZW8gLT4gcHJvY2Vzc29yIC0+IGNvbmZpZyc7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgVklERU9fUFJPQ0VTU09SX1RZUEVTLkJHQkxVUjpcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEgfHwga2V5c1swXSAhPT0gJ3N0cmVuZ3RoJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNvbmZpZ0Vyck1zZyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGNvbmZpZy5zdHJlbmd0aCAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgY29uZmlnLnN0cmVuZ3RoIDw9IDAgfHxcbiAgICAgICAgY29uZmlnLnN0cmVuZ3RoID4gMSB8fFxuICAgICAgICBpc05hTihjb25maWcuc3RyZW5ndGgpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgJHtjb25maWdFcnJNc2d9OyBleHBlY3RlZDogezAgPCBzdHJlbmd0aCA8PSAxfSwgZ290OiAke2NvbmZpZy5zdHJlbmd0aH1gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgVklERU9fUFJPQ0VTU09SX1RZUEVTLkJHSU1BR0U6XG4gICAgICBpZiAoY29uZmlnLnNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsaWRhdGVBbmRUYWdCZ0ltYWdlU291cmNlKGNvbmZpZykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUFuZFRhZ0JnSW1hZ2VTb3VyY2UoY29uZmlnKSB7XG4gIGlmIChjb25maWcuc291cmNlID09PSAnZGVmYXVsdCcpIHtcbiAgICBjb25maWcudHlwZSA9ICdkZWZhdWx0JztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsaWRhdGVIdHRwVXJsKGNvbmZpZy5zb3VyY2UpKSB7XG4gICAgY29uZmlnLnR5cGUgPSAndXJsJztcbiAgICBpZiAoIXZhbGlkYXRlQmdJbWFnZUZpbGVUeXBlKGNvbmZpZy5zb3VyY2UpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgaW52YWxpZCBpbWFnZSB0eXBlOyBzdXBwb3J0ZWQgdHlwZXM6IFske0RBSUxZX1NVUFBPUlRFRF9CR19JTUdfVFlQRVMuam9pbihcbiAgICAgICAgICAnLCAnXG4gICAgICAgICl9XWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWxpZGF0ZUltYWdlU2VsZWN0aW9uKGNvbmZpZy5zb3VyY2UpKSB7XG4gICAgY29uZmlnLnR5cGUgPSAnZGFpbHktcHJlc2VsZWN0JztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYGludmFsaWQgaW1hZ2Ugc2VsZWN0aW9uOyBtdXN0IGJlIGFuIGludCwgPiAwLCA8PSAke0RBSUxZX1BSRVNFTEVDVEVEX0JHX0lNQUdFX1VSTFNfTEVOR1RIfWBcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUJnSW1hZ2VGaWxlVHlwZSh1cmwpIHtcbiAgLy8gaWdub3JlIHF1ZXJ5IHBhcmFtc1xuICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHBhdGhOYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lO1xuXG4gIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmxvYkNvbnRlbnRUeXBlID0gcGF0aE5hbWUuc3Vic3RyaW5nKFxuICAgICAgICBwYXRoTmFtZS5pbmRleE9mKCc6JykgKyAxLFxuICAgICAgICBwYXRoTmFtZS5pbmRleE9mKCc7JylcbiAgICAgICk7XG4gICAgICBjb25zdCBibG9iRXh0ZW5zaW9uID0gYmxvYkNvbnRlbnRUeXBlLnNwbGl0KCcvJylbMV07XG4gICAgICByZXR1cm4gREFJTFlfU1VQUE9SVEVEX0JHX0lNR19UWVBFUy5pbmNsdWRlcyhibG9iRXh0ZW5zaW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdmYWlsZWQgdG8gZGVkdWNlIGJsb2IgY29udGVudCB0eXBlJywgZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXJsRmlsZVR5cGUgPSBwYXRoTmFtZS5zcGxpdCgnLicpLmF0KC0xKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIERBSUxZX1NVUFBPUlRFRF9CR19JTUdfVFlQRVMuaW5jbHVkZXModXJsRmlsZVR5cGUpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUltYWdlU2VsZWN0aW9uKHNlbGVjdEltZykge1xuICBsZXQgaW1nTnVtID0gTnVtYmVyKHNlbGVjdEltZyk7XG4gIGlmIChpc05hTihpbWdOdW0pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbWdOdW0pKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpbWdOdW0gPD0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoaW1nTnVtID4gREFJTFlfUFJFU0VMRUNURURfQkdfSU1BR0VfVVJMU19MRU5HVEgpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVmlkZW9Qcm9jZXNzb3JUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICBpZiAoIU9iamVjdC52YWx1ZXMoVklERU9fUFJPQ0VTU09SX1RZUEVTKS5pbmNsdWRlcyh0eXBlKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2lucHV0U2V0dGluZ3MgdmlkZW8gcHJvY2Vzc29yIHR5cGUgaW52YWxpZCcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaW5wdXRTZXR0aW5nc1ZhbGlkYXRpb25IZWxwTXNnKCkge1xuICBsZXQgcHJvY2Vzc29yT3B0cyA9IE9iamVjdC52YWx1ZXMoVklERU9fUFJPQ0VTU09SX1RZUEVTKS5qb2luKCcgfCAnKTtcbiAgcmV0dXJuIGBpbnB1dFNldHRpbmdzIG11c3QgYmUgb2YgdGhlIGZvcm06IHsgdmlkZW86IHsgcHJvY2Vzc29yOiBbICR7cHJvY2Vzc29yT3B0c30gXSB9LCBjb25maWc/OiB7fSB9YDtcbn1cblxuZnVuY3Rpb24gcmVjZWl2ZVNldHRpbmdzVmFsaWRhdGlvbkhlbHBNc2coeyBhbGxvd0FsbFBhcnRpY2lwYW50c0tleSB9KSB7XG4gIHJldHVybiAoXG4gICAgYHJlY2VpdmVTZXR0aW5ncyBtdXN0IGJlIG9mIHRoZSBmb3JtIHsgWzxyZW1vdGUgcGFydGljaXBhbnQgaWQ+IHwgJHtEQUlMWV9SRUNFSVZFX1NFVFRJTkdTX0JBU0VfS0VZfSR7XG4gICAgICBhbGxvd0FsbFBhcnRpY2lwYW50c0tleVxuICAgICAgICA/IGAgfCBcIiR7REFJTFlfUkVDRUlWRV9TRVRUSU5HU19BTExfUEFSVElDSVBBTlRTX0tFWX1cImBcbiAgICAgICAgOiAnJ1xuICAgIH1dOiBgICtcbiAgICAneyAnICtcbiAgICAnW3ZpZGVvOiBbeyBsYXllcjogWzxub24tbmVnYXRpdmUgaW50ZWdlcj4gfCBcImluaGVyaXRcIl0gfSB8IFwiaW5oZXJpdFwiXV0sICcgK1xuICAgICdbc2NyZWVuVmlkZW86IFt7IGxheWVyOiBbPG5vbi1uZWdhdGl2ZSBpbnRlZ2VyPiB8IFwiaW5oZXJpdFwiXSB9IHwgXCJpbmhlcml0XCJdXSAnICtcbiAgICAnfX19J1xuICApO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUN1c3RvbVRyYXlCdXR0b25zKGJ0bnMpIHtcbiAgaWYgKChidG5zICYmIHR5cGVvZiBidG5zICE9PSAnb2JqZWN0JykgfHwgQXJyYXkuaXNBcnJheShidG5zKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgY3VzdG9tVHJheUJ1dHRvbnMgc2hvdWxkIGJlIGFuIE9iamVjdCBvZiB0aGUgdHlwZSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBjdXN0b21UcmF5QnV0dG9uc1R5cGVcbiAgICAgICl9LmBcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChidG5zKSB7XG4gICAgZm9yIChjb25zdCBbYnRuc0tleV0gb2YgT2JqZWN0LmVudHJpZXMoYnRucykpIHtcbiAgICAgIGZvciAoY29uc3QgW2J0bktleSwgYnRuVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGJ0bnNbYnRuc0tleV0pKSB7XG4gICAgICAgIGlmIChidG5LZXkgPT09ICdpY29uUGF0aCcgJiYgIXZhbGlkYXRlSHR0cFVybChidG5WYWx1ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBjdXN0b21UcmF5QnV0dG9uICR7YnRuS2V5fSBzaG91bGQgYmUgYSB1cmwuYCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidG5LZXkgPT09ICdpY29uUGF0aERhcmtNb2RlJyAmJiAhdmFsaWRhdGVIdHRwVXJsKGJ0blZhbHVlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGN1c3RvbVRyYXlCdXR0b24gJHtidG5LZXl9IHNob3VsZCBiZSBhIHVybC5gKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwZWN0ZWRLZXkgPSBjdXN0b21UcmF5QnV0dG9uc1R5cGUuaWRbYnRuS2V5XTtcbiAgICAgICAgaWYgKCFleHBlY3RlZEtleSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGN1c3RvbVRyYXlCdXR0b24gZG9lcyBub3Qgc3VwcG9ydCBrZXkgJHtidG5LZXl9YCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYnRuVmFsdWUgIT09IGV4cGVjdGVkS2V5KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBjdXN0b21UcmF5QnV0dG9uICR7YnRuS2V5fSBzaG91bGQgYmUgYSAke2V4cGVjdGVkS2V5fS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZWFjdE5hdGl2ZUNvbmZpZyhjb25maWcpIHtcbiAgcmV0dXJuIHZhbGlkYXRlQ29uZmlnUHJvcFR5cGUoY29uZmlnLCByZWFjdE5hdGl2ZUNvbmZpZ1R5cGUpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbmZpZ1Byb3BUeXBlKHByb3AsIHByb3BUeXBlKSB7XG4gIGlmIChwcm9wVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN3aXRjaCAodHlwZW9mIHByb3BUeXBlKSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB0eXBlb2YgcHJvcCA9PT0gcHJvcFR5cGU7XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcCkge1xuICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnUHJvcFR5cGUocHJvcFtrZXldLCBwcm9wVHlwZVtrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoXG4gICAgICAvLyAgIFwiSW50ZXJuYWwgcHJvZ3JhbW1pbmcgZXJyb3I6IHdlJ3ZlIGRlZmluZWQgb3VyIGNvbmZpZyBwcm9wIHR5cGVzIHdyb25nXCJcbiAgICAgIC8vICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3RlTWVkaWFQbGF5ZXJTdGFydFZhbGlkYXRpb25IZWxwTXNnKCkge1xuICByZXR1cm4gYHN0YXJ0UmVtb3RlTWVkaWFQbGF5ZXIgYXJndW1lbnRzIG11c3QgYmUgb2YgdGhlIGZvcm06IFxuICB7IHVybDogXCJwbGF5YmFjayB1cmxcIiwgXG4gIHNldHRpbmdzPzogXG4gIHtzdGF0ZTogXCJwbGF5XCJ8XCJwYXVzZVwiLCBzaW11bGNhc3RFbmNvZGluZ3M/OiBbe31dIH0gfWA7XG59XG5cbmZ1bmN0aW9uIHJlbW90ZU1lZGlhUGxheWVyVXBkYXRlVmFsaWRhdGlvbkhlbHBNc2coKSB7XG4gIHJldHVybiBgdXBkYXRlUmVtb3RlTWVkaWFQbGF5ZXIgYXJndW1lbnRzIG11c3QgYmUgb2YgdGhlIGZvcm06IFxuICBzZXNzaW9uX2lkOiBcInBhcnRpY2lwYW50IHNlc3Npb25cIiwgXG4gIHsgc2V0dGluZ3M/OiB7c3RhdGU6IFwicGxheVwifFwicGF1c2VcIn0gfWA7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmVtb3RlUGxheWVyVXJsKHVybCkge1xuICAvLyBUT0RPOiBhZGQgcHJvdG9jb2wgY2hlY2sgYXMgd2VsbCBodHRwOi8vLCBodHRwczovLy4gZmlsZTovLy4uXG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXJsIHBhcmFtZXRlciBtdXN0IGJlIFwic3RyaW5nXCIgdHlwZWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmVtb3RlUGxheWVyU2V0dGluZ3MocGxheWVyU2V0dGluZ3MpIHtcbiAgaWYgKHR5cGVvZiBwbGF5ZXJTZXR0aW5ncyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlbW90ZU1lZGlhUGxheWVyU2V0dGluZ3M6IG11c3QgYmUgXCJvYmplY3RcIiB0eXBlYCk7XG4gIH1cblxuICBpZiAocGxheWVyU2V0dGluZ3Muc3RhdGUpIHtcbiAgICBpZiAoXG4gICAgICAhT2JqZWN0LnZhbHVlcyhEQUlMWV9KU19SRU1PVEVfTUVESUFfUExBWUVSX1NFVFRJTkcpLmluY2x1ZGVzKFxuICAgICAgICBwbGF5ZXJTZXR0aW5ncy5zdGF0ZVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB2YWx1ZSBmb3IgUmVtb3RlTWVkaWFQbGF5ZXJTZXR0aW5ncy5zdGF0ZSwgdmFsaWQgdmFsdWVzIGFyZTogYCArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoREFJTFlfSlNfUkVNT1RFX01FRElBX1BMQVlFUl9TRVRUSU5HKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGxheWVyU2V0dGluZ3Mudm9sdW1lKSB7XG4gICAgaWYgKHR5cGVvZiBwbGF5ZXJTZXR0aW5ncy52b2x1bWUgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSZW1vdGVNZWRpYVBsYXllclNldHRpbmdzLnZvbHVtZTogbXVzdCBiZSBcIm51bWJlclwiIHR5cGVgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocGxheWVyU2V0dGluZ3Mudm9sdW1lIDwgMCB8fCBwbGF5ZXJTZXR0aW5ncy52b2x1bWUgPiAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSZW1vdGVNZWRpYVBsYXllclNldHRpbmdzLnZvbHVtZTogbXVzdCBiZSBiZXR3ZWVuIDAuMCAtIDIuMGBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVJblJhbmdlKHZhbCwgbWluLCBtYXgpIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInIHx8IHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmVtb3RlUGxheWVyRW5jb2RpbmdTZXR0aW5ncyhwbGF5ZXJTZXR0aW5ncykge1xuICBmb3IgKGxldCBwcm9wIGluIHBsYXllclNldHRpbmdzKSB7XG4gICAgaWYgKCFzdGFydFJtcFNldHRpbmdzVmFsaWRLZXlzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGtleSAke3Byb3B9LCB2YWxpZCBrZXlzIGFyZTogJHtzdGFydFJtcFNldHRpbmdzVmFsaWRLZXlzfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vIHZhbGlkYXRlIHNpbXVsY2FzdEVuY29kaW5nc1xuICBpZiAocGxheWVyU2V0dGluZ3Muc2ltdWxjYXN0RW5jb2RpbmdzKSB7XG4gICAgaWYgKCEocGxheWVyU2V0dGluZ3Muc2ltdWxjYXN0RW5jb2RpbmdzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpbXVsY2FzdEVuY29kaW5ncyBtdXN0IGJlIFwiQXJyYXlcImApO1xuICAgIH1cbiAgICAvLyBtYXggMyBsYXllcnNcbiAgICBpZiAoXG4gICAgICAhaXNWYWx1ZUluUmFuZ2UoXG4gICAgICAgIHBsYXllclNldHRpbmdzLnNpbXVsY2FzdEVuY29kaW5ncy5sZW5ndGgsXG4gICAgICAgIDAsXG4gICAgICAgIE1BWF9TSU1VTENBU1RfTEFZRVJTXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBcInNpbXVsY2FzdEVuY29kaW5nc1wiIG5vdCBpbiByYW5nZS4gdmFsaWQgcmFuZ2UgMSB0byAzIGxheWVyc2BcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGNoZWNrIHZhbHVlIHdpdGhpbiBlYWNoIHNpbXVsY2FzdCBsYXllclxuICAgIHBsYXllclNldHRpbmdzLnNpbXVsY2FzdEVuY29kaW5ncy5ldmVyeSgobGF5ZXIpID0+IHtcbiAgICAgIGZvciAobGV0IHByb3AgaW4gbGF5ZXIpIHtcbiAgICAgICAgLy8gY2hlY2sgcHJvcGVydHkgaXMgdmFsaWRcbiAgICAgICAgaWYgKCFzaW11bGNhc3RFbmNvZGluZ3NWYWxpZFJhbmdlcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGtleSAke3Byb3B9LCB2YWxpZCBrZXlzIGFyZTpgICtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc2ltdWxjYXN0RW5jb2RpbmdzVmFsaWRSYW5nZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcm9wZXJ0eSBtdXN0IGJlIG51bWJlclxuICAgICAgICBpZiAodHlwZW9mIGxheWVyW3Byb3BdICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2ltdWxjYXN0RW5jb2RpbmdzW10uJHtwcm9wfSBtdXN0IGJlIFwibnVtYmVyXCJgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcm9wZXJ0eSBtdXN0IGJlIHdpdGhpbiByYW5nZVxuICAgICAgICBsZXQgeyBtaW4sIG1heCB9ID0gc2ltdWxjYXN0RW5jb2RpbmdzVmFsaWRSYW5nZXNbcHJvcF07XG4gICAgICAgIGlmICghaXNWYWx1ZUluUmFuZ2UobGF5ZXJbcHJvcF0sIG1pbiwgbWF4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2ltdWxjYXN0RW5jb2RpbmdzW10uJHtwcm9wfSB2YWx1ZSBub3QgaW4gcmFuZ2UuIHZhbGlkIHJhbmdlOlxcXG4gICAgICAgICR7bWlufSB0byAke21heH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gbWF4Qml0cmF0ZSBpcyBtYW5kYXRvcnlcbiAgICAgIGlmICghbGF5ZXIuaGFzT3duUHJvcGVydHkoJ21heEJpdHJhdGUnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpbXVsY2FzdEVuY29kaW5nc1tdLm1heEJpdHJhdGUgaXMgbm90IHNwZWNpZmllZGApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/module.js\n' + ); + + /***/ + }, + + /***/ "./src/shared-with-pluot-core/CommonIncludes.js": + /*!******************************************************!*\ + !*** ./src/shared-with-pluot-core/CommonIncludes.js ***! + \******************************************************/ + /*! exports provided: DAILY_STATE_NEW, DAILY_STATE_LOADING, DAILY_STATE_LOADED, DAILY_STATE_JOINING, DAILY_STATE_JOINED, DAILY_STATE_LEFT, DAILY_STATE_ERROR, DAILY_TRACK_STATE_BLOCKED, DAILY_TRACK_STATE_OFF, DAILY_TRACK_STATE_SENDABLE, DAILY_TRACK_STATE_LOADING, DAILY_TRACK_STATE_INTERRUPTED, DAILY_TRACK_STATE_PLAYABLE, DAILY_ACCESS_UNKNOWN, DAILY_ACCESS_LEVEL_FULL, DAILY_ACCESS_LEVEL_LOBBY, DAILY_ACCESS_LEVEL_NONE, DAILY_RECEIVE_SETTINGS_BASE_KEY, DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY, DAILY_FATAL_ERROR_EJECTED, DAILY_FATAL_ERROR_NBF_ROOM, DAILY_FATAL_ERROR_NBF_TOKEN, DAILY_FATAL_ERROR_EXP_ROOM, DAILY_FATAL_ERROR_EXP_TOKEN, DAILY_FATAL_ERROR_MEETING_FULL, DAILY_CAMERA_ERROR_CAM_IN_USE, DAILY_CAMERA_ERROR_MIC_IN_USE, DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE, DAILY_CAMERA_ERROR_PERMISSIONS, DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES, DAILY_CAMERA_ERROR_NOT_FOUND, DAILY_CAMERA_ERROR_CONSTRAINTS, DAILY_CAMERA_ERROR_UNKNOWN, DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG, DAILY_EVENT_IFRAME_LAUNCH_CONFIG, DAILY_EVENT_THEME_UPDATED, DAILY_EVENT_LOADING, DAILY_EVENT_LOAD_ATTEMPT_FAILED, DAILY_EVENT_LOADED, DAILY_EVENT_STARTED_CAMERA, DAILY_EVENT_CAMERA_ERROR, DAILY_EVENT_JOINING_MEETING, DAILY_EVENT_JOINED_MEETING, DAILY_EVENT_LEFT_MEETING, DAILY_EVENT_AVAILABLE_DEVICES_UPDATED, DAILY_EVENT_SELECTED_DEVICES_UPDATED, DAILY_EVENT_PARTICIPANT_JOINED, DAILY_EVENT_PARTICIPANT_UPDATED, DAILY_EVENT_PARTICIPANT_LEFT, DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED, DAILY_EVENT_ACCESS_STATE_UPDATED, DAILY_EVENT_MEETING_SESSION_UPDATED, DAILY_EVENT_MEETING_SESSION_STATE_UPDATED, DAILY_EVENT_MEETING_SESSION_DATA_ERROR, DAILY_EVENT_WAITING_PARTICIPANT_ADDED, DAILY_EVENT_WAITING_PARTICIPANT_UPDATED, DAILY_EVENT_WAITING_PARTICIPANT_REMOVED, DAILY_EVENT_TRACK_STARTED, DAILY_EVENT_TRACK_STOPPED, DAILY_EVENT_TRANSCRIPTION_STARTED, DAILY_EVENT_TRANSCRIPTION_STOPPED, DAILY_EVENT_TRANSCRIPTION_ERROR, DAILY_EVENT_RECORDING_STARTED, DAILY_EVENT_RECORDING_STOPPED, DAILY_EVENT_RECORDING_STATS, DAILY_EVENT_RECORDING_ERROR, DAILY_EVENT_RECORDING_UPLOAD_COMPLETED, DAILY_EVENT_RECORDING_DATA, DAILY_EVENT_APP_MSG, DAILY_EVENT_INPUT_EVENT, DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED, DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED, DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED, DAILY_REMOTE_MEDIA_PLAYER_ERROR_TYPE, DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED, DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED, DAILY_EVENT_ACTIVE_SPEAKER_CHANGE, DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE, DAILY_EVENT_NETWORK_QUALITY_CHANGE, DAILY_EVENT_NETWORK_CONNECTION, DAILY_EVENT_FULLSCREEN, DAILY_EVENT_EXIT_FULLSCREEN, DAILY_EVENT_LIVE_STREAMING_STARTED, DAILY_EVENT_LIVE_STREAMING_STOPPED, DAILY_EVENT_LIVE_STREAMING_ERROR, DAILY_LIVE_STREAMING_WARNING, DAILY_EVENT_LANG_UPDATED, DAILY_EVENT_SHOW_LOCAL_VIDEO_CHANGED, DAILY_EVENT_RECEIVE_SETTINGS_UPDATED, DAILY_EVENT_INPUT_SETTINGS_UPDATED, DAILY_EVENT_NONFATAL_ERROR, DAILY_INPUT_SETTINGS_ERROR_TYPE, DAILY_SCREEN_SHARE_ERROR_TYPE, DAILY_VIDEO_PROCESSOR_ERROR_TYPE, DAILY_EVENT_ERROR, DAILY_EVENT_CUSTOM_BUTTON_CLICK, MAX_APP_MSG_SIZE, MAX_SESSION_DATA_SIZE, MAX_USER_DATA_SIZE, IFRAME_MESSAGE_MARKER, DAILY_METHOD_UPDATE_CUSTOM_INTEGRATIONS, DAILY_METHOD_UPDATE_CUSTOM_TRAY_BUTTONS, DAILY_METHOD_SET_THEME, DAILY_METHOD_START_CAMERA, DAILY_METHOD_SET_INPUT_DEVICES, DAILY_METHOD_SET_OUTPUT_DEVICE, DAILY_METHOD_GET_INPUT_DEVICES, DAILY_METHOD_JOIN, DAILY_METHOD_LEAVE, DAILY_METHOD_UPDATE_PARTICIPANT, DAILY_METHOD_UPDATE_PARTICIPANTS, DAILY_METHOD_LOCAL_AUDIO, DAILY_METHOD_LOCAL_VIDEO, DAILY_METHOD_START_SCREENSHARE, DAILY_METHOD_STOP_SCREENSHARE, DAILY_METHOD_START_RECORDING, DAILY_METHOD_UPDATE_RECORDING, DAILY_METHOD_STOP_RECORDING, DAILY_METHOD_LOAD_CSS, DAILY_METHOD_SET_BANDWIDTH, DAILY_METHOD_GET_CALC_STATS, DAILY_METHOD_ENUMERATE_DEVICES, DAILY_METHOD_CYCLE_CAMERA, DAILY_METHOD_SET_CAMERA, DAILY_METHOD_START_CUSTOM_TRACK, DAILY_METHOD_STOP_CUSTOM_TRACK, DAILY_METHOD_CYCLE_MIC, DAILY_METHOD_GET_CAMERA_FACING_MODE, DAILY_METHOD_APP_MSG, DAILY_METHOD_ADD_FAKE_PARTICIPANT, DAILY_METHOD_SET_SHOW_NAMES, DAILY_METHOD_SET_SHOW_LOCAL_VIDEO, DAILY_METHOD_SET_SHOW_PARTICIPANTS_BAR, DAILY_METHOD_SET_ACTIVE_SPEAKER_MODE, DAILY_METHOD_REGISTER_INPUT_HANDLER, DAILY_METHOD_GET_LANG, DAILY_METHOD_SET_LANG, DAILY_METHOD_GET_MEETING_SESSION, DAILY_METHOD_SET_SESSION_DATA, DAILY_METHOD_SET_USER_NAME, DAILY_METHOD_SET_USER_DATA, DAILY_METHOD_DETECT_ALL_FACES, DAILY_METHOD_ROOM, DAILY_METHOD_GET_NETWORK_TOPOLOGY, DAILY_METHOD_SET_NETWORK_TOPOLOGY, DAILY_METHOD_SET_PLAY_DING, DAILY_METHOD_SET_SUBSCRIBE_TO_TRACKS_AUTOMATICALLY, DAILY_METHOD_START_LIVE_STREAMING, DAILY_METHOD_UPDATE_LIVE_STREAMING, DAILY_METHOD_UPDATE_LIVE_STREAMING_ENDPOINTS, DAILY_METHOD_STOP_LIVE_STREAMING, DAILY_METHOD_START_REMOTE_MEDIA_PLAYER, DAILY_METHOD_STOP_REMOTE_MEDIA_PLAYER, DAILY_METHOD_UPDATE_REMOTE_MEDIA_PLAYER, DAILY_METHOD_START_TRANSCRIPTION, DAILY_METHOD_STOP_TRANSCRIPTION, DAILY_METHOD_PREAUTH, DAILY_METHOD_REQUEST_ACCESS, DAILY_METHOD_UPDATE_WAITING_PARTICIPANT, DAILY_METHOD_UPDATE_WAITING_PARTICIPANTS, DAILY_METHOD_GET_SINGLE_PARTICIPANT_RECEIVE_SETTINGS, DAILY_METHOD_UPDATE_RECEIVE_SETTINGS, DAILY_METHOD_UPDATE_INPUT_SETTINGS, DAILY_CUSTOM_TRACK, DAILY_UI_REQUEST_FULLSCREEN, DAILY_UI_EXIT_FULLSCREEN, DAILY_JS_NETWORK_QUALITY, DAILY_JS_NETWORK_THRESHOLDS, DAILY_JS_VIDEO_PROCESSOR_TYPES, DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING, DAILY_JS_REMOTE_MEDIA_PLAYER_STATE, DAILY_PARTICIPANT_TYPE, DAILY_PRESELECTED_BG_IMAGE_URLS_LENGTH, DAILY_SUPPORTED_BG_IMG_TYPES, UPDATE_LIVE_STREAMING_ENDPOINTS_OP */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + "__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_STATE_NEW\", function() { return DAILY_STATE_NEW; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_STATE_LOADING\", function() { return DAILY_STATE_LOADING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_STATE_LOADED\", function() { return DAILY_STATE_LOADED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_STATE_JOINING\", function() { return DAILY_STATE_JOINING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_STATE_JOINED\", function() { return DAILY_STATE_JOINED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_STATE_LEFT\", function() { return DAILY_STATE_LEFT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_STATE_ERROR\", function() { return DAILY_STATE_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_TRACK_STATE_BLOCKED\", function() { return DAILY_TRACK_STATE_BLOCKED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_TRACK_STATE_OFF\", function() { return DAILY_TRACK_STATE_OFF; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_TRACK_STATE_SENDABLE\", function() { return DAILY_TRACK_STATE_SENDABLE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_TRACK_STATE_LOADING\", function() { return DAILY_TRACK_STATE_LOADING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_TRACK_STATE_INTERRUPTED\", function() { return DAILY_TRACK_STATE_INTERRUPTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_TRACK_STATE_PLAYABLE\", function() { return DAILY_TRACK_STATE_PLAYABLE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_ACCESS_UNKNOWN\", function() { return DAILY_ACCESS_UNKNOWN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_ACCESS_LEVEL_FULL\", function() { return DAILY_ACCESS_LEVEL_FULL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_ACCESS_LEVEL_LOBBY\", function() { return DAILY_ACCESS_LEVEL_LOBBY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_ACCESS_LEVEL_NONE\", function() { return DAILY_ACCESS_LEVEL_NONE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_RECEIVE_SETTINGS_BASE_KEY\", function() { return DAILY_RECEIVE_SETTINGS_BASE_KEY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY\", function() { return DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_FATAL_ERROR_EJECTED\", function() { return DAILY_FATAL_ERROR_EJECTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_FATAL_ERROR_NBF_ROOM\", function() { return DAILY_FATAL_ERROR_NBF_ROOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_FATAL_ERROR_NBF_TOKEN\", function() { return DAILY_FATAL_ERROR_NBF_TOKEN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_FATAL_ERROR_EXP_ROOM\", function() { return DAILY_FATAL_ERROR_EXP_ROOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_FATAL_ERROR_EXP_TOKEN\", function() { return DAILY_FATAL_ERROR_EXP_TOKEN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_FATAL_ERROR_MEETING_FULL\", function() { return DAILY_FATAL_ERROR_MEETING_FULL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_CAMERA_ERROR_CAM_IN_USE\", function() { return DAILY_CAMERA_ERROR_CAM_IN_USE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_CAMERA_ERROR_MIC_IN_USE\", function() { return DAILY_CAMERA_ERROR_MIC_IN_USE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE\", function() { return DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_CAMERA_ERROR_PERMISSIONS\", function() { return DAILY_CAMERA_ERROR_PERMISSIONS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES\", function() { return DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_CAMERA_ERROR_NOT_FOUND\", function() { return DAILY_CAMERA_ERROR_NOT_FOUND; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_CAMERA_ERROR_CONSTRAINTS\", function() { return DAILY_CAMERA_ERROR_CONSTRAINTS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_CAMERA_ERROR_UNKNOWN\", function() { return DAILY_CAMERA_ERROR_UNKNOWN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG\", function() { return DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_IFRAME_LAUNCH_CONFIG\", function() { return DAILY_EVENT_IFRAME_LAUNCH_CONFIG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_THEME_UPDATED\", function() { return DAILY_EVENT_THEME_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LOADING\", function() { return DAILY_EVENT_LOADING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LOAD_ATTEMPT_FAILED\", function() { return DAILY_EVENT_LOAD_ATTEMPT_FAILED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LOADED\", function() { return DAILY_EVENT_LOADED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_STARTED_CAMERA\", function() { return DAILY_EVENT_STARTED_CAMERA; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_CAMERA_ERROR\", function() { return DAILY_EVENT_CAMERA_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_JOINING_MEETING\", function() { return DAILY_EVENT_JOINING_MEETING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_JOINED_MEETING\", function() { return DAILY_EVENT_JOINED_MEETING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LEFT_MEETING\", function() { return DAILY_EVENT_LEFT_MEETING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_AVAILABLE_DEVICES_UPDATED\", function() { return DAILY_EVENT_AVAILABLE_DEVICES_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_SELECTED_DEVICES_UPDATED\", function() { return DAILY_EVENT_SELECTED_DEVICES_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_PARTICIPANT_JOINED\", function() { return DAILY_EVENT_PARTICIPANT_JOINED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_PARTICIPANT_UPDATED\", function() { return DAILY_EVENT_PARTICIPANT_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_PARTICIPANT_LEFT\", function() { return DAILY_EVENT_PARTICIPANT_LEFT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED\", function() { return DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_ACCESS_STATE_UPDATED\", function() { return DAILY_EVENT_ACCESS_STATE_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_MEETING_SESSION_UPDATED\", function() { return DAILY_EVENT_MEETING_SESSION_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_MEETING_SESSION_STATE_UPDATED\", function() { return DAILY_EVENT_MEETING_SESSION_STATE_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_MEETING_SESSION_DATA_ERROR\", function() { return DAILY_EVENT_MEETING_SESSION_DATA_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_WAITING_PARTICIPANT_ADDED\", function() { return DAILY_EVENT_WAITING_PARTICIPANT_ADDED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_WAITING_PARTICIPANT_UPDATED\", function() { return DAILY_EVENT_WAITING_PARTICIPANT_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_WAITING_PARTICIPANT_REMOVED\", function() { return DAILY_EVENT_WAITING_PARTICIPANT_REMOVED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_TRACK_STARTED\", function() { return DAILY_EVENT_TRACK_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_TRACK_STOPPED\", function() { return DAILY_EVENT_TRACK_STOPPED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_TRANSCRIPTION_STARTED\", function() { return DAILY_EVENT_TRANSCRIPTION_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_TRANSCRIPTION_STOPPED\", function() { return DAILY_EVENT_TRANSCRIPTION_STOPPED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_TRANSCRIPTION_ERROR\", function() { return DAILY_EVENT_TRANSCRIPTION_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_RECORDING_STARTED\", function() { return DAILY_EVENT_RECORDING_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_RECORDING_STOPPED\", function() { return DAILY_EVENT_RECORDING_STOPPED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_RECORDING_STATS\", function() { return DAILY_EVENT_RECORDING_STATS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_RECORDING_ERROR\", function() { return DAILY_EVENT_RECORDING_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_RECORDING_UPLOAD_COMPLETED\", function() { return DAILY_EVENT_RECORDING_UPLOAD_COMPLETED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_RECORDING_DATA\", function() { return DAILY_EVENT_RECORDING_DATA; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_APP_MSG\", function() { return DAILY_EVENT_APP_MSG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_INPUT_EVENT\", function() { return DAILY_EVENT_INPUT_EVENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED\", function() { return DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED\", function() { return DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED\", function() { return DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_REMOTE_MEDIA_PLAYER_ERROR_TYPE\", function() { return DAILY_REMOTE_MEDIA_PLAYER_ERROR_TYPE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED\", function() { return DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED\", function() { return DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_ACTIVE_SPEAKER_CHANGE\", function() { return DAILY_EVENT_ACTIVE_SPEAKER_CHANGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE\", function() { return DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_NETWORK_QUALITY_CHANGE\", function() { return DAILY_EVENT_NETWORK_QUALITY_CHANGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_NETWORK_CONNECTION\", function() { return DAILY_EVENT_NETWORK_CONNECTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_FULLSCREEN\", function() { return DAILY_EVENT_FULLSCREEN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_EXIT_FULLSCREEN\", function() { return DAILY_EVENT_EXIT_FULLSCREEN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LIVE_STREAMING_STARTED\", function() { return DAILY_EVENT_LIVE_STREAMING_STARTED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LIVE_STREAMING_STOPPED\", function() { return DAILY_EVENT_LIVE_STREAMING_STOPPED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LIVE_STREAMING_ERROR\", function() { return DAILY_EVENT_LIVE_STREAMING_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_LIVE_STREAMING_WARNING\", function() { return DAILY_LIVE_STREAMING_WARNING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_LANG_UPDATED\", function() { return DAILY_EVENT_LANG_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_SHOW_LOCAL_VIDEO_CHANGED\", function() { return DAILY_EVENT_SHOW_LOCAL_VIDEO_CHANGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_RECEIVE_SETTINGS_UPDATED\", function() { return DAILY_EVENT_RECEIVE_SETTINGS_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_INPUT_SETTINGS_UPDATED\", function() { return DAILY_EVENT_INPUT_SETTINGS_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_NONFATAL_ERROR\", function() { return DAILY_EVENT_NONFATAL_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_INPUT_SETTINGS_ERROR_TYPE\", function() { return DAILY_INPUT_SETTINGS_ERROR_TYPE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_SCREEN_SHARE_ERROR_TYPE\", function() { return DAILY_SCREEN_SHARE_ERROR_TYPE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_VIDEO_PROCESSOR_ERROR_TYPE\", function() { return DAILY_VIDEO_PROCESSOR_ERROR_TYPE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_ERROR\", function() { return DAILY_EVENT_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_EVENT_CUSTOM_BUTTON_CLICK\", function() { return DAILY_EVENT_CUSTOM_BUTTON_CLICK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MAX_APP_MSG_SIZE\", function() { return MAX_APP_MSG_SIZE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MAX_SESSION_DATA_SIZE\", function() { return MAX_SESSION_DATA_SIZE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MAX_USER_DATA_SIZE\", function() { return MAX_USER_DATA_SIZE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IFRAME_MESSAGE_MARKER\", function() { return IFRAME_MESSAGE_MARKER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_CUSTOM_INTEGRATIONS\", function() { return DAILY_METHOD_UPDATE_CUSTOM_INTEGRATIONS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_CUSTOM_TRAY_BUTTONS\", function() { return DAILY_METHOD_UPDATE_CUSTOM_TRAY_BUTTONS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_THEME\", function() { return DAILY_METHOD_SET_THEME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_START_CAMERA\", function() { return DAILY_METHOD_START_CAMERA; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_INPUT_DEVICES\", function() { return DAILY_METHOD_SET_INPUT_DEVICES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_OUTPUT_DEVICE\", function() { return DAILY_METHOD_SET_OUTPUT_DEVICE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_GET_INPUT_DEVICES\", function() { return DAILY_METHOD_GET_INPUT_DEVICES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_JOIN\", function() { return DAILY_METHOD_JOIN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_LEAVE\", function() { return DAILY_METHOD_LEAVE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_PARTICIPANT\", function() { return DAILY_METHOD_UPDATE_PARTICIPANT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_PARTICIPANTS\", function() { return DAILY_METHOD_UPDATE_PARTICIPANTS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_LOCAL_AUDIO\", function() { return DAILY_METHOD_LOCAL_AUDIO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_LOCAL_VIDEO\", function() { return DAILY_METHOD_LOCAL_VIDEO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_START_SCREENSHARE\", function() { return DAILY_METHOD_START_SCREENSHARE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_STOP_SCREENSHARE\", function() { return DAILY_METHOD_STOP_SCREENSHARE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_START_RECORDING\", function() { return DAILY_METHOD_START_RECORDING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_RECORDING\", function() { return DAILY_METHOD_UPDATE_RECORDING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_STOP_RECORDING\", function() { return DAILY_METHOD_STOP_RECORDING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_LOAD_CSS\", function() { return DAILY_METHOD_LOAD_CSS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_BANDWIDTH\", function() { return DAILY_METHOD_SET_BANDWIDTH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_GET_CALC_STATS\", function() { return DAILY_METHOD_GET_CALC_STATS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_ENUMERATE_DEVICES\", function() { return DAILY_METHOD_ENUMERATE_DEVICES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_CYCLE_CAMERA\", function() { return DAILY_METHOD_CYCLE_CAMERA; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_CAMERA\", function() { return DAILY_METHOD_SET_CAMERA; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_START_CUSTOM_TRACK\", function() { return DAILY_METHOD_START_CUSTOM_TRACK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_STOP_CUSTOM_TRACK\", function() { return DAILY_METHOD_STOP_CUSTOM_TRACK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_CYCLE_MIC\", function() { return DAILY_METHOD_CYCLE_MIC; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_GET_CAMERA_FACING_MODE\", function() { return DAILY_METHOD_GET_CAMERA_FACING_MODE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_APP_MSG\", function() { return DAILY_METHOD_APP_MSG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_ADD_FAKE_PARTICIPANT\", function() { return DAILY_METHOD_ADD_FAKE_PARTICIPANT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_SHOW_NAMES\", function() { return DAILY_METHOD_SET_SHOW_NAMES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_SHOW_LOCAL_VIDEO\", function() { return DAILY_METHOD_SET_SHOW_LOCAL_VIDEO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_SHOW_PARTICIPANTS_BAR\", function() { return DAILY_METHOD_SET_SHOW_PARTICIPANTS_BAR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_ACTIVE_SPEAKER_MODE\", function() { return DAILY_METHOD_SET_ACTIVE_SPEAKER_MODE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_REGISTER_INPUT_HANDLER\", function() { return DAILY_METHOD_REGISTER_INPUT_HANDLER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_GET_LANG\", function() { return DAILY_METHOD_GET_LANG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_LANG\", function() { return DAILY_METHOD_SET_LANG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_GET_MEETING_SESSION\", function() { return DAILY_METHOD_GET_MEETING_SESSION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_SESSION_DATA\", function() { return DAILY_METHOD_SET_SESSION_DATA; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_USER_NAME\", function() { return DAILY_METHOD_SET_USER_NAME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_USER_DATA\", function() { return DAILY_METHOD_SET_USER_DATA; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_DETECT_ALL_FACES\", function() { return DAILY_METHOD_DETECT_ALL_FACES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_ROOM\", function() { return DAILY_METHOD_ROOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_GET_NETWORK_TOPOLOGY\", function() { return DAILY_METHOD_GET_NETWORK_TOPOLOGY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_NETWORK_TOPOLOGY\", function() { return DAILY_METHOD_SET_NETWORK_TOPOLOGY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_PLAY_DING\", function() { return DAILY_METHOD_SET_PLAY_DING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_SET_SUBSCRIBE_TO_TRACKS_AUTOMATICALLY\", function() { return DAILY_METHOD_SET_SUBSCRIBE_TO_TRACKS_AUTOMATICALLY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_START_LIVE_STREAMING\", function() { return DAILY_METHOD_START_LIVE_STREAMING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_LIVE_STREAMING\", function() { return DAILY_METHOD_UPDATE_LIVE_STREAMING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_LIVE_STREAMING_ENDPOINTS\", function() { return DAILY_METHOD_UPDATE_LIVE_STREAMING_ENDPOINTS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_STOP_LIVE_STREAMING\", function() { return DAILY_METHOD_STOP_LIVE_STREAMING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_START_REMOTE_MEDIA_PLAYER\", function() { return DAILY_METHOD_START_REMOTE_MEDIA_PLAYER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_STOP_REMOTE_MEDIA_PLAYER\", function() { return DAILY_METHOD_STOP_REMOTE_MEDIA_PLAYER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_REMOTE_MEDIA_PLAYER\", function() { return DAILY_METHOD_UPDATE_REMOTE_MEDIA_PLAYER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_START_TRANSCRIPTION\", function() { return DAILY_METHOD_START_TRANSCRIPTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_STOP_TRANSCRIPTION\", function() { return DAILY_METHOD_STOP_TRANSCRIPTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_PREAUTH\", function() { return DAILY_METHOD_PREAUTH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_REQUEST_ACCESS\", function() { return DAILY_METHOD_REQUEST_ACCESS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_WAITING_PARTICIPANT\", function() { return DAILY_METHOD_UPDATE_WAITING_PARTICIPANT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_WAITING_PARTICIPANTS\", function() { return DAILY_METHOD_UPDATE_WAITING_PARTICIPANTS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_GET_SINGLE_PARTICIPANT_RECEIVE_SETTINGS\", function() { return DAILY_METHOD_GET_SINGLE_PARTICIPANT_RECEIVE_SETTINGS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_RECEIVE_SETTINGS\", function() { return DAILY_METHOD_UPDATE_RECEIVE_SETTINGS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_METHOD_UPDATE_INPUT_SETTINGS\", function() { return DAILY_METHOD_UPDATE_INPUT_SETTINGS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_CUSTOM_TRACK\", function() { return DAILY_CUSTOM_TRACK; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_UI_REQUEST_FULLSCREEN\", function() { return DAILY_UI_REQUEST_FULLSCREEN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_UI_EXIT_FULLSCREEN\", function() { return DAILY_UI_EXIT_FULLSCREEN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_JS_NETWORK_QUALITY\", function() { return DAILY_JS_NETWORK_QUALITY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_JS_NETWORK_THRESHOLDS\", function() { return DAILY_JS_NETWORK_THRESHOLDS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_JS_VIDEO_PROCESSOR_TYPES\", function() { return DAILY_JS_VIDEO_PROCESSOR_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING\", function() { return DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_JS_REMOTE_MEDIA_PLAYER_STATE\", function() { return DAILY_JS_REMOTE_MEDIA_PLAYER_STATE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_PARTICIPANT_TYPE\", function() { return DAILY_PARTICIPANT_TYPE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_PRESELECTED_BG_IMAGE_URLS_LENGTH\", function() { return DAILY_PRESELECTED_BG_IMAGE_URLS_LENGTH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DAILY_SUPPORTED_BG_IMG_TYPES\", function() { return DAILY_SUPPORTED_BG_IMG_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UPDATE_LIVE_STREAMING_ENDPOINTS_OP\", function() { return UPDATE_LIVE_STREAMING_ENDPOINTS_OP; });\n//\n// external - exported from module.js\n//\n// meeting states\nvar DAILY_STATE_NEW = 'new';\nvar DAILY_STATE_LOADING = 'loading';\nvar DAILY_STATE_LOADED = 'loaded';\nvar DAILY_STATE_JOINING = 'joining-meeting';\nvar DAILY_STATE_JOINED = 'joined-meeting';\nvar DAILY_STATE_LEFT = 'left-meeting';\nvar DAILY_STATE_ERROR = 'error'; // track states\n\nvar DAILY_TRACK_STATE_BLOCKED = 'blocked';\nvar DAILY_TRACK_STATE_OFF = 'off';\nvar DAILY_TRACK_STATE_SENDABLE = 'sendable';\nvar DAILY_TRACK_STATE_LOADING = 'loading';\nvar DAILY_TRACK_STATE_INTERRUPTED = 'interrupted';\nvar DAILY_TRACK_STATE_PLAYABLE = 'playable'; // meeting access\n\nvar DAILY_ACCESS_UNKNOWN = 'unknown';\nvar DAILY_ACCESS_LEVEL_FULL = 'full';\nvar DAILY_ACCESS_LEVEL_LOBBY = 'lobby';\nvar DAILY_ACCESS_LEVEL_NONE = 'none'; // receive settings\n\nvar DAILY_RECEIVE_SETTINGS_BASE_KEY = 'base';\nvar DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY = '*'; // error types\n\nvar DAILY_FATAL_ERROR_EJECTED = 'ejected';\nvar DAILY_FATAL_ERROR_NBF_ROOM = 'nbf-room';\nvar DAILY_FATAL_ERROR_NBF_TOKEN = 'nbf-token';\nvar DAILY_FATAL_ERROR_EXP_ROOM = 'exp-room';\nvar DAILY_FATAL_ERROR_EXP_TOKEN = 'exp-token';\nvar DAILY_FATAL_ERROR_MEETING_FULL = 'meeting-full';\nvar DAILY_CAMERA_ERROR_CAM_IN_USE = 'cam-in-use';\nvar DAILY_CAMERA_ERROR_MIC_IN_USE = 'mic-in-use';\nvar DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE = 'cam-mic-in-use';\nvar DAILY_CAMERA_ERROR_PERMISSIONS = 'permissions';\nvar DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES = 'undefined-mediadevices';\nvar DAILY_CAMERA_ERROR_NOT_FOUND = 'not-found';\nvar DAILY_CAMERA_ERROR_CONSTRAINTS = 'constraints';\nvar DAILY_CAMERA_ERROR_UNKNOWN = 'unknown'; // events\n\nvar DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG = 'iframe-ready-for-launch-config';\nvar DAILY_EVENT_IFRAME_LAUNCH_CONFIG = 'iframe-launch-config';\nvar DAILY_EVENT_THEME_UPDATED = 'theme-updated';\nvar DAILY_EVENT_LOADING = 'loading';\nvar DAILY_EVENT_LOAD_ATTEMPT_FAILED = 'load-attempt-failed';\nvar DAILY_EVENT_LOADED = 'loaded';\nvar DAILY_EVENT_STARTED_CAMERA = 'started-camera';\nvar DAILY_EVENT_CAMERA_ERROR = 'camera-error';\nvar DAILY_EVENT_JOINING_MEETING = 'joining-meeting';\nvar DAILY_EVENT_JOINED_MEETING = 'joined-meeting';\nvar DAILY_EVENT_LEFT_MEETING = 'left-meeting';\nvar DAILY_EVENT_AVAILABLE_DEVICES_UPDATED = 'available-devices-updated';\nvar DAILY_EVENT_SELECTED_DEVICES_UPDATED = 'selected-devices-updated';\nvar DAILY_EVENT_PARTICIPANT_JOINED = 'participant-joined';\nvar DAILY_EVENT_PARTICIPANT_UPDATED = 'participant-updated';\nvar DAILY_EVENT_PARTICIPANT_LEFT = 'participant-left';\nvar DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED = 'participant-counts-updated';\nvar DAILY_EVENT_ACCESS_STATE_UPDATED = 'access-state-updated';\nvar DAILY_EVENT_MEETING_SESSION_UPDATED = 'meeting-session-updated';\nvar DAILY_EVENT_MEETING_SESSION_STATE_UPDATED = 'meeting-session-state-updated';\nvar DAILY_EVENT_MEETING_SESSION_DATA_ERROR = 'meeting-session-data-error';\nvar DAILY_EVENT_WAITING_PARTICIPANT_ADDED = 'waiting-participant-added';\nvar DAILY_EVENT_WAITING_PARTICIPANT_UPDATED = 'waiting-participant-updated';\nvar DAILY_EVENT_WAITING_PARTICIPANT_REMOVED = 'waiting-participant-removed';\nvar DAILY_EVENT_TRACK_STARTED = 'track-started';\nvar DAILY_EVENT_TRACK_STOPPED = 'track-stopped';\nvar DAILY_EVENT_TRANSCRIPTION_STARTED = 'transcription-started';\nvar DAILY_EVENT_TRANSCRIPTION_STOPPED = 'transcription-stopped';\nvar DAILY_EVENT_TRANSCRIPTION_ERROR = 'transcription-error';\nvar DAILY_EVENT_RECORDING_STARTED = 'recording-started';\nvar DAILY_EVENT_RECORDING_STOPPED = 'recording-stopped';\nvar DAILY_EVENT_RECORDING_STATS = 'recording-stats';\nvar DAILY_EVENT_RECORDING_ERROR = 'recording-error';\nvar DAILY_EVENT_RECORDING_UPLOAD_COMPLETED = 'recording-upload-completed';\nvar DAILY_EVENT_RECORDING_DATA = 'recording-data';\nvar DAILY_EVENT_APP_MSG = 'app-message';\nvar DAILY_EVENT_INPUT_EVENT = 'input-event';\nvar DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED = 'remote-media-player-started';\nvar DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED = 'remote-media-player-updated';\nvar DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED = 'remote-media-player-stopped';\nvar DAILY_REMOTE_MEDIA_PLAYER_ERROR_TYPE = 'remote-media-player-error';\nvar DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED = 'local-screen-share-started';\nvar DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED = 'local-screen-share-stopped';\nvar DAILY_EVENT_ACTIVE_SPEAKER_CHANGE = 'active-speaker-change';\nvar DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE = 'active-speaker-mode-change';\nvar DAILY_EVENT_NETWORK_QUALITY_CHANGE = 'network-quality-change';\nvar DAILY_EVENT_NETWORK_CONNECTION = 'network-connection';\nvar DAILY_EVENT_FULLSCREEN = 'fullscreen';\nvar DAILY_EVENT_EXIT_FULLSCREEN = 'exited-fullscreen';\nvar DAILY_EVENT_LIVE_STREAMING_STARTED = 'live-streaming-started';\nvar DAILY_EVENT_LIVE_STREAMING_STOPPED = 'live-streaming-stopped';\nvar DAILY_EVENT_LIVE_STREAMING_ERROR = 'live-streaming-error';\nvar DAILY_LIVE_STREAMING_WARNING = 'live-streaming-warning';\nvar DAILY_EVENT_LANG_UPDATED = 'lang-updated';\nvar DAILY_EVENT_SHOW_LOCAL_VIDEO_CHANGED = 'show-local-video-changed';\nvar DAILY_EVENT_RECEIVE_SETTINGS_UPDATED = 'receive-settings-updated';\nvar DAILY_EVENT_INPUT_SETTINGS_UPDATED = 'input-settings-updated';\nvar DAILY_EVENT_NONFATAL_ERROR = 'nonfatal-error';\nvar DAILY_INPUT_SETTINGS_ERROR_TYPE = 'input-settings-error';\nvar DAILY_SCREEN_SHARE_ERROR_TYPE = 'screen-share-error';\nvar DAILY_VIDEO_PROCESSOR_ERROR_TYPE = 'video-processor-error';\nvar DAILY_EVENT_ERROR = 'error';\nvar DAILY_EVENT_CUSTOM_BUTTON_CLICK = 'custom-button-click'; //\n// internal\n//\n\nvar MAX_APP_MSG_SIZE = 1024 * 4;\nvar MAX_SESSION_DATA_SIZE = 1024 * 4 * 25;\nvar MAX_USER_DATA_SIZE = 1024 * 4;\nvar IFRAME_MESSAGE_MARKER = 'iframe-call-message';\nvar DAILY_METHOD_UPDATE_CUSTOM_INTEGRATIONS = 'update-custom-integrations';\nvar DAILY_METHOD_UPDATE_CUSTOM_TRAY_BUTTONS = 'update-custom-tray-buttons';\nvar DAILY_METHOD_SET_THEME = 'set-theme';\nvar DAILY_METHOD_START_CAMERA = 'start-camera';\nvar DAILY_METHOD_SET_INPUT_DEVICES = 'set-input-devices';\nvar DAILY_METHOD_SET_OUTPUT_DEVICE = 'set-output-device';\nvar DAILY_METHOD_GET_INPUT_DEVICES = 'get-input-devices';\nvar DAILY_METHOD_JOIN = 'join-meeting';\nvar DAILY_METHOD_LEAVE = 'leave-meeting';\nvar DAILY_METHOD_UPDATE_PARTICIPANT = 'update-participant';\nvar DAILY_METHOD_UPDATE_PARTICIPANTS = 'update-participants';\nvar DAILY_METHOD_LOCAL_AUDIO = 'local-audio';\nvar DAILY_METHOD_LOCAL_VIDEO = 'local-video';\nvar DAILY_METHOD_START_SCREENSHARE = 'local-screen-start';\nvar DAILY_METHOD_STOP_SCREENSHARE = 'local-screen-stop';\nvar DAILY_METHOD_START_RECORDING = 'local-recording-start';\nvar DAILY_METHOD_UPDATE_RECORDING = 'daily-method-update-recording';\nvar DAILY_METHOD_STOP_RECORDING = 'local-recording-stop';\nvar DAILY_METHOD_LOAD_CSS = 'load-css';\nvar DAILY_METHOD_SET_BANDWIDTH = 'set-bandwidth';\nvar DAILY_METHOD_GET_CALC_STATS = 'get-calc-stats';\nvar DAILY_METHOD_ENUMERATE_DEVICES = 'enumerate-devices';\nvar DAILY_METHOD_CYCLE_CAMERA = 'cycle-camera';\nvar DAILY_METHOD_SET_CAMERA = 'set-camera';\nvar DAILY_METHOD_START_CUSTOM_TRACK = 'start-custom-track';\nvar DAILY_METHOD_STOP_CUSTOM_TRACK = 'stop-custom-track';\nvar DAILY_METHOD_CYCLE_MIC = 'cycle-mic';\nvar DAILY_METHOD_GET_CAMERA_FACING_MODE = 'get-camera-facing-mode';\nvar DAILY_METHOD_APP_MSG = 'app-msg';\nvar DAILY_METHOD_ADD_FAKE_PARTICIPANT = 'add-fake-participant';\nvar DAILY_METHOD_SET_SHOW_NAMES = 'set-show-names';\nvar DAILY_METHOD_SET_SHOW_LOCAL_VIDEO = 'set-show-local-video';\nvar DAILY_METHOD_SET_SHOW_PARTICIPANTS_BAR = 'set-show-participants-bar';\nvar DAILY_METHOD_SET_ACTIVE_SPEAKER_MODE = 'set-active-speaker-mode';\nvar DAILY_METHOD_REGISTER_INPUT_HANDLER = 'register-input-handler';\nvar DAILY_METHOD_GET_LANG = 'get-daily-lang';\nvar DAILY_METHOD_SET_LANG = 'set-daily-lang';\nvar DAILY_METHOD_GET_MEETING_SESSION = 'get-meeting-session';\nvar DAILY_METHOD_SET_SESSION_DATA = 'set-session-data';\nvar DAILY_METHOD_SET_USER_NAME = 'set-user-name';\nvar DAILY_METHOD_SET_USER_DATA = 'set-user-data';\nvar DAILY_METHOD_DETECT_ALL_FACES = 'detect-all-faces';\nvar DAILY_METHOD_ROOM = 'lib-room-info';\nvar DAILY_METHOD_GET_NETWORK_TOPOLOGY = 'get-network-topology';\nvar DAILY_METHOD_SET_NETWORK_TOPOLOGY = 'set-network-topology';\nvar DAILY_METHOD_SET_PLAY_DING = 'daily-method-set-play-ding';\nvar DAILY_METHOD_SET_SUBSCRIBE_TO_TRACKS_AUTOMATICALLY = 'daily-method-subscribe-to-tracks-automatically';\nvar DAILY_METHOD_START_LIVE_STREAMING = 'daily-method-start-live-streaming';\nvar DAILY_METHOD_UPDATE_LIVE_STREAMING = 'daily-method-update-live-streaming';\nvar DAILY_METHOD_UPDATE_LIVE_STREAMING_ENDPOINTS = 'daily-method-update-live-streaming-endpoints';\nvar DAILY_METHOD_STOP_LIVE_STREAMING = 'daily-method-stop-live-streaming';\nvar DAILY_METHOD_START_REMOTE_MEDIA_PLAYER = 'daily-method-start-remote-media-player';\nvar DAILY_METHOD_STOP_REMOTE_MEDIA_PLAYER = 'daily-method-stop-remote-media-player';\nvar DAILY_METHOD_UPDATE_REMOTE_MEDIA_PLAYER = 'daily-method-update-remote-media-player';\nvar DAILY_METHOD_START_TRANSCRIPTION = 'daily-method-start-transcription';\nvar DAILY_METHOD_STOP_TRANSCRIPTION = 'daily-method-stop-transcription';\nvar DAILY_METHOD_PREAUTH = 'daily-method-preauth';\nvar DAILY_METHOD_REQUEST_ACCESS = 'daily-method-request-access';\nvar DAILY_METHOD_UPDATE_WAITING_PARTICIPANT = 'daily-method-update-waiting-participant';\nvar DAILY_METHOD_UPDATE_WAITING_PARTICIPANTS = 'daily-method-update-waiting-participants';\nvar DAILY_METHOD_GET_SINGLE_PARTICIPANT_RECEIVE_SETTINGS = 'get-single-participant-receive-settings';\nvar DAILY_METHOD_UPDATE_RECEIVE_SETTINGS = 'update-receive-settings';\nvar DAILY_METHOD_UPDATE_INPUT_SETTINGS = 'update-input-settings';\nvar DAILY_CUSTOM_TRACK = 'daily-custom-track';\nvar DAILY_UI_REQUEST_FULLSCREEN = 'request-fullscreen';\nvar DAILY_UI_EXIT_FULLSCREEN = 'request-exit-fullscreen';\nvar DAILY_JS_NETWORK_QUALITY = {\n VERY_LOW: 'very-low',\n LOW: 'low',\n HIGH: 'high'\n};\nvar DAILY_JS_NETWORK_THRESHOLDS = {\n VERY_LOW: 'very-low',\n LOW: 'low',\n GOOD: 'good'\n}; // video processor settings enum\n\nvar DAILY_JS_VIDEO_PROCESSOR_TYPES = {\n NONE: 'none',\n BGBLUR: 'background-blur',\n BGIMAGE: 'background-image' // CUSTOM: 'custom',\n\n};\nvar DAILY_JS_REMOTE_MEDIA_PLAYER_SETTING = {\n PLAY: 'play',\n PAUSE: 'pause'\n};\nvar DAILY_JS_REMOTE_MEDIA_PLAYER_STATE = {\n PLAYING: 'playing',\n PAUSED: 'paused',\n BUFFERING: 'buffering',\n STOPPED: 'stopped'\n};\nvar DAILY_PARTICIPANT_TYPE = {\n REMOTE_MEDIA_PLAYER: 'remote-media-player'\n};\nvar DAILY_PRESELECTED_BG_IMAGE_URLS_LENGTH = 10;\nvar DAILY_SUPPORTED_BG_IMG_TYPES = ['jpg', 'png', 'jpeg'];\nvar UPDATE_LIVE_STREAMING_ENDPOINTS_OP = {\n ADD_ENDPOINTS: 'add-endpoints',\n REMOVE_ENDPOINTS: 'remove-endpoints'\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL0NvbW1vbkluY2x1ZGVzLmpzPzI3ZmEiXSwibmFtZXMiOlsiREFJTFlfU1RBVEVfTkVXIiwiREFJTFlfU1RBVEVfTE9BRElORyIsIkRBSUxZX1NUQVRFX0xPQURFRCIsIkRBSUxZX1NUQVRFX0pPSU5JTkciLCJEQUlMWV9TVEFURV9KT0lORUQiLCJEQUlMWV9TVEFURV9MRUZUIiwiREFJTFlfU1RBVEVfRVJST1IiLCJEQUlMWV9UUkFDS19TVEFURV9CTE9DS0VEIiwiREFJTFlfVFJBQ0tfU1RBVEVfT0ZGIiwiREFJTFlfVFJBQ0tfU1RBVEVfU0VOREFCTEUiLCJEQUlMWV9UUkFDS19TVEFURV9MT0FESU5HIiwiREFJTFlfVFJBQ0tfU1RBVEVfSU5URVJSVVBURUQiLCJEQUlMWV9UUkFDS19TVEFURV9QTEFZQUJMRSIsIkRBSUxZX0FDQ0VTU19VTktOT1dOIiwiREFJTFlfQUNDRVNTX0xFVkVMX0ZVTEwiLCJEQUlMWV9BQ0NFU1NfTEVWRUxfTE9CQlkiLCJEQUlMWV9BQ0NFU1NfTEVWRUxfTk9ORSIsIkRBSUxZX1JFQ0VJVkVfU0VUVElOR1NfQkFTRV9LRVkiLCJEQUlMWV9SRUNFSVZFX1NFVFRJTkdTX0FMTF9QQVJUSUNJUEFOVFNfS0VZIiwiREFJTFlfRkFUQUxfRVJST1JfRUpFQ1RFRCIsIkRBSUxZX0ZBVEFMX0VSUk9SX05CRl9ST09NIiwiREFJTFlfRkFUQUxfRVJST1JfTkJGX1RPS0VOIiwiREFJTFlfRkFUQUxfRVJST1JfRVhQX1JPT00iLCJEQUlMWV9GQVRBTF9FUlJPUl9FWFBfVE9LRU4iLCJEQUlMWV9GQVRBTF9FUlJPUl9NRUVUSU5HX0ZVTEwiLCJEQUlMWV9DQU1FUkFfRVJST1JfQ0FNX0lOX1VTRSIsIkRBSUxZX0NBTUVSQV9FUlJPUl9NSUNfSU5fVVNFIiwiREFJTFlfQ0FNRVJBX0VSUk9SX0NBTV9BTkRfTUlDX0lOX1VTRSIsIkRBSUxZX0NBTUVSQV9FUlJPUl9QRVJNSVNTSU9OUyIsIkRBSUxZX0NBTUVSQV9FUlJPUl9VTkRFRl9NRURJQURFVklDRVMiLCJEQUlMWV9DQU1FUkFfRVJST1JfTk9UX0ZPVU5EIiwiREFJTFlfQ0FNRVJBX0VSUk9SX0NPTlNUUkFJTlRTIiwiREFJTFlfQ0FNRVJBX0VSUk9SX1VOS05PV04iLCJEQUlMWV9FVkVOVF9JRlJBTUVfUkVBRFlfRk9SX0xBVU5DSF9DT05GSUciLCJEQUlMWV9FVkVOVF9JRlJBTUVfTEFVTkNIX0NPTkZJRyIsIkRBSUxZX0VWRU5UX1RIRU1FX1VQREFURUQiLCJEQUlMWV9FVkVOVF9MT0FESU5HIiwiREFJTFlfRVZFTlRfTE9BRF9BVFRFTVBUX0ZBSUxFRCIsIkRBSUxZX0VWRU5UX0xPQURFRCIsIkRBSUxZX0VWRU5UX1NUQVJURURfQ0FNRVJBIiwiREFJTFlfRVZFTlRfQ0FNRVJBX0VSUk9SIiwiREFJTFlfRVZFTlRfSk9JTklOR19NRUVUSU5HIiwiREFJTFlfRVZFTlRfSk9JTkVEX01FRVRJTkciLCJEQUlMWV9FVkVOVF9MRUZUX01FRVRJTkciLCJEQUlMWV9FVkVOVF9BVkFJTEFCTEVfREVWSUNFU19VUERBVEVEIiwiREFJTFlfRVZFTlRfU0VMRUNURURfREVWSUNFU19VUERBVEVEIiwiREFJTFlfRVZFTlRfUEFSVElDSVBBTlRfSk9JTkVEIiwiREFJTFlfRVZFTlRfUEFSVElDSVBBTlRfVVBEQVRFRCIsIkRBSUxZX0VWRU5UX1BBUlRJQ0lQQU5UX0xFRlQiLCJEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9DT1VOVFNfVVBEQVRFRCIsIkRBSUxZX0VWRU5UX0FDQ0VTU19TVEFURV9VUERBVEVEIiwiREFJTFlfRVZFTlRfTUVFVElOR19TRVNTSU9OX1VQREFURUQiLCJEQUlMWV9FVkVOVF9NRUVUSU5HX1NFU1NJT05fU1RBVEVfVVBEQVRFRCIsIkRBSUxZX0VWRU5UX01FRVRJTkdfU0VTU0lPTl9EQVRBX0VSUk9SIiwiREFJTFlfRVZFTlRfV0FJVElOR19QQVJUSUNJUEFOVF9BRERFRCIsIkRBSUxZX0VWRU5UX1dBSVRJTkdfUEFSVElDSVBBTlRfVVBEQVRFRCIsIkRBSUxZX0VWRU5UX1dBSVRJTkdfUEFSVElDSVBBTlRfUkVNT1ZFRCIsIkRBSUxZX0VWRU5UX1RSQUNLX1NUQVJURUQiLCJEQUlMWV9FVkVOVF9UUkFDS19TVE9QUEVEIiwiREFJTFlfRVZFTlRfVFJBTlNDUklQVElPTl9TVEFSVEVEIiwiREFJTFlfRVZFTlRfVFJBTlNDUklQVElPTl9TVE9QUEVEIiwiREFJTFlfRVZFTlRfVFJBTlNDUklQVElPTl9FUlJPUiIsIkRBSUxZX0VWRU5UX1JFQ09SRElOR19TVEFSVEVEIiwiREFJTFlfRVZFTlRfUkVDT1JESU5HX1NUT1BQRUQiLCJEQUlMWV9FVkVOVF9SRUNPUkRJTkdfU1RBVFMiLCJEQUlMWV9FVkVOVF9SRUNPUkRJTkdfRVJST1IiLCJEQUlMWV9FVkVOVF9SRUNPUkRJTkdfVVBMT0FEX0NPTVBMRVRFRCIsIkRBSUxZX0VWRU5UX1JFQ09SRElOR19EQVRBIiwiREFJTFlfRVZFTlRfQVBQX01TRyIsIkRBSUxZX0VWRU5UX0lOUFVUX0VWRU5UIiwiREFJTFlfRVZFTlRfUkVNT1RFX01FRElBX1BMQVlFUl9TVEFSVEVEIiwiREFJTFlfRVZFTlRfUkVNT1RFX01FRElBX1BMQVlFUl9VUERBVEVEIiwiREFJTFlfRVZFTlRfUkVNT1RFX01FRElBX1BMQVlFUl9TVE9QUEVEIiwiREFJTFlfUkVNT1RFX01FRElBX1BMQVlFUl9FUlJPUl9UWVBFIiwiREFJTFlfRVZFTlRfTE9DQUxfU0NSRUVOX1NIQVJFX1NUQVJURUQiLCJEQUlMWV9FVkVOVF9MT0NBTF9TQ1JFRU5fU0hBUkVfU1RPUFBFRCIsIkRBSUxZX0VWRU5UX0FDVElWRV9TUEVBS0VSX0NIQU5HRSIsIkRBSUxZX0VWRU5UX0FDVElWRV9TUEVBS0VSX01PREVfQ0hBTkdFIiwiREFJTFlfRVZFTlRfTkVUV09SS19RVUFMSVRZX0NIQU5HRSIsIkRBSUxZX0VWRU5UX05FVFdPUktfQ09OTkVDVElPTiIsIkRBSUxZX0VWRU5UX0ZVTExTQ1JFRU4iLCJEQUlMWV9FVkVOVF9FWElUX0ZVTExTQ1JFRU4iLCJEQUlMWV9FVkVOVF9MSVZFX1NUUkVBTUlOR19TVEFSVEVEIiwiREFJTFlfRVZFTlRfTElWRV9TVFJFQU1JTkdfU1RPUFBFRCIsIkRBSUxZX0VWRU5UX0xJVkVfU1RSRUFNSU5HX0VSUk9SIiwiREFJTFlfTElWRV9TVFJFQU1JTkdfV0FSTklORyIsIkRBSUxZX0VWRU5UX0xBTkdfVVBEQVRFRCIsIkRBSUxZX0VWRU5UX1NIT1dfTE9DQUxfVklERU9fQ0hBTkdFRCIsIkRBSUxZX0VWRU5UX1JFQ0VJVkVfU0VUVElOR1NfVVBEQVRFRCIsIkRBSUxZX0VWRU5UX0lOUFVUX1NFVFRJTkdTX1VQREFURUQiLCJEQUlMWV9FVkVOVF9OT05GQVRBTF9FUlJPUiIsIkRBSUxZX0lOUFVUX1NFVFRJTkdTX0VSUk9SX1RZUEUiLCJEQUlMWV9TQ1JFRU5fU0hBUkVfRVJST1JfVFlQRSIsIkRBSUxZX1ZJREVPX1BST0NFU1NPUl9FUlJPUl9UWVBFIiwiREFJTFlfRVZFTlRfRVJST1IiLCJEQUlMWV9FVkVOVF9DVVNUT01fQlVUVE9OX0NMSUNLIiwiTUFYX0FQUF9NU0dfU0laRSIsIk1BWF9TRVNTSU9OX0RBVEFfU0laRSIsIk1BWF9VU0VSX0RBVEFfU0laRSIsIklGUkFNRV9NRVNTQUdFX01BUktFUiIsIkRBSUxZX01FVEhPRF9VUERBVEVfQ1VTVE9NX0lOVEVHUkFUSU9OUyIsIkRBSUxZX01FVEhPRF9VUERBVEVfQ1VTVE9NX1RSQVlfQlVUVE9OUyIsIkRBSUxZX01FVEhPRF9TRVRfVEhFTUUiLCJEQUlMWV9NRVRIT0RfU1RBUlRfQ0FNRVJBIiwiREFJTFlfTUVUSE9EX1NFVF9JTlBVVF9ERVZJQ0VTIiwiREFJTFlfTUVUSE9EX1NFVF9PVVRQVVRfREVWSUNFIiwiREFJTFlfTUVUSE9EX0dFVF9JTlBVVF9ERVZJQ0VTIiwiREFJTFlfTUVUSE9EX0pPSU4iLCJEQUlMWV9NRVRIT0RfTEVBVkUiLCJEQUlMWV9NRVRIT0RfVVBEQVRFX1BBUlRJQ0lQQU5UIiwiREFJTFlfTUVUSE9EX1VQREFURV9QQVJUSUNJUEFOVFMiLCJEQUlMWV9NRVRIT0RfTE9DQUxfQVVESU8iLCJEQUlMWV9NRVRIT0RfTE9DQUxfVklERU8iLCJEQUlMWV9NRVRIT0RfU1RBUlRfU0NSRUVOU0hBUkUiLCJEQUlMWV9NRVRIT0RfU1RPUF9TQ1JFRU5TSEFSRSIsIkRBSUxZX01FVEhPRF9TVEFSVF9SRUNPUkRJTkciLCJEQUlMWV9NRVRIT0RfVVBEQVRFX1JFQ09SRElORyIsIkRBSUxZX01FVEhPRF9TVE9QX1JFQ09SRElORyIsIkRBSUxZX01FVEhPRF9MT0FEX0NTUyIsIkRBSUxZX01FVEhPRF9TRVRfQkFORFdJRFRIIiwiREFJTFlfTUVUSE9EX0dFVF9DQUxDX1NUQVRTIiwiREFJTFlfTUVUSE9EX0VOVU1FUkFURV9ERVZJQ0VTIiwiREFJTFlfTUVUSE9EX0NZQ0xFX0NBTUVSQSIsIkRBSUxZX01FVEhPRF9TRVRfQ0FNRVJBIiwiREFJTFlfTUVUSE9EX1NUQVJUX0NVU1RPTV9UUkFDSyIsIkRBSUxZX01FVEhPRF9TVE9QX0NVU1RPTV9UUkFDSyIsIkRBSUxZX01FVEhPRF9DWUNMRV9NSUMiLCJEQUlMWV9NRVRIT0RfR0VUX0NBTUVSQV9GQUNJTkdfTU9ERSIsIkRBSUxZX01FVEhPRF9BUFBfTVNHIiwiREFJTFlfTUVUSE9EX0FERF9GQUtFX1BBUlRJQ0lQQU5UIiwiREFJTFlfTUVUSE9EX1NFVF9TSE9XX05BTUVTIiwiREFJTFlfTUVUSE9EX1NFVF9TSE9XX0xPQ0FMX1ZJREVPIiwiREFJTFlfTUVUSE9EX1NFVF9TSE9XX1BBUlRJQ0lQQU5UU19CQVIiLCJEQUlMWV9NRVRIT0RfU0VUX0FDVElWRV9TUEVBS0VSX01PREUiLCJEQUlMWV9NRVRIT0RfUkVHSVNURVJfSU5QVVRfSEFORExFUiIsIkRBSUxZX01FVEhPRF9HRVRfTEFORyIsIkRBSUxZX01FVEhPRF9TRVRfTEFORyIsIkRBSUxZX01FVEhPRF9HRVRfTUVFVElOR19TRVNTSU9OIiwiREFJTFlfTUVUSE9EX1NFVF9TRVNTSU9OX0RBVEEiLCJEQUlMWV9NRVRIT0RfU0VUX1VTRVJfTkFNRSIsIkRBSUxZX01FVEhPRF9TRVRfVVNFUl9EQVRBIiwiREFJTFlfTUVUSE9EX0RFVEVDVF9BTExfRkFDRVMiLCJEQUlMWV9NRVRIT0RfUk9PTSIsIkRBSUxZX01FVEhPRF9HRVRfTkVUV09SS19UT1BPTE9HWSIsIkRBSUxZX01FVEhPRF9TRVRfTkVUV09SS19UT1BPTE9HWSIsIkRBSUxZX01FVEhPRF9TRVRfUExBWV9ESU5HIiwiREFJTFlfTUVUSE9EX1NFVF9TVUJTQ1JJQkVfVE9fVFJBQ0tTX0FVVE9NQVRJQ0FMTFkiLCJEQUlMWV9NRVRIT0RfU1RBUlRfTElWRV9TVFJFQU1JTkciLCJEQUlMWV9NRVRIT0RfVVBEQVRFX0xJVkVfU1RSRUFNSU5HIiwiREFJTFlfTUVUSE9EX1VQREFURV9MSVZFX1NUUkVBTUlOR19FTkRQT0lOVFMiLCJEQUlMWV9NRVRIT0RfU1RPUF9MSVZFX1NUUkVBTUlORyIsIkRBSUxZX01FVEhPRF9TVEFSVF9SRU1PVEVfTUVESUFfUExBWUVSIiwiREFJTFlfTUVUSE9EX1NUT1BfUkVNT1RFX01FRElBX1BMQVlFUiIsIkRBSUxZX01FVEhPRF9VUERBVEVfUkVNT1RFX01FRElBX1BMQVlFUiIsIkRBSUxZX01FVEhPRF9TVEFSVF9UUkFOU0NSSVBUSU9OIiwiREFJTFlfTUVUSE9EX1NUT1BfVFJBTlNDUklQVElPTiIsIkRBSUxZX01FVEhPRF9QUkVBVVRIIiwiREFJTFlfTUVUSE9EX1JFUVVFU1RfQUNDRVNTIiwiREFJTFlfTUVUSE9EX1VQREFURV9XQUlUSU5HX1BBUlRJQ0lQQU5UIiwiREFJTFlfTUVUSE9EX1VQREFURV9XQUlUSU5HX1BBUlRJQ0lQQU5UUyIsIkRBSUxZX01FVEhPRF9HRVRfU0lOR0xFX1BBUlRJQ0lQQU5UX1JFQ0VJVkVfU0VUVElOR1MiLCJEQUlMWV9NRVRIT0RfVVBEQVRFX1JFQ0VJVkVfU0VUVElOR1MiLCJEQUlMWV9NRVRIT0RfVVBEQVRFX0lOUFVUX1NFVFRJTkdTIiwiREFJTFlfQ1VTVE9NX1RSQUNLIiwiREFJTFlfVUlfUkVRVUVTVF9GVUxMU0NSRUVOIiwiREFJTFlfVUlfRVhJVF9GVUxMU0NSRUVOIiwiREFJTFlfSlNfTkVUV09SS19RVUFMSVRZIiwiVkVSWV9MT1ciLCJMT1ciLCJISUdIIiwiREFJTFlfSlNfTkVUV09SS19USFJFU0hPTERTIiwiR09PRCIsIkRBSUxZX0pTX1ZJREVPX1BST0NFU1NPUl9UWVBFUyIsIk5PTkUiLCJCR0JMVVIiLCJCR0lNQUdFIiwiREFJTFlfSlNfUkVNT1RFX01FRElBX1BMQVlFUl9TRVRUSU5HIiwiUExBWSIsIlBBVVNFIiwiREFJTFlfSlNfUkVNT1RFX01FRElBX1BMQVlFUl9TVEFURSIsIlBMQVlJTkciLCJQQVVTRUQiLCJCVUZGRVJJTkciLCJTVE9QUEVEIiwiREFJTFlfUEFSVElDSVBBTlRfVFlQRSIsIlJFTU9URV9NRURJQV9QTEFZRVIiLCJEQUlMWV9QUkVTRUxFQ1RFRF9CR19JTUFHRV9VUkxTX0xFTkdUSCIsIkRBSUxZX1NVUFBPUlRFRF9CR19JTUdfVFlQRVMiLCJVUERBVEVfTElWRV9TVFJFQU1JTkdfRU5EUE9JTlRTX09QIiwiQUREX0VORFBPSU5UUyIsIlJFTU9WRV9FTkRQT0lOVFMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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d2l0aC1wbHVvdC1jb3JlL0NvbW1vbkluY2x1ZGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8vIGV4dGVybmFsIC0gZXhwb3J0ZWQgZnJvbSBtb2R1bGUuanNcbi8vXG5cbi8vIG1lZXRpbmcgc3RhdGVzXG5cbmV4cG9ydCBjb25zdCBEQUlMWV9TVEFURV9ORVcgPSAnbmV3JztcbmV4cG9ydCBjb25zdCBEQUlMWV9TVEFURV9MT0FESU5HID0gJ2xvYWRpbmcnO1xuZXhwb3J0IGNvbnN0IERBSUxZX1NUQVRFX0xPQURFRCA9ICdsb2FkZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX1NUQVRFX0pPSU5JTkcgPSAnam9pbmluZy1tZWV0aW5nJztcbmV4cG9ydCBjb25zdCBEQUlMWV9TVEFURV9KT0lORUQgPSAnam9pbmVkLW1lZXRpbmcnO1xuZXhwb3J0IGNvbnN0IERBSUxZX1NUQVRFX0xFRlQgPSAnbGVmdC1tZWV0aW5nJztcbmV4cG9ydCBjb25zdCBEQUlMWV9TVEFURV9FUlJPUiA9ICdlcnJvcic7XG5cbi8vIHRyYWNrIHN0YXRlc1xuXG5leHBvcnQgY29uc3QgREFJTFlfVFJBQ0tfU1RBVEVfQkxPQ0tFRCA9ICdibG9ja2VkJztcbmV4cG9ydCBjb25zdCBEQUlMWV9UUkFDS19TVEFURV9PRkYgPSAnb2ZmJztcbmV4cG9ydCBjb25zdCBEQUlMWV9UUkFDS19TVEFURV9TRU5EQUJMRSA9ICdzZW5kYWJsZSc7XG5leHBvcnQgY29uc3QgREFJTFlfVFJBQ0tfU1RBVEVfTE9BRElORyA9ICdsb2FkaW5nJztcbmV4cG9ydCBjb25zdCBEQUlMWV9UUkFDS19TVEFURV9JTlRFUlJVUFRFRCA9ICdpbnRlcnJ1cHRlZCc7XG5leHBvcnQgY29uc3QgREFJTFlfVFJBQ0tfU1RBVEVfUExBWUFCTEUgPSAncGxheWFibGUnO1xuXG4vLyBtZWV0aW5nIGFjY2Vzc1xuXG5leHBvcnQgY29uc3QgREFJTFlfQUNDRVNTX1VOS05PV04gPSAndW5rbm93bic7XG5leHBvcnQgY29uc3QgREFJTFlfQUNDRVNTX0xFVkVMX0ZVTEwgPSAnZnVsbCc7XG5leHBvcnQgY29uc3QgREFJTFlfQUNDRVNTX0xFVkVMX0xPQkJZID0gJ2xvYmJ5JztcbmV4cG9ydCBjb25zdCBEQUlMWV9BQ0NFU1NfTEVWRUxfTk9ORSA9ICdub25lJztcblxuLy8gcmVjZWl2ZSBzZXR0aW5nc1xuXG5leHBvcnQgY29uc3QgREFJTFlfUkVDRUlWRV9TRVRUSU5HU19CQVNFX0tFWSA9ICdiYXNlJztcbmV4cG9ydCBjb25zdCBEQUlMWV9SRUNFSVZFX1NFVFRJTkdTX0FMTF9QQVJUSUNJUEFOVFNfS0VZID0gJyonO1xuXG4vLyBlcnJvciB0eXBlc1xuXG5leHBvcnQgY29uc3QgREFJTFlfRkFUQUxfRVJST1JfRUpFQ1RFRCA9ICdlamVjdGVkJztcbmV4cG9ydCBjb25zdCBEQUlMWV9GQVRBTF9FUlJPUl9OQkZfUk9PTSA9ICduYmYtcm9vbSc7XG5leHBvcnQgY29uc3QgREFJTFlfRkFUQUxfRVJST1JfTkJGX1RPS0VOID0gJ25iZi10b2tlbic7XG5leHBvcnQgY29uc3QgREFJTFlfRkFUQUxfRVJST1JfRVhQX1JPT00gPSAnZXhwLXJvb20nO1xuZXhwb3J0IGNvbnN0IERBSUxZX0ZBVEFMX0VSUk9SX0VYUF9UT0tFTiA9ICdleHAtdG9rZW4nO1xuZXhwb3J0IGNvbnN0IERBSUxZX0ZBVEFMX0VSUk9SX01FRVRJTkdfRlVMTCA9ICdtZWV0aW5nLWZ1bGwnO1xuXG5leHBvcnQgY29uc3QgREFJTFlfQ0FNRVJBX0VSUk9SX0NBTV9JTl9VU0UgPSAnY2FtLWluLXVzZSc7XG5leHBvcnQgY29uc3QgREFJTFlfQ0FNRVJBX0VSUk9SX01JQ19JTl9VU0UgPSAnbWljLWluLXVzZSc7XG5leHBvcnQgY29uc3QgREFJTFlfQ0FNRVJBX0VSUk9SX0NBTV9BTkRfTUlDX0lOX1VTRSA9ICdjYW0tbWljLWluLXVzZSc7XG5leHBvcnQgY29uc3QgREFJTFlfQ0FNRVJBX0VSUk9SX1BFUk1JU1NJT05TID0gJ3Blcm1pc3Npb25zJztcbmV4cG9ydCBjb25zdCBEQUlMWV9DQU1FUkFfRVJST1JfVU5ERUZfTUVESUFERVZJQ0VTID0gJ3VuZGVmaW5lZC1tZWRpYWRldmljZXMnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0NBTUVSQV9FUlJPUl9OT1RfRk9VTkQgPSAnbm90LWZvdW5kJztcbmV4cG9ydCBjb25zdCBEQUlMWV9DQU1FUkFfRVJST1JfQ09OU1RSQUlOVFMgPSAnY29uc3RyYWludHMnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0NBTUVSQV9FUlJPUl9VTktOT1dOID0gJ3Vua25vd24nO1xuXG4vLyBldmVudHNcblxuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0lGUkFNRV9SRUFEWV9GT1JfTEFVTkNIX0NPTkZJRyA9XG4gICdpZnJhbWUtcmVhZHktZm9yLWxhdW5jaC1jb25maWcnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0lGUkFNRV9MQVVOQ0hfQ09ORklHID0gJ2lmcmFtZS1sYXVuY2gtY29uZmlnJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9USEVNRV9VUERBVEVEID0gJ3RoZW1lLXVwZGF0ZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0xPQURJTkcgPSAnbG9hZGluZyc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfTE9BRF9BVFRFTVBUX0ZBSUxFRCA9ICdsb2FkLWF0dGVtcHQtZmFpbGVkJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9MT0FERUQgPSAnbG9hZGVkJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9TVEFSVEVEX0NBTUVSQSA9ICdzdGFydGVkLWNhbWVyYSc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfQ0FNRVJBX0VSUk9SID0gJ2NhbWVyYS1lcnJvcic7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfSk9JTklOR19NRUVUSU5HID0gJ2pvaW5pbmctbWVldGluZyc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfSk9JTkVEX01FRVRJTkcgPSAnam9pbmVkLW1lZXRpbmcnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0xFRlRfTUVFVElORyA9ICdsZWZ0LW1lZXRpbmcnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0FWQUlMQUJMRV9ERVZJQ0VTX1VQREFURUQgPVxuICAnYXZhaWxhYmxlLWRldmljZXMtdXBkYXRlZCc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfU0VMRUNURURfREVWSUNFU19VUERBVEVEID0gJ3NlbGVjdGVkLWRldmljZXMtdXBkYXRlZCc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9KT0lORUQgPSAncGFydGljaXBhbnQtam9pbmVkJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9VUERBVEVEID0gJ3BhcnRpY2lwYW50LXVwZGF0ZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX1BBUlRJQ0lQQU5UX0xFRlQgPSAncGFydGljaXBhbnQtbGVmdCc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9QQVJUSUNJUEFOVF9DT1VOVFNfVVBEQVRFRCA9XG4gICdwYXJ0aWNpcGFudC1jb3VudHMtdXBkYXRlZCc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9BQ0NFU1NfU1RBVEVfVVBEQVRFRCA9ICdhY2Nlc3Mtc3RhdGUtdXBkYXRlZCc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9NRUVUSU5HX1NFU1NJT05fVVBEQVRFRCA9ICdtZWV0aW5nLXNlc3Npb24tdXBkYXRlZCc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfTUVFVElOR19TRVNTSU9OX1NUQVRFX1VQREFURUQgPVxuICAnbWVldGluZy1zZXNzaW9uLXN0YXRlLXVwZGF0ZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX01FRVRJTkdfU0VTU0lPTl9EQVRBX0VSUk9SID1cbiAgJ21lZXRpbmctc2Vzc2lvbi1kYXRhLWVycm9yJztcblxuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX1dBSVRJTkdfUEFSVElDSVBBTlRfQURERUQgPVxuICAnd2FpdGluZy1wYXJ0aWNpcGFudC1hZGRlZCc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfV0FJVElOR19QQVJUSUNJUEFOVF9VUERBVEVEID1cbiAgJ3dhaXRpbmctcGFydGljaXBhbnQtdXBkYXRlZCc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfV0FJVElOR19QQVJUSUNJUEFOVF9SRU1PVkVEID1cbiAgJ3dhaXRpbmctcGFydGljaXBhbnQtcmVtb3ZlZCc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9UUkFDS19TVEFSVEVEID0gJ3RyYWNrLXN0YXJ0ZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX1RSQUNLX1NUT1BQRUQgPSAndHJhY2stc3RvcHBlZCc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9UUkFOU0NSSVBUSU9OX1NUQVJURUQgPSAndHJhbnNjcmlwdGlvbi1zdGFydGVkJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9UUkFOU0NSSVBUSU9OX1NUT1BQRUQgPSAndHJhbnNjcmlwdGlvbi1zdG9wcGVkJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9UUkFOU0NSSVBUSU9OX0VSUk9SID0gJ3RyYW5zY3JpcHRpb24tZXJyb3InO1xuXG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfUkVDT1JESU5HX1NUQVJURUQgPSAncmVjb3JkaW5nLXN0YXJ0ZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX1JFQ09SRElOR19TVE9QUEVEID0gJ3JlY29yZGluZy1zdG9wcGVkJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9SRUNPUkRJTkdfU1RBVFMgPSAncmVjb3JkaW5nLXN0YXRzJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9SRUNPUkRJTkdfRVJST1IgPSAncmVjb3JkaW5nLWVycm9yJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9SRUNPUkRJTkdfVVBMT0FEX0NPTVBMRVRFRCA9XG4gICdyZWNvcmRpbmctdXBsb2FkLWNvbXBsZXRlZCc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfUkVDT1JESU5HX0RBVEEgPSAncmVjb3JkaW5nLWRhdGEnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0FQUF9NU0cgPSAnYXBwLW1lc3NhZ2UnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0lOUFVUX0VWRU5UID0gJ2lucHV0LWV2ZW50JztcblxuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX1JFTU9URV9NRURJQV9QTEFZRVJfU1RBUlRFRCA9XG4gICdyZW1vdGUtbWVkaWEtcGxheWVyLXN0YXJ0ZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX1JFTU9URV9NRURJQV9QTEFZRVJfVVBEQVRFRCA9XG4gICdyZW1vdGUtbWVkaWEtcGxheWVyLXVwZGF0ZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX1JFTU9URV9NRURJQV9QTEFZRVJfU1RPUFBFRCA9XG4gICdyZW1vdGUtbWVkaWEtcGxheWVyLXN0b3BwZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX1JFTU9URV9NRURJQV9QTEFZRVJfRVJST1JfVFlQRSA9ICdyZW1vdGUtbWVkaWEtcGxheWVyLWVycm9yJztcblxuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0xPQ0FMX1NDUkVFTl9TSEFSRV9TVEFSVEVEID1cbiAgJ2xvY2FsLXNjcmVlbi1zaGFyZS1zdGFydGVkJztcbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9MT0NBTF9TQ1JFRU5fU0hBUkVfU1RPUFBFRCA9XG4gICdsb2NhbC1zY3JlZW4tc2hhcmUtc3RvcHBlZCc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfQUNUSVZFX1NQRUFLRVJfQ0hBTkdFID0gJ2FjdGl2ZS1zcGVha2VyLWNoYW5nZSc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfQUNUSVZFX1NQRUFLRVJfTU9ERV9DSEFOR0UgPVxuICAnYWN0aXZlLXNwZWFrZXItbW9kZS1jaGFuZ2UnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX05FVFdPUktfUVVBTElUWV9DSEFOR0UgPSAnbmV0d29yay1xdWFsaXR5LWNoYW5nZSc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfTkVUV09SS19DT05ORUNUSU9OID0gJ25ldHdvcmstY29ubmVjdGlvbic7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9GVUxMU0NSRUVOID0gJ2Z1bGxzY3JlZW4nO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0VYSVRfRlVMTFNDUkVFTiA9ICdleGl0ZWQtZnVsbHNjcmVlbic7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9MSVZFX1NUUkVBTUlOR19TVEFSVEVEID0gJ2xpdmUtc3RyZWFtaW5nLXN0YXJ0ZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX0xJVkVfU1RSRUFNSU5HX1NUT1BQRUQgPSAnbGl2ZS1zdHJlYW1pbmctc3RvcHBlZCc7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfTElWRV9TVFJFQU1JTkdfRVJST1IgPSAnbGl2ZS1zdHJlYW1pbmctZXJyb3InO1xuZXhwb3J0IGNvbnN0IERBSUxZX0xJVkVfU1RSRUFNSU5HX1dBUk5JTkcgPSAnbGl2ZS1zdHJlYW1pbmctd2FybmluZyc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9MQU5HX1VQREFURUQgPSAnbGFuZy11cGRhdGVkJztcblxuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX1NIT1dfTE9DQUxfVklERU9fQ0hBTkdFRCA9ICdzaG93LWxvY2FsLXZpZGVvLWNoYW5nZWQnO1xuXG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfUkVDRUlWRV9TRVRUSU5HU19VUERBVEVEID0gJ3JlY2VpdmUtc2V0dGluZ3MtdXBkYXRlZCc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9FVkVOVF9JTlBVVF9TRVRUSU5HU19VUERBVEVEID0gJ2lucHV0LXNldHRpbmdzLXVwZGF0ZWQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX0VWRU5UX05PTkZBVEFMX0VSUk9SID0gJ25vbmZhdGFsLWVycm9yJztcbmV4cG9ydCBjb25zdCBEQUlMWV9JTlBVVF9TRVRUSU5HU19FUlJPUl9UWVBFID0gJ2lucHV0LXNldHRpbmdzLWVycm9yJztcbmV4cG9ydCBjb25zdCBEQUlMWV9TQ1JFRU5fU0hBUkVfRVJST1JfVFlQRSA9ICdzY3JlZW4tc2hhcmUtZXJyb3InO1xuZXhwb3J0IGNvbnN0IERBSUxZX1ZJREVPX1BST0NFU1NPUl9FUlJPUl9UWVBFID0gJ3ZpZGVvLXByb2Nlc3Nvci1lcnJvcic7XG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfRVJST1IgPSAnZXJyb3InO1xuXG5leHBvcnQgY29uc3QgREFJTFlfRVZFTlRfQ1VTVE9NX0JVVFRPTl9DTElDSyA9ICdjdXN0b20tYnV0dG9uLWNsaWNrJztcblxuLy9cbi8vIGludGVybmFsXG4vL1xuXG5leHBvcnQgY29uc3QgTUFYX0FQUF9NU0dfU0laRSA9IDEwMjQgKiA0O1xuZXhwb3J0IGNvbnN0IE1BWF9TRVNTSU9OX0RBVEFfU0laRSA9IDEwMjQgKiA0ICogMjU7XG5leHBvcnQgY29uc3QgTUFYX1VTRVJfREFUQV9TSVpFID0gMTAyNCAqIDQ7XG5cbmV4cG9ydCBjb25zdCBJRlJBTUVfTUVTU0FHRV9NQVJLRVIgPSAnaWZyYW1lLWNhbGwtbWVzc2FnZSc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfVVBEQVRFX0NVU1RPTV9JTlRFR1JBVElPTlMgPVxuICAndXBkYXRlLWN1c3RvbS1pbnRlZ3JhdGlvbnMnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9VUERBVEVfQ1VTVE9NX1RSQVlfQlVUVE9OUyA9XG4gICd1cGRhdGUtY3VzdG9tLXRyYXktYnV0dG9ucyc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1NFVF9USEVNRSA9ICdzZXQtdGhlbWUnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TVEFSVF9DQU1FUkEgPSAnc3RhcnQtY2FtZXJhJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU0VUX0lOUFVUX0RFVklDRVMgPSAnc2V0LWlucHV0LWRldmljZXMnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TRVRfT1VUUFVUX0RFVklDRSA9ICdzZXQtb3V0cHV0LWRldmljZSc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX0dFVF9JTlBVVF9ERVZJQ0VTID0gJ2dldC1pbnB1dC1kZXZpY2VzJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfSk9JTiA9ICdqb2luLW1lZXRpbmcnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9MRUFWRSA9ICdsZWF2ZS1tZWV0aW5nJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfVVBEQVRFX1BBUlRJQ0lQQU5UID0gJ3VwZGF0ZS1wYXJ0aWNpcGFudCc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1VQREFURV9QQVJUSUNJUEFOVFMgPSAndXBkYXRlLXBhcnRpY2lwYW50cyc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX0xPQ0FMX0FVRElPID0gJ2xvY2FsLWF1ZGlvJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfTE9DQUxfVklERU8gPSAnbG9jYWwtdmlkZW8nO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TVEFSVF9TQ1JFRU5TSEFSRSA9ICdsb2NhbC1zY3JlZW4tc3RhcnQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TVE9QX1NDUkVFTlNIQVJFID0gJ2xvY2FsLXNjcmVlbi1zdG9wJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU1RBUlRfUkVDT1JESU5HID0gJ2xvY2FsLXJlY29yZGluZy1zdGFydCc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1VQREFURV9SRUNPUkRJTkcgPSAnZGFpbHktbWV0aG9kLXVwZGF0ZS1yZWNvcmRpbmcnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TVE9QX1JFQ09SRElORyA9ICdsb2NhbC1yZWNvcmRpbmctc3RvcCc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX0xPQURfQ1NTID0gJ2xvYWQtY3NzJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU0VUX0JBTkRXSURUSCA9ICdzZXQtYmFuZHdpZHRoJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfR0VUX0NBTENfU1RBVFMgPSAnZ2V0LWNhbGMtc3RhdHMnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9FTlVNRVJBVEVfREVWSUNFUyA9ICdlbnVtZXJhdGUtZGV2aWNlcyc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX0NZQ0xFX0NBTUVSQSA9ICdjeWNsZS1jYW1lcmEnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TRVRfQ0FNRVJBID0gJ3NldC1jYW1lcmEnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TVEFSVF9DVVNUT01fVFJBQ0sgPSAnc3RhcnQtY3VzdG9tLXRyYWNrJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU1RPUF9DVVNUT01fVFJBQ0sgPSAnc3RvcC1jdXN0b20tdHJhY2snO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9DWUNMRV9NSUMgPSAnY3ljbGUtbWljJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfR0VUX0NBTUVSQV9GQUNJTkdfTU9ERSA9ICdnZXQtY2FtZXJhLWZhY2luZy1tb2RlJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfQVBQX01TRyA9ICdhcHAtbXNnJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfQUREX0ZBS0VfUEFSVElDSVBBTlQgPSAnYWRkLWZha2UtcGFydGljaXBhbnQnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TRVRfU0hPV19OQU1FUyA9ICdzZXQtc2hvdy1uYW1lcyc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1NFVF9TSE9XX0xPQ0FMX1ZJREVPID0gJ3NldC1zaG93LWxvY2FsLXZpZGVvJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU0VUX1NIT1dfUEFSVElDSVBBTlRTX0JBUiA9XG4gICdzZXQtc2hvdy1wYXJ0aWNpcGFudHMtYmFyJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU0VUX0FDVElWRV9TUEVBS0VSX01PREUgPSAnc2V0LWFjdGl2ZS1zcGVha2VyLW1vZGUnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9SRUdJU1RFUl9JTlBVVF9IQU5ETEVSID0gJ3JlZ2lzdGVyLWlucHV0LWhhbmRsZXInO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9HRVRfTEFORyA9ICdnZXQtZGFpbHktbGFuZyc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1NFVF9MQU5HID0gJ3NldC1kYWlseS1sYW5nJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfR0VUX01FRVRJTkdfU0VTU0lPTiA9ICdnZXQtbWVldGluZy1zZXNzaW9uJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU0VUX1NFU1NJT05fREFUQSA9ICdzZXQtc2Vzc2lvbi1kYXRhJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU0VUX1VTRVJfTkFNRSA9ICdzZXQtdXNlci1uYW1lJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU0VUX1VTRVJfREFUQSA9ICdzZXQtdXNlci1kYXRhJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfREVURUNUX0FMTF9GQUNFUyA9ICdkZXRlY3QtYWxsLWZhY2VzJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfUk9PTSA9ICdsaWItcm9vbS1pbmZvJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfR0VUX05FVFdPUktfVE9QT0xPR1kgPSAnZ2V0LW5ldHdvcmstdG9wb2xvZ3knO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TRVRfTkVUV09SS19UT1BPTE9HWSA9ICdzZXQtbmV0d29yay10b3BvbG9neSc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1NFVF9QTEFZX0RJTkcgPSAnZGFpbHktbWV0aG9kLXNldC1wbGF5LWRpbmcnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TRVRfU1VCU0NSSUJFX1RPX1RSQUNLU19BVVRPTUFUSUNBTExZID1cbiAgJ2RhaWx5LW1ldGhvZC1zdWJzY3JpYmUtdG8tdHJhY2tzLWF1dG9tYXRpY2FsbHknO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TVEFSVF9MSVZFX1NUUkVBTUlORyA9XG4gICdkYWlseS1tZXRob2Qtc3RhcnQtbGl2ZS1zdHJlYW1pbmcnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9VUERBVEVfTElWRV9TVFJFQU1JTkcgPVxuICAnZGFpbHktbWV0aG9kLXVwZGF0ZS1saXZlLXN0cmVhbWluZyc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1VQREFURV9MSVZFX1NUUkVBTUlOR19FTkRQT0lOVFMgPVxuICAnZGFpbHktbWV0aG9kLXVwZGF0ZS1saXZlLXN0cmVhbWluZy1lbmRwb2ludHMnO1xuZXhwb3J0IGNvbnN0IERBSUxZX01FVEhPRF9TVE9QX0xJVkVfU1RSRUFNSU5HID1cbiAgJ2RhaWx5LW1ldGhvZC1zdG9wLWxpdmUtc3RyZWFtaW5nJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU1RBUlRfUkVNT1RFX01FRElBX1BMQVlFUiA9XG4gICdkYWlseS1tZXRob2Qtc3RhcnQtcmVtb3RlLW1lZGlhLXBsYXllcic7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1NUT1BfUkVNT1RFX01FRElBX1BMQVlFUiA9XG4gICdkYWlseS1tZXRob2Qtc3RvcC1yZW1vdGUtbWVkaWEtcGxheWVyJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfVVBEQVRFX1JFTU9URV9NRURJQV9QTEFZRVIgPVxuICAnZGFpbHktbWV0aG9kLXVwZGF0ZS1yZW1vdGUtbWVkaWEtcGxheWVyJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfU1RBUlRfVFJBTlNDUklQVElPTiA9XG4gICdkYWlseS1tZXRob2Qtc3RhcnQtdHJhbnNjcmlwdGlvbic7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1NUT1BfVFJBTlNDUklQVElPTiA9XG4gICdkYWlseS1tZXRob2Qtc3RvcC10cmFuc2NyaXB0aW9uJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfUFJFQVVUSCA9ICdkYWlseS1tZXRob2QtcHJlYXV0aCc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1JFUVVFU1RfQUNDRVNTID0gJ2RhaWx5LW1ldGhvZC1yZXF1ZXN0LWFjY2Vzcyc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1VQREFURV9XQUlUSU5HX1BBUlRJQ0lQQU5UID1cbiAgJ2RhaWx5LW1ldGhvZC11cGRhdGUtd2FpdGluZy1wYXJ0aWNpcGFudCc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1VQREFURV9XQUlUSU5HX1BBUlRJQ0lQQU5UUyA9XG4gICdkYWlseS1tZXRob2QtdXBkYXRlLXdhaXRpbmctcGFydGljaXBhbnRzJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfR0VUX1NJTkdMRV9QQVJUSUNJUEFOVF9SRUNFSVZFX1NFVFRJTkdTID1cbiAgJ2dldC1zaW5nbGUtcGFydGljaXBhbnQtcmVjZWl2ZS1zZXR0aW5ncyc7XG5leHBvcnQgY29uc3QgREFJTFlfTUVUSE9EX1VQREFURV9SRUNFSVZFX1NFVFRJTkdTID0gJ3VwZGF0ZS1yZWNlaXZlLXNldHRpbmdzJztcbmV4cG9ydCBjb25zdCBEQUlMWV9NRVRIT0RfVVBEQVRFX0lOUFVUX1NFVFRJTkdTID0gJ3VwZGF0ZS1pbnB1dC1zZXR0aW5ncyc7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9DVVNUT01fVFJBQ0sgPSAnZGFpbHktY3VzdG9tLXRyYWNrJztcbmV4cG9ydCBjb25zdCBEQUlMWV9VSV9SRVFVRVNUX0ZVTExTQ1JFRU4gPSAncmVxdWVzdC1mdWxsc2NyZWVuJztcbmV4cG9ydCBjb25zdCBEQUlMWV9VSV9FWElUX0ZVTExTQ1JFRU4gPSAncmVxdWVzdC1leGl0LWZ1bGxzY3JlZW4nO1xuXG5leHBvcnQgY29uc3QgREFJTFlfSlNfTkVUV09SS19RVUFMSVRZID0ge1xuICBWRVJZX0xPVzogJ3ZlcnktbG93JyxcbiAgTE9XOiAnbG93JyxcbiAgSElHSDogJ2hpZ2gnLFxufTtcblxuZXhwb3J0IGNvbnN0IERBSUxZX0pTX05FVFdPUktfVEhSRVNIT0xEUyA9IHtcbiAgVkVSWV9MT1c6ICd2ZXJ5LWxvdycsXG4gIExPVzogJ2xvdycsXG4gIEdPT0Q6ICdnb29kJyxcbn07XG5cbi8vIHZpZGVvIHByb2Nlc3NvciBzZXR0aW5ncyBlbnVtXG5leHBvcnQgY29uc3QgREFJTFlfSlNfVklERU9fUFJPQ0VTU09SX1RZUEVTID0ge1xuICBOT05FOiAnbm9uZScsXG4gIEJHQkxVUjogJ2JhY2tncm91bmQtYmx1cicsXG4gIEJHSU1BR0U6ICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgLy8gQ1VTVE9NOiAnY3VzdG9tJyxcbn07XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9KU19SRU1PVEVfTUVESUFfUExBWUVSX1NFVFRJTkcgPSB7XG4gIFBMQVk6ICdwbGF5JyxcbiAgUEFVU0U6ICdwYXVzZScsXG59O1xuXG5leHBvcnQgY29uc3QgREFJTFlfSlNfUkVNT1RFX01FRElBX1BMQVlFUl9TVEFURSA9IHtcbiAgUExBWUlORzogJ3BsYXlpbmcnLFxuICBQQVVTRUQ6ICdwYXVzZWQnLFxuICBCVUZGRVJJTkc6ICdidWZmZXJpbmcnLFxuICBTVE9QUEVEOiAnc3RvcHBlZCcsXG59O1xuXG5leHBvcnQgY29uc3QgREFJTFlfUEFSVElDSVBBTlRfVFlQRSA9IHtcbiAgUkVNT1RFX01FRElBX1BMQVlFUjogJ3JlbW90ZS1tZWRpYS1wbGF5ZXInLFxufTtcblxuZXhwb3J0IGNvbnN0IERBSUxZX1BSRVNFTEVDVEVEX0JHX0lNQUdFX1VSTFNfTEVOR1RIID0gMTA7XG5cbmV4cG9ydCBjb25zdCBEQUlMWV9TVVBQT1JURURfQkdfSU1HX1RZUEVTID0gWydqcGcnLCAncG5nJywgJ2pwZWcnXTtcblxuZXhwb3J0IGNvbnN0IFVQREFURV9MSVZFX1NUUkVBTUlOR19FTkRQT0lOVFNfT1AgPSB7XG4gIEFERF9FTkRQT0lOVFM6ICdhZGQtZW5kcG9pbnRzJyxcbiAgUkVNT1ZFX0VORFBPSU5UUzogJ3JlbW92ZS1lbmRwb2ludHMnLFxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/shared-with-pluot-core/CommonIncludes.js\n" + ); + + /***/ + }, + + /***/ "./src/shared-with-pluot-core/Environment.js": + /*!***************************************************!*\ + !*** ./src/shared-with-pluot-core/Environment.js ***! + \***************************************************/ + /*! exports provided: getUserAgent, isReactNative, isIOS, isUserMediaAccessible, isScreenSharingSupported, isFullscreenSupported, isVideoProcessingSupported, canUnifiedPlan, browserCanUnifiedPlan, browserVideoSupported_p, isAndroidApp, isAndroidWeb, browserMobile_p, browserNeedsUpgrade, getBrowserName, getBrowserVersion, getChromeVersion, isSupportedIOSEnvironment, getOSName */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + "__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getUserAgent\", function() { return getUserAgent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isReactNative\", function() { return isReactNative; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isIOS\", function() { return isIOS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isUserMediaAccessible\", function() { return isUserMediaAccessible; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isScreenSharingSupported\", function() { return isScreenSharingSupported; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isFullscreenSupported\", function() { return isFullscreenSupported; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isVideoProcessingSupported\", function() { return isVideoProcessingSupported; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"canUnifiedPlan\", function() { return canUnifiedPlan; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"browserCanUnifiedPlan\", function() { return browserCanUnifiedPlan; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"browserVideoSupported_p\", function() { return browserVideoSupported_p; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isAndroidApp\", function() { return isAndroidApp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isAndroidWeb\", function() { return isAndroidWeb; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"browserMobile_p\", function() { return browserMobile_p; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"browserNeedsUpgrade\", function() { return browserNeedsUpgrade; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBrowserName\", function() { return getBrowserName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBrowserVersion\", function() { return getBrowserVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getChromeVersion\", function() { return getChromeVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isSupportedIOSEnvironment\", function() { return isSupportedIOSEnvironment; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOSName\", function() { return getOSName; });\n/* harmony import */ var bowser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bowser */ \"./node_modules/bowser/es5.js\");\n/* harmony import */ var bowser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bowser__WEBPACK_IMPORTED_MODULE_0__);\n// Note: Bowser is only used for OS detection, not Browser detection\n // This method should be used instead of window.navigator.userAgent, which\n// is not defined in React Native and results in an error.\n// (Actually, if it *is* defined in React Native, it's not meant for us, but\n// for our customer's code; that's why we don't just simply override it globally).\n\nfunction getUserAgent() {\n if (!isReactNative() && typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) {\n return window.navigator.userAgent;\n }\n\n return '';\n}\nfunction isReactNative() {\n return typeof navigator !== 'undefined' && navigator.product && navigator.product === 'ReactNative';\n}\nfunction isIOS() {\n var userAgent = getUserAgent();\n return !!userAgent.match(/iPad|iPhone|iPod/i);\n} // Only valid if cam/mic are accessible from browser\n\nfunction isUserMediaAccessible() {\n return navigator && navigator.mediaDevices && navigator.mediaDevices.getUserMedia;\n} // Returns whether we should allow screen sharing from this browser.\n//\n// Note: technically we *could* try to support screen sharing from any browser where\n// isDisplayMediaAccessible() is true (PeerToPeer.js is mostly set up to do so).\n// However, limiting screen sharing to only those that support the Unified Plan SDP\n// format lets us simplify code paths on the receiving end of screen shares: in order\n// to check whether to always expect a single inbound video track, we simply have to\n// check whether we're a browser that only supports the older Plan B SDP format (see below).\n// Additionally, limiting screen sharing this way reduces our test matrix.\n\nfunction isScreenSharingSupported() {\n return isDisplayMediaAccessible() && canUnifiedPlan();\n}\nfunction isFullscreenSupported() {\n if (isReactNative()) return false;\n if (!document) return false;\n var iframe = document.createElement('iframe');\n return !!iframe.requestFullscreen || !!iframe.webkitRequestFullscreen;\n}\nvar supportedBrowsersForVideoProcessors = ['Chrome', 'Firefox'];\nfunction isVideoProcessingSupported() {\n if (isReactNative()) return false;\n if (browserMobile_p()) return false;\n return supportedBrowsersForVideoProcessors.includes(getBrowserName());\n}\nfunction canUnifiedPlan() {\n return browserCanUnifiedPlan(getBrowserName(), getBrowserVersion());\n}\nfunction browserCanUnifiedPlan(browserName, browserVersion) {\n if (!(browserName && browserVersion)) {\n return true;\n }\n\n switch (browserName) {\n case 'Chrome':\n return browserVersion.major >= 75;\n\n case 'Safari':\n // This is the check that Apple suggests in https://webkit.org/blog/8672/on-the-road-to-webrtc-1-0-including-vp8/,\n // plus a workaround that was already in place here for a Safari 13.0.0 bug, forcing it into Plan B.\n return RTCRtpTransceiver.prototype.hasOwnProperty('currentDirection') && !(browserVersion.major === 13 && browserVersion.minor === 0 && browserVersion.point === 0);\n // Note: We now only support Firefox 80+ so this should always be true\n\n case 'Firefox':\n return browserVersion.major >= 67;\n }\n\n return true;\n}\nfunction browserVideoSupported_p() {\n return isUserMediaAccessible() && !browserNeedsUpgrade();\n}\nfunction isAndroidApp() {\n return getUserAgent().match(/DailyAnd\\//);\n}\nfunction isAndroidWeb() {\n return getUserAgent().match(/Linux; Android/);\n}\nfunction browserMobile_p() {\n var userAgent = getUserAgent();\n\n if (userAgent.match(/Mobi/) || userAgent.match(/Android/)) {\n return true;\n }\n\n if (isAndroidApp()) {\n return true;\n }\n}\nfunction browserNeedsUpgrade() {\n var browser = getBrowserName(),\n ua = getUserAgent(),\n version;\n\n if (!ua) {\n return true;\n }\n\n switch (browser) {\n case 'Chrome':\n // Includes Chromium-based browsers\n version = getChromeVersion();\n return version.major && version.major > 0 && version.major < 61;\n\n case 'Firefox':\n version = getFirefoxVersion();\n return version.major < 78;\n\n case 'Safari':\n version = getSafariVersion();\n return version.major < 12;\n\n default:\n return true;\n }\n}\nfunction getBrowserName() {\n if (typeof window !== 'undefined') {\n var userAgent = getUserAgent(); // Treat supported WKWebView as Safari. Check for this first just in case\n // 3rd-party browsers on iOS decide to customize their user agent strings to\n // match the other conditions.\n\n if (isSupportedIOSEnvironment()) {\n return 'Safari';\n } else if (userAgent.indexOf('Edge') > -1) {\n // Note: check will (purposefully) fail for chromium-based Edge\n // since the user-agent for chromium-based Edge reports `Edg`\n // (or EdgA (android) or EdgiOS)\n // Also note: getBrowserName is primarily used for internal\n // logic, so this should go away eventually. However, it is used\n // in the old prebuilt UI for some upgrade messaging so leaving\n // it in until Edge or the old prebuilt is really no longer a thing\n return 'Edge'; // } else if (userAgent.indexOf('OPR') > -1 ||\n // userAgent.indexOf('Opera') > -1) {\n // return 'Opera';\n } else if (userAgent.match(/Chrome\\//)) {\n // Includes Chromium-based browsers\n return 'Chrome';\n } else if (userAgent.indexOf('Safari') > -1) {\n return 'Safari';\n } else if (userAgent.indexOf('Firefox') > -1) {\n return 'Firefox';\n } else if (userAgent.indexOf('MSIE') > -1 || userAgent.indexOf('.NET') > -1) {\n return 'IE';\n } else {\n return 'Unknown Browser';\n }\n }\n}\nfunction getBrowserVersion() {\n var name = getBrowserName();\n\n switch (name) {\n case 'Chrome':\n // Includes Chromium-based browsers\n return getChromeVersion();\n\n case 'Safari':\n return getSafariVersion();\n\n case 'Firefox':\n return getFirefoxVersion();\n\n case 'Edge':\n return getEdgeVersion();\n }\n}\nfunction getChromeVersion() {\n var major = 0,\n minor = 0,\n build = 0,\n patch = 0,\n opera = false;\n\n if (typeof window !== 'undefined') {\n var userAgent = getUserAgent(),\n match = userAgent.match(/Chrome\\/(\\d+).(\\d+).(\\d+).(\\d+)/);\n\n if (match) {\n try {\n major = parseInt(match[1]);\n minor = parseInt(match[2]);\n build = parseInt(match[3]);\n patch = parseInt(match[4]);\n opera = userAgent.indexOf('OPR/') > -1;\n } catch (e) {}\n }\n }\n\n return {\n major: major,\n minor: minor,\n build: build,\n patch: patch,\n opera: opera\n };\n} // Mobile Safari or WKWebView on iOS/iPadOS >= 14.3\n\nfunction isSupportedIOSEnvironment() {\n return isIOS() && isUserMediaAccessible();\n}\n\nfunction isDisplayMediaAccessible() {\n return !!(navigator && navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia);\n}\n\nfunction getSafariVersion() {\n var major = 0,\n minor = 0,\n point = 0;\n\n if (typeof window !== 'undefined') {\n var userAgent = getUserAgent(),\n match = userAgent.match(/Version\\/(\\d+).(\\d+)(.(\\d+))?/);\n\n if (match) {\n try {\n major = parseInt(match[1]);\n minor = parseInt(match[2]);\n point = parseInt(match[4]);\n } catch (e) {}\n } else if (isSupportedIOSEnvironment()) {\n // Hack: treat supported WKWebView like Safari 14.0.3 (no need to be\n // precise; just needs to be new enough to appear supported, and this was\n // the Safari version around the time WKWebView WebRTC support was added)\n major = 14;\n minor = 0;\n point = 3;\n }\n }\n\n return {\n major: major,\n minor: minor,\n point: point\n };\n}\n\nfunction getFirefoxVersion() {\n var major = 0,\n minor = 0;\n\n if (typeof window !== 'undefined') {\n var userAgent = getUserAgent(),\n match = userAgent.match(/Firefox\\/(\\d+).(\\d+)/);\n\n if (match) {\n try {\n major = parseInt(match[1]);\n minor = parseInt(match[2]);\n } catch (e) {}\n }\n }\n\n return {\n major: major,\n minor: minor\n };\n}\n\nfunction getEdgeVersion() {\n var major = 0,\n minor = 0;\n\n if (typeof window !== 'undefined') {\n var userAgent = getUserAgent(),\n match = userAgent.match(/Edge\\/(\\d+).(\\d+)/);\n\n if (match) {\n try {\n major = parseInt(match[1]);\n minor = parseInt(match[2]);\n } catch (e) {}\n }\n }\n\n return {\n major: major,\n minor: minor\n };\n}\n\nfunction getOSName() {\n var OSName = 'Unknown';\n\n if (isReactNative()) {\n if (window && window.DailyNativeUtils && window.DailyNativeUtils.platform && window.DailyNativeUtils.platform.OS) {\n // in case bowser changes its consts, we don't have to\n if (window.DailyNativeUtils.platform.OS === 'ios') {\n OSName = 'iOS';\n } else if (window.DailyNativeUtils.platform.OS === 'android') {\n OSName = 'Android';\n } else {\n OSName = window.DailyNativeUtils.platform.OS;\n }\n }\n\n return OSName;\n } // platform module\n\n\n if (typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) {\n try {\n var navAgentInfo = bowser__WEBPACK_IMPORTED_MODULE_0___default.a.getParser(window.navigator.userAgent);\n var bowserName = navAgentInfo.getOSName(); // this seems unnecessary, i know. but it defends against\n // changes to bowser\n\n switch (bowserName) {\n case 'macOS':\n OSName = 'macOS';\n break;\n\n case 'Windows':\n OSName = 'Windows';\n break;\n\n case 'Linux':\n OSName = 'Linux';\n break;\n\n case 'iOS':\n OSName = 'iOS';\n break;\n\n case 'Android':\n OSName = 'Android';\n break;\n\n default:\n OSName = bowserName;\n break;\n }\n } catch (error) {\n console.log('bowser error', error); // pass\n }\n }\n\n return OSName;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL0Vudmlyb25tZW50LmpzP2FjZGIiXSwibmFtZXMiOlsiZ2V0VXNlckFnZW50IiwiaXNSZWFjdE5hdGl2ZSIsIndpbmRvdyIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInByb2R1Y3QiLCJpc0lPUyIsIm1hdGNoIiwiaXNVc2VyTWVkaWFBY2Nlc3NpYmxlIiwibWVkaWFEZXZpY2VzIiwiZ2V0VXNlck1lZGlhIiwiaXNTY3JlZW5TaGFyaW5nU3VwcG9ydGVkIiwiaXNEaXNwbGF5TWVkaWFBY2Nlc3NpYmxlIiwiY2FuVW5pZmllZFBsYW4iLCJpc0Z1bGxzY3JlZW5TdXBwb3J0ZWQiLCJkb2N1bWVudCIsImlmcmFtZSIsImNyZWF0ZUVsZW1lbnQiLCJyZXF1ZXN0RnVsbHNjcmVlbiIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwic3VwcG9ydGVkQnJvd3NlcnNGb3JWaWRlb1Byb2Nlc3NvcnMiLCJpc1ZpZGVvUHJvY2Vzc2luZ1N1cHBvcnRlZCIsImJyb3dzZXJNb2JpbGVfcCIsImluY2x1ZGVzIiwiZ2V0QnJvd3Nlck5hbWUiLCJicm93c2VyQ2FuVW5pZmllZFBsYW4iLCJnZXRCcm93c2VyVmVyc2lvbiIsImJyb3dzZXJOYW1lIiwiYnJvd3NlclZlcnNpb24iLCJtYWpvciIsIlJUQ1J0cFRyYW5zY2VpdmVyIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJtaW5vciIsInBvaW50IiwiYnJvd3NlclZpZGVvU3VwcG9ydGVkX3AiLCJicm93c2VyTmVlZHNVcGdyYWRlIiwiaXNBbmRyb2lkQXBwIiwiaXNBbmRyb2lkV2ViIiwiYnJvd3NlciIsInVhIiwidmVyc2lvbiIsImdldENocm9tZVZlcnNpb24iLCJnZXRGaXJlZm94VmVyc2lvbiIsImdldFNhZmFyaVZlcnNpb24iLCJpc1N1cHBvcnRlZElPU0Vudmlyb25tZW50IiwiaW5kZXhPZiIsIm5hbWUiLCJnZXRFZGdlVmVyc2lvbiIsImJ1aWxkIiwicGF0Y2giLCJvcGVyYSIsInBhcnNlSW50IiwiZSIsImdldERpc3BsYXlNZWRpYSIsImdldE9TTmFtZSIsIk9TTmFtZSIsIkRhaWx5TmF0aXZlVXRpbHMiLCJwbGF0Zm9ybSIsIk9TIiwibmF2QWdlbnRJbmZvIiwiQm93c2VyIiwiZ2V0UGFyc2VyIiwiYm93c2VyTmFtZSIsImVycm9yIiwiY29uc29sZSIsImxvZyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtDQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUNPLFNBQVNBLFlBQVQsR0FBd0I7QUFDN0IsTUFDRSxDQUFDQyxhQUFhLEVBQWQsSUFDQSxPQUFPQyxNQUFQLEtBQWtCLFdBRGxCLElBRUFBLE1BQU0sQ0FBQ0MsU0FGUCxJQUdBRCxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLFNBSm5CLEVBS0U7QUFDQSxXQUFPRixNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLFNBQXhCO0FBQ0Q7O0FBQ0QsU0FBTyxFQUFQO0FBQ0Q7QUFFTSxTQUFTSCxhQUFULEdBQXlCO0FBQzlCLFNBQ0UsT0FBT0UsU0FBUCxLQUFxQixXQUFyQixJQUNBQSxTQUFTLENBQUNFLE9BRFYsSUFFQUYsU0FBUyxDQUFDRSxPQUFWLEtBQXNCLGFBSHhCO0FBS0Q7QUFFTSxTQUFTQyxLQUFULEdBQWlCO0FBQ3RCLE1BQU1GLFNBQVMsR0FBR0osWUFBWSxFQUE5QjtBQUNBLFNBQU8sQ0FBQyxDQUFDSSxTQUFTLENBQUNHLEtBQVYsQ0FBZ0IsbUJBQWhCLENBQVQ7QUFDRCxDLENBRUQ7O0FBQ08sU0FBU0MscUJBQVQsR0FBaUM7QUFDdEMsU0FDRUwsU0FBUyxJQUFJQSxTQUFTLENBQUNNLFlBQXZCLElBQXVDTixTQUFTLENBQUNNLFlBQVYsQ0FBdUJDLFlBRGhFO0FBR0QsQyxD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SUFFQUQsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxTQUhuQixFQUlFO0FBQ0EsUUFBSTtBQUNGLFVBQUl3RCxZQUFZLEdBQUdDLDZDQUFNLENBQUNDLFNBQVAsQ0FBaUI1RCxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLFNBQWxDLENBQW5CO0FBQ0EsVUFBSTJELFVBQVUsR0FBR0gsWUFBWSxDQUFDTCxTQUFiLEVBQWpCLENBRkUsQ0FHRjtBQUNBOztBQUNBLGNBQVFRLFVBQVI7QUFDRSxhQUFLLE9BQUw7QUFDRVAsZ0JBQU0sR0FBRyxPQUFUO0FBQ0E7O0FBQ0YsYUFBSyxTQUFMO0FBQ0VBLGdCQUFNLEdBQUcsU0FBVDtBQUNBOztBQUNGLGFBQUssT0FBTDtBQUNFQSxnQkFBTSxHQUFHLE9BQVQ7QUFDQTs7QUFDRixhQUFLLEtBQUw7QUFDRUEsZ0JBQU0sR0FBRyxLQUFUO0FBQ0E7O0FBQ0YsYUFBSyxTQUFMO0FBQ0VBLGdCQUFNLEdBQUcsU0FBVDtBQUNBOztBQUNGO0FBQ0VBLGdCQUFNLEdBQUdPLFVBQVQ7QUFDQTtBQWxCSjtBQW9CRCxLQXpCRCxDQXlCRSxPQUFPQyxLQUFQLEVBQWM7QUFDZEMsYUFBTyxDQUFDQyxHQUFSLENBQVksY0FBWixFQUE0QkYsS0FBNUIsRUFEYyxDQUVkO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPUixNQUFQO0FBQ0QiLCJmaWxlIjoiLi9zcmMvc2hhcmVkLXdpdGgtcGx1b3QtY29yZS9FbnZpcm9ubWVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE5vdGU6IEJvd3NlciBpcyBvbmx5IHVzZWQgZm9yIE9TIGRldGVjdGlvbiwgbm90IEJyb3dzZXIgZGV0ZWN0aW9uXG5pbXBvcnQgQm93c2VyIGZyb20gJ2Jvd3Nlcic7XG5cbi8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2Ygd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQsIHdoaWNoXG4vLyBpcyBub3QgZGVmaW5lZCBpbiBSZWFjdCBOYXRpdmUgYW5kIHJlc3VsdHMgaW4gYW4gZXJyb3IuXG4vLyAoQWN0dWFsbHksIGlmIGl0ICppcyogZGVmaW5lZCBpbiBSZWFjdCBOYXRpdmUsIGl0J3Mgbm90IG1lYW50IGZvciB1cywgYnV0XG4vLyBmb3Igb3VyIGN1c3RvbWVyJ3MgY29kZTsgdGhhdCdzIHdoeSB3ZSBkb24ndCBqdXN0IHNpbXBseSBvdmVycmlkZSBpdCBnbG9iYWxseSkuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlckFnZW50KCkge1xuICBpZiAoXG4gICAgIWlzUmVhY3ROYXRpdmUoKSAmJlxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgd2luZG93Lm5hdmlnYXRvciAmJlxuICAgIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50XG4gICkge1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlYWN0TmF0aXZlKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gICAgbmF2aWdhdG9yLnByb2R1Y3QgJiZcbiAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJ1xuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJT1MoKSB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IGdldFVzZXJBZ2VudCgpO1xuICByZXR1cm4gISF1c2VyQWdlbnQubWF0Y2goL2lQYWR8aVBob25lfGlQb2QvaSk7XG59XG5cbi8vIE9ubHkgdmFsaWQgaWYgY2FtL21pYyBhcmUgYWNjZXNzaWJsZSBmcm9tIGJyb3dzZXJcbmV4cG9ydCBmdW5jdGlvbiBpc1VzZXJNZWRpYUFjY2Vzc2libGUoKSB7XG4gIHJldHVybiAoXG4gICAgbmF2aWdhdG9yICYmIG5hdmlnYXRvci5tZWRpYURldmljZXMgJiYgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWFcbiAgKTtcbn1cblxuLy8gUmV0dXJucyB3aGV0aGVyIHdlIHNob3VsZCBhbGxvdyBzY3JlZW4gc2hhcmluZyBmcm9tIHRoaXMgYnJvd3Nlci5cbi8vXG4vLyBOb3RlOiB0ZWNobmljYWxseSB3ZSAqY291bGQqIHRyeSB0byBzdXBwb3J0IHNjcmVlbiBzaGFyaW5nIGZyb20gYW55IGJyb3dzZXIgd2hlcmVcbi8vIGlzRGlzcGxheU1lZGlhQWNjZXNzaWJsZSgpIGlzIHRydWUgKFBlZXJUb1BlZXIuanMgaXMgbW9zdGx5IHNldCB1cCB0byBkbyBzbykuXG4vLyBIb3dldmVyLCBsaW1pdGluZyBzY3JlZW4gc2hhcmluZyB0byBvbmx5IHRob3NlIHRoYXQgc3VwcG9ydCB0aGUgVW5pZmllZCBQbGFuIFNEUFxuLy8gZm9ybWF0IGxldHMgdXMgc2ltcGxpZnkgY29kZSBwYXRocyBvbiB0aGUgcmVjZWl2aW5nIGVuZCBvZiBzY3JlZW4gc2hhcmVzOiBpbiBvcmRlclxuLy8gdG8gY2hlY2sgd2hldGhlciB0byBhbHdheXMgZXhwZWN0IGEgc2luZ2xlIGluYm91bmQgdmlkZW8gdHJhY2ssIHdlIHNpbXBseSBoYXZlIHRvXG4vLyBjaGVjayB3aGV0aGVyIHdlJ3JlIGEgYnJvd3NlciB0aGF0IG9ubHkgc3VwcG9ydHMgdGhlIG9sZGVyIFBsYW4gQiBTRFAgZm9ybWF0IChzZWUgYmVsb3cpLlxuLy8gQWRkaXRpb25hbGx5LCBsaW1pdGluZyBzY3JlZW4gc2hhcmluZyB0aGlzIHdheSByZWR1Y2VzIG91ciB0ZXN0IG1hdHJpeC5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjcmVlblNoYXJpbmdTdXBwb3J0ZWQoKSB7XG4gIHJldHVybiBpc0Rpc3BsYXlNZWRpYUFjY2Vzc2libGUoKSAmJiBjYW5VbmlmaWVkUGxhbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxsc2NyZWVuU3VwcG9ydGVkKCkge1xuICBpZiAoaXNSZWFjdE5hdGl2ZSgpKSByZXR1cm4gZmFsc2U7XG4gIGlmICghZG9jdW1lbnQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHJldHVybiAhIWlmcmFtZS5yZXF1ZXN0RnVsbHNjcmVlbiB8fCAhIWlmcmFtZS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbjtcbn1cblxuY29uc3Qgc3VwcG9ydGVkQnJvd3NlcnNGb3JWaWRlb1Byb2Nlc3NvcnMgPSBbJ0Nocm9tZScsICdGaXJlZm94J107XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZGVvUHJvY2Vzc2luZ1N1cHBvcnRlZCgpIHtcbiAgaWYgKGlzUmVhY3ROYXRpdmUoKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYnJvd3Nlck1vYmlsZV9wKCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHN1cHBvcnRlZEJyb3dzZXJzRm9yVmlkZW9Qcm9jZXNzb3JzLmluY2x1ZGVzKGdldEJyb3dzZXJOYW1lKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuVW5pZmllZFBsYW4oKSB7XG4gIHJldHVybiBicm93c2VyQ2FuVW5pZmllZFBsYW4oZ2V0QnJvd3Nlck5hbWUoKSwgZ2V0QnJvd3NlclZlcnNpb24oKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicm93c2VyQ2FuVW5pZmllZFBsYW4oYnJvd3Nlck5hbWUsIGJyb3dzZXJWZXJzaW9uKSB7XG4gIGlmICghKGJyb3dzZXJOYW1lICYmIGJyb3dzZXJWZXJzaW9uKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHN3aXRjaCAoYnJvd3Nlck5hbWUpIHtcbiAgICBjYXNlICdDaHJvbWUnOlxuICAgICAgcmV0dXJuIGJyb3dzZXJWZXJzaW9uLm1ham9yID49IDc1O1xuICAgIGNhc2UgJ1NhZmFyaSc6XG4gICAgICAvLyBUaGlzIGlzIHRoZSBjaGVjayB0aGF0IEFwcGxlIHN1Z2dlc3RzIGluIGh0dHBzOi8vd2Via2l0Lm9yZy9ibG9nLzg2NzIvb24tdGhlLXJvYWQtdG8td2VicnRjLTEtMC1pbmNsdWRpbmctdnA4LyxcbiAgICAgIC8vIHBsdXMgYSB3b3JrYXJvdW5kIHRoYXQgd2FzIGFscmVhZHkgaW4gcGxhY2UgaGVyZSBmb3IgYSBTYWZhcmkgMTMuMC4wIGJ1ZywgZm9yY2luZyBpdCBpbnRvIFBsYW4gQi5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFJUQ1J0cFRyYW5zY2VpdmVyLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudERpcmVjdGlvbicpICYmXG4gICAgICAgICEoXG4gICAgICAgICAgYnJvd3NlclZlcnNpb24ubWFqb3IgPT09IDEzICYmXG4gICAgICAgICAgYnJvd3NlclZlcnNpb24ubWlub3IgPT09IDAgJiZcbiAgICAgICAgICBicm93c2VyVmVyc2lvbi5wb2ludCA9PT0gMFxuICAgICAgICApXG4gICAgICApO1xuICAgIC8vIE5vdGU6IFdlIG5vdyBvbmx5IHN1cHBvcnQgRmlyZWZveCA4MCsgc28gdGhpcyBzaG91bGQgYWx3YXlzIGJlIHRydWVcbiAgICBjYXNlICdGaXJlZm94JzpcbiAgICAgIHJldHVybiBicm93c2VyVmVyc2lvbi5tYWpvciA+PSA2NztcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyb3dzZXJWaWRlb1N1cHBvcnRlZF9wKCkge1xuICByZXR1cm4gaXNVc2VyTWVkaWFBY2Nlc3NpYmxlKCkgJiYgIWJyb3dzZXJOZWVkc1VwZ3JhZGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQW5kcm9pZEFwcCgpIHtcbiAgcmV0dXJuIGdldFVzZXJBZ2VudCgpLm1hdGNoKC9EYWlseUFuZFxcLy8pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBbmRyb2lkV2ViKCkge1xuICByZXR1cm4gZ2V0VXNlckFnZW50KCkubWF0Y2goL0xpbnV4OyBBbmRyb2lkLyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicm93c2VyTW9iaWxlX3AoKSB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IGdldFVzZXJBZ2VudCgpO1xuICBpZiAodXNlckFnZW50Lm1hdGNoKC9Nb2JpLykgfHwgdXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkLykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNBbmRyb2lkQXBwKCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJvd3Nlck5lZWRzVXBncmFkZSgpIHtcbiAgbGV0IGJyb3dzZXIgPSBnZXRCcm93c2VyTmFtZSgpLFxuICAgIHVhID0gZ2V0VXNlckFnZW50KCksXG4gICAgdmVyc2lvbjtcbiAgaWYgKCF1YSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHN3aXRjaCAoYnJvd3Nlcikge1xuICAgIGNhc2UgJ0Nocm9tZSc6XG4gICAgICAvLyBJbmNsdWRlcyBDaHJvbWl1bS1iYXNlZCBicm93c2Vyc1xuICAgICAgdmVyc2lvbiA9IGdldENocm9tZVZlcnNpb24oKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uLm1ham9yICYmIHZlcnNpb24ubWFqb3IgPiAwICYmIHZlcnNpb24ubWFqb3IgPCA2MTtcbiAgICBjYXNlICdGaXJlZm94JzpcbiAgICAgIHZlcnNpb24gPSBnZXRGaXJlZm94VmVyc2lvbigpO1xuICAgICAgcmV0dXJuIHZlcnNpb24ubWFqb3IgPCA3ODtcbiAgICBjYXNlICdTYWZhcmknOlxuICAgICAgdmVyc2lvbiA9IGdldFNhZmFyaVZlcnNpb24oKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uLm1ham9yIDwgMTI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyTmFtZSgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgdXNlckFnZW50ID0gZ2V0VXNlckFnZW50KCk7XG4gICAgLy8gVHJlYXQgc3VwcG9ydGVkIFdLV2ViVmlldyBhcyBTYWZhcmkuIENoZWNrIGZvciB0aGlzIGZpcnN0IGp1c3QgaW4gY2FzZVxuICAgIC8vIDNyZC1wYXJ0eSBicm93c2VycyBvbiBpT1MgZGVjaWRlIHRvIGN1c3RvbWl6ZSB0aGVpciB1c2VyIGFnZW50IHN0cmluZ3MgdG9cbiAgICAvLyBtYXRjaCB0aGUgb3RoZXIgY29uZGl0aW9ucy5cbiAgICBpZiAoaXNTdXBwb3J0ZWRJT1NFbnZpcm9ubWVudCgpKSB7XG4gICAgICByZXR1cm4gJ1NhZmFyaSc7XG4gICAgfSBlbHNlIGlmICh1c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID4gLTEpIHtcbiAgICAgIC8vIE5vdGU6IGNoZWNrIHdpbGwgKHB1cnBvc2VmdWxseSkgZmFpbCBmb3IgY2hyb21pdW0tYmFzZWQgRWRnZVxuICAgICAgLy8gc2luY2UgdGhlIHVzZXItYWdlbnQgZm9yIGNocm9taXVtLWJhc2VkIEVkZ2UgcmVwb3J0cyBgRWRnYFxuICAgICAgLy8gKG9yIEVkZ0EgKGFuZHJvaWQpIG9yIEVkZ2lPUylcbiAgICAgIC8vIEFsc28gbm90ZTogZ2V0QnJvd3Nlck5hbWUgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIGludGVybmFsXG4gICAgICAvLyAgIGxvZ2ljLCBzbyB0aGlzIHNob3VsZCBnbyBhd2F5IGV2ZW50dWFsbHkuIEhvd2V2ZXIsIGl0IGlzIHVzZWRcbiAgICAgIC8vICAgaW4gdGhlIG9sZCBwcmVidWlsdCBVSSBmb3Igc29tZSB1cGdyYWRlIG1lc3NhZ2luZyBzbyBsZWF2aW5nXG4gICAgICAvLyAgIGl0IGluIHVudGlsIEVkZ2Ugb3IgdGhlIG9sZCBwcmVidWlsdCBpcyByZWFsbHkgbm8gbG9uZ2VyIGEgdGhpbmdcbiAgICAgIHJldHVybiAnRWRnZSc7XG5cbiAgICAgIC8vIH0gIGVsc2UgaWYgKHVzZXJBZ2VudC5pbmRleE9mKCdPUFInKSA+IC0xIHx8XG4gICAgICAvLyAgICAgICAgICAgIHVzZXJBZ2VudC5pbmRleE9mKCdPcGVyYScpID4gLTEpIHtcbiAgICAgIC8vICAgcmV0dXJuICdPcGVyYSc7XG4gICAgfSBlbHNlIGlmICh1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLy8pKSB7XG4gICAgICAvLyBJbmNsdWRlcyBDaHJvbWl1bS1iYXNlZCBicm93c2Vyc1xuICAgICAgcmV0dXJuICdDaHJvbWUnO1xuICAgIH0gZWxzZSBpZiAodXNlckFnZW50LmluZGV4T2YoJ1NhZmFyaScpID4gLTEpIHtcbiAgICAgIHJldHVybiAnU2FmYXJpJztcbiAgICB9IGVsc2UgaWYgKHVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPiAtMSkge1xuICAgICAgcmV0dXJuICdGaXJlZm94JztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSA+IC0xIHx8XG4gICAgICB1c2VyQWdlbnQuaW5kZXhPZignLk5FVCcpID4gLTFcbiAgICApIHtcbiAgICAgIHJldHVybiAnSUUnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24gQnJvd3Nlcic7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyVmVyc2lvbigpIHtcbiAgbGV0IG5hbWUgPSBnZXRCcm93c2VyTmFtZSgpO1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdDaHJvbWUnOlxuICAgICAgLy8gSW5jbHVkZXMgQ2hyb21pdW0tYmFzZWQgYnJvd3NlcnNcbiAgICAgIHJldHVybiBnZXRDaHJvbWVWZXJzaW9uKCk7XG4gICAgY2FzZSAnU2FmYXJpJzpcbiAgICAgIHJldHVybiBnZXRTYWZhcmlWZXJzaW9uKCk7XG4gICAgY2FzZSAnRmlyZWZveCc6XG4gICAgICByZXR1cm4gZ2V0RmlyZWZveFZlcnNpb24oKTtcbiAgICBjYXNlICdFZGdlJzpcbiAgICAgIHJldHVybiBnZXRFZGdlVmVyc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaHJvbWVWZXJzaW9uKCkge1xuICBsZXQgbWFqb3IgPSAwLFxuICAgIG1pbm9yID0gMCxcbiAgICBidWlsZCA9IDAsXG4gICAgcGF0Y2ggPSAwLFxuICAgIG9wZXJhID0gZmFsc2U7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGdldFVzZXJBZ2VudCgpLFxuICAgICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS4oXFxkKykuKFxcZCspLihcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSk7XG4gICAgICAgIG1pbm9yID0gcGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgICBidWlsZCA9IHBhcnNlSW50KG1hdGNoWzNdKTtcbiAgICAgICAgcGF0Y2ggPSBwYXJzZUludChtYXRjaFs0XSk7XG4gICAgICAgIG9wZXJhID0gdXNlckFnZW50LmluZGV4T2YoJ09QUi8nKSA+IC0xO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgbWFqb3IsIG1pbm9yLCBidWlsZCwgcGF0Y2gsIG9wZXJhIH07XG59XG5cbi8vIE1vYmlsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IG9uIGlPUy9pUGFkT1MgPj0gMTQuM1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3VwcG9ydGVkSU9TRW52aXJvbm1lbnQoKSB7XG4gIHJldHVybiBpc0lPUygpICYmIGlzVXNlck1lZGlhQWNjZXNzaWJsZSgpO1xufVxuXG5mdW5jdGlvbiBpc0Rpc3BsYXlNZWRpYUFjY2Vzc2libGUoKSB7XG4gIHJldHVybiAhIShcbiAgICBuYXZpZ2F0b3IgJiZcbiAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzICYmXG4gICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXREaXNwbGF5TWVkaWFcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2FmYXJpVmVyc2lvbigpIHtcbiAgbGV0IG1ham9yID0gMCxcbiAgICBtaW5vciA9IDAsXG4gICAgcG9pbnQgPSAwO1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBnZXRVc2VyQWdlbnQoKSxcbiAgICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9WZXJzaW9uXFwvKFxcZCspLihcXGQrKSguKFxcZCspKT8vKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1ham9yID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICBtaW5vciA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgICAgcG9pbnQgPSBwYXJzZUludChtYXRjaFs0XSk7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH0gZWxzZSBpZiAoaXNTdXBwb3J0ZWRJT1NFbnZpcm9ubWVudCgpKSB7XG4gICAgICAvLyBIYWNrOiB0cmVhdCBzdXBwb3J0ZWQgV0tXZWJWaWV3IGxpa2UgU2FmYXJpIDE0LjAuMyAobm8gbmVlZCB0byBiZVxuICAgICAgLy8gcHJlY2lzZTsganVzdCBuZWVkcyB0byBiZSBuZXcgZW5vdWdoIHRvIGFwcGVhciBzdXBwb3J0ZWQsIGFuZCB0aGlzIHdhc1xuICAgICAgLy8gdGhlIFNhZmFyaSB2ZXJzaW9uIGFyb3VuZCB0aGUgdGltZSBXS1dlYlZpZXcgV2ViUlRDIHN1cHBvcnQgd2FzIGFkZGVkKVxuICAgICAgbWFqb3IgPSAxNDtcbiAgICAgIG1pbm9yID0gMDtcbiAgICAgIHBvaW50ID0gMztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgbWFqb3IsIG1pbm9yLCBwb2ludCB9O1xufVxuXG5mdW5jdGlvbiBnZXRGaXJlZm94VmVyc2lvbigpIHtcbiAgbGV0IG1ham9yID0gMCxcbiAgICBtaW5vciA9IDA7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGdldFVzZXJBZ2VudCgpLFxuICAgICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0ZpcmVmb3hcXC8oXFxkKykuKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBtYWpvciA9IHBhcnNlSW50KG1hdGNoWzFdKTtcbiAgICAgICAgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSk7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgfVxuICByZXR1cm4geyBtYWpvciwgbWlub3IgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RWRnZVZlcnNpb24oKSB7XG4gIGxldCBtYWpvciA9IDAsXG4gICAgbWlub3IgPSAwO1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBnZXRVc2VyQWdlbnQoKSxcbiAgICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLihcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSk7XG4gICAgICAgIG1pbm9yID0gcGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgbWFqb3IsIG1pbm9yIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPU05hbWUoKSB7XG4gIGxldCBPU05hbWUgPSAnVW5rbm93bic7XG4gIGlmIChpc1JlYWN0TmF0aXZlKCkpIHtcbiAgICBpZiAoXG4gICAgICB3aW5kb3cgJiZcbiAgICAgIHdpbmRvdy5EYWlseU5hdGl2ZVV0aWxzICYmXG4gICAgICB3aW5kb3cuRGFpbHlOYXRpdmVVdGlscy5wbGF0Zm9ybSAmJlxuICAgICAgd2luZG93LkRhaWx5TmF0aXZlVXRpbHMucGxhdGZvcm0uT1NcbiAgICApIHtcbiAgICAgIC8vIGluIGNhc2UgYm93c2VyIGNoYW5nZXMgaXRzIGNvbnN0cywgd2UgZG9uJ3QgaGF2ZSB0b1xuICAgICAgaWYgKHdpbmRvdy5EYWlseU5hdGl2ZVV0aWxzLnBsYXRmb3JtLk9TID09PSAnaW9zJykge1xuICAgICAgICBPU05hbWUgPSAnaU9TJztcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LkRhaWx5TmF0aXZlVXRpbHMucGxhdGZvcm0uT1MgPT09ICdhbmRyb2lkJykge1xuICAgICAgICBPU05hbWUgPSAnQW5kcm9pZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPU05hbWUgPSB3aW5kb3cuRGFpbHlOYXRpdmVVdGlscy5wbGF0Zm9ybS5PUztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIE9TTmFtZTtcbiAgfVxuXG4gIC8vIHBsYXRmb3JtIG1vZHVsZVxuICBpZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnRcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBuYXZBZ2VudEluZm8gPSBCb3dzZXIuZ2V0UGFyc2VyKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIGxldCBib3dzZXJOYW1lID0gbmF2QWdlbnRJbmZvLmdldE9TTmFtZSgpO1xuICAgICAgLy8gdGhpcyBzZWVtcyB1bm5lY2Vzc2FyeSwgaSBrbm93LiBidXQgaXQgZGVmZW5kcyBhZ2FpbnN0XG4gICAgICAvLyBjaGFuZ2VzIHRvIGJvd3NlclxuICAgICAgc3dpdGNoIChib3dzZXJOYW1lKSB7XG4gICAgICAgIGNhc2UgJ21hY09TJzpcbiAgICAgICAgICBPU05hbWUgPSAnbWFjT1MnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdXaW5kb3dzJzpcbiAgICAgICAgICBPU05hbWUgPSAnV2luZG93cyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0xpbnV4JzpcbiAgICAgICAgICBPU05hbWUgPSAnTGludXgnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpT1MnOlxuICAgICAgICAgIE9TTmFtZSA9ICdpT1MnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdBbmRyb2lkJzpcbiAgICAgICAgICBPU05hbWUgPSAnQW5kcm9pZCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgT1NOYW1lID0gYm93c2VyTmFtZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coJ2Jvd3NlciBlcnJvcicsIGVycm9yKTtcbiAgICAgIC8vIHBhc3NcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9TTmFtZTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/shared-with-pluot-core/Environment.js\n" + ); + + /***/ + }, + + /***/ "./src/shared-with-pluot-core/SessionData.js": + /*!***************************************************!*\ + !*** ./src/shared-with-pluot-core/SessionData.js ***! + \***************************************************/ + /*! exports provided: REPLACE_STRATEGY, SHALLOW_MERGE_STRATEGY, MERGE_STRATEGIES, SessionData, SessionDataUpdate, SessionDataClientUpdateQueue */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + '__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "REPLACE_STRATEGY", function() { return REPLACE_STRATEGY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SHALLOW_MERGE_STRATEGY", function() { return SHALLOW_MERGE_STRATEGY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MERGE_STRATEGIES", function() { return MERGE_STRATEGIES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SessionData", function() { return SessionData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SessionDataUpdate", function() { return SessionDataUpdate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SessionDataClientUpdateQueue", function() { return SessionDataClientUpdateQueue; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var dequal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dequal */ "./node_modules/dequal/dist/index.mjs");\n/* harmony import */ var _CommonIncludes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./CommonIncludes */ "./src/shared-with-pluot-core/CommonIncludes.js");\n\n\n\n\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\nvar REPLACE_STRATEGY = \'replace\';\nvar SHALLOW_MERGE_STRATEGY = \'shallow-merge\';\nvar MERGE_STRATEGIES = [REPLACE_STRATEGY, SHALLOW_MERGE_STRATEGY]; // Explanation of public meeting-session-data-related classes:\n// - Client side (this file):\n// - SessionDataUpdate: used on the client side to validate & encapsulate\n// user-specified updates to meeting session data.\n// - SessionDataClientUpdateQueue: used on the client side to enqueue multiple\n// user-specified updates before flushing them to the server as a single\n// payload.\n// - Server side (other file, skyliner-express/app/SessionDataServerStore.js):\n// - SessionDataServerStore: used on the SFU side to interact with stored\n// meeting session data, including updating the data and listening to\n// changes to that data (which may have been updated via a different SFU).\n// Check whether data is a Plain Old JavaScript Object (a map-like object),\n// which can be shallow-merged with another.\n// From https://masteringjs.io/tutorials/fundamentals/pojo.\n\nfunction isPlainOldJavaScriptObject(data) {\n if (data == null || _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_3___default()(data) !== \'object\') {\n return false;\n }\n\n var proto = Object.getPrototypeOf(data);\n\n if (proto == null) {\n return true;\n }\n\n return proto === Object.prototype;\n} // Meeting session data.\n// CONSIDER THIS "PRIVATE": ONLY MEANT FOR USE BY SESSIONDATACLIENTUPDATEQUEUE\n// AND SESSIONDATASERVERSTORE.\n\n\nvar SessionData = /*#__PURE__*/function () {\n function SessionData() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, SessionData);\n\n this.data = {};\n } // Updates the meeting session data with the given SessionDataUpdate, WITHOUT\n // deleting keys for undefined fields during a \'shallow-merge\'`.\n // Assumes sessionDataUpdate is valid.\n\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(SessionData, [{\n key: "update",\n value: function update(sessionDataUpdate) {\n if (sessionDataUpdate.isNoOp()) {\n return;\n }\n\n switch (sessionDataUpdate.mergeStrategy) {\n case SHALLOW_MERGE_STRATEGY:\n this.data = _objectSpread(_objectSpread({}, this.data), sessionDataUpdate.data);\n break;\n\n case REPLACE_STRATEGY:\n this.data = sessionDataUpdate.data;\n break;\n }\n } // Deletes the specified keys from the meeting session data.\n\n }, {\n key: "deleteKeys",\n value: function deleteKeys(keys) {\n if (Array.isArray(keys)) {\n var _iterator = _createForOfIteratorHelper(keys),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n\n if (isPlainOldJavaScriptObject(this.data)) {\n delete this.data[key];\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n } // Whether the current data exceeds the max size.\n\n }, {\n key: "exceedsMaxSize",\n value: function exceedsMaxSize() {\n return JSON.stringify(this.data).length > _CommonIncludes__WEBPACK_IMPORTED_MODULE_5__["MAX_SESSION_DATA_SIZE"];\n }\n }]);\n\n return SessionData;\n}(); // An update to meeting session data.\n// Guaranteed to be valid upon construction, which means:\n// - mergeStrategy is either \'replace\' or \'shallow-merge\'\n// - data is a plain (map-like) object\n// - data isn\'t too big\n\nvar SessionDataUpdate = /*#__PURE__*/function () {\n function SessionDataUpdate() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n data = _ref.data,\n _ref$mergeStrategy = _ref.mergeStrategy,\n mergeStrategy = _ref$mergeStrategy === void 0 ? REPLACE_STRATEGY : _ref$mergeStrategy;\n\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, SessionDataUpdate);\n\n SessionDataUpdate._validateMergeStrategy(mergeStrategy);\n\n SessionDataUpdate._validateData(data, mergeStrategy);\n\n this.mergeStrategy = mergeStrategy;\n this.data = data;\n } // Whether this update is a no-op.\n\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(SessionDataUpdate, [{\n key: "isNoOp",\n value: function isNoOp() {\n return SessionDataUpdate.isNoOpUpdate(this.data, this.mergeStrategy);\n } // Whether an update comprised of the given data and mergeStrategy would be a\n // no-op.\n\n }], [{\n key: "isNoOpUpdate",\n value: function isNoOpUpdate(data, mergeStrategy) {\n return Object.keys(data).length === 0 && mergeStrategy === SHALLOW_MERGE_STRATEGY;\n } // Validate merge strategy, throwing an error if invalid.\n // Assumes mergeStrategy is not undefined.\n\n }, {\n key: "_validateMergeStrategy",\n value: function _validateMergeStrategy(mergeStrategy) {\n if (!MERGE_STRATEGIES.includes(mergeStrategy)) {\n throw Error("Unrecognized mergeStrategy provided. Options are: [".concat(MERGE_STRATEGIES, "]"));\n }\n } // Validate data with the given merge strategy, throwing an error if invalid.\n // Assumes mergeStrategy is valid.\n\n }, {\n key: "_validateData",\n value: function _validateData(data, mergeStrategy) {\n // Data must be a plain (map-like) object.\n if (!isPlainOldJavaScriptObject(data)) {\n throw Error("Meeting session data must be a plain (map-like) object");\n } // Check that what goes in will be the same coming out :)\n // (Make an exception for top-level \'undefined\'s with \'shallow-merge\',\n // though, since those are meaningful and will be translated into key\n // deletions).\n\n\n var dataStr;\n\n try {\n dataStr = JSON.stringify(data);\n\n if (mergeStrategy === REPLACE_STRATEGY) {\n var out = JSON.parse(dataStr);\n\n if (!Object(dequal__WEBPACK_IMPORTED_MODULE_4__["dequal"])(out, data)) {\n console.warn("The meeting session data provided will be modified when serialized.", out, data);\n }\n } else if (mergeStrategy === SHALLOW_MERGE_STRATEGY) {\n for (var key in data) {\n if (Object.hasOwnProperty.call(data, key)) {\n if (data[key] !== undefined) {\n var _out = JSON.parse(JSON.stringify(data[key]));\n\n if (!Object(dequal__WEBPACK_IMPORTED_MODULE_4__["dequal"])(data[key], _out)) {\n console.warn("At least one key in the meeting session data provided will be modified when serialized.", _out, data[key]);\n }\n }\n }\n }\n }\n } catch (e) {\n throw Error("Meeting session data must be serializable to JSON: ".concat(e));\n } // Check the size of the payload\n\n\n if (dataStr.length > _CommonIncludes__WEBPACK_IMPORTED_MODULE_5__["MAX_SESSION_DATA_SIZE"]) {\n throw Error("Meeting session data is too large (".concat(dataStr.length, " characters). Maximum size suppported is ").concat(_CommonIncludes__WEBPACK_IMPORTED_MODULE_5__["MAX_SESSION_DATA_SIZE"], "."));\n }\n }\n }]);\n\n return SessionDataUpdate;\n}(); // The client-side update "queue" where meeting session data updates temporarily\n// live before getting flushed to the server (necessary thanks to client-side\n// debouncing).\n// Note that "queue" is in quotes because, though it behaves like a queue, in\n// its implementation the updates are actually merged in place into a single\n// server update.\n\nvar SessionDataClientUpdateQueue = /*#__PURE__*/function () {\n function SessionDataClientUpdateQueue() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, SessionDataClientUpdateQueue);\n\n this._resetQueue();\n } // "Enqueues" a SessionDataUpdate.\n // Assumes sessionDataUpdate is valid.\n\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(SessionDataClientUpdateQueue, [{\n key: "enqueueUpdate",\n value: function enqueueUpdate(sessionDataUpdate) {\n // If update is a no-op, don\'t enqueue it.\n if (sessionDataUpdate.isNoOp()) {\n return;\n } // If "queue" is empty, initialize it.\n\n\n if (!this.sessionData) {\n this.sessionData = new SessionData();\n this.mergeStrategyForNextServerUpdate = sessionDataUpdate.mergeStrategy;\n } // Update data in the "queue".\n\n\n this.sessionData.update(sessionDataUpdate); // If this was a \'replace\' update, set \'replace\' as the strategy for the\n // next server update, regardless of incoming client updates until then.\n\n if (sessionDataUpdate.mergeStrategy === REPLACE_STRATEGY) {\n this.mergeStrategyForNextServerUpdate = REPLACE_STRATEGY;\n }\n } // Flush queue into an update payload to send to the server.\n // Returns null if there\'s no update to send, or it\'d be a no-op.\n\n }, {\n key: "flushToServerUpdatePayload",\n value: function flushToServerUpdatePayload() {\n // If nothing\'s enqueued, return no payload.\n if (!this.sessionData) {\n return null;\n } // Make server payload.\n\n\n var payload = {\n data: this.sessionData.data,\n mergeStrategy: this.mergeStrategyForNextServerUpdate\n }; // If this is a merge and any top-level keys are undefined, translate them\n // into explicit "keys to delete" in the payload; otherwise they\'d be\n // stripped during JSON serialization.\n\n if (payload.mergeStrategy === SHALLOW_MERGE_STRATEGY) {\n for (var key in payload.data) {\n if (Object.hasOwnProperty.call(payload.data, key)) {\n if (payload.data[key] === undefined) {\n if (!payload.keysToDelete) {\n payload.keysToDelete = [];\n }\n\n payload.keysToDelete.push(key);\n delete payload.data[key];\n }\n }\n }\n }\n\n this._resetQueue();\n\n return payload;\n }\n }, {\n key: "_resetQueue",\n value: function _resetQueue() {\n this.sessionData = null;\n this.mergeStrategyForNextServerUpdate = false;\n }\n }]);\n\n return SessionDataClientUpdateQueue;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL1Nlc3Npb25EYXRhLmpzP2U3ZjMiXSwibmFtZXMiOlsiUkVQTEFDRV9TVFJBVEVHWSIsIlNIQUxMT1dfTUVSR0VfU1RSQVRFR1kiLCJNRVJHRV9TVFJBVEVHSUVTIiwiaXNQbGFpbk9sZEphdmFTY3JpcHRPYmplY3QiLCJkYXRhIiwicHJvdG8iLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsInByb3RvdHlwZSIsIlNlc3Npb25EYXRhIiwic2Vzc2lvbkRhdGFVcGRhdGUiLCJpc05vT3AiLCJtZXJnZVN0cmF0ZWd5Iiwia2V5cyIsIkFycmF5IiwiaXNBcnJheSIsImtleSIsIkpTT04iLCJzdHJpbmdpZnkiLCJsZW5ndGgiLCJNQVhfU0VTU0lPTl9EQVRBX1NJWkUiLCJTZXNzaW9uRGF0YVVwZGF0ZSIsIl92YWxpZGF0ZU1lcmdlU3RyYXRlZ3kiLCJfdmFsaWRhdGVEYXRhIiwiaXNOb09wVXBkYXRlIiwiaW5jbHVkZXMiLCJFcnJvciIsImRhdGFTdHIiLCJvdXQiLCJwYXJzZSIsImRlcXVhbCIsImNvbnNvbGUiLCJ3YXJuIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidW5kZWZpbmVkIiwiZSIsIlNlc3Npb25EYXRhQ2xpZW50VXBkYXRlUXVldWUiLCJfcmVzZXRRdWV1ZSIsInNlc3Npb25EYXRhIiwibWVyZ2VTdHJhdGVneUZvck5leHRTZXJ2ZXJVcGRhdGUiLCJ1cGRhdGUiLCJwYXlsb2FkIiwia2V5c1RvRGVsZXRlIiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBRU8sSUFBTUEsZ0JBQWdCLEdBQUcsU0FBekI7QUFDQSxJQUFNQyxzQkFBc0IsR0FBRyxlQUEvQjtBQUNBLElBQU1DLGdCQUFnQixHQUFHLENBQUNGLGdCQUFELEVBQW1CQyxzQkFBbkIsQ0FBekIsQyxDQUVQO0FBQ0E7QUFDQTtB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QUFBLGlEQStCK0I7QUFDM0I7QUFDQSxVQUFJLENBQUMsS0FBS3VDLFdBQVYsRUFBdUI7QUFDckIsZUFBTyxJQUFQO0FBQ0QsT0FKMEIsQ0FNM0I7OztBQUNBLFVBQUlHLE9BQU8sR0FBRztBQUNadEMsWUFBSSxFQUFFLEtBQUttQyxXQUFMLENBQWlCbkMsSUFEWDtBQUVaUSxxQkFBYSxFQUFFLEtBQUs0QjtBQUZSLE9BQWQsQ0FQMkIsQ0FZM0I7QUFDQTtBQUNBOztBQUNBLFVBQUlFLE9BQU8sQ0FBQzlCLGFBQVIsS0FBMEJYLHNCQUE5QixFQUFzRDtBQUNwRCxhQUFLLElBQU1lLEdBQVgsSUFBa0IwQixPQUFPLENBQUN0QyxJQUExQixFQUFnQztBQUM5QixjQUFJRSxNQUFNLENBQUMyQixjQUFQLENBQXNCQyxJQUF0QixDQUEyQlEsT0FBTyxDQUFDdEMsSUFBbkMsRUFBeUNZLEdBQXpDLENBQUosRUFBbUQ7QUFDakQsZ0JBQUkwQixPQUFPLENBQUN0QyxJQUFSLENBQWFZLEdBQWIsTUFBc0JtQixTQUExQixFQUFxQztBQUNuQyxrQkFBSSxDQUFDTyxPQUFPLENBQUNDLFlBQWIsRUFBMkI7QUFDekJELHVCQUFPLENBQUNDLFlBQVIsR0FBdUIsRUFBdkI7QUFDRDs7QUFDREQscUJBQU8sQ0FBQ0MsWUFBUixDQUFxQkMsSUFBckIsQ0FBMEI1QixHQUExQjtBQUNBLHFCQUFPMEIsT0FBTyxDQUFDdEMsSUFBUixDQUFhWSxHQUFiLENBQVA7QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7QUFFRCxXQUFLc0IsV0FBTDs7QUFFQSxhQUFPSSxPQUFQO0FBQ0Q7QUEvREg7QUFBQTtBQUFBLGtDQWlFZ0I7QUFDWixXQUFLSCxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsV0FBS0MsZ0NBQUwsR0FBd0MsS0FBeEM7QUFDRDtBQXBFSDs7QUFBQTtBQUFBIiwiZmlsZSI6Ii4vc3JjL3NoYXJlZC13aXRoLXBsdW90LWNvcmUvU2Vzc2lvbkRhdGEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXF1YWwgfSBmcm9tICdkZXF1YWwnO1xuaW1wb3J0IHsgTUFYX1NFU1NJT05fREFUQV9TSVpFIH0gZnJvbSAnLi9Db21tb25JbmNsdWRlcyc7XG5cbmV4cG9ydCBjb25zdCBSRVBMQUNFX1NUUkFURUdZID0gJ3JlcGxhY2UnO1xuZXhwb3J0IGNvbnN0IFNIQUxMT1dfTUVSR0VfU1RSQVRFR1kgPSAnc2hhbGxvdy1tZXJnZSc7XG5leHBvcnQgY29uc3QgTUVSR0VfU1RSQVRFR0lFUyA9IFtSRVBMQUNFX1NUUkFURUdZLCBTSEFMTE9XX01FUkdFX1NUUkFURUdZXTtcblxuLy8gRXhwbGFuYXRpb24gb2YgcHVibGljIG1lZXRpbmctc2Vzc2lvbi1kYXRhLXJlbGF0ZWQgY2xhc3Nlczpcbi8vIC0gQ2xpZW50IHNpZGUgKHRoaXMgZmlsZSk6XG4vLyAgIC0gU2Vzc2lvbkRhdGFVcGRhdGU6IHVzZWQgb24gdGhlIGNsaWVudCBzaWRlIHRvIHZhbGlkYXRlICYgZW5jYXBzdWxhdGVcbi8vICAgICB1c2VyLXNwZWNpZmllZCB1cGRhdGVzIHRvIG1lZXRpbmcgc2Vzc2lvbiBkYXRhLlxuLy8gICAtIFNlc3Npb25EYXRhQ2xpZW50VXBkYXRlUXVldWU6IHVzZWQgb24gdGhlIGNsaWVudCBzaWRlIHRvIGVucXVldWUgbXVsdGlwbGVcbi8vICAgICB1c2VyLXNwZWNpZmllZCB1cGRhdGVzIGJlZm9yZSBmbHVzaGluZyB0aGVtIHRvIHRoZSBzZXJ2ZXIgYXMgYSBzaW5nbGVcbi8vICAgICBwYXlsb2FkLlxuLy8gLSBTZXJ2ZXIgc2lkZSAob3RoZXIgZmlsZSwgc2t5bGluZXItZXhwcmVzcy9hcHAvU2Vzc2lvbkRhdGFTZXJ2ZXJTdG9yZS5qcyk6XG4vLyAgIC0gU2Vzc2lvbkRhdGFTZXJ2ZXJTdG9yZTogdXNlZCBvbiB0aGUgU0ZVIHNpZGUgdG8gaW50ZXJhY3Qgd2l0aCBzdG9yZWRcbi8vICAgICBtZWV0aW5nIHNlc3Npb24gZGF0YSwgaW5jbHVkaW5nIHVwZGF0aW5nIHRoZSBkYXRhIGFuZCBsaXN0ZW5pbmcgdG9cbi8vICAgICBjaGFuZ2VzIHRvIHRoYXQgZGF0YSAod2hpY2ggbWF5IGhhdmUgYmVlbiB1cGRhdGVkIHZpYSBhIGRpZmZlcmVudCBTRlUpLlxuXG4vLyBDaGVjayB3aGV0aGVyIGRhdGEgaXMgYSBQbGFpbiBPbGQgSmF2YVNjcmlwdCBPYmplY3QgKGEgbWFwLWxpa2Ugb2JqZWN0KSxcbi8vIHdoaWNoIGNhbiBiZSBzaGFsbG93LW1lcmdlZCB3aXRoIGFub3RoZXIuXG4vLyBGcm9tIGh0dHBzOi8vbWFzdGVyaW5nanMuaW8vdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wb2pvLlxuZnVuY3Rpb24gaXNQbGFpbk9sZEphdmFTY3JpcHRPYmplY3QoZGF0YSkge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihkYXRhKTtcbiAgaWYgKHByb3RvID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8vIE1lZXRpbmcgc2Vzc2lvbiBkYXRhLlxuLy8gQ09OU0lERVIgVEhJUyBcIlBSSVZBVEVcIjogT05MWSBNRUFOVCBGT1IgVVNFIEJZIFNFU1NJT05EQVRBQ0xJRU5UVVBEQVRFUVVFVUVcbi8vIEFORCBTRVNTSU9OREFUQVNFUlZFUlNUT1JFLlxuZXhwb3J0IGNsYXNzIFNlc3Npb25EYXRhIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kYXRhID0ge307XG4gIH1cblxuICAvLyBVcGRhdGVzIHRoZSBtZWV0aW5nIHNlc3Npb24gZGF0YSB3aXRoIHRoZSBnaXZlbiBTZXNzaW9uRGF0YVVwZGF0ZSwgV0lUSE9VVFxuICAvLyBkZWxldGluZyBrZXlzIGZvciB1bmRlZmluZWQgZmllbGRzIGR1cmluZyBhICdzaGFsbG93LW1lcmdlJ2AuXG4gIC8vIEFzc3VtZXMgc2Vzc2lvbkRhdGFVcGRhdGUgaXMgdmFsaWQuXG4gIHVwZGF0ZShzZXNzaW9uRGF0YVVwZGF0ZSkge1xuICAgIGlmIChzZXNzaW9uRGF0YVVwZGF0ZS5pc05vT3AoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHNlc3Npb25EYXRhVXBkYXRlLm1lcmdlU3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgU0hBTExPV19NRVJHRV9TVFJBVEVHWTpcbiAgICAgICAgdGhpcy5kYXRhID0geyAuLi50aGlzLmRhdGEsIC4uLnNlc3Npb25EYXRhVXBkYXRlLmRhdGEgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJFUExBQ0VfU1RSQVRFR1k6XG4gICAgICAgIHRoaXMuZGF0YSA9IHNlc3Npb25EYXRhVXBkYXRlLmRhdGE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlbGV0ZXMgdGhlIHNwZWNpZmllZCBrZXlzIGZyb20gdGhlIG1lZXRpbmcgc2Vzc2lvbiBkYXRhLlxuICBkZWxldGVLZXlzKGtleXMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAoaXNQbGFpbk9sZEphdmFTY3JpcHRPYmplY3QodGhpcy5kYXRhKSkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmRhdGFba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgZGF0YSBleGNlZWRzIHRoZSBtYXggc2l6ZS5cbiAgZXhjZWVkc01heFNpemUoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkubGVuZ3RoID4gTUFYX1NFU1NJT05fREFUQV9TSVpFO1xuICB9XG59XG5cbi8vIEFuIHVwZGF0ZSB0byBtZWV0aW5nIHNlc3Npb24gZGF0YS5cbi8vIEd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgdXBvbiBjb25zdHJ1Y3Rpb24sIHdoaWNoIG1lYW5zOlxuLy8gLSBtZXJnZVN0cmF0ZWd5IGlzIGVpdGhlciAncmVwbGFjZScgb3IgJ3NoYWxsb3ctbWVyZ2UnXG4vLyAtIGRhdGEgaXMgYSBwbGFpbiAobWFwLWxpa2UpIG9iamVjdFxuLy8gLSBkYXRhIGlzbid0IHRvbyBiaWdcbmV4cG9ydCBjbGFzcyBTZXNzaW9uRGF0YVVwZGF0ZSB7XG4gIGNvbnN0cnVjdG9yKHsgZGF0YSwgbWVyZ2VTdHJhdGVneSA9IFJFUExBQ0VfU1RSQVRFR1kgfSA9IHt9KSB7XG4gICAgU2Vzc2lvbkRhdGFVcGRhdGUuX3ZhbGlkYXRlTWVyZ2VTdHJhdGVneShtZXJnZVN0cmF0ZWd5KTtcbiAgICBTZXNzaW9uRGF0YVVwZGF0ZS5fdmFsaWRhdGVEYXRhKGRhdGEsIG1lcmdlU3RyYXRlZ3kpO1xuICAgIHRoaXMubWVyZ2VTdHJhdGVneSA9IG1lcmdlU3RyYXRlZ3k7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8vIFdoZXRoZXIgdGhpcyB1cGRhdGUgaXMgYSBuby1vcC5cbiAgaXNOb09wKCkge1xuICAgIHJldHVybiBTZXNzaW9uRGF0YVVwZGF0ZS5pc05vT3BVcGRhdGUodGhpcy5kYXRhLCB0aGlzLm1lcmdlU3RyYXRlZ3kpO1xuICB9XG5cbiAgLy8gV2hldGhlciBhbiB1cGRhdGUgY29tcHJpc2VkIG9mIHRoZSBnaXZlbiBkYXRhIGFuZCBtZXJnZVN0cmF0ZWd5IHdvdWxkIGJlIGFcbiAgLy8gbm8tb3AuXG4gIHN0YXRpYyBpc05vT3BVcGRhdGUoZGF0YSwgbWVyZ2VTdHJhdGVneSkge1xuICAgIHJldHVybiAoXG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDAgJiYgbWVyZ2VTdHJhdGVneSA9PT0gU0hBTExPV19NRVJHRV9TVFJBVEVHWVxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBtZXJnZSBzdHJhdGVneSwgdGhyb3dpbmcgYW4gZXJyb3IgaWYgaW52YWxpZC5cbiAgLy8gQXNzdW1lcyBtZXJnZVN0cmF0ZWd5IGlzIG5vdCB1bmRlZmluZWQuXG4gIHN0YXRpYyBfdmFsaWRhdGVNZXJnZVN0cmF0ZWd5KG1lcmdlU3RyYXRlZ3kpIHtcbiAgICBpZiAoIU1FUkdFX1NUUkFURUdJRVMuaW5jbHVkZXMobWVyZ2VTdHJhdGVneSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgVW5yZWNvZ25pemVkIG1lcmdlU3RyYXRlZ3kgcHJvdmlkZWQuIE9wdGlvbnMgYXJlOiBbJHtNRVJHRV9TVFJBVEVHSUVTfV1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGRhdGEgd2l0aCB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3ksIHRocm93aW5nIGFuIGVycm9yIGlmIGludmFsaWQuXG4gIC8vIEFzc3VtZXMgbWVyZ2VTdHJhdGVneSBpcyB2YWxpZC5cbiAgc3RhdGljIF92YWxpZGF0ZURhdGEoZGF0YSwgbWVyZ2VTdHJhdGVneSkge1xuICAgIC8vIERhdGEgbXVzdCBiZSBhIHBsYWluIChtYXAtbGlrZSkgb2JqZWN0LlxuICAgIGlmICghaXNQbGFpbk9sZEphdmFTY3JpcHRPYmplY3QoZGF0YSkpIHtcbiAgICAgIHRocm93IEVycm9yKGBNZWV0aW5nIHNlc3Npb24gZGF0YSBtdXN0IGJlIGEgcGxhaW4gKG1hcC1saWtlKSBvYmplY3RgKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGF0IHdoYXQgZ29lcyBpbiB3aWxsIGJlIHRoZSBzYW1lIGNvbWluZyBvdXQgOilcbiAgICAvLyAoTWFrZSBhbiBleGNlcHRpb24gZm9yIHRvcC1sZXZlbCAndW5kZWZpbmVkJ3Mgd2l0aCAnc2hhbGxvdy1tZXJnZScsXG4gICAgLy8gdGhvdWdoLCBzaW5jZSB0aG9zZSBhcmUgbWVhbmluZ2Z1bCBhbmQgd2lsbCBiZSB0cmFuc2xhdGVkIGludG8ga2V5XG4gICAgLy8gZGVsZXRpb25zKS5cbiAgICBsZXQgZGF0YVN0cjtcbiAgICB0cnkge1xuICAgICAgZGF0YVN0ciA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgaWYgKG1lcmdlU3RyYXRlZ3kgPT09IFJFUExBQ0VfU1RSQVRFR1kpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gSlNPTi5wYXJzZShkYXRhU3RyKTtcbiAgICAgICAgaWYgKCFkZXF1YWwob3V0LCBkYXRhKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBUaGUgbWVldGluZyBzZXNzaW9uIGRhdGEgcHJvdmlkZWQgd2lsbCBiZSBtb2RpZmllZCB3aGVuIHNlcmlhbGl6ZWQuYCxcbiAgICAgICAgICAgIG91dCxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG1lcmdlU3RyYXRlZ3kgPT09IFNIQUxMT1dfTUVSR0VfU1RSQVRFR1kpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICAgICAgICBpZiAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhW2tleV0pKTtcbiAgICAgICAgICAgICAgaWYgKCFkZXF1YWwoZGF0YVtrZXldLCBvdXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgYEF0IGxlYXN0IG9uZSBrZXkgaW4gdGhlIG1lZXRpbmcgc2Vzc2lvbiBkYXRhIHByb3ZpZGVkIHdpbGwgYmUgbW9kaWZpZWQgd2hlbiBzZXJpYWxpemVkLmAsXG4gICAgICAgICAgICAgICAgICBvdXQsXG4gICAgICAgICAgICAgICAgICBkYXRhW2tleV1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgRXJyb3IoYE1lZXRpbmcgc2Vzc2lvbiBkYXRhIG11c3QgYmUgc2VyaWFsaXphYmxlIHRvIEpTT046ICR7ZX1gKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9hZFxuICAgIGlmIChkYXRhU3RyLmxlbmd0aCA+IE1BWF9TRVNTSU9OX0RBVEFfU0laRSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBNZWV0aW5nIHNlc3Npb24gZGF0YSBpcyB0b28gbGFyZ2UgKCR7ZGF0YVN0ci5sZW5ndGh9IGNoYXJhY3RlcnMpLiBNYXhpbXVtIHNpemUgc3VwcHBvcnRlZCBpcyAke01BWF9TRVNTSU9OX0RBVEFfU0laRX0uYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIGNsaWVudC1zaWRlIHVwZGF0ZSBcInF1ZXVlXCIgd2hlcmUgbWVldGluZyBzZXNzaW9uIGRhdGEgdXBkYXRlcyB0ZW1wb3JhcmlseVxuLy8gbGl2ZSBiZWZvcmUgZ2V0dGluZyBmbHVzaGVkIHRvIHRoZSBzZXJ2ZXIgKG5lY2Vzc2FyeSB0aGFua3MgdG8gY2xpZW50LXNpZGVcbi8vIGRlYm91bmNpbmcpLlxuLy8gTm90ZSB0aGF0IFwicXVldWVcIiBpcyBpbiBxdW90ZXMgYmVjYXVzZSwgdGhvdWdoIGl0IGJlaGF2ZXMgbGlrZSBhIHF1ZXVlLCBpblxuLy8gaXRzIGltcGxlbWVudGF0aW9uIHRoZSB1cGRhdGVzIGFyZSBhY3R1YWxseSBtZXJnZWQgaW4gcGxhY2UgaW50byBhIHNpbmdsZVxuLy8gc2VydmVyIHVwZGF0ZS5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uRGF0YUNsaWVudFVwZGF0ZVF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fcmVzZXRRdWV1ZSgpO1xuICB9XG5cbiAgLy8gXCJFbnF1ZXVlc1wiIGEgU2Vzc2lvbkRhdGFVcGRhdGUuXG4gIC8vIEFzc3VtZXMgc2Vzc2lvbkRhdGFVcGRhdGUgaXMgdmFsaWQuXG4gIGVucXVldWVVcGRhdGUoc2Vzc2lvbkRhdGFVcGRhdGUpIHtcbiAgICAvLyBJZiB1cGRhdGUgaXMgYSBuby1vcCwgZG9uJ3QgZW5xdWV1ZSBpdC5cbiAgICBpZiAoc2Vzc2lvbkRhdGFVcGRhdGUuaXNOb09wKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBcInF1ZXVlXCIgaXMgZW1wdHksIGluaXRpYWxpemUgaXQuXG4gICAgaWYgKCF0aGlzLnNlc3Npb25EYXRhKSB7XG4gICAgICB0aGlzLnNlc3Npb25EYXRhID0gbmV3IFNlc3Npb25EYXRhKCk7XG4gICAgICB0aGlzLm1lcmdlU3RyYXRlZ3lGb3JOZXh0U2VydmVyVXBkYXRlID0gc2Vzc2lvbkRhdGFVcGRhdGUubWVyZ2VTdHJhdGVneTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgZGF0YSBpbiB0aGUgXCJxdWV1ZVwiLlxuICAgIHRoaXMuc2Vzc2lvbkRhdGEudXBkYXRlKHNlc3Npb25EYXRhVXBkYXRlKTtcblxuICAgIC8vIElmIHRoaXMgd2FzIGEgJ3JlcGxhY2UnIHVwZGF0ZSwgc2V0ICdyZXBsYWNlJyBhcyB0aGUgc3RyYXRlZ3kgZm9yIHRoZVxuICAgIC8vIG5leHQgc2VydmVyIHVwZGF0ZSwgcmVnYXJkbGVzcyBvZiBpbmNvbWluZyBjbGllbnQgdXBkYXRlcyB1bnRpbCB0aGVuLlxuICAgIGlmIChzZXNzaW9uRGF0YVVwZGF0ZS5tZXJnZVN0cmF0ZWd5ID09PSBSRVBMQUNFX1NUUkFURUdZKSB7XG4gICAgICB0aGlzLm1lcmdlU3RyYXRlZ3lGb3JOZXh0U2VydmVyVXBkYXRlID0gUkVQTEFDRV9TVFJBVEVHWTtcbiAgICB9XG4gIH1cblxuICAvLyBGbHVzaCBxdWV1ZSBpbnRvIGFuIHVwZGF0ZSBwYXlsb2FkIHRvIHNlbmQgdG8gdGhlIHNlcnZlci5cbiAgLy8gUmV0dXJucyBudWxsIGlmIHRoZXJlJ3Mgbm8gdXBkYXRlIHRvIHNlbmQsIG9yIGl0J2QgYmUgYSBuby1vcC5cbiAgZmx1c2hUb1NlcnZlclVwZGF0ZVBheWxvYWQoKSB7XG4gICAgLy8gSWYgbm90aGluZydzIGVucXVldWVkLCByZXR1cm4gbm8gcGF5bG9hZC5cbiAgICBpZiAoIXRoaXMuc2Vzc2lvbkRhdGEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc2VydmVyIHBheWxvYWQuXG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICBkYXRhOiB0aGlzLnNlc3Npb25EYXRhLmRhdGEsXG4gICAgICBtZXJnZVN0cmF0ZWd5OiB0aGlzLm1lcmdlU3RyYXRlZ3lGb3JOZXh0U2VydmVyVXBkYXRlLFxuICAgIH07XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgbWVyZ2UgYW5kIGFueSB0b3AtbGV2ZWwga2V5cyBhcmUgdW5kZWZpbmVkLCB0cmFuc2xhdGUgdGhlbVxuICAgIC8vIGludG8gZXhwbGljaXQgXCJrZXlzIHRvIGRlbGV0ZVwiIGluIHRoZSBwYXlsb2FkOyBvdGhlcndpc2UgdGhleSdkIGJlXG4gICAgLy8gc3RyaXBwZWQgZHVyaW5nIEpTT04gc2VyaWFsaXphdGlvbi5cbiAgICBpZiAocGF5bG9hZC5tZXJnZVN0cmF0ZWd5ID09PSBTSEFMTE9XX01FUkdFX1NUUkFURUdZKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXlsb2FkLmRhdGEpIHtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBheWxvYWQuZGF0YSwga2V5KSkge1xuICAgICAgICAgIGlmIChwYXlsb2FkLmRhdGFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoIXBheWxvYWQua2V5c1RvRGVsZXRlKSB7XG4gICAgICAgICAgICAgIHBheWxvYWQua2V5c1RvRGVsZXRlID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXlsb2FkLmtleXNUb0RlbGV0ZS5wdXNoKGtleSk7XG4gICAgICAgICAgICBkZWxldGUgcGF5bG9hZC5kYXRhW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzZXRRdWV1ZSgpO1xuXG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBfcmVzZXRRdWV1ZSgpIHtcbiAgICB0aGlzLnNlc3Npb25EYXRhID0gbnVsbDtcbiAgICB0aGlzLm1lcmdlU3RyYXRlZ3lGb3JOZXh0U2VydmVyVXBkYXRlID0gZmFsc2U7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/shared-with-pluot-core/SessionData.js\n' + ); + + /***/ + }, + + /***/ "./src/shared-with-pluot-core/script-message-channels/ReactNativeMessageChannel.js": + /*!*****************************************************************************************!*\ + !*** ./src/shared-with-pluot-core/script-message-channels/ReactNativeMessageChannel.js ***! + \*****************************************************************************************/ + /*! exports provided: default */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + '__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ReactNativeMessageChannel; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _ScriptMessageChannel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ScriptMessageChannel */ "./src/shared-with-pluot-core/script-message-channels/ScriptMessageChannel.js");\n/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! events */ "./node_modules/events/events.js");\n/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(events__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils */ "./src/utils.js");\n\n\n\n\n\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n\n\n\n/**\n * A two-way message channel between daily-js and the call machine (pluot-core),\n * when running in a React Native context.\n */\n\nvar ReactNativeMessageChannel = /*#__PURE__*/function (_ScriptMessageChannel) {\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_2___default()(ReactNativeMessageChannel, _ScriptMessageChannel);\n\n var _super = _createSuper(ReactNativeMessageChannel);\n\n function ReactNativeMessageChannel() {\n var _this;\n\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ReactNativeMessageChannel);\n\n _this = _super.call(this); // A ReactNativeMessageChannel is constructed both in daily-js and the call\n // machine. Make sure we only instantiate emitters once.\n\n window.callMachineToDailyJsEmitter = window.callMachineToDailyJsEmitter || new events__WEBPACK_IMPORTED_MODULE_6__["EventEmitter"]();\n window.dailyJsToCallMachineEmitter = window.dailyJsToCallMachineEmitter || new events__WEBPACK_IMPORTED_MODULE_6__["EventEmitter"]();\n _this._wrappedListeners = {}; // Mapping between listeners and wrapped listeners\n\n _this._messageCallbacks = {};\n return _this;\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ReactNativeMessageChannel, [{\n key: "addListenerForMessagesFromCallMachine",\n value: function addListenerForMessagesFromCallMachine(listener, callFrameId, thisValue) {\n this._addListener(listener, window.callMachineToDailyJsEmitter, thisValue, \'received call machine message\');\n }\n }, {\n key: "addListenerForMessagesFromDailyJs",\n value: function addListenerForMessagesFromDailyJs(listener, callFrameId, thisValue) {\n this._addListener(listener, window.dailyJsToCallMachineEmitter, thisValue, \'received daily-js message\');\n }\n }, {\n key: "sendMessageToCallMachine",\n value: function sendMessageToCallMachine(message, callback) {\n this._sendMessage(message, window.dailyJsToCallMachineEmitter, \'sending message to call machine\', callback);\n }\n }, {\n key: "sendMessageToDailyJs",\n value: function sendMessageToDailyJs(message) {\n this._sendMessage(message, window.callMachineToDailyJsEmitter, \'sending message to daily-js\');\n }\n }, {\n key: "removeListener",\n value: function removeListener(listener) {\n var wrappedListener = this._wrappedListeners[listener];\n\n if (wrappedListener) {\n // The listener was added to one of these. Might as well try removing\n // from both (otherwise we would\'ve needed two remove methods in this\n // class, targeting each side of the channel).\n window.callMachineToDailyJsEmitter.removeListener(\'message\', wrappedListener);\n window.dailyJsToCallMachineEmitter.removeListener(\'message\', wrappedListener);\n delete this._wrappedListeners[listener];\n }\n }\n }, {\n key: "_addListener",\n value: function _addListener(listener, messageEmitter, thisValue, logMessage) {\n var _this2 = this;\n\n var wrappedListener = function wrappedListener(msg) {\n // console.log(`[ReactNativeMessageChannel] ${logMessage}`, msg);\n if (msg.callbackStamp && _this2._messageCallbacks[msg.callbackStamp]) {\n // console.log(\'[ReactNativeMessageChannel] handling message as callback\', msg);\n var callbackStamp = msg.callbackStamp; // Storing here since the callback could delete msg.callbackStamp\n\n _this2._messageCallbacks[callbackStamp].call(thisValue, msg);\n\n delete _this2._messageCallbacks[callbackStamp];\n }\n\n listener.call(thisValue, msg);\n };\n\n this._wrappedListeners[listener] = wrappedListener;\n messageEmitter.addListener(\'message\', wrappedListener);\n }\n }, {\n key: "_sendMessage",\n value: function _sendMessage(message, messageEmitter, logMessage, callback) {\n if (callback) {\n var stamp = Object(_utils__WEBPACK_IMPORTED_MODULE_7__["randomStringId"])();\n this._messageCallbacks[stamp] = callback;\n message.callbackStamp = stamp;\n } // console.log(`[ReactNativeMessageChannel] ${logMessage}`, message);\n\n\n messageEmitter.emit(\'message\', message);\n }\n }]);\n\n return ReactNativeMessageChannel;\n}(_ScriptMessageChannel__WEBPACK_IMPORTED_MODULE_5__["default"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL3NjcmlwdC1tZXNzYWdlLWNoYW5uZWxzL1JlYWN0TmF0aXZlTWVzc2FnZUNoYW5uZWwuanM/ZTAzYyJdLCJuYW1lcyI6WyJSZWFjdE5hdGl2ZU1lc3NhZ2VDaGFubmVsIiwiZ2xvYmFsIiwiY2FsbE1hY2hpbmVUb0RhaWx5SnNFbWl0dGVyIiwiRXZlbnRFbWl0dGVyIiwiZGFpbHlKc1RvQ2FsbE1hY2hpbmVFbWl0dGVyIiwiX3dyYXBwZWRMaXN0ZW5lcnMiLCJfbWVzc2FnZUNhbGxiYWNrcyIsImxpc3RlbmVyIiwiY2FsbEZyYW1lSWQiLCJ0aGlzVmFsdWUiLCJfYWRkTGlzdGVuZXIiLCJtZXNzYWdlIiwiY2FsbGJhY2siLCJfc2VuZE1lc3NhZ2UiLCJ3cmFwcGVkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsIm1lc3NhZ2VFbWl0dGVyIiwibG9nTWVzc2FnZSIsIm1zZyIsImNhbGxiYWNrU3RhbXAiLCJjYWxsIiwiYWRkTGlzdGVuZXIiLCJzdGFtcCIsInJhbmRvbVN0cmluZ0lkIiwiZW1pdCIsIlNjcmlwdE1lc3NhZ2VDaGFubmVsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztJQUNxQkEseUI7Ozs7O0FBQ25CLHVDQUFjO0FBQUE7O0FBQUE7O0FBQ1osOEJBRFksQ0FHWjtBQUNBOztBQUNBQyxVQUFNLENBQUNDLDJCQUFQLEdBQ0VELE1BQU0sQ0FBQ0MsMkJBQVAsSUFBc0MsSUFBSUMsbURBQUosRUFEeEM7QUFFQUYsVUFBTSxDQUFDRywyQkFBUCxHQUNFSCxNQUFNLENBQUNHLDJCQUFQLElBQXNDLElBQUlELG1EQUFKLEVBRHhDO0FBR0EsVUFBS0UsaUJBQUwsR0FBeUIsRUFBekIsQ0FWWSxDQVVpQjs7QUFDN0IsVUFBS0MsaUJBQUwsR0FBeUIsRUFBekI7QUFYWTtBQVliOzs7OzBEQUVxQ0MsUSxFQUFVQyxXLEVBQWFDLFMsRUFBVztBQUN0RSxXQUFLQyxZQUFMLENBQ0VILFFBREYsRUFFRU4sTUFBTSxDQUFDQywyQkFGVCxFQUdFTyxTQUhGLEVBSUUsK0JBSkY7QUFNRDs7O3NEQUVpQ0YsUSxFQUFVQyxXLEVBQWFDLFMsRUFBVztBQUNsRSxXQUFLQyxZQUFMLENBQ0VILFFBREYsRUFFRU4sTUFBTSxDQUFDRywyQkFGVCxFQUdFSyxTQUhGLEVBSUUsMkJBSkY7QUFNRDs7OzZDQUV3QkUsTyxFQUFTQyxRLEVBQVU7QUFDMUMsV0FBS0MsWUFBTCxDQUNFRixPQURGLEVBRUVWLE1BQU0sQ0FBQ0csMkJBRlQsRUFHRSxpQ0FIRixFQUlFUSxRQUpGO0FBTUQ7Ozt5Q0FFb0JELE8sRUFBUztBQUM1QixXQUFLRSxZQUFMLENBQ0VGLE9BREYsRUFFRVYsTUFBTSxDQUFDQywyQkFGVCxFQUdFLDZCQUhGO0FBS0Q7OzttQ0FFY0ssUSxFQUFVO0FBQ3ZCLFVBQU1PLGVBQWUsR0FBRyxLQUFLVCxpQkFBTCxDQUF1QkUsUUFBdkIsQ0FBeEI7O0FBQ0EsVUFBSU8sZUFBSixFQUFxQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQWIsY0FBTSxDQUFDQywyQkFBUCxDQUFtQ2EsY0FBbkMsQ0FDRSxTQURGLEVBRUVELGVBRkY7QUFJQWIsY0FBTSxDQUFDRywyQkFBUCxDQUFtQ1csY0FBbkMsQ0FDRSxTQURGLEVBRUVELGVBRkY7QUFJQSxlQUFPLEtBQUtULGlCQUFMLENBQXVCRSxRQUF2QixDQUFQO0FBQ0Q7QUFDRjs7O2lDQUVZQSxRLEVBQVVTLGMsRUFBZ0JQLFMsRUFBV1EsVSxFQUFZO0FBQUE7O0FBQzVELFVBQU1ILGVBQWUsR0FBRyxTQUFsQkEsZUFBa0IsQ0FBQ0ksR0FBRCxFQUFTO0FBQy9CO0FBQ0EsWUFBSUEsR0FBRyxDQUFDQyxhQUFKLElBQXFCLE1BQUksQ0FBQ2IsaUJBQUwsQ0FBdUJZLEdBQUcsQ0FBQ0MsYUFBM0IsQ0FBekIsRUFBb0U7QUFDbEU7QUFDQSxjQUFNQSxhQUFhLEdBQUdELEdBQUcsQ0FBQ0MsYUFBMUIsQ0FGa0UsQ0FFekI7O0FBQ3pDLGdCQUFJLENBQUNiLGlCQUFMLENBQXVCYSxhQUF2QixFQUFzQ0MsSUFBdEMsQ0FBMkNYLFNBQTNDLEVBQXNEUyxHQUF0RDs7QUFDQSxpQkFBTyxNQUFJLENBQUNaLGlCQUFMLENBQXVCYSxhQUF2QixDQUFQO0FBQ0Q7O0FBQ0RaLGdCQUFRLENBQUNhLElBQVQsQ0FBY1gsU0FBZCxFQUF5QlMsR0FBekI7QUFDRCxPQVREOztBQVVBLFdBQUtiLGlCQUFMLENBQXVCRSxRQUF2QixJQUFtQ08sZUFBbkM7QUFDQUUsb0JBQWMsQ0FBQ0ssV0FBZixDQUEyQixTQUEzQixFQUFzQ1AsZUFBdEM7QUFDRDs7O2lDQUVZSCxPLEVBQVNLLGMsRUFBZ0JDLFUsRUFBWUwsUSxFQUFVO0FBQzFELFVBQUlBLFFBQUosRUFBYztBQUNaLFlBQUlVLEtBQUssR0FBR0MsNkRBQWMsRUFBMUI7QUFDQSxhQUFLakIsaUJBQUwsQ0FBdUJnQixLQUF2QixJQUFnQ1YsUUFBaEM7QUFDQUQsZUFBTyxDQUFDUSxhQUFSLEdBQXdCRyxLQUF4QjtBQUNELE9BTHlELENBTTFEOzs7QUFDQU4sb0JBQWMsQ0FBQ1EsSUFBZixDQUFvQixTQUFwQixFQUErQmIsT0FBL0I7QUFDRDs7OztFQTNGb0RjLDZEIiwiZmlsZSI6Ii4vc3JjL3NoYXJlZC13aXRoLXBsdW90LWNvcmUvc2NyaXB0LW1lc3NhZ2UtY2hhbm5lbHMvUmVhY3ROYXRpdmVNZXNzYWdlQ2hhbm5lbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTY3JpcHRNZXNzYWdlQ2hhbm5lbCBmcm9tICcuL1NjcmlwdE1lc3NhZ2VDaGFubmVsJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyByYW5kb21TdHJpbmdJZCB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLyoqXG4gKiBBIHR3by13YXkgbWVzc2FnZSBjaGFubmVsIGJldHdlZW4gZGFpbHktanMgYW5kIHRoZSBjYWxsIG1hY2hpbmUgKHBsdW90LWNvcmUpLFxuICogd2hlbiBydW5uaW5nIGluIGEgUmVhY3QgTmF0aXZlIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWN0TmF0aXZlTWVzc2FnZUNoYW5uZWwgZXh0ZW5kcyBTY3JpcHRNZXNzYWdlQ2hhbm5lbCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBBIFJlYWN0TmF0aXZlTWVzc2FnZUNoYW5uZWwgaXMgY29uc3RydWN0ZWQgYm90aCBpbiBkYWlseS1qcyBhbmQgdGhlIGNhbGxcbiAgICAvLyBtYWNoaW5lLiBNYWtlIHN1cmUgd2Ugb25seSBpbnN0YW50aWF0ZSBlbWl0dGVycyBvbmNlLlxuICAgIGdsb2JhbC5jYWxsTWFjaGluZVRvRGFpbHlKc0VtaXR0ZXIgPVxuICAgICAgZ2xvYmFsLmNhbGxNYWNoaW5lVG9EYWlseUpzRW1pdHRlciB8fCBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgZ2xvYmFsLmRhaWx5SnNUb0NhbGxNYWNoaW5lRW1pdHRlciA9XG4gICAgICBnbG9iYWwuZGFpbHlKc1RvQ2FsbE1hY2hpbmVFbWl0dGVyIHx8IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMuX3dyYXBwZWRMaXN0ZW5lcnMgPSB7fTsgLy8gTWFwcGluZyBiZXR3ZWVuIGxpc3RlbmVycyBhbmQgd3JhcHBlZCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9tZXNzYWdlQ2FsbGJhY2tzID0ge307XG4gIH1cblxuICBhZGRMaXN0ZW5lckZvck1lc3NhZ2VzRnJvbUNhbGxNYWNoaW5lKGxpc3RlbmVyLCBjYWxsRnJhbWVJZCwgdGhpc1ZhbHVlKSB7XG4gICAgdGhpcy5fYWRkTGlzdGVuZXIoXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIGdsb2JhbC5jYWxsTWFjaGluZVRvRGFpbHlKc0VtaXR0ZXIsXG4gICAgICB0aGlzVmFsdWUsXG4gICAgICAncmVjZWl2ZWQgY2FsbCBtYWNoaW5lIG1lc3NhZ2UnXG4gICAgKTtcbiAgfVxuXG4gIGFkZExpc3RlbmVyRm9yTWVzc2FnZXNGcm9tRGFpbHlKcyhsaXN0ZW5lciwgY2FsbEZyYW1lSWQsIHRoaXNWYWx1ZSkge1xuICAgIHRoaXMuX2FkZExpc3RlbmVyKFxuICAgICAgbGlzdGVuZXIsXG4gICAgICBnbG9iYWwuZGFpbHlKc1RvQ2FsbE1hY2hpbmVFbWl0dGVyLFxuICAgICAgdGhpc1ZhbHVlLFxuICAgICAgJ3JlY2VpdmVkIGRhaWx5LWpzIG1lc3NhZ2UnXG4gICAgKTtcbiAgfVxuXG4gIHNlbmRNZXNzYWdlVG9DYWxsTWFjaGluZShtZXNzYWdlLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3NlbmRNZXNzYWdlKFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGdsb2JhbC5kYWlseUpzVG9DYWxsTWFjaGluZUVtaXR0ZXIsXG4gICAgICAnc2VuZGluZyBtZXNzYWdlIHRvIGNhbGwgbWFjaGluZScsXG4gICAgICBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICBzZW5kTWVzc2FnZVRvRGFpbHlKcyhtZXNzYWdlKSB7XG4gICAgdGhpcy5fc2VuZE1lc3NhZ2UoXG4gICAgICBtZXNzYWdlLFxuICAgICAgZ2xvYmFsLmNhbGxNYWNoaW5lVG9EYWlseUpzRW1pdHRlcixcbiAgICAgICdzZW5kaW5nIG1lc3NhZ2UgdG8gZGFpbHktanMnXG4gICAgKTtcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gdGhpcy5fd3JhcHBlZExpc3RlbmVyc1tsaXN0ZW5lcl07XG4gICAgaWYgKHdyYXBwZWRMaXN0ZW5lcikge1xuICAgICAgLy8gVGhlIGxpc3RlbmVyIHdhcyBhZGRlZCB0byBvbmUgb2YgdGhlc2UuIE1pZ2h0IGFzIHdlbGwgdHJ5IHJlbW92aW5nXG4gICAgICAvLyBmcm9tIGJvdGggKG90aGVyd2lzZSB3ZSB3b3VsZCd2ZSBuZWVkZWQgdHdvIHJlbW92ZSBtZXRob2RzIGluIHRoaXNcbiAgICAgIC8vIGNsYXNzLCB0YXJnZXRpbmcgZWFjaCBzaWRlIG9mIHRoZSBjaGFubmVsKS5cbiAgICAgIGdsb2JhbC5jYWxsTWFjaGluZVRvRGFpbHlKc0VtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoXG4gICAgICAgICdtZXNzYWdlJyxcbiAgICAgICAgd3JhcHBlZExpc3RlbmVyXG4gICAgICApO1xuICAgICAgZ2xvYmFsLmRhaWx5SnNUb0NhbGxNYWNoaW5lRW1pdHRlci5yZW1vdmVMaXN0ZW5lcihcbiAgICAgICAgJ21lc3NhZ2UnLFxuICAgICAgICB3cmFwcGVkTGlzdGVuZXJcbiAgICAgICk7XG4gICAgICBkZWxldGUgdGhpcy5fd3JhcHBlZExpc3RlbmVyc1tsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgX2FkZExpc3RlbmVyKGxpc3RlbmVyLCBtZXNzYWdlRW1pdHRlciwgdGhpc1ZhbHVlLCBsb2dNZXNzYWdlKSB7XG4gICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gKG1zZykgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coYFtSZWFjdE5hdGl2ZU1lc3NhZ2VDaGFubmVsXSAke2xvZ01lc3NhZ2V9YCwgbXNnKTtcbiAgICAgIGlmIChtc2cuY2FsbGJhY2tTdGFtcCAmJiB0aGlzLl9tZXNzYWdlQ2FsbGJhY2tzW21zZy5jYWxsYmFja1N0YW1wXSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnW1JlYWN0TmF0aXZlTWVzc2FnZUNoYW5uZWxdIGhhbmRsaW5nIG1lc3NhZ2UgYXMgY2FsbGJhY2snLCBtc2cpO1xuICAgICAgICBjb25zdCBjYWxsYmFja1N0YW1wID0gbXNnLmNhbGxiYWNrU3RhbXA7IC8vIFN0b3JpbmcgaGVyZSBzaW5jZSB0aGUgY2FsbGJhY2sgY291bGQgZGVsZXRlIG1zZy5jYWxsYmFja1N0YW1wXG4gICAgICAgIHRoaXMuX21lc3NhZ2VDYWxsYmFja3NbY2FsbGJhY2tTdGFtcF0uY2FsbCh0aGlzVmFsdWUsIG1zZyk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tZXNzYWdlQ2FsbGJhY2tzW2NhbGxiYWNrU3RhbXBdO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzVmFsdWUsIG1zZyk7XG4gICAgfTtcbiAgICB0aGlzLl93cmFwcGVkTGlzdGVuZXJzW2xpc3RlbmVyXSA9IHdyYXBwZWRMaXN0ZW5lcjtcbiAgICBtZXNzYWdlRW1pdHRlci5hZGRMaXN0ZW5lcignbWVzc2FnZScsIHdyYXBwZWRMaXN0ZW5lcik7XG4gIH1cblxuICBfc2VuZE1lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZUVtaXR0ZXIsIGxvZ01lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBsZXQgc3RhbXAgPSByYW5kb21TdHJpbmdJZCgpO1xuICAgICAgdGhpcy5fbWVzc2FnZUNhbGxiYWNrc1tzdGFtcF0gPSBjYWxsYmFjaztcbiAgICAgIG1lc3NhZ2UuY2FsbGJhY2tTdGFtcCA9IHN0YW1wO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhgW1JlYWN0TmF0aXZlTWVzc2FnZUNoYW5uZWxdICR7bG9nTWVzc2FnZX1gLCBtZXNzYWdlKTtcbiAgICBtZXNzYWdlRW1pdHRlci5lbWl0KCdtZXNzYWdlJywgbWVzc2FnZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/shared-with-pluot-core/script-message-channels/ReactNativeMessageChannel.js\n' + ); + + /***/ + }, + + /***/ "./src/shared-with-pluot-core/script-message-channels/ScriptMessageChannel.js": + /*!************************************************************************************!*\ + !*** ./src/shared-with-pluot-core/script-message-channels/ScriptMessageChannel.js ***! + \************************************************************************************/ + /*! exports provided: default */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + '__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ScriptMessageChannel; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils */ "./src/utils.js");\n\n\n\n/**\n * A two-way message channel between daily-js and the call machine (pluot-core).\n */\n\nvar ScriptMessageChannel = /*#__PURE__*/function () {\n function ScriptMessageChannel() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ScriptMessageChannel);\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ScriptMessageChannel, [{\n key: "addListenerForMessagesFromCallMachine",\n\n /**\n * Adds a listener for messages from the call machine (pluot-core).\n * For use by daily-js.\n */\n value: function addListenerForMessagesFromCallMachine(listener, callFrameId, thisValue) {\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__["notImplementedError"])();\n }\n /**\n * Adds a listener for messages from daily-js.\n * For use by the call machine (pluot-core).\n */\n\n }, {\n key: "addListenerForMessagesFromDailyJs",\n value: function addListenerForMessagesFromDailyJs(listener, callFrameId, thisValue) {\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__["notImplementedError"])();\n }\n /**\n * Send a message to the call machine (pluot-core).\n * For use by daily-js.\n */\n\n }, {\n key: "sendMessageToCallMachine",\n value: function sendMessageToCallMachine(message, callback, iframe, callFrameId) {\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__["notImplementedError"])();\n }\n /**\n * Send a message to daily-js.\n * For use by the call machine (pluot-core).\n */\n\n }, {\n key: "sendMessageToDailyJs",\n value: function sendMessageToDailyJs(message, isCallObject, callFrameId) {\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__["notImplementedError"])();\n }\n /**\n * Remove an added listener.\n */\n\n }, {\n key: "removeListener",\n value: function removeListener(listener) {\n Object(_utils__WEBPACK_IMPORTED_MODULE_2__["notImplementedError"])();\n }\n }]);\n\n return ScriptMessageChannel;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL3NjcmlwdC1tZXNzYWdlLWNoYW5uZWxzL1NjcmlwdE1lc3NhZ2VDaGFubmVsLmpzPzI5YTMiXSwibmFtZXMiOlsiU2NyaXB0TWVzc2FnZUNoYW5uZWwiLCJsaXN0ZW5lciIsImNhbGxGcmFtZUlkIiwidGhpc1ZhbHVlIiwibm90SW1wbGVtZW50ZWRFcnJvciIsIm1lc3NhZ2UiLCJjYWxsYmFjayIsImlmcmFtZSIsImlzQ2FsbE9iamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUNBO0FBQ0E7O0lBQ3FCQSxvQjs7Ozs7Ozs7QUFDbkI7QUFDRjtBQUNBO0FBQ0E7MERBQ3dDQyxRLEVBQVVDLFcsRUFBYUMsUyxFQUFXO0FBQ3RFQyx3RUFBbUI7QUFDcEI7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7OztzREFDb0NILFEsRUFBVUMsVyxFQUFhQyxTLEVBQVc7QUFDbEVDLHdFQUFtQjtBQUNwQjtBQUVEO0FBQ0Y7QUFDQTtBQUNBOzs7OzZDQUMyQkMsTyxFQUFTQyxRLEVBQVVDLE0sRUFBUUwsVyxFQUFhO0FBQy9ERSx3RUFBbUI7QUFDcEI7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7Ozt5Q0FDdUJDLE8sRUFBU0csWSxFQUFjTixXLEVBQWE7QUFDdkRFLHdFQUFtQjtBQUNwQjtBQUVEO0FBQ0Y7QUFDQTs7OzttQ0FDaUJILFEsRUFBVTtBQUN2Qkcsd0VBQW1CO0FBQ3BCIiwiZmlsZSI6Ii4vc3JjL3NoYXJlZC13aXRoLXBsdW90LWNvcmUvc2NyaXB0LW1lc3NhZ2UtY2hhbm5lbHMvU2NyaXB0TWVzc2FnZUNoYW5uZWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG4vKipcbiAqIEEgdHdvLXdheSBtZXNzYWdlIGNoYW5uZWwgYmV0d2VlbiBkYWlseS1qcyBhbmQgdGhlIGNhbGwgbWFjaGluZSAocGx1b3QtY29yZSkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcmlwdE1lc3NhZ2VDaGFubmVsIHtcbiAgLyoqXG4gICAqIEFkZHMgYSBsaXN0ZW5lciBmb3IgbWVzc2FnZXMgZnJvbSB0aGUgY2FsbCBtYWNoaW5lIChwbHVvdC1jb3JlKS5cbiAgICogRm9yIHVzZSBieSBkYWlseS1qcy5cbiAgICovXG4gIGFkZExpc3RlbmVyRm9yTWVzc2FnZXNGcm9tQ2FsbE1hY2hpbmUobGlzdGVuZXIsIGNhbGxGcmFtZUlkLCB0aGlzVmFsdWUpIHtcbiAgICBub3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGxpc3RlbmVyIGZvciBtZXNzYWdlcyBmcm9tIGRhaWx5LWpzLlxuICAgKiBGb3IgdXNlIGJ5IHRoZSBjYWxsIG1hY2hpbmUgKHBsdW90LWNvcmUpLlxuICAgKi9cbiAgYWRkTGlzdGVuZXJGb3JNZXNzYWdlc0Zyb21EYWlseUpzKGxpc3RlbmVyLCBjYWxsRnJhbWVJZCwgdGhpc1ZhbHVlKSB7XG4gICAgbm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSBjYWxsIG1hY2hpbmUgKHBsdW90LWNvcmUpLlxuICAgKiBGb3IgdXNlIGJ5IGRhaWx5LWpzLlxuICAgKi9cbiAgc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKG1lc3NhZ2UsIGNhbGxiYWNrLCBpZnJhbWUsIGNhbGxGcmFtZUlkKSB7XG4gICAgbm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlIHRvIGRhaWx5LWpzLlxuICAgKiBGb3IgdXNlIGJ5IHRoZSBjYWxsIG1hY2hpbmUgKHBsdW90LWNvcmUpLlxuICAgKi9cbiAgc2VuZE1lc3NhZ2VUb0RhaWx5SnMobWVzc2FnZSwgaXNDYWxsT2JqZWN0LCBjYWxsRnJhbWVJZCkge1xuICAgIG5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYWRkZWQgbGlzdGVuZXIuXG4gICAqL1xuICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIG5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/shared-with-pluot-core/script-message-channels/ScriptMessageChannel.js\n' + ); + + /***/ + }, + + /***/ "./src/shared-with-pluot-core/script-message-channels/WebMessageChannel.js": + /*!*********************************************************************************!*\ + !*** ./src/shared-with-pluot-core/script-message-channels/WebMessageChannel.js ***! + \*********************************************************************************/ + /*! exports provided: default */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + '__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WebMessageChannel; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _ScriptMessageChannel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ScriptMessageChannel */ "./src/shared-with-pluot-core/script-message-channels/ScriptMessageChannel.js");\n/* harmony import */ var _CommonIncludes__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../CommonIncludes */ "./src/shared-with-pluot-core/CommonIncludes.js");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils */ "./src/utils.js");\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n\n\n\n/**\n * A two-way message channel between daily-js and the call machine (pluot-core),\n * when running in a web context (in a browser or Electron).\n */\n\nvar WebMessageChannel = /*#__PURE__*/function (_ScriptMessageChannel) {\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default()(WebMessageChannel, _ScriptMessageChannel);\n\n var _super = _createSuper(WebMessageChannel);\n\n function WebMessageChannel() {\n var _this;\n\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, WebMessageChannel);\n\n _this = _super.call(this);\n _this._wrappedListeners = {}; // Mapping between listeners and wrapped listeners\n\n _this._messageCallbacks = {};\n return _this;\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(WebMessageChannel, [{\n key: "addListenerForMessagesFromCallMachine",\n value: function addListenerForMessagesFromCallMachine(listener, callFrameId, thisValue) {\n var _this2 = this;\n\n var wrappedListener = function wrappedListener(evt) {\n if (evt.data && evt.data.what === \'iframe-call-message\' && ( // make callFrameId addressing backwards-compatible with\n // old versions of the library, which didn\'t have it\n evt.data.callFrameId ? evt.data.callFrameId === callFrameId : true) && (evt.data.from ? evt.data.from !== \'module\' : true)) {\n var msg = _objectSpread({}, evt.data); // console.log(\'[WebMessageChannel] received call machine message\', msg);\n\n\n delete msg.from; // messages could be completely handled by callbacks\n\n if (msg.callbackStamp && _this2._messageCallbacks[msg.callbackStamp]) {\n // console.log(\'[WebMessageChannel] handling message as callback\', msg);\n var callbackStamp = msg.callbackStamp; // Storing here since the callback could delete msg.callbackStamp\n\n _this2._messageCallbacks[callbackStamp].call(thisValue, msg);\n\n delete _this2._messageCallbacks[callbackStamp];\n } // or perhaps we should handle this message based on its\n // msg.action tag. first we\'ll delete internal fields so the\n // listener function has the option of just emitting the raw\n // message as an event\n\n\n delete msg.what;\n delete msg.callbackStamp;\n listener.call(thisValue, msg);\n }\n };\n\n this._wrappedListeners[listener] = wrappedListener;\n window.addEventListener(\'message\', wrappedListener);\n }\n }, {\n key: "addListenerForMessagesFromDailyJs",\n value: function addListenerForMessagesFromDailyJs(listener, callFrameId, thisValue) {\n var wrappedListener = function wrappedListener(evt) {\n if (!(evt.data && evt.data.what === _CommonIncludes__WEBPACK_IMPORTED_MODULE_7__["IFRAME_MESSAGE_MARKER"] && evt.data.action && (!evt.data.from || evt.data.from === \'module\') && (evt.data.callFrameId && callFrameId ? evt.data.callFrameId === callFrameId : true))) {\n return;\n }\n\n var msg = evt.data; // console.log(\'[WebMessageChannel] received daily-js message\', msg);\n\n listener.call(thisValue, msg);\n };\n\n this._wrappedListeners[listener] = wrappedListener;\n window.addEventListener(\'message\', wrappedListener);\n }\n }, {\n key: "sendMessageToCallMachine",\n value: function sendMessageToCallMachine(message, callback, iframe, callFrameId) {\n var msg = _objectSpread({}, message);\n\n msg.what = _CommonIncludes__WEBPACK_IMPORTED_MODULE_7__["IFRAME_MESSAGE_MARKER"];\n msg.from = \'module\';\n msg.callFrameId = callFrameId;\n\n if (callback) {\n var stamp = Object(_utils__WEBPACK_IMPORTED_MODULE_8__["randomStringId"])();\n this._messageCallbacks[stamp] = callback;\n msg.callbackStamp = stamp;\n }\n\n var w = iframe ? iframe.contentWindow : window; // console.log(\'[WebMessageChannel] sending message to call machine\', msg);\n\n w.postMessage(msg, \'*\');\n }\n }, {\n key: "sendMessageToDailyJs",\n value: function sendMessageToDailyJs(message, isCallObject, callFrameId) {\n message.what = _CommonIncludes__WEBPACK_IMPORTED_MODULE_7__["IFRAME_MESSAGE_MARKER"];\n message.callFrameId = callFrameId;\n message.from = \'embedded\';\n var w = isCallObject ? window : window.parent; // console.log(\'[WebMessageChannel] sending message to daily-js\', message);\n\n w.postMessage(message, \'*\');\n }\n }, {\n key: "removeListener",\n value: function removeListener(listener) {\n var wrappedListener = this._wrappedListeners[listener];\n\n if (wrappedListener) {\n window.removeEventListener(\'message\', wrappedListener);\n delete this._wrappedListeners[listener];\n }\n } // Expects msg to already be packaged with all internal metadata fields\n // (what, from, callFrameId, etc.)\n\n }, {\n key: "forwardPackagedMessageToCallMachine",\n value: function forwardPackagedMessageToCallMachine(msg, iframe, newCallFrameId) {\n var newMsg = _objectSpread({}, msg);\n\n newMsg.callFrameId = newCallFrameId;\n var w = iframe ? iframe.contentWindow : window; // console.log(\n // \'[WebMessageChannel] forwarding packaged message to call machine\',\n // msg\n // );\n\n w.postMessage(newMsg, \'*\');\n } // Listener will be given packaged message with all internal metadata fields\n // (what, from, callFrameId, etc.)\n\n }, {\n key: "addListenerForPackagedMessagesFromCallMachine",\n value: function addListenerForPackagedMessagesFromCallMachine(listener, callFrameId) {\n var wrappedListener = function wrappedListener(evt) {\n // console.log(\n // \'[WebMessageChannel] received packaged call machine message\',\n // msg\n // );\n if (evt.data && evt.data.what === \'iframe-call-message\' && ( // make callFrameId addressing backwards-compatible with\n // old versions of the library, which didn\'t have it\n evt.data.callFrameId ? evt.data.callFrameId === callFrameId : true) && (evt.data.from ? evt.data.from !== \'module\' : true)) {\n var msg = evt.data;\n listener(msg);\n }\n }; // For now we\'re still using the listener itself as the key, like in the\n // other addListener* methods. We should probably change this everywhere to\n // use a proper unique id.\n\n\n this._wrappedListeners[listener] = wrappedListener;\n window.addEventListener(\'message\', wrappedListener);\n return listener;\n }\n }, {\n key: "removeListenerForPackagedMessagesFromCallMachine",\n value: function removeListenerForPackagedMessagesFromCallMachine(listenerId) {\n var wrappedListener = this._wrappedListeners[listenerId];\n\n if (wrappedListener) {\n window.removeEventListener(\'message\', wrappedListener);\n delete this._wrappedListeners[listenerId];\n }\n }\n }]);\n\n return WebMessageChannel;\n}(_ScriptMessageChannel__WEBPACK_IMPORTED_MODULE_6__["default"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL3NjcmlwdC1tZXNzYWdlLWNoYW5uZWxzL1dlYk1lc3NhZ2VDaGFubmVsLmpzPzVjZjgiXSwibmFtZXMiOlsiV2ViTWVzc2FnZUNoYW5uZWwiLCJfd3JhcHBlZExpc3RlbmVycyIsIl9tZXNzYWdlQ2FsbGJhY2tzIiwibGlzdGVuZXIiLCJjYWxsRnJhbWVJZCIsInRoaXNWYWx1ZSIsIndyYXBwZWRMaXN0ZW5lciIsImV2dCIsImRhdGEiLCJ3aGF0IiwiZnJvbSIsIm1zZyIsImNhbGxiYWNrU3RhbXAiLCJjYWxsIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsIklGUkFNRV9NRVNTQUdFX01BUktFUiIsImFjdGlvbiIsIm1lc3NhZ2UiLCJjYWxsYmFjayIsImlmcmFtZSIsInN0YW1wIiwicmFuZG9tU3RyaW5nSWQiLCJ3IiwiY29udGVudFdpbmRvdyIsInBvc3RNZXNzYWdlIiwiaXNDYWxsT2JqZWN0IiwicGFyZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm5ld0NhbGxGcmFtZUlkIiwibmV3TXNnIiwibGlzdGVuZXJJZCIsIlNjcmlwdE1lc3NhZ2VDaGFubmVsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztJQUNxQkEsaUI7Ozs7O0FBQ25CLCtCQUFjO0FBQUE7O0FBQUE7O0FBQ1o7QUFDQSxVQUFLQyxpQkFBTCxHQUF5QixFQUF6QixDQUZZLENBRWlCOztBQUM3QixVQUFLQyxpQkFBTCxHQUF5QixFQUF6QjtBQUhZO0FBSWI7Ozs7MERBRXFDQyxRLEVBQVVDLFcsRUFBYUMsUyxFQUFXO0FBQUE7O0FBQ3RFLFVBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBa0IsQ0FBQ0MsR0FBRCxFQUFTO0FBQy9CLFlBQ0VBLEdBQUcsQ0FBQ0MsSUFBSixJQUNBRCxHQUFH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Q0FBQ0MsR0FBRCxFQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFDRUEsR0FBRyxDQUFDQyxJQUFKLElBQ0FELEdBQUcsQ0FBQ0MsSUFBSixDQUFTQyxJQUFULEtBQWtCLHFCQURsQixNQUVBO0FBQ0E7QUFDQ0YsV0FBRyxDQUFDQyxJQUFKLENBQVNKLFdBQVQsR0FBdUJHLEdBQUcsQ0FBQ0MsSUFBSixDQUFTSixXQUFULEtBQXlCQSxXQUFoRCxHQUE4RCxJQUovRCxNQUtDRyxHQUFHLENBQUNDLElBQUosQ0FBU0UsSUFBVCxHQUFnQkgsR0FBRyxDQUFDQyxJQUFKLENBQVNFLElBQVQsS0FBa0IsUUFBbEMsR0FBNkMsSUFMOUMsQ0FERixFQU9FO0FBQ0EsY0FBTUMsR0FBRyxHQUFHSixHQUFHLENBQUNDLElBQWhCO0FBQ0FMLGtCQUFRLENBQUNRLEdBQUQsQ0FBUjtBQUNEO0FBQ0YsT0FoQkQsQ0FEbUUsQ0FrQm5FO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBS1YsaUJBQUwsQ0FBdUJFLFFBQXZCLElBQW1DRyxlQUFuQztBQUNBUSxZQUFNLENBQUNDLGdCQUFQLENBQXdCLFNBQXhCLEVBQW1DVCxlQUFuQztBQUNBLGFBQU9ILFFBQVA7QUFDRDs7O3FFQUVnRDRCLFUsRUFBWTtBQUMzRCxVQUFNekIsZUFBZSxHQUFHLEtBQUtMLGlCQUFMLENBQXVCOEIsVUFBdkIsQ0FBeEI7O0FBQ0EsVUFBSXpCLGVBQUosRUFBcUI7QUFDbkJRLGNBQU0sQ0FBQ2MsbUJBQVAsQ0FBMkIsU0FBM0IsRUFBc0N0QixlQUF0QztBQUNBLGVBQU8sS0FBS0wsaUJBQUwsQ0FBdUI4QixVQUF2QixDQUFQO0FBQ0Q7QUFDRjs7OztFQTlJNENDLDZEIiwiZmlsZSI6Ii4vc3JjL3NoYXJlZC13aXRoLXBsdW90LWNvcmUvc2NyaXB0LW1lc3NhZ2UtY2hhbm5lbHMvV2ViTWVzc2FnZUNoYW5uZWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2NyaXB0TWVzc2FnZUNoYW5uZWwgZnJvbSAnLi9TY3JpcHRNZXNzYWdlQ2hhbm5lbCc7XG5pbXBvcnQgeyBJRlJBTUVfTUVTU0FHRV9NQVJLRVIgfSBmcm9tICcuLi9Db21tb25JbmNsdWRlcyc7XG5pbXBvcnQgeyByYW5kb21TdHJpbmdJZCB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLyoqXG4gKiBBIHR3by13YXkgbWVzc2FnZSBjaGFubmVsIGJldHdlZW4gZGFpbHktanMgYW5kIHRoZSBjYWxsIG1hY2hpbmUgKHBsdW90LWNvcmUpLFxuICogd2hlbiBydW5uaW5nIGluIGEgd2ViIGNvbnRleHQgKGluIGEgYnJvd3NlciBvciBFbGVjdHJvbikuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYk1lc3NhZ2VDaGFubmVsIGV4dGVuZHMgU2NyaXB0TWVzc2FnZUNoYW5uZWwge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3dyYXBwZWRMaXN0ZW5lcnMgPSB7fTsgLy8gTWFwcGluZyBiZXR3ZWVuIGxpc3RlbmVycyBhbmQgd3JhcHBlZCBsaXN0ZW5lcnNcbiAgICB0aGlzLl9tZXNzYWdlQ2FsbGJhY2tzID0ge307XG4gIH1cblxuICBhZGRMaXN0ZW5lckZvck1lc3NhZ2VzRnJvbUNhbGxNYWNoaW5lKGxpc3RlbmVyLCBjYWxsRnJhbWVJZCwgdGhpc1ZhbHVlKSB7XG4gICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gKGV2dCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBldnQuZGF0YSAmJlxuICAgICAgICBldnQuZGF0YS53aGF0ID09PSAnaWZyYW1lLWNhbGwtbWVzc2FnZScgJiZcbiAgICAgICAgLy8gbWFrZSBjYWxsRnJhbWVJZCBhZGRyZXNzaW5nIGJhY2t3YXJkcy1jb21wYXRpYmxlIHdpdGhcbiAgICAgICAgLy8gb2xkIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBkaWRuJ3QgaGF2ZSBpdFxuICAgICAgICAoZXZ0LmRhdGEuY2FsbEZyYW1lSWQgPyBldnQuZGF0YS5jYWxsRnJhbWVJZCA9PT0gY2FsbEZyYW1lSWQgOiB0cnVlKSAmJlxuICAgICAgICAoZXZ0LmRhdGEuZnJvbSA/IGV2dC5kYXRhLmZyb20gIT09ICdtb2R1bGUnIDogdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBtc2cgPSB7IC4uLmV2dC5kYXRhIH07XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdbV2ViTWVzc2FnZUNoYW5uZWxdIHJlY2VpdmVkIGNhbGwgbWFjaGluZSBtZXNzYWdlJywgbXNnKTtcbiAgICAgICAgZGVsZXRlIG1zZy5mcm9tO1xuICAgICAgICAvLyBtZXNzYWdlcyBjb3VsZCBiZSBjb21wbGV0ZWx5IGhhbmRsZWQgYnkgY2FsbGJhY2tzXG4gICAgICAgIGlmIChtc2cuY2FsbGJhY2tTdGFtcCAmJiB0aGlzLl9tZXNzYWdlQ2FsbGJhY2tzW21zZy5jYWxsYmFja1N0YW1wXSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdbV2ViTWVzc2FnZUNoYW5uZWxdIGhhbmRsaW5nIG1lc3NhZ2UgYXMgY2FsbGJhY2snLCBtc2cpO1xuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrU3RhbXAgPSBtc2cuY2FsbGJhY2tTdGFtcDsgLy8gU3RvcmluZyBoZXJlIHNpbmNlIHRoZSBjYWxsYmFjayBjb3VsZCBkZWxldGUgbXNnLmNhbGxiYWNrU3RhbXBcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlQ2FsbGJhY2tzW2NhbGxiYWNrU3RhbXBdLmNhbGwodGhpc1ZhbHVlLCBtc2cpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tZXNzYWdlQ2FsbGJhY2tzW2NhbGxiYWNrU3RhbXBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9yIHBlcmhhcHMgd2Ugc2hvdWxkIGhhbmRsZSB0aGlzIG1lc3NhZ2UgYmFzZWQgb24gaXRzXG4gICAgICAgIC8vIG1zZy5hY3Rpb24gdGFnLiBmaXJzdCB3ZSdsbCBkZWxldGUgaW50ZXJuYWwgZmllbGRzIHNvIHRoZVxuICAgICAgICAvLyBsaXN0ZW5lciBmdW5jdGlvbiBoYXMgdGhlIG9wdGlvbiBvZiBqdXN0IGVtaXR0aW5nIHRoZSByYXdcbiAgICAgICAgLy8gbWVzc2FnZSBhcyBhbiBldmVudFxuICAgICAgICBkZWxldGUgbXNnLndoYXQ7XG4gICAgICAgIGRlbGV0ZSBtc2cuY2FsbGJhY2tTdGFtcDtcbiAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzVmFsdWUsIG1zZyk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLl93cmFwcGVkTGlzdGVuZXJzW2xpc3RlbmVyXSA9IHdyYXBwZWRMaXN0ZW5lcjtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHdyYXBwZWRMaXN0ZW5lcik7XG4gIH1cblxuICBhZGRMaXN0ZW5lckZvck1lc3NhZ2VzRnJvbURhaWx5SnMobGlzdGVuZXIsIGNhbGxGcmFtZUlkLCB0aGlzVmFsdWUpIHtcbiAgICBjb25zdCB3cmFwcGVkTGlzdGVuZXIgPSAoZXZ0KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgZXZ0LmRhdGEgJiZcbiAgICAgICAgICBldnQuZGF0YS53aGF0ID09PSBJRlJBTUVfTUVTU0FHRV9NQVJLRVIgJiZcbiAgICAgICAgICBldnQuZGF0YS5hY3Rpb24gJiZcbiAgICAgICAgICAoIWV2dC5kYXRhLmZyb20gfHwgZXZ0LmRhdGEuZnJvbSA9PT0gJ21vZHVsZScpICYmXG4gICAgICAgICAgKGV2dC5kYXRhLmNhbGxGcmFtZUlkICYmIGNhbGxGcmFtZUlkXG4gICAgICAgICAgICA/IGV2dC5kYXRhLmNhbGxGcmFtZUlkID09PSBjYWxsRnJhbWVJZFxuICAgICAgICAgICAgOiB0cnVlKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbXNnID0gZXZ0LmRhdGE7XG4gICAgICAvLyBjb25zb2xlLmxvZygnW1dlYk1lc3NhZ2VDaGFubmVsXSByZWNlaXZlZCBkYWlseS1qcyBtZXNzYWdlJywgbXNnKTtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpc1ZhbHVlLCBtc2cpO1xuICAgIH07XG4gICAgdGhpcy5fd3JhcHBlZExpc3RlbmVyc1tsaXN0ZW5lcl0gPSB3cmFwcGVkTGlzdGVuZXI7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB3cmFwcGVkTGlzdGVuZXIpO1xuICB9XG5cbiAgc2VuZE1lc3NhZ2VUb0NhbGxNYWNoaW5lKG1lc3NhZ2UsIGNhbGxiYWNrLCBpZnJhbWUsIGNhbGxGcmFtZUlkKSB7XG4gICAgbGV0IG1zZyA9IHsgLi4ubWVzc2FnZSB9O1xuICAgIG1zZy53aGF0ID0gSUZSQU1FX01FU1NBR0VfTUFSS0VSO1xuICAgIG1zZy5mcm9tID0gJ21vZHVsZSc7XG4gICAgbXNnLmNhbGxGcmFtZUlkID0gY2FsbEZyYW1lSWQ7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBsZXQgc3RhbXAgPSByYW5kb21TdHJpbmdJZCgpO1xuICAgICAgdGhpcy5fbWVzc2FnZUNhbGxiYWNrc1tzdGFtcF0gPSBjYWxsYmFjaztcbiAgICAgIG1zZy5jYWxsYmFja1N0YW1wID0gc3RhbXA7XG4gICAgfVxuICAgIGNvbnN0IHcgPSBpZnJhbWUgPyBpZnJhbWUuY29udGVudFdpbmRvdyA6IHdpbmRvdztcbiAgICAvLyBjb25zb2xlLmxvZygnW1dlYk1lc3NhZ2VDaGFubmVsXSBzZW5kaW5nIG1lc3NhZ2UgdG8gY2FsbCBtYWNoaW5lJywgbXNnKTtcbiAgICB3LnBvc3RNZXNzYWdlKG1zZywgJyonKTtcbiAgfVxuXG4gIHNlbmRNZXNzYWdlVG9EYWlseUpzKG1lc3NhZ2UsIGlzQ2FsbE9iamVjdCwgY2FsbEZyYW1lSWQpIHtcbiAgICBtZXNzYWdlLndoYXQgPSBJRlJBTUVfTUVTU0FHRV9NQVJLRVI7XG4gICAgbWVzc2FnZS5jYWxsRnJhbWVJZCA9IGNhbGxGcmFtZUlkO1xuICAgIG1lc3NhZ2UuZnJvbSA9ICdlbWJlZGRlZCc7XG4gICAgY29uc3QgdyA9IGlzQ2FsbE9iamVjdCA/IHdpbmRvdyA6IHdpbmRvdy5wYXJlbnQ7XG4gICAgLy8gY29uc29sZS5sb2coJ1tXZWJNZXNzYWdlQ2hhbm5lbF0gc2VuZGluZyBtZXNzYWdlIHRvIGRhaWx5LWpzJywgbWVzc2FnZSk7XG4gICAgdy5wb3N0TWVzc2FnZShtZXNzYWdlLCAnKicpO1xuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICBjb25zdCB3cmFwcGVkTGlzdGVuZXIgPSB0aGlzLl93cmFwcGVkTGlzdGVuZXJzW2xpc3RlbmVyXTtcbiAgICBpZiAod3JhcHBlZExpc3RlbmVyKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHdyYXBwZWRMaXN0ZW5lcik7XG4gICAgICBkZWxldGUgdGhpcy5fd3JhcHBlZExpc3RlbmVyc1tsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLy8gRXhwZWN0cyBtc2cgdG8gYWxyZWFkeSBiZSBwYWNrYWdlZCB3aXRoIGFsbCBpbnRlcm5hbCBtZXRhZGF0YSBmaWVsZHNcbiAgLy8gKHdoYXQsIGZyb20sIGNhbGxGcmFtZUlkLCBldGMuKVxuICBmb3J3YXJkUGFja2FnZWRNZXNzYWdlVG9DYWxsTWFjaGluZShtc2csIGlmcmFtZSwgbmV3Q2FsbEZyYW1lSWQpIHtcbiAgICBjb25zdCBuZXdNc2cgPSB7IC4uLm1zZyB9O1xuICAgIG5ld01zZy5jYWxsRnJhbWVJZCA9IG5ld0NhbGxGcmFtZUlkO1xuICAgIGNvbnN0IHcgPSBpZnJhbWUgPyBpZnJhbWUuY29udGVudFdpbmRvdyA6IHdpbmRvdztcbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgICdbV2ViTWVzc2FnZUNoYW5uZWxdIGZvcndhcmRpbmcgcGFja2FnZWQgbWVzc2FnZSB0byBjYWxsIG1hY2hpbmUnLFxuICAgIC8vICAgbXNnXG4gICAgLy8gKTtcbiAgICB3LnBvc3RNZXNzYWdlKG5ld01zZywgJyonKTtcbiAgfVxuXG4gIC8vIExpc3RlbmVyIHdpbGwgYmUgZ2l2ZW4gcGFja2FnZWQgbWVzc2FnZSB3aXRoIGFsbCBpbnRlcm5hbCBtZXRhZGF0YSBmaWVsZHNcbiAgLy8gKHdoYXQsIGZyb20sIGNhbGxGcmFtZUlkLCBldGMuKVxuICBhZGRMaXN0ZW5lckZvclBhY2thZ2VkTWVzc2FnZXNGcm9tQ2FsbE1hY2hpbmUobGlzdGVuZXIsIGNhbGxGcmFtZUlkKSB7XG4gICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gKGV2dCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAvLyAgICdbV2ViTWVzc2FnZUNoYW5uZWxdIHJlY2VpdmVkIHBhY2thZ2VkIGNhbGwgbWFjaGluZSBtZXNzYWdlJyxcbiAgICAgIC8vICAgbXNnXG4gICAgICAvLyApO1xuICAgICAgaWYgKFxuICAgICAgICBldnQuZGF0YSAmJlxuICAgICAgICBldnQuZGF0YS53aGF0ID09PSAnaWZyYW1lLWNhbGwtbWVzc2FnZScgJiZcbiAgICAgICAgLy8gbWFrZSBjYWxsRnJhbWVJZCBhZGRyZXNzaW5nIGJhY2t3YXJkcy1jb21wYXRpYmxlIHdpdGhcbiAgICAgICAgLy8gb2xkIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBkaWRuJ3QgaGF2ZSBpdFxuICAgICAgICAoZXZ0LmRhdGEuY2FsbEZyYW1lSWQgPyBldnQuZGF0YS5jYWxsRnJhbWVJZCA9PT0gY2FsbEZyYW1lSWQgOiB0cnVlKSAmJlxuICAgICAgICAoZXZ0LmRhdGEuZnJvbSA/IGV2dC5kYXRhLmZyb20gIT09ICdtb2R1bGUnIDogdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBtc2cgPSBldnQuZGF0YTtcbiAgICAgICAgbGlzdGVuZXIobXNnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIEZvciBub3cgd2UncmUgc3RpbGwgdXNpbmcgdGhlIGxpc3RlbmVyIGl0c2VsZiBhcyB0aGUga2V5LCBsaWtlIGluIHRoZVxuICAgIC8vIG90aGVyIGFkZExpc3RlbmVyKiBtZXRob2RzLiBXZSBzaG91bGQgcHJvYmFibHkgY2hhbmdlIHRoaXMgZXZlcnl3aGVyZSB0b1xuICAgIC8vIHVzZSBhIHByb3BlciB1bmlxdWUgaWQuXG4gICAgdGhpcy5fd3JhcHBlZExpc3RlbmVyc1tsaXN0ZW5lcl0gPSB3cmFwcGVkTGlzdGVuZXI7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB3cmFwcGVkTGlzdGVuZXIpO1xuICAgIHJldHVybiBsaXN0ZW5lcjtcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyRm9yUGFja2FnZWRNZXNzYWdlc0Zyb21DYWxsTWFjaGluZShsaXN0ZW5lcklkKSB7XG4gICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gdGhpcy5fd3JhcHBlZExpc3RlbmVyc1tsaXN0ZW5lcklkXTtcbiAgICBpZiAod3JhcHBlZExpc3RlbmVyKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHdyYXBwZWRMaXN0ZW5lcik7XG4gICAgICBkZWxldGUgdGhpcy5fd3JhcHBlZExpc3RlbmVyc1tsaXN0ZW5lcklkXTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/shared-with-pluot-core/script-message-channels/WebMessageChannel.js\n' + ); + + /***/ + }, + + /***/ "./src/shared-with-pluot-core/selectors.js": + /*!*************************************************!*\ + !*** ./src/shared-with-pluot-core/selectors.js ***! + \*************************************************/ + /*! exports provided: getLocalSubscriptionToTrack, getLocalIsSubscribedToTrack, getRemoteParticipantIsSubscribedToLocalTrack, getLocalTrack, getRemoteTrack, getIsRemoteTrackLoading, getLocalCustomTrack */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + "__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLocalSubscriptionToTrack\", function() { return getLocalSubscriptionToTrack; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLocalIsSubscribedToTrack\", function() { return getLocalIsSubscribedToTrack; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getRemoteParticipantIsSubscribedToLocalTrack\", function() { return getRemoteParticipantIsSubscribedToLocalTrack; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLocalTrack\", function() { return getLocalTrack; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getRemoteTrack\", function() { return getRemoteTrack; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getIsRemoteTrackLoading\", function() { return getIsRemoteTrackLoading; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLocalCustomTrack\", function() { return getLocalCustomTrack; });\n/* harmony import */ var lodash_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/filter */ \"./node_modules/lodash/filter.js\");\n/* harmony import */ var lodash_filter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_filter__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lodash_orderBy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/orderBy */ \"./node_modules/lodash/orderBy.js\");\n/* harmony import */ var lodash_orderBy__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_orderBy__WEBPACK_IMPORTED_MODULE_1__);\n\n\nvar getLocalSubscriptionToTrack = function getLocalSubscriptionToTrack(state, id, mediaTag) {\n return _getSubscriptionToTrack(state.local, id, mediaTag);\n};\nvar getLocalIsSubscribedToTrack = function getLocalIsSubscribedToTrack(state, id, mediaTag) {\n return _getSubscriptionToTrack(state.local, id, mediaTag) === true;\n}; // NOTE: only meant for use in P2P mode, where we have access to remote\n// participants' subscriptions info.\n\nvar getRemoteParticipantIsSubscribedToLocalTrack = function getRemoteParticipantIsSubscribedToLocalTrack(state, id, mediaTag) {\n return _getSubscriptionToTrack(state.participants[id], state.local.public.id, mediaTag) === true;\n}; // type is \"cam\" or \"screen\"\n// kind is \"video\" or \"audio\"\n\nvar getLocalTrack = function getLocalTrack(state, type, kind) {\n return state.local.streams && state.local.streams[type] && state.local.streams[type].stream && state.local.streams[type].stream[\"get\".concat(kind === 'video' ? 'Video' : 'Audio', \"Tracks\")]()[0];\n}; // kind is \"video\" or \"audio\"\n// for standard tracks, type is \"cam\" or \"screen\"\n// for custom tracks, type is the mediaTag\n\nvar getRemoteTrack = function getRemoteTrack(state, participantId, type, kind) {\n var streamEntry = _getRemoteStreamEntry(state, participantId, type, kind);\n\n return streamEntry && streamEntry.pendingTrack;\n}; // type is \"cam\" or \"screen\"\n// kind is \"video\" or \"audio\"\n\nvar getIsRemoteTrackLoading = function getIsRemoteTrackLoading(state, participantId, type, kind) {\n var participant = state.participants && state.participants[participantId];\n var loadedTracks = participant && participant.public && participant.public.loadedTracks;\n\n if (loadedTracks) {\n if (type === 'cam') {\n return !loadedTracks[kind];\n } else if (type === 'screen') {\n return !loadedTracks[\"screen\".concat(kind.charAt(0).toUpperCase() + kind.slice(1))];\n } else {\n return !loadedTracks[type];\n }\n }\n\n return false;\n}; // NOTE: maps 'avatar' to true. 'avatar' is deprecated with the new prebuilt ui\n// and is currently accessed directly from redux anyway (not via this selector)\n// where it's needed.\n\nvar _getSubscriptionToTrack = function _getSubscriptionToTrack(subscriber, subscribeeId, mediaTag) {\n // if we don't have a participant record at all, assume that\n // false is the safest thing to return, here\n if (!subscriber) {\n return false;\n }\n\n var mapToTrueFalseStaged = function mapToTrueFalseStaged(subscription) {\n switch (subscription) {\n case 'avatar':\n return true;\n\n case 'staged':\n return subscription;\n\n default:\n // boolean or undefined\n return !!subscription;\n }\n };\n\n var sTracks = subscriber.public.subscribedTracks; // Below shows the return values for all the various versions of sTracks\n // { ALL: true } -> true\n // { ALL: false } -> false\n // { ALL: 'staged' } -> 'staged'\n // { ALL: 'avatar' } -> true\n // undefined -> true // this should never happen\n // {}, -> false\n // { p2id: { }} -> false\n // { p2id: { mediaTag: true }} -> true\n // { p2id: { mediaTag: false }} -> false\n // { p2id: { mediaTag: 'staged' }} -> 'staged'\n // { p2id: { mediaTag: 'avatar' }} -> true\n\n if (!(sTracks && sTracks[subscribeeId])) {\n return sTracks ? mapToTrueFalseStaged(sTracks.ALL) : true;\n }\n\n var isCustomTrack = ['cam-audio', 'cam-video', 'screen-video', 'screen-audio', 'rmpAudio', 'rmpVideo'].indexOf(mediaTag) === -1;\n var result;\n\n if (isCustomTrack && sTracks[subscribeeId]['custom']) {\n result = [true, 'staged'].includes(sTracks[subscribeeId]['custom']) ? mapToTrueFalseStaged(sTracks[subscribeeId]['custom']) : mapToTrueFalseStaged(sTracks[subscribeeId]['custom'][mediaTag]);\n } else {\n result = mapToTrueFalseStaged(sTracks[subscribeeId][mediaTag]);\n }\n\n return result;\n};\n\nvar _getRemoteStreamEntry = function _getRemoteStreamEntry(state, participantId, type, kind) {\n var streams = lodash_orderBy__WEBPACK_IMPORTED_MODULE_1___default()(lodash_filter__WEBPACK_IMPORTED_MODULE_0___default()(state.streams, function (s) {\n return s.participantId === participantId && s.type === type && s.pendingTrack && s.pendingTrack.kind === kind;\n }), 'starttime', 'desc');\n return streams && streams[0];\n};\n\nvar getLocalCustomTrack = function getLocalCustomTrack(state, trackEntryKey) {\n var trackEntries = state.local.public.customTracks;\n\n if (!(trackEntries && trackEntries[trackEntryKey])) {\n return;\n }\n\n return trackEntries[trackEntryKey].track;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL3NlbGVjdG9ycy5qcz8zMmJhIl0sIm5hbWVzIjpbImdldExvY2FsU3Vic2NyaXB0aW9uVG9UcmFjayIsInN0YXRlIiwiaWQiLCJtZWRpYVRhZyIsIl9nZXRTdWJzY3JpcHRpb25Ub1RyYWNrIiwibG9jYWwiLCJnZXRMb2NhbElzU3Vic2NyaWJlZFRvVHJhY2siLCJnZXRSZW1vdGVQYXJ0aWNpcGFudElzU3Vic2NyaWJlZFRvTG9jYWxUcmFjayIsInBhcnRpY2lwYW50cyIsInB1YmxpYyIsImdldExvY2FsVHJhY2siLCJ0eXBlIiwia2luZCIsInN0cmVhbXMiLCJzdHJlYW0iLCJnZXRSZW1vdGVUcmFjayIsInBhcnRpY2lwYW50SWQiLCJzdHJlYW1FbnRyeSIsIl9nZXRSZW1vdGVTdHJlYW1FbnRyeSIsInBlbmRpbmdUcmFjayIsImdldElzUmVtb3RlVHJhY2tMb2FkaW5nIiwicGFydGljaXBhbnQiLCJsb2FkZWRUcmFja3MiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwic3Vic2NyaWJlciIsInN1YnNjcmliZWVJZCIsIm1hcFRvVHJ1ZUZhbHNlU3RhZ2VkIiwic3Vic2NyaXB0aW9uIiwic1RyYWNrcyIsInN1YnNjcmliZWRUcmFja3MiLCJBTEwiLCJpc0N1c3RvbVRyYWNrIiwiaW5kZXhPZiIsInJlc3VsdCIsImluY2x1ZGVzIiwib3JkZXJCeSIsImZpbHRlciIsInMiLCJnZXRMb2NhbEN1c3RvbVRyYWNrIiwidHJhY2tFbnRyeUtleSIsInRyYWNrRW50cmllcyIsImN1c3RvbVRyYWNrcyIsInRyYWNrIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRU8sSUFBTUEsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUE4QixDQUFDQyxLQUFELEVBQVFDLEVB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Yy9zaGFyZWQtd2l0aC1wbHVvdC1jb3JlL3NlbGVjdG9ycy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaWx0ZXIgZnJvbSAnbG9kYXNoL2ZpbHRlcic7XG5pbXBvcnQgb3JkZXJCeSBmcm9tICdsb2Rhc2gvb3JkZXJCeSc7XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbFN1YnNjcmlwdGlvblRvVHJhY2sgPSAoc3RhdGUsIGlkLCBtZWRpYVRhZykgPT4ge1xuICByZXR1cm4gX2dldFN1YnNjcmlwdGlvblRvVHJhY2soc3RhdGUubG9jYWwsIGlkLCBtZWRpYVRhZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWxJc1N1YnNjcmliZWRUb1RyYWNrID0gKHN0YXRlLCBpZCwgbWVkaWFUYWcpID0+IHtcbiAgcmV0dXJuIF9nZXRTdWJzY3JpcHRpb25Ub1RyYWNrKHN0YXRlLmxvY2FsLCBpZCwgbWVkaWFUYWcpID09PSB0cnVlO1xufTtcblxuLy8gTk9URTogb25seSBtZWFudCBmb3IgdXNlIGluIFAyUCBtb2RlLCB3aGVyZSB3ZSBoYXZlIGFjY2VzcyB0byByZW1vdGVcbi8vIHBhcnRpY2lwYW50cycgc3Vic2NyaXB0aW9ucyBpbmZvLlxuZXhwb3J0IGNvbnN0IGdldFJlbW90ZVBhcnRpY2lwYW50SXNTdWJzY3JpYmVkVG9Mb2NhbFRyYWNrID0gKFxuICBzdGF0ZSxcbiAgaWQsXG4gIG1lZGlhVGFnXG4pID0+IHtcbiAgcmV0dXJuIChcbiAgICBfZ2V0U3Vic2NyaXB0aW9uVG9UcmFjayhcbiAgICAgIHN0YXRlLnBhcnRpY2lwYW50c1tpZF0sXG4gICAgICBzdGF0ZS5sb2NhbC5wdWJsaWMuaWQsXG4gICAgICBtZWRpYVRhZ1xuICAgICkgPT09IHRydWVcbiAgKTtcbn07XG5cbi8vIHR5cGUgaXMgXCJjYW1cIiBvciBcInNjcmVlblwiXG4vLyBraW5kIGlzIFwidmlkZW9cIiBvciBcImF1ZGlvXCJcbmV4cG9ydCBjb25zdCBnZXRMb2NhbFRyYWNrID0gKHN0YXRlLCB0eXBlLCBraW5kKSA9PiB7XG4gIHJldHVybiAoXG4gICAgc3RhdGUubG9jYWwuc3RyZWFtcyAmJlxuICAgIHN0YXRlLmxvY2FsLnN0cmVhbXNbdHlwZV0gJiZcbiAgICBzdGF0ZS5sb2NhbC5zdHJlYW1zW3R5cGVdLnN0cmVhbSAmJlxuICAgIHN0YXRlLmxvY2FsLnN0cmVhbXNbdHlwZV0uc3RyZWFtW1xuICAgICAgYGdldCR7a2luZCA9PT0gJ3ZpZGVvJyA/ICdWaWRlbycgOiAnQXVkaW8nfVRyYWNrc2BcbiAgICBdKClbMF1cbiAgKTtcbn07XG5cbi8vIGtpbmQgaXMgXCJ2aWRlb1wiIG9yIFwiYXVkaW9cIlxuLy8gZm9yIHN0YW5kYXJkIHRyYWNrcywgdHlwZSBpcyBcImNhbVwiIG9yIFwic2NyZWVuXCJcbi8vIGZvciBjdXN0b20gdHJhY2tzLCB0eXBlIGlzIHRoZSBtZWRpYVRhZ1xuZXhwb3J0IGNvbnN0IGdldFJlbW90ZVRyYWNrID0gKHN0YXRlLCBwYXJ0aWNpcGFudElkLCB0eXBlLCBraW5kKSA9PiB7XG4gIGNvbnN0IHN0cmVhbUVudHJ5ID0gX2dldFJlbW90ZVN0cmVhbUVudHJ5KHN0YXRlLCBwYXJ0aWNpcGFudElkLCB0eXBlLCBraW5kKTtcbiAgcmV0dXJuIHN0cmVhbUVudHJ5ICYmIHN0cmVhbUVudHJ5LnBlbmRpbmdUcmFjaztcbn07XG5cbi8vIHR5cGUgaXMgXCJjYW1cIiBvciBcInNjcmVlblwiXG4vLyBraW5kIGlzIFwidmlkZW9cIiBvciBcImF1ZGlvXCJcbmV4cG9ydCBjb25zdCBnZXRJc1JlbW90ZVRyYWNrTG9hZGluZyA9IChzdGF0ZSwgcGFydGljaXBhbnRJZCwgdHlwZSwga2luZCkgPT4ge1xuICBjb25zdCBwYXJ0aWNpcGFudCA9IHN0YXRlLnBhcnRpY2lwYW50cyAmJiBzdGF0ZS5wYXJ0aWNpcGFudHNbcGFydGljaXBhbnRJZF07XG4gIGNvbnN0IGxvYWRlZFRyYWNrcyA9XG4gICAgcGFydGljaXBhbnQgJiYgcGFydGljaXBhbnQucHVibGljICYmIHBhcnRpY2lwYW50LnB1YmxpYy5sb2FkZWRUcmFja3M7XG4gIGlmIChsb2FkZWRUcmFja3MpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2NhbScpIHtcbiAgICAgIHJldHVybiAhbG9hZGVkVHJhY2tzW2tpbmRdO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NjcmVlbicpIHtcbiAgICAgIHJldHVybiAhbG9hZGVkVHJhY2tzW1xuICAgICAgICBgc2NyZWVuJHtraW5kLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2luZC5zbGljZSgxKX1gXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gIWxvYWRlZFRyYWNrc1t0eXBlXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gTk9URTogbWFwcyAnYXZhdGFyJyB0byB0cnVlLiAnYXZhdGFyJyBpcyBkZXByZWNhdGVkIHdpdGggdGhlIG5ldyBwcmVidWlsdCB1aVxuLy8gYW5kIGlzIGN1cnJlbnRseSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIHJlZHV4IGFueXdheSAobm90IHZpYSB0aGlzIHNlbGVjdG9yKVxuLy8gd2hlcmUgaXQncyBuZWVkZWQuXG5jb25zdCBfZ2V0U3Vic2NyaXB0aW9uVG9UcmFjayA9IChzdWJzY3JpYmVyLCBzdWJzY3JpYmVlSWQsIG1lZGlhVGFnKSA9PiB7XG4gIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBwYXJ0aWNpcGFudCByZWNvcmQgYXQgYWxsLCBhc3N1bWUgdGhhdFxuICAvLyBmYWxzZSBpcyB0aGUgc2FmZXN0IHRoaW5nIHRvIHJldHVybiwgaGVyZVxuICBpZiAoIXN1YnNjcmliZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgbWFwVG9UcnVlRmFsc2VTdGFnZWQgPSAoc3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgc3dpdGNoIChzdWJzY3JpcHRpb24pIHtcbiAgICAgIGNhc2UgJ2F2YXRhcic6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnc3RhZ2VkJzpcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGJvb2xlYW4gb3IgdW5kZWZpbmVkXG4gICAgICAgIHJldHVybiAhIXN1YnNjcmlwdGlvbjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNUcmFja3MgPSBzdWJzY3JpYmVyLnB1YmxpYy5zdWJzY3JpYmVkVHJhY2tzO1xuICAvLyBCZWxvdyBzaG93cyB0aGUgcmV0dXJuIHZhbHVlcyBmb3IgYWxsIHRoZSB2YXJpb3VzIHZlcnNpb25zIG9mIHNUcmFja3NcbiAgLy8gICB7IEFMTDogdHJ1ZSB9ICAgICAgICAgICAgICAgICAgIC0+IHRydWVcbiAgLy8gICB7IEFMTDogZmFsc2UgfSAgICAgICAgICAgICAgICAgIC0+IGZhbHNlXG4gIC8vICAgeyBBTEw6ICdzdGFnZWQnIH0gICAgICAgICAgICAgICAtPiAnc3RhZ2VkJ1xuICAvLyAgIHsgQUxMOiAnYXZhdGFyJyB9ICAgICAgICAgICAgICAgLT4gdHJ1ZVxuICAvLyAgIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgLT4gdHJ1ZSAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4gIC8vICAge30sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBmYWxzZVxuICAvLyAgIHsgcDJpZDogeyB9fSAgICAgICAgICAgICAgICAgICAgLT4gZmFsc2VcbiAgLy8gICB7IHAyaWQ6IHsgbWVkaWFUYWc6IHRydWUgfX0gICAgIC0+IHRydWVcbiAgLy8gICB7IHAyaWQ6IHsgbWVkaWFUYWc6IGZhbHNlIH19ICAgIC0+IGZhbHNlXG4gIC8vICAgeyBwMmlkOiB7IG1lZGlhVGFnOiAnc3RhZ2VkJyB9fSAtPiAnc3RhZ2VkJ1xuICAvLyAgIHsgcDJpZDogeyBtZWRpYVRhZzogJ2F2YXRhcicgfX0gLT4gdHJ1ZVxuICBpZiAoIShzVHJhY2tzICYmIHNUcmFja3Nbc3Vic2NyaWJlZUlkXSkpIHtcbiAgICByZXR1cm4gc1RyYWNrcyA/IG1hcFRvVHJ1ZUZhbHNlU3RhZ2VkKHNUcmFja3MuQUxMKSA6IHRydWU7XG4gIH1cblxuICBjb25zdCBpc0N1c3RvbVRyYWNrID1cbiAgICBbXG4gICAgICAnY2FtLWF1ZGlvJyxcbiAgICAgICdjYW0tdmlkZW8nLFxuICAgICAgJ3NjcmVlbi12aWRlbycsXG4gICAgICAnc2NyZWVuLWF1ZGlvJyxcbiAgICAgICdybXBBdWRpbycsXG4gICAgICAncm1wVmlkZW8nLFxuICAgIF0uaW5kZXhPZihtZWRpYVRhZykgPT09IC0xO1xuXG4gIGxldCByZXN1bHQ7XG4gIGlmIChpc0N1c3RvbVRyYWNrICYmIHNUcmFja3Nbc3Vic2NyaWJlZUlkXVsnY3VzdG9tJ10pIHtcbiAgICByZXN1bHQgPSBbdHJ1ZSwgJ3N0YWdlZCddLmluY2x1ZGVzKHNUcmFja3Nbc3Vic2NyaWJlZUlkXVsnY3VzdG9tJ10pXG4gICAgICA/IG1hcFRvVHJ1ZUZhbHNlU3RhZ2VkKHNUcmFja3Nbc3Vic2NyaWJlZUlkXVsnY3VzdG9tJ10pXG4gICAgICA6IG1hcFRvVHJ1ZUZhbHNlU3RhZ2VkKHNUcmFja3Nbc3Vic2NyaWJlZUlkXVsnY3VzdG9tJ11bbWVkaWFUYWddKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBtYXBUb1RydWVGYWxzZVN0YWdlZChzVHJhY2tzW3N1YnNjcmliZWVJZF1bbWVkaWFUYWddKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgX2dldFJlbW90ZVN0cmVhbUVudHJ5ID0gKHN0YXRlLCBwYXJ0aWNpcGFudElkLCB0eXBlLCBraW5kKSA9PiB7XG4gIGxldCBzdHJlYW1zID0gb3JkZXJCeShcbiAgICBmaWx0ZXIoXG4gICAgICBzdGF0ZS5zdHJlYW1zLFxuICAgICAgKHMpID0+XG4gICAgICAgIHMucGFydGljaXBhbnRJZCA9PT0gcGFydGljaXBhbnRJZCAmJlxuICAgICAgICBzLnR5cGUgPT09IHR5cGUgJiZcbiAgICAgICAgcy5wZW5kaW5nVHJhY2sgJiZcbiAgICAgICAgcy5wZW5kaW5nVHJhY2sua2luZCA9PT0ga2luZFxuICAgICksXG4gICAgJ3N0YXJ0dGltZScsXG4gICAgJ2Rlc2MnXG4gICk7XG4gIHJldHVybiBzdHJlYW1zICYmIHN0cmVhbXNbMF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWxDdXN0b21UcmFjayA9IChzdGF0ZSwgdHJhY2tFbnRyeUtleSkgPT4ge1xuICBjb25zdCB0cmFja0VudHJpZXMgPSBzdGF0ZS5sb2NhbC5wdWJsaWMuY3VzdG9tVHJhY2tzO1xuICBpZiAoISh0cmFja0VudHJpZXMgJiYgdHJhY2tFbnRyaWVzW3RyYWNrRW50cnlLZXldKSkge1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gdHJhY2tFbnRyaWVzW3RyYWNrRW50cnlLZXldLnRyYWNrO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/shared-with-pluot-core/selectors.js\n" + ); + + /***/ + }, + + /***/ "./src/utils.js": + /*!**********************!*\ + !*** ./src/utils.js ***! + \**********************/ + /*! exports provided: randomStringId, notImplementedError, callObjectBundleUrl, validateHttpUrl */ + /***/ function (module, __webpack_exports__, __webpack_require__) { + "use strict"; + eval( + '__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "randomStringId", function() { return randomStringId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "notImplementedError", function() { return notImplementedError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "callObjectBundleUrl", function() { return callObjectBundleUrl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateHttpUrl", function() { return validateHttpUrl; });\nfunction randomStringId() {\n return Date.now() + Math.random().toString();\n}\nfunction notImplementedError() {\n throw new Error(\'Method must be implemented in subclass\');\n}\nfunction callObjectBundleUrl() {\n // ADVANCED: if a custom bundle URL override is specified, use that.\n if (window._dailyConfig && window._dailyConfig.callObjectBundleUrlOverride) {\n return window._dailyConfig.callObjectBundleUrlOverride;\n } // 1. Dev build of daily-js --> load bundle from __devCallMachineUrl__, which\n // is either:\n // - DEV_CALL_MACHINE_URL env variable (read at build time)\n // - default local dev URL\n // See webpack or rollup config for details.\n // 2. Prod build of daily-js --> load bundle from version-specific prod URL.\n\n\n return true ? "https://khk-local.wss.daily.co:8000/static/call-machine-object-bundle.js" : undefined;\n}\nfunction validateHttpUrl(string) {\n try {\n var url = new URL(string);\n } catch (_) {\n return false;\n }\n\n return true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EYWlseUlmcmFtZS8uL3NyYy91dGlscy5qcz8wMjVlIl0sIm5hbWVzIjpbInJhbmRvbVN0cmluZ0lkIiwiRGF0ZSIsIm5vdyIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsIm5vdEltcGxlbWVudGVkRXJyb3IiLCJFcnJvciIsImNhbGxPYmplY3RCdW5kbGVVcmwiLCJ3aW5kb3ciLCJfZGFpbHlDb25maWciLCJjYWxsT2JqZWN0QnVuZGxlVXJsT3ZlcnJpZGUiLCJwcm9jZXNzIiwiX19kZXZDYWxsTWFjaGluZVVybF9fIiwidmFsaWRhdGVIdHRwVXJsIiwic3RyaW5nIiwidXJsIiwiVVJMIiwiXyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFPLFNBQVNBLGNBQVQsR0FBMEI7QUFDL0IsU0FBT0MsSUFBSSxDQUFDQyxHQUFMLEtBQWFDLElBQUksQ0FBQ0MsTUFBTCxHQUFjQyxRQUFkLEVBQXBCO0FBQ0Q7QUFFTSxTQUFTQyxtQkFBVCxHQUErQjtBQUNwQyxRQUFNLElBQUlDLEtBQUosQ0FBVSx3Q0FBVixDQUFOO0FBQ0Q7QUFFTSxTQUFTQyxtQkFBVCxHQUErQjtBQUNwQztBQUNBLE1BQUlDLE1BQU0sQ0FBQ0MsWUFBUCxJQUF1QkQsTUFBTSxDQUFDQyxZQUFQLENBQW9CQywyQkFBL0MsRUFBNEU7QUFDMUUsV0FBT0YsTUFBTSxDQUFDQyxZQUFQLENBQW9CQywyQkFBM0I7QUFDRCxHQUptQyxDQU1wQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQU9DLEtBQUEsR0FDSEMsMEVBREcsWUFBUDtBQUdEO0FBRU0sU0FBU0MsZUFBVCxDQUF5QkMsTUFBekIsRUFBaUM7QUFDdEMsTUFBSTtBQUNGLFFBQUlDLEdBQUcsR0FBRyxJQUFJQyxHQUFKLENBQVFGLE1BQVIsQ0FBVjtBQUNELEdBRkQsQ0FFRSxPQUFPRyxDQUFQLEVBQVU7QUFDVixXQUFPLEtBQVA7QUFDRDs7QUFDRCxTQUFPLElBQVA7QUFDRCIsImZpbGUiOiIuL3NyYy91dGlscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmdJZCgpIHtcbiAgcmV0dXJuIERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3RJbXBsZW1lbnRlZEVycm9yKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxsT2JqZWN0QnVuZGxlVXJsKCkge1xuICAvLyBBRFZBTkNFRDogaWYgYSBjdXN0b20gYnVuZGxlIFVSTCBvdmVycmlkZSBpcyBzcGVjaWZpZWQsIHVzZSB0aGF0LlxuICBpZiAod2luZG93Ll9kYWlseUNvbmZpZyAmJiB3aW5kb3cuX2RhaWx5Q29uZmlnLmNhbGxPYmplY3RCdW5kbGVVcmxPdmVycmlkZSkge1xuICAgIHJldHVybiB3aW5kb3cuX2RhaWx5Q29uZmlnLmNhbGxPYmplY3RCdW5kbGVVcmxPdmVycmlkZTtcbiAgfVxuXG4gIC8vIDEuIERldiBidWlsZCBvZiBkYWlseS1qcyAtLT4gbG9hZCBidW5kbGUgZnJvbSBfX2RldkNhbGxNYWNoaW5lVXJsX18sIHdoaWNoXG4gIC8vICAgIGlzIGVpdGhlcjpcbiAgLy8gICAgLSBERVZfQ0FMTF9NQUNISU5FX1VSTCBlbnYgdmFyaWFibGUgKHJlYWQgYXQgYnVpbGQgdGltZSlcbiAgLy8gICAgLSBkZWZhdWx0IGxvY2FsIGRldiBVUkxcbiAgLy8gICAgU2VlIHdlYnBhY2sgb3Igcm9sbHVwIGNvbmZpZyBmb3IgZGV0YWlscy5cbiAgLy8gMi4gUHJvZCBidWlsZCBvZiBkYWlseS1qcyAtLT4gbG9hZCBidW5kbGUgZnJvbSB2ZXJzaW9uLXNwZWNpZmljIHByb2QgVVJMLlxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcbiAgICA/IF9fZGV2Q2FsbE1hY2hpbmVVcmxfX1xuICAgIDogYGh0dHBzOi8vYy5kYWlseS5jby9jYWxsLW1hY2hpbmUvdmVyc2lvbmVkLyR7X19kYWlseUpzVmVyc2lvbl9ffS9zdGF0aWMvY2FsbC1tYWNoaW5lLW9iamVjdC1idW5kbGUuanNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVIdHRwVXJsKHN0cmluZykge1xuICB0cnkge1xuICAgIGxldCB1cmwgPSBuZXcgVVJMKHN0cmluZyk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/utils.js\n' + ); + + /***/ + }, + + /******/ + } + ); +}); diff --git a/extensions/miro/demo/miro.html b/extensions/miro/demo/miro.html index e614326..a4f13cd 100644 --- a/extensions/miro/demo/miro.html +++ b/extensions/miro/demo/miro.html @@ -5,7 +5,8 @@ type="text/javascript" src="https://miro.com/app/static/boardsPicker.1.0.js" > - + +